{"version":3,"file":"static/js/main.76311ae5.js","mappings":"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UAAU,CAAC,EAAE,eAAe,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,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EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,GAAG,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,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toK,EAAEsoK,qBAAqBnnK,+BCPxUjB,EAAOC,QAAU,EAAjBD,6BCaF,IAEIovH,EAAU,WAAY,EA2C1BpvH,EAAOC,QAAUmvH,kBC7DjB,IAAIzhH,EAAM,CACT,oBAAqB,CACpB,KACA,EACA,MAED,cAAe,CACd,KACA,EACA,MAED,kBAAmB,CAClB,KACA,EACA,MAED,aAAc,CACb,KACA,EACA,MAED,iBAAkB,CACjB,KACA,EACA,MAED,qBAAsB,CACrB,KACA,EACA,MAED,eAAgB,CACf,KACA,EACA,MAED,aAAc,CACb,KACA,EACA,MAED,uBAAwB,CACvB,KACA,EACA,MAED,uBAAwB,CACvB,KACA,EACA,MAED,cAAe,CACd,KACA,EACA,MAED,kBAAmB,CAClB,KACA,EACA,MAED,wBAAyB,CACxB,KACA,EACA,MAED,cAAe,CACd,IACA,EACA,KAED,iBAAkB,CACjB,KACA,EACA,MAED,oBAAqB,CACpB,KACA,EACA,MAED,oBAAqB,CACpB,KACA,EACA,MAED,wBAAyB,CACxB,KACA,GAED,yBAA0B,CACzB,KACA,GAED,eAAgB,CACf,KACA,EACA,MAED,YAAa,CACZ,IACA,EACA,KAED,aAAc,CACb,KACA,EACA,MAED,iBAAkB,CACjB,KACA,EACA,MAED,uBAAwB,CACvB,KACA,EACA,MAED,aAAc,CACb,KACA,EACA,MAED,iBAAkB,CACjB,KACA,EACA,MAED,cAAe,CACd,KACA,GAED,sBAAuB,CACtB,KACA,EACA,MAED,aAAc,CACb,KACA,EACA,MAED,eAAgB,CACf,KACA,EACA,MAED,wBAAyB,CACxB,KACA,EACA,MAED,aAAc,CACb,IACA,EACA,KAED,cAAe,CACd,KACA,EACA,MAED,mBAAoB,CACnB,KACA,GAED,aAAc,CACb,KACA,EACA,MAED,aAAc,CACb,GACA,EACA,IAED,eAAgB,CACf,IACA,EACA,KAED,aAAc,CACb,KACA,EACA,MAED,gBAAiB,CAChB,KACA,EACA,MAED,aAAc,CACb,KACA,EACA,MAED,aAAc,CACb,KACA,EACA,MAED,qBAAsB,CACrB,KACA,EACA,MAED,0BAA2B,CAC1B,KACA,EACA,MAED,iBAAkB,CACjB,KACA,EACA,MAED,YAAa,CACZ,KACA,EACA,MAED,eAAgB,CACf,KACA,EACA,MAED,uBAAwB,CACvB,KACA,GAED,YAAa,CACZ,KACA,EACA,MAED,aAAc,CACb,IACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,MAED,6BAA8B,CAC7B,KACA,EACA,MAED,cAAe,CACd,KACA,GAED,uBAAwB,CACvB,KACA,EACA,MAED,gBAAiB,CAChB,IACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,MAED,oBAAqB,CACpB,KACA,GAED,eAAgB,CACf,IACA,EACA,MAED,aAAc,CACb,IACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,MAED,aAAc,CACb,KACA,GAED,gBAAiB,CAChB,KACA,EACA,MAED,eAAgB,CACf,KACA,EACA,MAED,aAAc,CACb,IACA,EACA,KAED,gBAAiB,CAChB,KACA,EACA,OAGF,SAAS06J,EAAoBC,GAC5B,IAAI9/J,EAAoB9H,EAAEiN,EAAK26J,GAC9B,OAAO/nK,QAAQm1B,UAAUhlB,MAAK,KAC7B,IAAI5Q,EAAI,IAAIwL,MAAM,uBAAyBg9J,EAAM,KAEjD,MADAxoK,EAAE2jB,KAAO,mBACH3jB,CAAC,IAIT,IAAIyoK,EAAM56J,EAAI26J,GAAMxqK,EAAKyqK,EAAI,GAC7B,OAAOhoK,QAAQqQ,IAAI23J,EAAI5lK,MAAM,GAAGgL,IAAInF,EAAoB1I,IAAI4Q,MAAK,IACzDlI,EAAoBzI,EAAEjC,EAAa,GAATyqK,EAAI,KAEvC,CACAF,EAAoBvkK,KAAO,IAAOzH,OAAOyH,KAAK6J,GAC9C06J,EAAoBvqK,GAAK,KACzBkC,EAAOC,QAAUooK,qp6BC1UjBroK,EAAOC,QAAUuoK,mtGCCbjgK,yBAA2B,CAAC,EAGhC,SAASC,oBAAoBigK,GAE5B,IAAIC,EAAengK,yBAAyBkgK,GAC5C,QAAqBnpK,IAAjBopK,EACH,OAAOA,EAAazoK,QAGrB,IAAID,EAASuI,yBAAyBkgK,GAAY,CACjD3qK,GAAI2qK,EACJE,QAAQ,EACR1oK,QAAS,CAAC,GAUX,OANAE,oBAAoBsoK,GAAUzrK,KAAKgD,EAAOC,QAASD,EAAQA,EAAOC,QAASuI,qBAG3ExI,EAAO2oK,QAAS,EAGT3oK,EAAOC,OACf,CAGAuI,oBAAoBpF,EAAIjD,oBC3BxBqI,oBAAoBhI,EAAKR,IACxB,IAAIixG,EAASjxG,GAAUA,EAAOqE,WAC7B,IAAOrE,EAAiB,QACxB,IAAM,EAEP,OADAwI,oBAAoBrK,EAAE8yG,EAAQ,CAAErwG,EAAGqwG,IAC5BA,CAAM,QCNd,IACI23D,EADAC,EAAWxsK,OAAOoF,eAAkBmrB,GAASvwB,OAAOoF,eAAemrB,GAASA,GAASA,EAAa,UAQtGpkB,oBAAoBzI,EAAI,SAASqE,EAAO82B,GAEvC,GADU,EAAPA,IAAU92B,EAAQlH,KAAKkH,IAChB,EAAP82B,EAAU,OAAO92B,EACpB,GAAoB,kBAAVA,GAAsBA,EAAO,CACtC,GAAW,EAAP82B,GAAa92B,EAAMC,WAAY,OAAOD,EAC1C,GAAW,GAAP82B,GAAoC,oBAAf92B,EAAMsM,KAAqB,OAAOtM,CAC5D,CACA,IAAIwkB,EAAKvsB,OAAOiI,OAAO,MACvBkE,oBAAoB7I,EAAEipB,GACtB,IAAIgH,EAAM,CAAC,EACXg5I,EAAiBA,GAAkB,CAAC,KAAMC,EAAS,CAAC,GAAIA,EAAS,IAAKA,EAASA,IAC/E,IAAI,IAAIniH,EAAiB,EAAPxrB,GAAY92B,EAAyB,iBAAXsiD,KAAyBkiH,EAAenhK,QAAQi/C,GAAUA,EAAUmiH,EAASniH,GACxHrqD,OAAOqtF,oBAAoBhjC,GAAS5hD,SAASjI,GAAS+yB,EAAI/yB,GAAO,IAAOuH,EAAMvH,KAI/E,OAFA+yB,EAAa,QAAI,IAAM,EACvBpnB,oBAAoBrK,EAAEyqB,EAAIgH,GACnBhH,CACR,MCxBApgB,oBAAoBrK,EAAI,CAAC8B,EAAS27B,KACjC,IAAI,IAAI/+B,KAAO++B,EACXpzB,oBAAoB9H,EAAEk7B,EAAY/+B,KAAS2L,oBAAoB9H,EAAET,EAASpD,IAC5ER,OAAO6H,eAAejE,EAASpD,EAAK,CAAEsH,YAAY,EAAMpB,IAAK64B,EAAW/+B,IAE1E,ECND2L,oBAAoB9G,EAAI,CAAC,EAGzB8G,oBAAoB1I,EAAKgpK,GACjBvoK,QAAQqQ,IAAIvU,OAAOyH,KAAK0E,oBAAoB9G,GAAGiI,QAAO,CAACo/J,EAAUlsK,KACvE2L,oBAAoB9G,EAAE7E,GAAKisK,EAASC,GAC7BA,IACL,KCNJvgK,oBAAoBvH,EAAK6nK,GAEjB,aAAeA,EAAU,IAAM,CAAC,GAAK,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,YAAYA,GAAW,YCF3iCtgK,oBAAoBwgK,SAAYF,IAEf,ECHjBtgK,oBAAoBlI,EAAI,WACvB,GAA0B,kBAAfF,WAAyB,OAAOA,WAC3C,IACC,OAAOlD,MAAQ,IAAIiG,SAAS,cAAb,EAChB,CAAE,MAAOrD,GACR,GAAsB,kBAAXO,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBmI,oBAAoB9H,EAAI,CAACksB,EAAK+R,IAAUtiC,OAAOS,UAAUC,eAAeC,KAAK4vB,EAAK+R,SCAlF,IAAIsqI,EAAa,CAAC,EACdC,EAAoB,eAExB1gK,oBAAoBnH,EAAI,CAACg3G,EAAKh+B,EAAMx9E,EAAKisK,KACxC,GAAGG,EAAW5wD,GAAQ4wD,EAAW5wD,GAAKt0G,KAAKs2E,OAA3C,CACA,IAAI8uF,EAAQC,EACZ,QAAW9pK,IAARzC,EAEF,IADA,IAAIwsK,EAAUnnK,SAAS4xI,qBAAqB,UACpCr3I,EAAI,EAAGA,EAAI4sK,EAAQ1sK,OAAQF,IAAK,CACvC,IAAIqE,EAAIuoK,EAAQ5sK,GAChB,GAAGqE,EAAEwoK,aAAa,QAAUjxD,GAAOv3G,EAAEwoK,aAAa,iBAAmBJ,EAAoBrsK,EAAK,CAAEssK,EAASroK,EAAG,KAAO,CACpH,CAEGqoK,IACHC,GAAa,GACbD,EAASjnK,SAASgxH,cAAc,WAEzBq2C,QAAU,QACjBJ,EAAOK,QAAU,IACbhhK,oBAAoBihK,IACvBN,EAAOp5J,aAAa,QAASvH,oBAAoBihK,IAElDN,EAAOp5J,aAAa,eAAgBm5J,EAAoBrsK,GAExDssK,EAAOO,IAAMrxD,GAEd4wD,EAAW5wD,GAAO,CAACh+B,GACnB,IAAIsvF,EAAmB,CAAChoH,EAAMujE,KAE7BikD,EAAOrhB,QAAUqhB,EAAOS,OAAS,KACjCzvG,aAAaqvG,GACb,IAAIK,EAAUZ,EAAW5wD,GAIzB,UAHO4wD,EAAW5wD,GAClB8wD,EAAO1hC,YAAc0hC,EAAO1hC,WAAWrqB,YAAY+rD,GACnDU,GAAWA,EAAQ/kK,SAASqsE,GAAQA,EAAG+zC,KACpCvjE,EAAM,OAAOA,EAAKujE,EAAM,EAExBskD,EAAU35J,WAAW85J,EAAiBptK,KAAK,UAAM+C,EAAW,CAAEN,KAAM,UAAWxC,OAAQ2sK,IAAW,MACtGA,EAAOrhB,QAAU6hB,EAAiBptK,KAAK,KAAM4sK,EAAOrhB,SACpDqhB,EAAOS,OAASD,EAAiBptK,KAAK,KAAM4sK,EAAOS,QACnDR,GAAclnK,SAAS0zE,KAAK8sD,YAAYymC,EApCkB,CAoCX,MCvChD3gK,oBAAoB7I,EAAKM,IACH,qBAAXQ,QAA0BA,OAAOa,aAC1CjF,OAAO6H,eAAejE,EAASQ,OAAOa,YAAa,CAAE8C,MAAO,WAE7D/H,OAAO6H,eAAejE,EAAS,aAAc,CAAEmE,OAAO,GAAO,ECL9DoE,oBAAoBshK,IAAO9pK,IAC1BA,EAAOy/D,MAAQ,GACVz/D,EAAOs8G,WAAUt8G,EAAOs8G,SAAW,IACjCt8G,GCHRwI,oBAAoBjH,EAAI,mCCKxB,IAAIwoK,EAAkB,CACrB,IAAK,GAGNvhK,oBAAoB9G,EAAEuL,EAAI,CAAC67J,EAASC,KAElC,IAAIiB,EAAqBxhK,oBAAoB9H,EAAEqpK,EAAiBjB,GAAWiB,EAAgBjB,QAAWxpK,EACtG,GAA0B,IAAvB0qK,EAGF,GAAGA,EACFjB,EAAShlK,KAAKimK,EAAmB,QAC3B,CAGL,IAAI5kD,EAAU,IAAI7kH,SAAQ,CAACm1B,EAASyqD,IAAY6pF,EAAqBD,EAAgBjB,GAAW,CAACpzI,EAASyqD,KAC1G4oF,EAAShlK,KAAKimK,EAAmB,GAAK5kD,GAGtC,IAAI/M,EAAM7vG,oBAAoBjH,EAAIiH,oBAAoBvH,EAAE6nK,GAEpDx/J,EAAQ,IAAIgC,MAgBhB9C,oBAAoBnH,EAAEg3G,GAfF6M,IACnB,GAAG18G,oBAAoB9H,EAAEqpK,EAAiBjB,KAEf,KAD1BkB,EAAqBD,EAAgBjB,MACRiB,EAAgBjB,QAAWxpK,GACrD0qK,GAAoB,CACtB,IAAIC,EAAY/kD,IAAyB,SAAfA,EAAMlmH,KAAkB,UAAYkmH,EAAMlmH,MAChEkrK,EAAUhlD,GAASA,EAAM1oH,QAAU0oH,EAAM1oH,OAAOktK,IACpDpgK,EAAMsnB,QAAU,iBAAmBk4I,EAAU,cAAgBmB,EAAY,KAAOC,EAAU,IAC1F5gK,EAAMsF,KAAO,iBACbtF,EAAMtK,KAAOirK,EACb3gK,EAAM6gK,QAAUD,EAChBF,EAAmB,GAAG1gK,EACvB,CACD,GAEwC,SAAWw/J,EAASA,EAE/D,CACD,EAcF,IAAIsB,EAAuB,CAACC,EAA4Bt8J,KACvD,IAKI06J,EAAUK,EALVwB,EAAWv8J,EAAK,GAChBw8J,EAAcx8J,EAAK,GACnBy8J,EAAUz8J,EAAK,GAGItR,EAAI,EAC3B,GAAG6tK,EAAS/jK,MAAMzI,GAAgC,IAAxBisK,EAAgBjsK,KAAa,CACtD,IAAI2qK,KAAY8B,EACZ/hK,oBAAoB9H,EAAE6pK,EAAa9B,KACrCjgK,oBAAoBpF,EAAEqlK,GAAY8B,EAAY9B,IAGhD,GAAG+B,EAAsBA,EAAQhiK,oBAClC,CAEA,IADG6hK,GAA4BA,EAA2Bt8J,GACrDtR,EAAI6tK,EAAS3tK,OAAQF,IACzBqsK,EAAUwB,EAAS7tK,GAChB+L,oBAAoB9H,EAAEqpK,EAAiBjB,IAAYiB,EAAgBjB,IACrEiB,EAAgBjB,GAAS,KAE1BiB,EAAgBjB,GAAW,CAC5B,EAIG2B,EAAqBvqK,KAA8B,wBAAIA,KAA8B,yBAAK,GAC9FuqK,EAAmB3lK,QAAQslK,EAAqB7tK,KAAK,KAAM,IAC3DkuK,EAAmB1mK,KAAOqmK,EAAqB7tK,KAAK,KAAMkuK,EAAmB1mK,KAAKxH,KAAKkuK,iHCvFvF,MAAM,EAA+BC,aCOzBC,kQAAZ,SAAYA,GAQVA,EAAA,UAOAA,EAAA,YAMAA,EAAA,iBACD,CAtBD,CAAYA,IAAAA,EAsBX,KAqKD,MAAMC,EAAoB,WAySV,SAAAC,EAAUzmK,EAAYwsB,GACpC,IAAc,IAAVxsB,GAA6B,OAAVA,GAAmC,qBAAVA,EAC9C,MAAM,IAAIkH,MAAMslB,EAEpB,CAEgB,SAAAw+F,EAAQzmG,EAAWiI,GACjC,IAAKjI,EAAM,CAEc,qBAAZhiB,SAAyBA,QAAQyC,KAAKwnB,GAEjD,IAME,MAAM,IAAItlB,MAAMslB,EAEjB,CAAC,MAAO9wB,GAAI,CACd,CACH,CASA,SAASgrK,EAAgB7oK,EAAoB2sB,GAC3C,MAAO,CACLm8I,IAAK9oK,EAASgE,MACdpJ,IAAKoF,EAASpF,IACd+uJ,IAAKh9H,EAET,CAKM,SAAUo8I,EACdtkH,EACAx9B,EACAjjB,EACApJ,GAcA,YAfA,IAAAoJ,IAAAA,EAAa,MAGD7J,EAAA,CACV6uK,SAA6B,kBAAZvkH,EAAuBA,EAAUA,EAAQukH,SAC1DjwJ,OAAQ,GACR6f,KAAM,IACY,kBAAP3R,EAAkBgiJ,EAAUhiJ,GAAMA,EAAE,CAC/CjjB,QAKApJ,IAAMqsB,GAAOA,EAAgBrsB,KAAQA,GAjChCmO,KAAKC,SAASvI,SAAS,IAAIsC,OAAO,EAAG,IAoC9C,CAKgB,SAAAmmK,EAAU/tK,GAIV,IAJW,SACzB6tK,EAAW,IAAG,OACdjwJ,EAAS,GAAE,KACX6f,EAAO,IACOz9B,EAKd,OAJI4d,GAAqB,MAAXA,IACZiwJ,GAAiC,MAArBjwJ,EAAOu9C,OAAO,GAAav9C,EAAS,IAAMA,GACpD6f,GAAiB,MAATA,IACVowI,GAA+B,MAAnBpwI,EAAK09B,OAAO,GAAa19B,EAAO,IAAMA,GAC7CowI,CACT,CAKM,SAAUC,EAAUvnG,GACxB,IAAIynG,EAA4B,CAAC,EAEjC,GAAIznG,EAAM,CACR,IAAI0nG,EAAY1nG,EAAKl8D,QAAQ,KACzB4jK,GAAa,IACfD,EAAWvwI,KAAO8oC,EAAK3+D,OAAOqmK,GAC9B1nG,EAAOA,EAAK3+D,OAAO,EAAGqmK,IAGxB,IAAIC,EAAc3nG,EAAKl8D,QAAQ,KAC3B6jK,GAAe,IACjBF,EAAWpwJ,OAAS2oD,EAAK3+D,OAAOsmK,GAChC3nG,EAAOA,EAAK3+D,OAAO,EAAGsmK,IAGpB3nG,IACFynG,EAAWH,SAAWtnG,EAEzB,CAED,OAAOynG,CACT,CASA,SAASG,EACPC,EACAC,EACAC,EACAn9H,QAAA,IAAAA,IAAAA,EAA6B,CAAC,GAE9B,IAAI,OAAEluC,EAAS6B,SAASypK,YAAY,SAAEC,GAAW,GAAUr9H,EACvDs9H,EAAgBxrK,EAAOyrK,QACvBp/F,EAASi+F,EAAOoB,IAChBC,EAA4B,KAE5Bp9I,EAAQ0kI,IASZ,SAASA,IAEP,OADYuY,EAAc5lK,OAAS,CAAE2lJ,IAAK,OAC7BA,GACf,CAEA,SAASqgB,IACPv/F,EAASi+F,EAAOoB,IAChB,IAAIG,EAAY5Y,IACZtkB,EAAqB,MAAbk9B,EAAoB,KAAOA,EAAYt9I,EACnDA,EAAQs9I,EACJF,GACFA,EAAS,CAAEt/F,SAAQzqE,SAAU6pK,EAAQ7pK,SAAU+sI,SAEnD,CA+CA,SAASm9B,EAAUjjJ,GAIjB,IAAI08B,EACyB,SAA3BvlD,EAAO4B,SAASw/G,OACZphH,EAAO4B,SAASw/G,OAChBphH,EAAO4B,SAAS0iJ,KAElBA,EAAqB,kBAAPz7H,EAAkBA,EAAKiiJ,EAAWjiJ,GAKpD,OAJA2hJ,EACEjlH,EACsE,sEAAA++F,GAEjE,IAAI3iC,IAAI2iC,EAAM/+F,EACvB,CAhFa,MAATh3B,IACFA,EAAQ,EACRi9I,EAAcO,aAAYhwK,EAAM,GAAAyvK,EAAc5lK,MAAO,CAAA2lJ,IAAKh9H,IAAS,KAgFrE,IAAIk9I,EAAmB,CACrB,UAAIp/F,GACF,OAAOA,GAET,YAAIzqE,GACF,OAAOupK,EAAYnrK,EAAQwrK,IAE7BQ,MAAAA,CAAOl7F,GACL,GAAI66F,EACF,MAAM,IAAI1gK,MAAM,8CAKlB,OAHAjL,EAAO6P,iBAAiB06J,EAAmBqB,GAC3CD,EAAW76F,EAEJ,KACL9wE,EAAOs7H,oBAAoBivC,EAAmBqB,GAC9CD,EAAW,IAAI,GAGnBP,WAAWviJ,GACFuiJ,EAAWprK,EAAQ6oB,GAE5BijJ,YACAG,cAAAA,CAAepjJ,GAEb,IAAImvF,EAAM8zD,EAAUjjJ,GACpB,MAAO,CACL+hJ,SAAU5yD,EAAI4yD,SACdjwJ,OAAQq9F,EAAIr9F,OACZ6f,KAAMw9E,EAAIx9E,OAGd92B,KA9FF,SAAcmlB,EAAQjjB,GACpBymE,EAASi+F,EAAO4B,KAChB,IAAItqK,EAAW+oK,EAAec,EAAQ7pK,SAAUinB,EAAIjjB,GAChDylK,GAAkBA,EAAiBzpK,EAAUinB,GAEjD0F,EAAQ0kI,IAAa,EACrB,IAAIkZ,EAAe1B,EAAgB7oK,EAAU2sB,GACzCypF,EAAMyzD,EAAQL,WAAWxpK,GAG7B,IACE4pK,EAAcY,UAAUD,EAAc,GAAIn0D,GAC1C,MAAO/uG,IAKP,GAAIA,cAAiBojK,cAA+B,mBAAfpjK,GAAMsF,KACzC,MAAMtF,GAIRjJ,EAAO4B,SAAS3F,OAAO+7G,EACxB,CAEGuzD,GAAYI,GACdA,EAAS,CAAEt/F,SAAQzqE,SAAU6pK,EAAQ7pK,SAAU+sI,MAAO,GAE1D,EAmEE1oI,QAjEF,SAAiB4iB,EAAQjjB,GACvBymE,EAASi+F,EAAOgC,QAChB,IAAI1qK,EAAW+oK,EAAec,EAAQ7pK,SAAUinB,EAAIjjB,GAChDylK,GAAkBA,EAAiBzpK,EAAUinB,GAEjD0F,EAAQ0kI,IACR,IAAIkZ,EAAe1B,EAAgB7oK,EAAU2sB,GACzCypF,EAAMyzD,EAAQL,WAAWxpK,GAC7B4pK,EAAcO,aAAaI,EAAc,GAAIn0D,GAEzCuzD,GAAYI,GACdA,EAAS,CAAEt/F,SAAQzqE,SAAU6pK,EAAQ7pK,SAAU+sI,MAAO,GAE1D,EAqDE49B,GAAGpsK,GACMqrK,EAAce,GAAGpsK,IAI5B,OAAOsrK,CACT,CCztBA,IAAYe,GAAZ,SAAYA,GACVA,EAAA,YACAA,EAAA,oBACAA,EAAA,oBACAA,EAAA,aACD,CALD,CAAYA,IAAAA,EAKX,KAyOiC,IAAIhsK,IAAuB,CAC3D,OACA,gBACA,OACA,KACA,QACA,aAoNI,SAAUisK,EAGdC,EACAC,EACAC,QAAQ,IAARA,IAAAA,EAAW,KAEX,IAGIhC,EAAWiC,GAFU,kBAAhBF,EAA2B9B,EAAU8B,GAAeA,GAEvB/B,UAAY,IAAKgC,GAEvD,GAAgB,MAAZhC,EACF,OAAO,KAGT,IAAIkC,EAAWC,EAAcL,IAkM/B,SAA2BI,GACzBA,EAAS7jG,MAAK,CAAC1oE,EAAGiB,IAChBjB,EAAEolG,QAAUnkG,EAAEmkG,MACVnkG,EAAEmkG,MAAQplG,EAAEolG,MAyCpB,SAAwBplG,EAAaiB,GACnC,IAAIkqJ,EACFnrJ,EAAEjE,SAAWkF,EAAElF,QAAUiE,EAAE+B,MAAM,GAAI,GAAG+5B,OAAM,CAACl8B,EAAG/D,IAAM+D,IAAMqB,EAAEpF,KAElE,OAAOsvJ,EAKHnrJ,EAAEA,EAAEjE,OAAS,GAAKkF,EAAEA,EAAElF,OAAS,GAG/B,CACN,CArDQ0wK,CACEzsK,EAAE0sK,WAAW3/J,KAAKyU,GAASA,EAAKmrJ,gBAChC1rK,EAAEyrK,WAAW3/J,KAAKyU,GAASA,EAAKmrJ,kBAG1C,CA1MEC,CAAkBL,GAElB,IAAIloI,EAAU,KACd,IAAK,IAAIxoC,EAAI,EAAc,MAAXwoC,GAAmBxoC,EAAI0wK,EAASxwK,SAAUF,EACxDwoC,EAAUwoI,EACRN,EAAS1wK,GAOTixK,EAAgBzC,IAIpB,OAAOhmI,CACT,CAyCA,SAASmoI,EAGPL,EACAI,EACAQ,EACAC,QAF2C,IAA3CT,IAAAA,EAA2C,SAC3C,IAAAQ,IAAAA,EAA4C,SAClC,IAAVC,IAAAA,EAAa,IAEb,IAAIC,EAAeA,CACjBC,EACAl/I,EACAm/I,KAEA,IAAI3rJ,EAAmC,CACrC2rJ,kBACmBzuK,IAAjByuK,EAA6BD,EAAMnqG,MAAQ,GAAKoqG,EAClDC,eAAuC,IAAxBF,EAAME,cACrBT,cAAe3+I,EACfk/I,SAGE1rJ,EAAK2rJ,aAAa5/H,WAAW,OAC/B08H,EACEzoJ,EAAK2rJ,aAAa5/H,WAAWy/H,GAC7B,wBAAwBxrJ,EAAK2rJ,aAA7B,wBACMH,EADN,4GAKFxrJ,EAAK2rJ,aAAe3rJ,EAAK2rJ,aAAaprK,MAAMirK,EAAWjxK,SAGzD,IAAIgnE,EAAOsqG,EAAU,CAACL,EAAYxrJ,EAAK2rJ,eACnCT,EAAaK,EAAY/nK,OAAOwc,GAKhC0rJ,EAAMxxD,UAAYwxD,EAAMxxD,SAAS3/G,OAAS,IAC5CkuK,GAGkB,IAAhBiD,EAAMl/I,MACN,4FACuC+0C,EAAI,MAG7CypG,EAAcU,EAAMxxD,SAAU6wD,EAAUG,EAAY3pG,KAKpC,MAAdmqG,EAAMnqG,MAAiBmqG,EAAMl/I,QAIjCu+I,EAASppK,KAAK,CACZ4/D,OACAqiC,MAAOkoE,EAAavqG,EAAMmqG,EAAMl/I,OAChC0+I,cACA,EAaJ,OAXAP,EAAOjoK,SAAQ,CAACgpK,EAAOl/I,KAAS,IAAAu/I,EAE9B,GAAmB,KAAfL,EAAMnqG,MAA0B,OAAXwqG,EAACL,EAAMnqG,OAANwqG,EAAYvxI,SAAS,KAG7C,IAAK,IAAIwxI,KAAYC,EAAwBP,EAAMnqG,MACjDkqG,EAAaC,EAAOl/I,EAAOw/I,QAH7BP,EAAaC,EAAOl/I,EAKrB,IAGIu+I,CACT,CAgBA,SAASkB,EAAwB1qG,GAC/B,IAAIt+B,EAAWs+B,EAAK9+D,MAAM,KAC1B,GAAwB,IAApBwgC,EAAS1oC,OAAc,MAAO,GAElC,IAAKgrF,KAAUtH,GAAQh7C,EAGnBipI,EAAa3mF,EAAMlF,SAAS,KAE5BjrC,EAAWmwC,EAAMrhF,QAAQ,MAAO,IAEpC,GAAoB,IAAhB+5E,EAAK1jF,OAGP,OAAO2xK,EAAa,CAAC92H,EAAU,IAAM,CAACA,GAGxC,IAAI+2H,EAAeF,EAAwBhuF,EAAKr5E,KAAK,MAEjDy7B,EAAmB,GAqBvB,OAZAA,EAAO1+B,QACFwqK,EAAa5gK,KAAK6gK,GACP,KAAZA,EAAiBh3H,EAAW,CAACA,EAAUg3H,GAASxnK,KAAK,QAKrDsnK,GACF7rI,EAAO1+B,QAAQwqK,GAIV9rI,EAAO90B,KAAKygK,GACjBzqG,EAAKx1B,WAAW,MAAqB,KAAbigI,EAAkB,IAAMA,GAEpD,CAaA,MAAMK,EAAU,SACVC,EAAsB,EACtBC,EAAkB,EAClBC,EAAoB,EACpBC,EAAqB,GACrBC,GAAgB,EAChBC,EAAWjuK,GAAoB,MAANA,EAE/B,SAASotK,EAAavqG,EAAc/0C,GAClC,IAAIyW,EAAWs+B,EAAK9+D,MAAM,KACtBmqK,EAAe3pI,EAAS1oC,OAS5B,OARI0oC,EAAS9+B,KAAKwoK,KAChBC,GAAgBF,GAGdlgJ,IACFogJ,GAAgBL,GAGXtpI,EACJ7+B,QAAQ1F,IAAOiuK,EAAQjuK,KACvB6I,QACC,CAACq8F,EAAO1gE,IACN0gE,GACCyoE,EAAQ1nK,KAAKu+B,GACVopI,EACY,KAAZppI,EACAspI,EACAC,IACNG,EAEN,CAiBA,SAASvB,EAIPwB,EACAhE,GAEA,IAAI,WAAEqC,GAAe2B,EAEjBC,EAAgB,CAAC,EACjBC,EAAkB,IAClBlqI,EAA2D,GAC/D,IAAK,IAAIxoC,EAAI,EAAGA,EAAI6wK,EAAW3wK,SAAUF,EAAG,CAC1C,IAAI2lB,EAAOkrJ,EAAW7wK,GAClBkpD,EAAMlpD,IAAM6wK,EAAW3wK,OAAS,EAChCyyK,EACkB,MAApBD,EACIlE,EACAA,EAAStoK,MAAMwsK,EAAgBxyK,SAAW,IAC5C2K,EAAQ+nK,EACV,CAAE1rG,KAAMvhD,EAAK2rJ,aAAcC,cAAe5rJ,EAAK4rJ,cAAeroH,OAC9DypH,GAGF,IAAK9nK,EAAO,OAAO,KAEnBjL,OAAOC,OAAO4yK,EAAe5nK,EAAMuqB,QAEnC,IAAIi8I,EAAQ1rJ,EAAK0rJ,MAEjB7oI,EAAQlhC,KAAK,CAEX8tB,OAAQq9I,EACRjE,SAAUgD,EAAU,CAACkB,EAAiB7nK,EAAM2jK,WAC5CqE,aAAcC,EACZtB,EAAU,CAACkB,EAAiB7nK,EAAMgoK,gBAEpCxB,UAGyB,MAAvBxmK,EAAMgoK,eACRH,EAAkBlB,EAAU,CAACkB,EAAiB7nK,EAAMgoK,eAEvD,CAED,OAAOrqI,CACT,CAiHgB,SAAAoqI,EAId75H,EACAy1H,GAEuB,kBAAZz1H,IACTA,EAAU,CAAEmuB,KAAMnuB,EAASw4H,eAAe,EAAOroH,KAAK,IAGxD,IAAKmjD,EAAS0mE,GA4ChB,SACE7rG,EACAqqG,EACAroH,QADa,IAAbqoH,IAAAA,GAAgB,QACb,IAAHroH,IAAAA,GAAM,GAENypE,EACW,MAATzrD,IAAiBA,EAAK8e,SAAS,MAAQ9e,EAAK8e,SAAS,MACrD,eAAe9e,EAAf,oCACMA,EAAKr9D,QAAQ,MAAO,MAD1B,qIAGsCq9D,EAAKr9D,QAAQ,MAAO,MAAK,MAGjE,IAAIurB,EAA8B,GAC9B49I,EACF,IACA9rG,EACGr9D,QAAQ,UAAW,IACnBA,QAAQ,OAAQ,KAChBA,QAAQ,qBAAsB,QAC9BA,QAAQ,kBAAkB,CAACvE,EAAW2tK,EAAmBpB,KACxDz8I,EAAO9tB,KAAK,CAAE2rK,YAAWpB,WAA0B,MAAdA,IAC9BA,EAAa,eAAiB,gBAGvC3qG,EAAK8e,SAAS,MAChB5wD,EAAO9tB,KAAK,CAAE2rK,UAAW,MACzBD,GACW,MAAT9rG,GAAyB,OAATA,EACZ,QACA,qBACGhe,EAET8pH,GAAgB,QACE,KAAT9rG,GAAwB,MAATA,IAQxB8rG,GAAgB,iBAKlB,IAAI3mE,EAAU,IAAItmG,OAAOitK,EAAczB,OAAgB1uK,EAAY,KAEnE,MAAO,CAACwpG,EAASj3E,EACnB,CA9FkC89I,CAC9Bn6H,EAAQmuB,KACRnuB,EAAQw4H,cACRx4H,EAAQmQ,KAGNr+C,EAAQ2jK,EAAS3jK,MAAMwhG,GAC3B,IAAKxhG,EAAO,OAAO,KAEnB,IAAI6nK,EAAkB7nK,EAAM,GACxBgoK,EAAeH,EAAgB7oK,QAAQ,UAAW,MAClDspK,EAAgBtoK,EAAM3E,MAAM,GAC5BkvB,EAAiB29I,EAAe7lK,QAClC,CAACkmK,EAAIzyK,EAA6BwxB,KAAS,IAApC,UAAE8gJ,EAAS,WAAEpB,GAAYlxK,EAG9B,GAAkB,MAAdsyK,EAAmB,CACrB,IAAII,EAAaF,EAAchhJ,IAAU,GACzC0gJ,EAAeH,EACZxsK,MAAM,EAAGwsK,EAAgBxyK,OAASmzK,EAAWnzK,QAC7C2J,QAAQ,UAAW,KACvB,CAED,MAAMlC,EAAQwrK,EAAchhJ,GAM5B,OAJEihJ,EAAKH,GADHpB,IAAelqK,OACC9E,EAsF1B,SAAkC8E,EAAesrK,GAC/C,IACE,OAAO50I,mBAAmB12B,GAC1B,MAAOkF,IAQP,OAPA8lH,GACE,EACA,gCAAgCsgD,EAAhC,6CACkBtrK,EADlB,iFAEqCkF,GAAK,MAGrClF,CACR,CACH,CAjG0B2rK,CAAyB3rK,GAAS,GAAIsrK,GAEnDG,CAAI,GAEb,CAAC,GAGH,MAAO,CACLh+I,SACAo5I,SAAUkE,EACVG,eACA95H,UAEJ,CAwDA,SAASk4H,EAAgBtpK,GACvB,IACE,OAAO4rK,UAAU5rK,GACjB,MAAOkF,IAQP,OAPA8lH,GACE,EACA,iBAAiBhrH,EAAjB,oHAEekF,GAAK,MAGflF,CACR,CACH,CAoBgB,SAAA8oK,EACdjC,EACAgC,GAEA,GAAiB,MAAbA,EAAkB,OAAOhC,EAE7B,IAAKA,EAASrvF,cAAcztC,WAAW8+H,EAASrxF,eAC9C,OAAO,KAKT,IAAI2sE,EAAa0kB,EAASxqF,SAAS,KAC/BwqF,EAAStwK,OAAS,EAClBswK,EAAStwK,OACT+rD,EAAWuiH,EAAS1yG,OAAOgwF,GAC/B,OAAI7/F,GAAyB,MAAbA,EAEP,KAGFuiH,EAAStoK,MAAM4lJ,IAAe,GACvC,CA2CA,SAAS0nB,EACPjqH,EACA2tD,EACAu8D,EACAvsG,GAEA,MACE,qBAAqB3d,EAArB,2CACQ2tD,EAAK,YAAazpG,KAAKC,UAC7Bw5D,GAFF,yCAIQusG,EAJR,2HAOJ,CAyBM,SAAUC,EAEdlrI,GACA,OAAOA,EAAQz+B,QACb,CAACc,EAAOsnB,IACI,IAAVA,GAAgBtnB,EAAMwmK,MAAMnqG,MAAQr8D,EAAMwmK,MAAMnqG,KAAKhnE,OAAS,GAEpE,CAKM,SAAUyzK,EACdC,EACAC,EACAC,EACAC,GAEA,IAAItnJ,OAFU,IAAdsnJ,IAAAA,GAAiB,GAGI,kBAAVH,EACTnnJ,EAAKgiJ,EAAUmF,IAEfnnJ,EAAE9sB,EAAQ,GAAAi0K,GAEVxF,GACG3hJ,EAAG+hJ,WAAa/hJ,EAAG+hJ,SAASruI,SAAS,KACtCqzI,EAAoB,IAAK,WAAY,SAAU/mJ,IAEjD2hJ,GACG3hJ,EAAG+hJ,WAAa/hJ,EAAG+hJ,SAASruI,SAAS,KACtCqzI,EAAoB,IAAK,WAAY,OAAQ/mJ,IAE/C2hJ,GACG3hJ,EAAGlO,SAAWkO,EAAGlO,OAAO4hB,SAAS,KAClCqzI,EAAoB,IAAK,SAAU,OAAQ/mJ,KAI/C,IAGIrmB,EAHA4tK,EAAwB,KAAVJ,GAAgC,KAAhBnnJ,EAAG+hJ,SACjCyF,EAAaD,EAAc,IAAMvnJ,EAAG+hJ,SAaxC,GAAkB,MAAdyF,EACF7tK,EAAO0tK,OACF,GAAIC,EAAgB,CACzB,IAAIG,EAAeL,EAAeA,EAAe3zK,OAAS,GACvD2J,QAAQ,MAAO,IACfzB,MAAM,KAET,GAAI6rK,EAAWviI,WAAW,MAAO,CAC/B,IAAIyiI,EAAaF,EAAW7rK,MAAM,KAGlC,KAAyB,OAAlB+rK,EAAW,IAChBA,EAAW58D,QACX28D,EAAanpK,MAGf0hB,EAAG+hJ,SAAW2F,EAAW5pK,KAAK,IAC/B,CAEDnE,EAAO,IAAM8tK,EAAa3pK,KAAK,IAChC,KAAM,CACL,IAAI6pK,EAAqBP,EAAe3zK,OAAS,EAEjD,GAAI+zK,EAAWviI,WAAW,MAAO,CAC/B,IAAIyiI,EAAaF,EAAW7rK,MAAM,KAMlC,KAAyB,OAAlB+rK,EAAW,IAChBA,EAAW58D,QACX68D,GAAsB,EAGxB3nJ,EAAG+hJ,SAAW2F,EAAW5pK,KAAK,IAC/B,CAIDnE,EAAOguK,GAAsB,EAAIP,EAAeO,GAAsB,GACvE,CAED,IAAIltG,WA1KsBz6C,EAAQ4nJ,QAAY,IAAZA,IAAAA,EAAe,KACjD,IACE7F,SAAUyF,EAAU,OACpB11J,EAAS,GAAE,KACX6f,EAAO,IACS,kBAAP3R,EAAkBgiJ,EAAUhiJ,GAAMA,EAEzC+hJ,EAAWyF,EACXA,EAAWviI,WAAW,KACpBuiI,EAWR,SAAyB3C,EAAsB+C,GAC7C,IAAIzrI,EAAWyrI,EAAaxqK,QAAQ,OAAQ,IAAIzB,MAAM,KAYtD,OAXuBkpK,EAAalpK,MAAM,KAEzBC,SAASwgC,IACR,OAAZA,EAEED,EAAS1oC,OAAS,GAAG0oC,EAAS79B,MACb,MAAZ89B,GACTD,EAASthC,KAAKuhC,EACf,IAGID,EAAS1oC,OAAS,EAAI0oC,EAASr+B,KAAK,KAAO,GACpD,CAxBQ+pK,CAAgBL,EAAYI,GAC9BA,EAEJ,MAAO,CACL7F,WACAjwJ,OAAQg2J,EAAgBh2J,GACxB6f,KAAMo2I,EAAcp2I,GAExB,CAwJaq2I,CAAYhoJ,EAAIrmB,GAGvBsuK,EACFT,GAA6B,MAAfA,GAAsBA,EAAWjuF,SAAS,KAEtD2uF,GACDX,GAA8B,MAAfC,IAAuBH,EAAiB9tF,SAAS,KAQnE,OANG9e,EAAKsnG,SAASxoF,SAAS,OACvB0uF,IAA4BC,IAE7BztG,EAAKsnG,UAAY,KAGZtnG,CACT,OAiBasqG,EAAaxuG,GACxBA,EAAMz4D,KAAK,KAAKV,QAAQ,SAAU,KAKvBipK,EAAqBtE,GAChCA,EAAS3kK,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,KAKlC0qK,EAAmBh2J,GAC7BA,GAAqB,MAAXA,EAEPA,EAAOmzB,WAAW,KAClBnzB,EACA,IAAMA,EAHN,GAQOi2J,EAAiBp2I,GAC3BA,GAAiB,MAATA,EAAoBA,EAAKsT,WAAW,KAAOtT,EAAO,IAAMA,EAAzC,GA+BgBvvB,MAyRpC,SAAU+lK,EAAqB/nK,GACnC,OACW,MAATA,GACwB,kBAAjBA,EAAMkB,QACe,kBAArBlB,EAAMgoK,YACa,mBAAnBhoK,EAAMioK,UACb,SAAUjoK,CAEd,CCp7BA,MAAMkoK,EAAgD,CACpD,OACA,MACA,QACA,UAMIC,GAJuB,IAAI5wK,IAC/B2wK,GAG2C,CAC3C,SACGA,IAEuB,IAAI3wK,IAAgB4wK,GAEpB,IAAI5wK,IAAI,CAAC,IAAK,IAAK,IAAK,IAAK,MACf,IAAIA,IAAI,CAAC,IAAK,MAsiElBJ,OAAO,gPCnoFtC,MAAMixK,EACXlJ,EAAAA,cAAoD,MAK/C,MAAMmJ,EAAyBnJ,EAAAA,cAEpC,MA2CK,MAAMoJ,EAAoBpJ,EAAAA,cAC/B,MAYK,MAAMqJ,EAAkBrJ,EAAAA,cAC7B,YAaWsJ,EAAetJ,EAAAA,cAAwC,CAClEuJ,OAAQ,KACR9sI,QAAS,GACT+sI,aAAa,IAOR,MAAMC,EAAoBzJ,EAAAA,cAAyB,MCzEnD,SAAS0J,IACd,OAA4C,MAArC1J,EAAAA,WAAiBqJ,EAC1B,CAYO,SAASM,IAQd,OANED,KADFE,GAAU,GAOH5J,EAAAA,WAAiBqJ,GAAiB5vK,QAC3C,CAkDA,SAASowK,EACPvnH,GAEe09G,EAAAA,WAAiBoJ,GAAmBroK,QAKjDi/J,EAAAA,gBAAsB19G,EAE1B,CAQO,SAASwnH,IACd,IAAI,YAAEN,GAAgBxJ,EAAAA,WAAiBsJ,GAGvC,OAAOE,EAwyBT,WACE,IAAI,OAAEO,GAAWC,GAAqBC,GAAeC,mBACjD50K,EAAK60K,GAAkBC,GAAoBF,mBAE3CG,EAAYrK,EAAAA,QAAa,GAsB7B,OArBA6J,GAA0B,KACxBQ,EAAUnsH,SAAU,CAAI,IAGO8hH,EAAAA,aAC/B,SAACt/I,EAAiBqlB,QAAwB,IAAxBA,IAAAA,EAA2B,CAAC,GAKvCskI,EAAUnsH,UAEG,kBAAPx9B,EACTqpJ,EAAOO,SAAS5pJ,GAEhBqpJ,EAAOO,SAAS5pJ,EAAE9sB,EAAA,CAAI22K,YAAaj1K,GAAOywC,IAE9C,GACA,CAACgkI,EAAQz0K,GAIb,CAn0BuBk1K,GAGvB,WAEId,KADFE,GAAU,GAOV,IAAIa,EAAoBzK,EAAAA,WAAiBkJ,IACrC,SAAEzE,EAAQ,UAAE9qK,GAAcqmK,EAAAA,WAAiBoJ,IAC3C,QAAE3sI,GAAYujI,EAAAA,WAAiBsJ,IAC7B7G,SAAUsF,GAAqB4B,IAEjCe,EAAqBhpK,KAAKC,UAC5BgpK,EAA2BluI,GAASt3B,KAAKrG,GAAUA,EAAMgoK,gBAGvDuD,EAAYrK,EAAAA,QAAa,GAqD7B,OApDA6J,GAA0B,KACxBQ,EAAUnsH,SAAU,CAAI,IAGO8hH,EAAAA,aAC/B,SAACt/I,EAAiBqlB,GAKhB,QALwC,IAAxBA,IAAAA,EAA2B,CAAC,IAKvCskI,EAAUnsH,QAAS,OAExB,GAAkB,kBAAPx9B,EAET,YADA/mB,EAAUyqK,GAAG1jJ,GAIf,IAAIy6C,EAAOysG,EACTlnJ,EACAhf,KAAKxE,MAAMwtK,GACX3C,EACqB,SAArBhiI,EAAQq4E,UASe,MAArBqsD,GAA0C,MAAbhG,IAC/BtpG,EAAKsnG,SACe,MAAlBtnG,EAAKsnG,SACDgC,EACAgB,EAAU,CAAChB,EAAUtpG,EAAKsnG,aAG/B18H,EAAQjoC,QAAUnE,EAAUmE,QAAUnE,EAAU4B,MACjD4/D,EACAp1B,EAAQtoC,MACRsoC,EAEJ,GACA,CACE0+H,EACA9qK,EACA+wK,EACA3C,EACA0C,GAKN,CA1E6CG,EAC7C,CA4GO,SAASC,IAKd,IAAI,QAAEpuI,GAAYujI,EAAAA,WAAiBsJ,GAC/BwB,EAAaruI,EAAQA,EAAQtoC,OAAS,GAC1C,OAAO22K,EAAcA,EAAWzhJ,OAAiB,CAAC,CACpD,CAOO,SAAS0hJ,EACdrqJ,EAAMsqJ,GAEA,IADN,SAAE5sD,QAA8C,IAAA4sD,EAAG,CAAC,EAACA,GAEjD,QAAEvuI,GAAYujI,EAAAA,WAAiBsJ,IAC7B7G,SAAUsF,GAAqB4B,IAEjCe,EAAqBhpK,KAAKC,UAC5BgpK,EAA2BluI,GAASt3B,KAAKrG,GAAUA,EAAMgoK,gBAG3D,OAAO9G,EAAAA,SACL,IACE4H,EACElnJ,EACAhf,KAAKxE,MAAMwtK,GACX3C,EACa,SAAb3pD,IAEJ,CAAC19F,EAAIgqJ,EAAoB3C,EAAkB3pD,GAE/C,CAkBO,SAAS6sD,EACd1G,EACAC,EACA0G,GAGExB,KADFE,GAAU,GAOV,IAAI,UAAEjwK,GAAcqmK,EAAAA,WAAiBoJ,IAC/B3sI,QAAS0uI,GAAkBnL,EAAAA,WAAiBsJ,GAC9CwB,EAAaK,EAAcA,EAAch3K,OAAS,GAClDi3K,EAAeN,EAAaA,EAAWzhJ,OAAS,CAAC,EAEjDgiJ,GADiBP,GAAaA,EAAWrI,SACpBqI,EAAaA,EAAWhE,aAAe,KAC9CgE,GAAcA,EAAWxF,MAqC3C,IAEI7rK,EAFA6xK,EAAsB3B,IAG1B,GAAInF,EAAa,KAAA+G,EACf,IAAIC,EACqB,kBAAhBhH,EAA2B9B,EAAU8B,GAAeA,EAGpC,MAAvB6G,IAC4B,OADFE,EACxBC,EAAkB/I,eAAQ,EAA1B8I,EAA4B5lI,WAAW0lI,KAF3CzB,GAAU,GASVnwK,EAAW+xK,CACb,MACE/xK,EAAW6xK,EAGb,IAAI7I,EAAWhpK,EAASgpK,UAAY,IAMhChmI,EAAU6nI,EAAYC,EAAQ,CAAE9B,SAJX,MAAvB4I,EACI5I,EACAA,EAAStoK,MAAMkxK,EAAmBl3K,SAAW,MAoBnD,IAAIs3K,EAAkBC,GACpBjvI,GACEA,EAAQt3B,KAAKrG,GACXjL,OAAOC,OAAO,CAAC,EAAGgL,EAAO,CACvBuqB,OAAQx1B,OAAOC,OAAO,CAAC,EAAGs3K,EAActsK,EAAMuqB,QAC9Co5I,SAAUgD,EAAU,CAClB4F,EAEA1xK,EAAUmqK,eACNnqK,EAAUmqK,eAAehlK,EAAM2jK,UAAUA,SACzC3jK,EAAM2jK,WAEZqE,aACyB,MAAvBhoK,EAAMgoK,aACFuE,EACA5F,EAAU,CACR4F,EAEA1xK,EAAUmqK,eACNnqK,EAAUmqK,eAAehlK,EAAMgoK,cAAcrE,SAC7C3jK,EAAMgoK,mBAIxBqE,EACAD,GAMF,OAAI1G,GAAeiH,EAEfzL,EAAAA,cAACqJ,EAAgBsC,SAAQ,CACvB/vK,MAAO,CACLnC,SAAQ7F,EAAA,CACN6uK,SAAU,IACVjwJ,OAAQ,GACR6f,KAAM,GACN50B,MAAO,KACPpJ,IAAK,WACFoF,GAELmyK,eAAgBzJ,EAAeoB,MAGhCkI,GAKAA,CACT,CAEA,SAASI,KACP,IAAI/qK,EAiYC,WAAkC,IAAAgrK,EACvC,IAAIhrK,EAAQk/J,EAAAA,WAAiByJ,GACzBhsK,EAAQsuK,GAAmB3B,GAAoB4B,eAC/CC,EAAU9B,GAAkBC,GAAoB4B,eAIpD,GAAIlrK,EACF,OAAOA,EAIT,OAAO,OAAPgrK,EAAOruK,EAAMoqB,aAAN,EAAAikJ,EAAeG,EACxB,CA9YcC,GACR9jJ,EAAUygJ,EAAqB/nK,GAC5BA,EAAMkB,OAAU,IAAAlB,EAAMgoK,WACzBhoK,aAAiBgC,MACjBhC,EAAMsnB,QACN1mB,KAAKC,UAAUb,GACfy2D,EAAQz2D,aAAiBgC,MAAQhC,EAAMy2D,MAAQ,KAC/C40G,EAAY,yBACZC,EAAY,CAAEC,QAAS,SAAU5+C,gBAAiB0+C,GAsBtD,OACEnM,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAI,2CACJA,EAAAA,cAAA,MAAI3pK,MAAO,CAAEi2K,UAAW,WAAalkJ,GACpCmvC,EAAQyoG,EAAAA,cAAA,OAAK3pK,MAAO+1K,GAAY70G,GAAe,KAvBtC,KA2BhB,CAEA,MAAMg1G,GAAsBvM,EAAAA,cAAC6L,GAAqB,MAgB3C,MAAMW,WAA4BxM,EAAAA,UAIvC3/J,WAAAA,CAAYrL,GACVukB,MAAMvkB,GACNN,KAAK+I,MAAQ,CACXhE,SAAUzE,EAAMyE,SAChBgzK,aAAcz3K,EAAMy3K,aACpB3rK,MAAO9L,EAAM8L,MAEjB,CAEA,+BAAO4rK,CAAyB5rK,GAC9B,MAAO,CAAEA,MAAOA,EAClB,CAEA,+BAAO6rK,CACL33K,EACAyI,GAUA,OACEA,EAAMhE,WAAazE,EAAMyE,UACD,SAAvBgE,EAAMgvK,cAAkD,SAAvBz3K,EAAMy3K,aAEjC,CACL3rK,MAAO9L,EAAM8L,MACbrH,SAAUzE,EAAMyE,SAChBgzK,aAAcz3K,EAAMy3K,cAQjB,CACL3rK,MAAO9L,EAAM8L,OAASrD,EAAMqD,MAC5BrH,SAAUgE,EAAMhE,SAChBgzK,aAAcz3K,EAAMy3K,cAAgBhvK,EAAMgvK,aAE9C,CAEAG,iBAAAA,CAAkB9rK,EAAY+rK,GAC5B1uK,QAAQ2C,MACN,wDACAA,EACA+rK,EAEJ,CAEA1uJ,MAAAA,GACE,OAAOzpB,KAAK+I,MAAMqD,MAChBk/J,EAAAA,cAACsJ,EAAaqC,SAAQ,CAAC/vK,MAAOlH,KAAKM,MAAM83K,cACvC9M,EAAAA,cAACyJ,EAAkBkC,SAAQ,CACzB/vK,MAAOlH,KAAK+I,MAAMqD,MAClBgzG,SAAUp/G,KAAKM,MAAMysI,aAIzB/sI,KAAKM,MAAM8+G,QAEf,EASF,SAASi5D,GAAan4K,GAAwD,IAAvD,aAAEk4K,EAAY,MAAEhuK,EAAK,SAAEg1G,GAA8Bl/G,EACtE61K,EAAoBzK,EAAAA,WAAiBkJ,GAazC,OAREuB,GACAA,EAAkB1pK,QAClB0pK,EAAkBuC,gBACjBluK,EAAMwmK,MAAM2H,cAAgBnuK,EAAMwmK,MAAM4H,iBAEzCzC,EAAkBuC,cAAcG,2BAA6BruK,EAAMwmK,MAAMhwK,IAIzE0qK,EAAAA,cAACsJ,EAAaqC,SAAQ,CAAC/vK,MAAOkxK,GAC3Bh5D,EAGP,CAEO,SAAS43D,GACdjvI,EACA0uI,EACAD,GAC2B,IAAAkC,EAC3B,QAH2B,IAA3BjC,IAAAA,EAA8B,SACc,IAA5CD,IAAAA,EAA+C,MAEhC,MAAXzuI,EAAiB,KAAA4wI,EACnB,GAAmB,OAAnBA,EAAInC,KAAAmC,EAAiBxlJ,OAKnB,OAAO,KAFP4U,EAAUyuI,EAAgBzuI,OAI9B,CAEA,IAAIgvI,EAAkBhvI,EAGlB5U,EAAS,OAAHulJ,EAAGlC,QAAA,EAAAkC,EAAiBvlJ,OAC9B,GAAc,MAAVA,EAAgB,CAClB,IAAIylJ,EAAa7B,EAAgBvmI,WAC9BtqC,GAAMA,EAAE0qK,MAAMhwK,KAAM,MAAAuyB,OAAA,EAAAA,EAASjtB,EAAE0qK,MAAMhwK,OAGtCg4K,GAAc,GADhB1D,GAAU,GAMV6B,EAAkBA,EAAgBtxK,MAChC,EACAqI,KAAK2lC,IAAIsjI,EAAgBt3K,OAAQm5K,EAAa,GAElD,CAEA,OAAO7B,EAAgB7uF,aAAY,CAAC2sF,EAAQzqK,EAAOsnB,KACjD,IAAItlB,EAAQhC,EAAMwmK,MAAMhwK,GAAW,MAANuyB,OAAM,EAANA,EAAS/oB,EAAMwmK,MAAMhwK,IAAM,KAEpD23K,EAAuC,KACvC/B,IACF+B,EAAenuK,EAAMwmK,MAAM2H,cAAgBV,IAE7C,IAAI9vI,EAAU0uI,EAAc/tK,OAAOquK,EAAgBtxK,MAAM,EAAGisB,EAAQ,IAChEg/H,EAAcA,KAChB,IAAItxC,EAgBJ,OAdEA,EADEhzG,EACSmsK,EACFnuK,EAAMwmK,MAAMnsC,UAOV6mC,EAAAA,cAAClhK,EAAMwmK,MAAMnsC,UAAS,MACxBr6H,EAAMwmK,MAAMhtH,QACVx5C,EAAMwmK,MAAMhtH,QAEZixH,EAGXvJ,EAAAA,cAAC+M,GAAa,CACZjuK,MAAOA,EACPguK,aAAc,CACZvD,SACA9sI,UACA+sI,YAAgC,MAAnB0B,GAEfp3D,SAAUA,GACV,EAMN,OAAOo3D,IACJpsK,EAAMwmK,MAAM4H,eAAiBpuK,EAAMwmK,MAAM2H,cAA0B,IAAV7mJ,GAC1D45I,EAAAA,cAACwM,GAAmB,CAClB/yK,SAAUyxK,EAAgBzxK,SAC1BgzK,aAAcvB,EAAgBuB,aAC9BhrC,UAAWwrC,EACXnsK,MAAOA,EACPgzG,SAAUsxC,IACV0nB,aAAc,CAAEvD,OAAQ,KAAM9sI,UAAS+sI,aAAa,KAGtDpkB,GACD,GACA,KACL,CAAC,IAEI6kB,GAAc,SAAdA,GAAc,OAAdA,EAAc,wBAAdA,EAAc,gCAAdA,EAAc,gCAAdA,CAAc,EAAdA,IAAc,IAMdG,GAAmB,SAAnBA,GAAmB,OAAnBA,EAAmB,wBAAnBA,EAAmB,8BAAnBA,EAAmB,8BAAnBA,EAAmB,8BAAnBA,EAAmB,8BAAnBA,EAAmB,wCAAnBA,EAAmB,wBAAnBA,EAAmB,gCAAnBA,EAAmB,gCAAnBA,EAAmB,wBAAnBA,CAAmB,EAAnBA,IAAmB,IAmBxB,SAASJ,GAAqBuD,GAC5B,IAAIC,EAAMxN,EAAAA,WAAiBkJ,GAE3B,OADUsE,GAAV5D,GAAU,GACH4D,CACT,CAEA,SAASzB,GAAmBwB,GAC1B,IAAI9vK,EAAQuiK,EAAAA,WAAiBmJ,GAE7B,OADU1rK,GAAVmsK,GAAU,GACHnsK,CACT,CASA,SAAS0sK,GAAkBoD,GACzB,IAAIjI,EARN,SAAyBiI,GACvB,IAAIjI,EAAQtF,EAAAA,WAAiBsJ,GAE7B,OADUhE,GAAVsE,GAAU,GACHtE,CACT,CAIcmI,GACRC,EAAYpI,EAAM7oI,QAAQ6oI,EAAM7oI,QAAQtoC,OAAS,GAKrD,OAHEu5K,EAAUpI,MAAMhwK,IADlBs0K,GAAU,GAIH8D,EAAUpI,MAAMhwK,EACzB,CC5sB4B0qK,EAAsB,gBA+Q3C,SAAS2N,GAAMt7C,GACpBu3C,GAAU,EAKZ,CAoBO,SAASgE,GAAMzuJ,GAOqB,IANzCslJ,SAAUoJ,EAAe,IAAG,SAC5B/5D,EAAW,KACXr6G,SAAUq0K,EAAY,eACtBlC,EAAiBzJ,EAAeoB,IAAG,UACnC5pK,EACAoH,OAAQgtK,GAAa,GACT5uJ,EAETuqJ,KADHE,GAAU,GAQV,IAAInF,EAAWoJ,EAAa/vK,QAAQ,OAAQ,KACxCkwK,EAAoBhO,EAAAA,SACtB,KAAM,CAAGyE,WAAU9qK,YAAWoH,OAAQgtK,KACtC,CAACtJ,EAAU9qK,EAAWo0K,IAGI,kBAAjBD,IACTA,EAAepL,EAAUoL,IAG3B,IAAI,SACFrL,EAAW,IAAG,OACdjwJ,EAAS,GAAE,KACX6f,EAAO,GAAE,MACT50B,EAAQ,KAAI,IACZpJ,EAAM,WACJy5K,EAEAG,EAAkBjO,EAAAA,SAAc,KAClC,IAAIkO,EAAmBxJ,EAAcjC,EAAUgC,GAE/C,OAAwB,MAApByJ,EACK,KAGF,CACLz0K,SAAU,CACRgpK,SAAUyL,EACV17J,SACA6f,OACA50B,QACApJ,OAEFu3K,iBACD,GACA,CAACnH,EAAUhC,EAAUjwJ,EAAQ6f,EAAM50B,EAAOpJ,EAAKu3K,IASlD,OAAuB,MAAnBqC,EACK,KAIPjO,EAAAA,cAACoJ,EAAkBuC,SAAQ,CAAC/vK,MAAOoyK,GACjChO,EAAAA,cAACqJ,EAAgBsC,SAAQ,CAAC73D,SAAUA,EAAUl4G,MAAOqyK,IAG3D,CAaO,SAASE,GAAM9uJ,GAGqB,IAHpB,SACrBy0F,EAAQ,SACRr6G,GACY4lB,EACZ,ODjIK,SACLklJ,EACAC,GAEA,OAAOyG,EAAc1G,EAAQC,EAC/B,CC4HS4J,CAAUC,GAAyBv6D,GAAWr6G,EACvD,CAuC4B,IAAI1B,SAAQ,SAEPioK,EAAAA,UAkH1B,SAASqO,GACdv6D,EACAsxD,QAAoB,IAApBA,IAAAA,EAAuB,IAEvB,IAAIb,EAAwB,GA6D5B,OA3DAvE,EAAAA,SAAe1jK,QAAQw3G,GAAU,CAACx7D,EAASlyB,KACzC,IAAK45I,EAAAA,eAAqB1nH,GAGxB,OAGF,IAAIg2H,EAAW,IAAIlJ,EAAYh/I,GAE/B,GAAIkyB,EAAQ9hD,OAASwpK,EAAAA,SAMnB,YAJAuE,EAAOhpK,KAAK9G,MACV8vK,EACA8J,GAAyB/1H,EAAQtjD,MAAM8+G,SAAUw6D,IAMnDh2H,EAAQ9hD,OAASm3K,IADnB/D,GAAU,GAQPtxH,EAAQtjD,MAAMoxB,OAAUkyB,EAAQtjD,MAAM8+G,UADzC81D,GAAU,GAKV,IAAItE,EAAqB,CACvBhwK,GAAIgjD,EAAQtjD,MAAMM,IAAMg5K,EAAS9vK,KAAK,KACtCgnK,cAAeltH,EAAQtjD,MAAMwwK,cAC7BltH,QAASA,EAAQtjD,MAAMsjD,QACvB6gF,UAAW7gF,EAAQtjD,MAAMmkI,UACzB/yG,MAAOkyB,EAAQtjD,MAAMoxB,MACrB+0C,KAAM7iB,EAAQtjD,MAAMmmE,KACpB0jE,OAAQvmF,EAAQtjD,MAAM6pI,OACtB36D,OAAQ5rB,EAAQtjD,MAAMkvE,OACtB+oG,aAAc30H,EAAQtjD,MAAMi4K,aAC5BC,cAAe50H,EAAQtjD,MAAMk4K,cAC7BqB,iBACiC,MAA/Bj2H,EAAQtjD,MAAMk4K,eACgB,MAA9B50H,EAAQtjD,MAAMi4K,aAChBuB,iBAAkBl2H,EAAQtjD,MAAMw5K,iBAChC9hD,OAAQp0E,EAAQtjD,MAAM03H,OACtB+hD,KAAMn2H,EAAQtjD,MAAMy5K,MAGlBn2H,EAAQtjD,MAAM8+G,WAChBwxD,EAAMxxD,SAAWu6D,GACf/1H,EAAQtjD,MAAM8+G,SACdw6D,IAIJ/J,EAAOhpK,KAAK+pK,EAAM,IAGbf,CACT,+WCtmBgB,SAAAmK,GACdx3J,GAEA,YAFA,IAAAA,IAAAA,EAA4B,IAErB,IAAIy3J,gBACO,kBAATz3J,GACP/d,MAAMK,QAAQ0d,IACdA,aAAgBy3J,gBACZz3J,EACArjB,OAAOyH,KAAK4b,GAAM/V,QAAO,CAACkmK,EAAMhzK,KAC9B,IAAIuH,EAAQsb,EAAK7iB,GACjB,OAAOgzK,EAAKjqK,OACVjE,MAAMK,QAAQoC,GAASA,EAAMuJ,KAAK/J,GAAM,CAAC/G,EAAK+G,KAAM,CAAC,CAAC/G,EAAKuH,IAC5D,GACA,IAEX,CA+HgD,IAAIvD,IAAI,CACtD,oCACA,sBACA,uPC+HF,MAAMu2K,GAAwB5O,EAAAA,cAAiD,CAC7E6O,iBAAiB,IAWgD,IAAI12K,IAkCvE,MACM22K,GAAsB9O,EAAsB,gBAE5BkC,EAAmB,UAgUnC,SAAU6M,GAAa9vJ,GAKR,IALS,SAC5BwlJ,EAAQ,SACR3wD,EAAQ,OACR9rB,EAAM,OACNnwF,GACmBonB,EACf+vJ,EAAahP,EAAAA,SP3WH,IACdj6H,EO2W0B,MAAtBipI,EAAW9wH,UACb8wH,EAAW9wH,cP5Wb,KAAAnY,EO4W4C,CAAEluC,SAAQurK,UAAU,MP5WhEr9H,EAAiC,CAAC,GAoB3Bg9H,GAlBP,SACElrK,EACAwrK,GAEA,IAAI,SAAEZ,EAAQ,OAAEjwJ,EAAM,KAAE6f,GAASx6B,EAAO4B,SACxC,OAAO+oK,EACL,GACA,CAAEC,WAAUjwJ,SAAQ6f,QAEnBgxI,EAAc5lK,OAAS4lK,EAAc5lK,MAAM8kK,KAAQ,KACnDc,EAAc5lK,OAAS4lK,EAAc5lK,MAAMpJ,KAAQ,UAExD,IAEA,SAA2BwD,EAAgB6oB,GACzC,MAAqB,kBAAPA,EAAkBA,EAAKiiJ,EAAWjiJ,EAClD,GAKE,KACAqlB,KOuVF,IAAIu9H,EAAU0L,EAAW9wH,SACpBzgD,EAAOwxK,GAAgBjP,EAAAA,SAAe,CACzC97F,OAAQo/F,EAAQp/F,OAChBzqE,SAAU6pK,EAAQ7pK,YAEhB,mBAAEy1K,GAAuBlnF,GAAU,CAAC,EACpCqpC,EAAW2uC,EAAAA,aACZ/8B,IACCisC,GAAsBJ,GAClBA,IAAoB,IAAMG,EAAahsC,KACvCgsC,EAAahsC,EAAS,GAE5B,CAACgsC,EAAcC,IAKjB,OAFAlP,EAAAA,iBAAsB,IAAMsD,EAAQO,OAAOxyC,IAAW,CAACiyC,EAASjyC,IAG9D2uC,EAAAA,cAAC4N,GAAM,CACLnJ,SAAUA,EACV3wD,SAAUA,EACVr6G,SAAUgE,EAAMhE,SAChBmyK,eAAgBnuK,EAAMymE,OACtBvqE,UAAW2pK,GAGjB,CAmHA,MAAM6L,GACc,qBAAXt3K,QACoB,qBAApBA,OAAO6B,UAC2B,qBAAlC7B,OAAO6B,SAASgxH,cAEnB0kD,GAAqB,gCAKdC,GAAOrP,EAAAA,YAClB,SAAoBzgJ,EAalB1qB,GAAG,IAKCy6K,GAjBJ,QACE/hC,EAAO,SACPnvB,EAAQ,eACRmxD,EAAc,QACdzxK,EAAO,MACPL,EAAK,OACLzJ,EAAM,GACN0sB,EAAE,mBACF8uJ,EAAkB,wBAClBC,GAEDlwJ,EADIs4D,EAAIksD,GAAAxkH,EAAA8gH,KAIL,SAAEokC,GAAazE,EAAAA,WAAiB0P,GAIhCC,GAAa,EAEjB,GAAkB,kBAAPjvJ,GAAmB0uJ,GAAmB7wK,KAAKmiB,KAEpD4uJ,EAAe5uJ,EAGXyuJ,IACF,IACE,IAAIS,EAAa,IAAIp2D,IAAI3hH,OAAO4B,SAAS0iJ,MACrC0zB,EAAYnvJ,EAAGilB,WAAW,MAC1B,IAAI6zE,IAAIo2D,EAAWl2D,SAAWh5F,GAC9B,IAAI84F,IAAI94F,GACRy6C,EAAOupG,EAAcmL,EAAUpN,SAAUgC,GAEzCoL,EAAU52D,SAAW22D,EAAW32D,QAAkB,MAAR99C,EAE5Cz6C,EAAKy6C,EAAO00G,EAAUr9J,OAASq9J,EAAUx9I,KAEzCs9I,GAAa,EAEf,MAAOr4K,GAOR,CAKL,IAAI6kJ,EH52BD,SACLz7H,EAAMovJ,GAEE,IADR,SAAE1xD,QAA8C,IAAA0xD,EAAG,CAAC,EAACA,EAGnDpG,KADFE,GAAU,GAOV,IAAI,SAAEnF,EAAQ,UAAE9qK,GAAcqmK,EAAAA,WAAiBoJ,IAC3C,KAAE/2I,EAAI,SAAEowI,EAAQ,OAAEjwJ,GAAWu4J,EAAgBrqJ,EAAI,CAAE09F,aAEnD2xD,EAAiBtN,EAWrB,MALiB,MAAbgC,IACFsL,EACe,MAAbtN,EAAmBgC,EAAWgB,EAAU,CAAChB,EAAUhC,KAGhD9oK,EAAUspK,WAAW,CAAER,SAAUsN,EAAgBv9J,SAAQ6f,QAClE,CGk1Be29I,CAAQtvJ,EAAI,CAAE09F,aAErB6xD,EAqYF,SACJvvJ,EAAMovJ,GAeA,IAdN,OACE97K,EACA8J,QAASoyK,EAAW,MACpBzyK,EAAK,mBACL+xK,EAAkB,SAClBpxD,EAAQ,wBACRqxD,cAQE,CAAC,EAACK,EAEFxF,EAAWR,IACXrwK,EAAWkwK,IACXxuG,EAAO4vG,EAAgBrqJ,EAAI,CAAE09F,aAEjC,OAAO4hD,EAAAA,aACJtjD,IACC,GD/xCU,SACdA,EACA1oH,GAEA,OACmB,IAAjB0oH,EAAMyzD,UACJn8K,GAAqB,UAAXA,KAVhB,SAAyB0oH,GACvB,SAAUA,EAAM0zD,SAAW1zD,EAAM2zD,QAAU3zD,EAAM4zD,SAAW5zD,EAAM6zD,SACpE,CASKC,CAAgB9zD,EAErB,CCsxCU+zD,CAAuB/zD,EAAO1oH,GAAS,CACzC0oH,EAAM0X,iBAIN,IAAIt2H,OACchH,IAAhBo5K,EACIA,EACAvN,EAAWlpK,KAAckpK,EAAWxnG,GAE1CmvG,EAAS5pJ,EAAI,CACX5iB,UACAL,QACA+xK,qBACApxD,WACAqxD,2BAEH,IAEH,CACEh2K,EACA6wK,EACAnvG,EACA+0G,EACAzyK,EACAzJ,EACA0sB,EACA8uJ,EACApxD,EACAqxD,GAGN,CA7b0BiB,CAAoBhwJ,EAAI,CAC5C5iB,UACAL,QACAzJ,SACAw7K,qBACApxD,WACAqxD,4BAWF,OAEEzP,EAAAA,cAAA,IAAApsK,GAAA,GACMikF,EAAI,CACRskE,KAAMmzB,GAAgBnzB,EACtB5O,QAASoiC,GAAcJ,EAAiBhiC,EAd5C,SACE7wB,GAEI6wB,GAASA,EAAQ7wB,GAChBA,EAAMi0D,kBACTV,EAAgBvzD,EAEpB,EAQI7nH,IAAKA,EACLb,OAAQA,IAGd,IA2BW,MAAA48K,GAAU5Q,EAAAA,YACrB,SAAuBp2I,EAYrB/0B,GAAG,IAVD,eAAgBg8K,EAAkB,OAAM,cACxCrL,GAAgB,EAChB/uK,UAAWq6K,EAAgB,GAAE,IAC7B3zH,GAAM,EACN9mD,MAAO06K,EAAS,GAChBrwJ,EAAE,wBACF+uJ,EAAuB,SACvB37D,GAEDlqF,EADIiuD,EAAIksD,GAAAn6G,EAAAonJ,IAIL71G,EAAO4vG,EAAgBrqJ,EAAI,CAAE09F,SAAUvmC,EAAKumC,WAC5C3kH,EAAWkwK,IACXsH,EAAcjR,EAAAA,WAAiBkR,IAC/B,UAAEv3K,GAAcqmK,EAAAA,WAAiB0P,GACjCb,EACa,MAAfoC,GAi5BN,SACEvwJ,EACA7jB,QAAA,IAAAA,IAAAA,EAA2C,CAAC,GAE5C,IAAIs0K,EAAYnR,EAAAA,WAAiB4O,IAGlB,MAAbuC,GADFvH,GAAU,GAMV,IAAI,SAAEnF,GAAauF,GACjBC,GAAemH,wBAEbj2G,EAAO4vG,EAAgBrqJ,EAAI,CAAE09F,SAAUvhH,EAAKuhH,WAChD,IAAK+yD,EAAUtC,gBACb,OAAO,EAGT,IAAIwC,EACF3M,EAAcyM,EAAUG,gBAAgB7O,SAAUgC,IAClD0M,EAAUG,gBAAgB7O,SACxB8O,EACF7M,EAAcyM,EAAUK,aAAa/O,SAAUgC,IAC/C0M,EAAUK,aAAa/O,SAezB,OACwC,MAAtCoE,EAAU1rG,EAAKsnG,SAAU8O,IACgB,MAAzC1K,EAAU1rG,EAAKsnG,SAAU4O,EAE7B,CA17BMD,CAAuBj2G,KACK,IAA5Bs0G,EAEEvH,EAAavuK,EAAUmqK,eACvBnqK,EAAUmqK,eAAe3oG,GAAMsnG,SAC/BtnG,EAAKsnG,SACLsF,EAAmBtuK,EAASgpK,SAC5BgP,EACFR,GAAeA,EAAYS,YAAcT,EAAYS,WAAWj4K,SAC5Dw3K,EAAYS,WAAWj4K,SAASgpK,SAChC,KAED+C,IACHuC,EAAmBA,EAAiB30F,cACpCq+F,EAAuBA,EACnBA,EAAqBr+F,cACrB,KACJ80F,EAAaA,EAAW90F,eAQ1B,MAAMu+F,EACW,MAAfzJ,GAAsBA,EAAWjuF,SAAS,KACtCiuF,EAAW/zK,OAAS,EACpB+zK,EAAW/zK,OACjB,IAqBIsC,EArBAm7K,EACF7J,IAAqBG,IACnB/qH,GACA4qH,EAAiBpiI,WAAWuiI,IACkB,MAA9CH,EAAiBh4G,OAAO4hH,GAExBE,EACsB,MAAxBJ,IACCA,IAAyBvJ,IACtB/qH,GACAs0H,EAAqB9rI,WAAWuiI,IACmB,MAAnDuJ,EAAqB1hH,OAAOm4G,EAAW/zK,SAEzCyrI,EAAc,CAChBgyC,WACAC,YACAhD,mBAGEiD,EAAcF,EAAWf,OAAkB/5K,EAI7CL,EAD2B,oBAAlBq6K,EACGA,EAAclxC,GAOd,CACVkxC,EACAc,EAAW,SAAW,KACtBC,EAAY,UAAY,KACxBhD,EAAkB,gBAAkB,MAEnC7wK,OAAOnD,SACP2D,KAAK,KAGV,IAAInI,EACmB,oBAAd06K,EAA2BA,EAAUnxC,GAAemxC,EAE7D,OACE/Q,EAAAA,cAACqP,GAAIz7K,GAAA,GACCikF,EAAI,CACM,eAAAi6F,EACdr7K,UAAWA,EACX5B,IAAKA,EACLwB,MAAOA,EACPqqB,GAAIA,EACJ+uJ,wBAAyBA,IAEJ,oBAAb37D,EAA0BA,EAAS8rB,GAAe9rB,EAGhE,IA0LF,IAAKm2D,GAQAG,GAcL,SAASJ,GAAqBuD,GAC5B,IAAIC,EAAMxN,EAAAA,WAAiB+R,GAE3B,OADUvE,GAAV5D,GAAU,GACH4D,CACT,CA6EM,SAAUwE,GACdC,GAcA,IAAIC,EAAyBlS,EAAAA,OAAa0O,GAAmBuD,IACzDE,EAAwBnS,EAAAA,QAAa,GAErCvmK,EAAWkwK,IACXyI,EAAepS,EAAAA,SACjB,IDhyCY,SACdqS,EACAC,GAEA,IAAIF,EAAe1D,GAAmB2D,GAiBtC,OAfIC,GAMFA,EAAoBh2K,SAAQ,CAAC/C,EAAGlF,KACzB+9K,EAAa53K,IAAInG,IACpBi+K,EAAoBC,OAAOl+K,GAAKiI,SAASV,IACvCw2K,EAAapqK,OAAO3T,EAAKuH,EAAM,GAElC,IAIEw2K,CACT,CC8wCMI,CACE/4K,EAAS+Y,OACT2/J,EAAsBj0H,QAAU,KAAOg0H,EAAuBh0H,UAElE,CAACzkD,EAAS+Y,SAGR83J,EAAWR,IACX2I,EAAkBzS,EAAAA,aACpB,CAAC0S,EAAUC,KACT,MAAMC,EAAkBlE,GACF,oBAAbgE,EAA0BA,EAASN,GAAgBM,GAE5DP,EAAsBj0H,SAAU,EAChCosH,EAAS,IAAMsI,EAAiBD,EAAgB,GAElD,CAACrI,EAAU8H,IAGb,MAAO,CAACA,EAAcK,EACxB,EAnJA,SAAKxI,GACHA,EAAA,4CACAA,EAAA,sBACAA,EAAA,oCACAA,EAAA,wBACAA,EAAA,+CACD,EAND,CAAKA,KAAAA,GAMJ,KAED,SAAKG,GACHA,EAAA,wBACAA,EAAA,0BACAA,EAAA,2CACD,CAJD,CAAKA,KAAAA,GAIJ,KC7wCD,MAYA,GAZwByI,IAClBA,GAAeA,aAAuBl4K,UACxC,mFAAqBuN,MAAKtT,IAAkD,IAAjD,OAAEk+K,EAAM,OAAEC,EAAM,OAAEC,EAAM,OAAEC,EAAM,QAAEC,GAASt+K,EACpEk+K,EAAOD,GACPE,EAAOF,GACPG,EAAOH,GACPI,EAAOJ,GACPK,EAAQL,EAAY,GAExB,mCCca,SAAAn6F,GAAU/H,EAAOhK,EAAU5gC,GAKrC,IAMAotI,EANAv+K,EAAAmxC,GAAW,CAAC,EAJhBqtI,EAAAx+K,EACCy+K,WAAAA,OADD,IAAAD,GAAAA,EAAAE,EAAA1+K,EAEC2+K,UAAAA,OAFD,IAAAD,GAAAA,EAAAE,EAAA5+K,EAGC6+K,aAAAA,OAHD,IAAAD,OAGgB18K,EAHhB08K,EAWI/mD,GAAY,EAGZinD,EAAW,EAGf,SAASC,IACJR,GACHxhH,aAAawhH,EAEd,CAcD,SAAS5rG,IAAuB,QAAA/rD,EAAAtnB,UAAAC,OAAZy/K,EAAY,IAAAz6K,MAAAqiB,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAZm4J,EAAYn4J,GAAAvnB,UAAAunB,GAC3B,IAAA/jB,EAAOhD,KACPm/K,EAAU55K,KAAK43D,MAAQ6hH,EAO3B,SAASh3I,IACRg3I,EAAWz5K,KAAK43D,MAChB8U,EAASlyE,MAAMiD,EAAMk8K,EACrB,CAMD,SAASnzK,IACR0yK,OAAYr8K,CACZ,CAhBG21H,IAkBC8mD,IAAaE,GAAiBN,GAMlCz2I,IAGDi3I,SAEqB78K,IAAjB28K,GAA8BI,EAAUljG,EACvC4iG,GAMHG,EAAWz5K,KAAK43D,MACXwhH,IACJF,EAAY9rK,WAAWosK,EAAehzK,EAAQi8B,EAAMi0C,KAOrDj0C,KAEwB,IAAf22I,IAYVF,EAAY9rK,WACXosK,EAAehzK,EAAQi8B,OACN5lC,IAAjB28K,EAA6B9iG,EAAQkjG,EAAUljG,IAGjD,CAKD,OAHApJ,EAAQiJ,OAjFC,SAAOzqC,GACkB,IAAjC+tI,GAAiC/tI,GAAW,CAAC,GAArCguI,aAAAA,OAAR,IAAAD,GAAAA,EACAH,IACAlnD,GAAasnD,CACb,EAgFMxsG,CACP,CClHc,SAAA6H,GAAUuB,EAAOhK,EAAU5gC,GACb,IAA5BiuI,GAA4BjuI,GAAW,CAAC,GAAhCkuI,QACR,OAAOv7F,GAAS/H,EAAOhK,EAAU,CAAE8sG,cAA0B,UAD7D,IAAAO,GAAAA,IAEA,CCtBM,MCADE,GAAsB,gBAEpBz6K,SAAS,IAAI5B,OAErB,IAAIs8K,GAAc,GACdz3I,GAAO,KACyD,IAAD03I,GAAAC,GAG5DC,GAAAC,GAQEC,GAAAC,GALIC,GANTj7K,GAASgpK,SAASrvF,cAAch/C,SAAS8/I,KAC3Cx3I,GAAQ,8BAA+BA,KAAKjjC,GAASgpK,UACrD0R,GAAuB,QAAZC,GAAO,QAAPC,GAAG33I,UAAI,IAAA23I,QAAA,EAAJA,GAAO,UAAE,IAAAD,GAAAA,GAAI,KAE3B13I,GAAQ,qCAAsCA,KAAKjjC,GAASgpK,UAC5D0R,GAAuB,QAAZG,GAAO,QAAPC,GAAG73I,UAAI,IAAA63I,QAAA,EAAJA,GAAO,UAAE,IAAAD,GAAAA,GAAI,GACtB53I,GAMHy3I,GAAuB,QAAZK,GAAO,QAAPC,GAAG/3I,UAAI,IAAA+3I,QAAA,EAAJA,GAAO,UAAE,IAAAD,GAAAA,GAAI,IAL3B93I,GAAQ,6BAA8BA,KAAKjjC,GAASgpK,UAClC,MAAV,QAAJiS,GAAAh4I,UAAI,IAAAg4I,QAAA,EAAJA,GAAO,MACTP,GAAc,MAOpB,SAAeA,GAAY/gG,cAAch/C,SAAS8/I,IAChD,CACE,GACA,IACC,GAAEC,oCACF,GAAEA,0CACF,GAAEA,8CACF,GAAEA,qDAGL,CACE,GACA,IACC,GAAEA,mBACF,GAAEA,yBACF,GAAEA,6BACF,GAAEA,oCCVP,MACA,GADe,IA3Bf,MAEE,UAAIj2K,GAKF,OAJIxJ,KAAKgM,UACPhM,KAAKgM,QAAUqY,oBAAQ,KAARA,CAAmB,UAClCrkB,KAAKgM,QAAQrC,WAAY+tB,GAEpB13B,KAAKgM,OACd,CAEAC,GAAAA,GACEjM,KAAKwJ,OAAOyC,OAAIzM,UAClB,CAEA0M,IAAAA,GACElM,KAAKwJ,OAAO0C,QAAK1M,UACnB,CAEA2M,IAAAA,GACEnM,KAAKwJ,OAAO2C,QAAK3M,UACnB,CAEA4M,KAAAA,GACEpM,KAAKwJ,OAAO4C,SAAM5M,UACpB,GCkHI,SAAUgJ,GAAMqd,EAAawrB,QAAA,IAAAA,IAAAA,EAAA,IA6BjC,IA5BA,IAAM2mD,EAxHR,SAAenyE,GAIb,IAHA,IAAMmyE,EAAqB,GACvBz4F,EAAI,EAEDA,EAAIsmB,EAAIpmB,QAAQ,CACrB,IAAMqpD,EAAOjjC,EAAItmB,GAEjB,GAAa,MAATupD,GAAyB,MAATA,GAAyB,MAATA,EAKpC,GAAa,OAATA,EAKJ,GAAa,MAATA,EAKJ,GAAa,MAATA,EAKJ,GAAa,MAATA,EA+BJ,GAAa,MAATA,EAuCJkvC,EAAOnxF,KAAK,CAAE/E,KAAM,OAAQ4vB,MAAOnyB,EAAG2H,MAAO2e,EAAItmB,WAvCjD,CACE,IAAIo7B,EAAQ,EACR2d,EAAU,GAGd,GAAe,MAAXzyB,EAFA9V,EAAIxQ,EAAI,GAGV,MAAM,IAAIgK,UAAU,oCAAAb,OAAoCqH,IAG1D,KAAOA,EAAI8V,EAAIpmB,QACb,GAAe,OAAXomB,EAAI9V,GAAR,CAKA,GAAe,MAAX8V,EAAI9V,IAEN,GAAc,MADd4qB,EACiB,CACf5qB,IACA,YAEG,GAAe,MAAX8V,EAAI9V,KACb4qB,IACmB,MAAf9U,EAAI9V,EAAI,IACV,MAAM,IAAIxG,UAAU,uCAAAb,OAAuCqH,IAI/DuoC,GAAWzyB,EAAI9V,UAjBbuoC,GAAWzyB,EAAI9V,KAAO8V,EAAI9V,KAoB9B,GAAI4qB,EAAO,MAAM,IAAIpxB,UAAU,yBAAAb,OAAyBnJ,IACxD,IAAK+4C,EAAS,MAAM,IAAI/uC,UAAU,sBAAAb,OAAsBnJ,IAExDy4F,EAAOnxF,KAAK,CAAE/E,KAAM,UAAW4vB,MAAOnyB,EAAG2H,MAAOoxC,IAChD/4C,EAAIwQ,MAlEN,CAIE,IAHA,IAAI2B,EAAO,GACP3B,EAAIxQ,EAAI,EAELwQ,EAAI8V,EAAIpmB,QAAQ,CACrB,IAAM8mB,EAAOV,EAAIssB,WAAWpiC,GAE5B,KAEGwW,GAAQ,IAAMA,GAAQ,IAEtBA,GAAQ,IAAMA,GAAQ,IAEtBA,GAAQ,IAAMA,GAAQ,KAEd,KAATA,GAMF,MAJE7U,GAAQmU,EAAI9V,KAOhB,IAAK2B,EAAM,MAAM,IAAInI,UAAU,6BAAAb,OAA6BnJ,IAE5Dy4F,EAAOnxF,KAAK,CAAE/E,KAAM,OAAQ4vB,MAAOnyB,EAAG2H,MAAOwK,IAC7CnS,EAAIwQ,OA/BJioF,EAAOnxF,KAAK,CAAE/E,KAAM,QAAS4vB,MAAOnyB,EAAG2H,MAAO2e,EAAItmB,YALlDy4F,EAAOnxF,KAAK,CAAE/E,KAAM,OAAQ4vB,MAAOnyB,EAAG2H,MAAO2e,EAAItmB,YALjDy4F,EAAOnxF,KAAK,CAAE/E,KAAM,eAAgB4vB,MAAOnyB,IAAK2H,MAAO2e,EAAItmB,YAL3Dy4F,EAAOnxF,KAAK,CAAE/E,KAAM,WAAY4vB,MAAOnyB,EAAG2H,MAAO2e,EAAItmB,OA8FzD,OAFAy4F,EAAOnxF,KAAK,CAAE/E,KAAM,MAAO4vB,MAAOnyB,EAAG2H,MAAO,KAErC8wF,CACT,CAiBiBioF,CAAMp6J,GACba,EAAoB2qB,EAAOhgB,SAA3BA,OAAQ,IAAA3K,EAAG,KAAIA,EACjBw5J,EAAiB,KAAAx3K,OAAKy3K,GAAa9uI,EAAQ6vH,WAAa,OAAM,OAC9D37H,EAAkB,GACpB5lC,EAAM,EACNJ,EAAI,EACJknE,EAAO,GAEL25G,EAAa,SAACt+K,GAClB,GAAIvC,EAAIy4F,EAAOv4F,QAAUu4F,EAAOz4F,GAAGuC,OAASA,EAAM,OAAOk2F,EAAOz4F,KAAK2H,KACvE,EAEMm5K,EAAc,SAACv+K,GACnB,IAAMoF,EAAQk5K,EAAWt+K,GACzB,QAAcM,IAAV8E,EAAqB,OAAOA,EAC1B,IAAAwf,EAA4BsxE,EAAOz4F,GAA3B+gL,EAAQ55J,EAAA5kB,KAAE4vB,EAAKhL,EAAAgL,MAC7B,MAAM,IAAInoB,UAAU,cAAAb,OAAc43K,EAAQ,QAAA53K,OAAOgpB,EAAK,eAAAhpB,OAAc5G,GACtE,EAEMy+K,EAAc,WAGlB,IAFA,IACIr5K,EADAq+B,EAAS,GAELr+B,EAAQk5K,EAAW,SAAWA,EAAW,iBAC/C76I,GAAUr+B,EAEZ,OAAOq+B,CACT,EAEOhmC,EAAIy4F,EAAOv4F,QAAQ,CACxB,IAAMqpD,EAAOs3H,EAAW,QAClB1uK,EAAO0uK,EAAW,QAClB9nI,EAAU8nI,EAAW,WAE3B,GAAI1uK,GAAQ4mC,EAAZ,CACE,IAAIlwC,EAAS0gD,GAAQ,IAEa,IAA9Bz3B,EAAS9mB,QAAQnC,KACnBq+D,GAAQr+D,EACRA,EAAS,IAGPq+D,IACFlhC,EAAO1+B,KAAK4/D,GACZA,EAAO,IAGTlhC,EAAO1+B,KAAK,CACV6K,KAAMA,GAAQ/R,IACdyI,OAAMA,EACNmoG,OAAQ,GACRj4D,QAASA,GAAW4nI,EACpBM,SAAUJ,EAAW,aAAe,SAlBxC,CAuBA,IAAMl5K,EAAQ4hD,GAAQs3H,EAAW,gBACjC,GAAIl5K,EACFu/D,GAAQv/D,OAUV,GANIu/D,IACFlhC,EAAO1+B,KAAK4/D,GACZA,EAAO,IAGI25G,EAAW,QACxB,CACQh4K,EAASm4K,IAAf,IACME,EAAOL,EAAW,SAAW,GAC7BtjI,EAAUsjI,EAAW,YAAc,GACnC7vE,EAASgwE,IAEfF,EAAY,SAEZ96I,EAAO1+B,KAAK,CACV6K,KAAM+uK,IAAS3jI,EAAUn9C,IAAQ,IACjC24C,QAASmoI,IAAS3jI,EAAUojI,EAAiBpjI,EAC7C10C,OAAMA,EACNmoG,OAAMA,EACNiwE,SAAUJ,EAAW,aAAe,UAKxCC,EAAY,QAGd,OAAO96I,CACT,CA8LA,SAAS46I,GAAat6J,GACpB,OAAOA,EAAIzc,QAAQ,4BAA6B,OAClD,CAKA,SAAS5C,GAAM6qC,GACb,OAAOA,GAAWA,EAAQqvI,UAAY,GAAK,GAC7C,CA0DA,SAASC,GACPl6G,EACA7/D,EACAyqC,GAEA,OAqCI,SACJ2mD,EACApxF,EACAyqC,QAAA,IAAAA,IAAAA,EAAA,IAeA,IAZE,IAAA3qB,EAME2qB,EAAOzF,OANTA,OAAM,IAAAllB,GAAQA,EACd8F,EAKE6kB,EAAOmX,MALTA,OAAK,IAAAh8B,GAAOA,EACZsf,EAIEuF,EAAOoX,IAJTA,OAAG,IAAA3c,GAAOA,EACVC,EAGEsF,EAAOi4G,OAHTA,OAAM,IAAAv9G,EAAG,SAACtqC,GAAc,OAAAA,CAAA,EAACsqC,EACzBt1B,EAEE46B,EAAO6vH,UAFTA,OAAS,IAAAzqJ,EAAG,MAAKA,EACjBu1B,EACEqF,EAAOk0C,SACLq7F,EAAa,IAAAl4K,OAAIy3K,QAFb,IAAAn0I,EAAG,GAAEA,GAE8B,OACvC60I,EAAc,IAAAn4K,OAAIy3K,GAAajf,GAAU,KAC3C0P,EAAQpoH,EAAQ,IAAM,GAGNymC,EAAA,EAAA6xF,EAAA9oF,EAAA/I,EAAA6xF,EAAArhL,OAAAwvF,IAAQ,CAAvB,IAAM4C,EAAKivF,EAAA7xF,GACd,GAAqB,kBAAV4C,EACT++E,GAASuP,GAAa72B,EAAOz3D,QACxB,CACL,IAAMzpF,EAAS+3K,GAAa72B,EAAOz3D,EAAMzpF,SACnCmoG,EAAS4vE,GAAa72B,EAAOz3D,EAAM0e,SAEzC,GAAI1e,EAAMv5C,QAGR,GAFI1xC,GAAMA,EAAKC,KAAKgrF,GAEhBzpF,GAAUmoG,EACZ,GAAuB,MAAnB1e,EAAM2uF,UAAuC,MAAnB3uF,EAAM2uF,SAAkB,CACpD,IAAM1nF,EAAyB,MAAnBjH,EAAM2uF,SAAmB,IAAM,GAC3C5P,GAAS,MAAAloK,OAAMN,EAAM,QAAAM,OAAOmpF,EAAMv5C,QAAO,QAAA5vC,OAAO6nG,GAAM7nG,OAAGN,EAAM,OAAAM,OAAMmpF,EAAMv5C,QAAO,QAAA5vC,OAAO6nG,EAAM,KAAA7nG,OAAIowF,QAEnG83E,GAAS,MAAAloK,OAAMN,EAAM,KAAAM,OAAImpF,EAAMv5C,QAAO,KAAA5vC,OAAI6nG,EAAM,KAAA7nG,OAAImpF,EAAM2uF,cAGrC,MAAnB3uF,EAAM2uF,UAAuC,MAAnB3uF,EAAM2uF,SAClC5P,GAAS,OAAAloK,OAAOmpF,EAAMv5C,QAAO,KAAA5vC,OAAImpF,EAAM2uF,SAAQ,KAE/C5P,GAAS,IAAAloK,OAAImpF,EAAMv5C,QAAO,KAAA5vC,OAAImpF,EAAM2uF,eAIxC5P,GAAS,MAAAloK,OAAMN,GAAMM,OAAG6nG,EAAM,KAAA7nG,OAAImpF,EAAM2uF,WAK9C,GAAI/3H,EACG7c,IAAQglI,GAAS,GAAAloK,OAAGm4K,EAAW,MAEpCjQ,GAAUv/H,EAAQk0C,SAAiB,MAAA78E,OAAMk4K,EAAU,KAAtB,QACxB,CACL,IAAMG,EAAW/oF,EAAOA,EAAOv4F,OAAS,GAClCuhL,EACgB,kBAAbD,EACHF,EAAYt2K,QAAQw2K,EAASA,EAASthL,OAAS,KAAO,OACzC2C,IAAb2+K,EAEDn1I,IACHglI,GAAS,MAAAloK,OAAMm4K,EAAW,OAAAn4K,OAAMk4K,EAAU,QAGvCI,IACHpQ,GAAS,MAAAloK,OAAMm4K,EAAW,KAAAn4K,OAAIk4K,EAAU,MAI5C,OAAO,IAAIt7K,OAAOsrK,EAAOpqK,GAAM6qC,GACjC,CA1GS4vI,CAAez4K,GAAMi+D,EAAMp1B,GAAUzqC,EAAMyqC,EACpD,CAuHM,SAAU6vI,GACdz6G,EACA7/D,EACAyqC,GAEA,OAAIo1B,aAAgBnhE,OAvKtB,SAAwBmhE,EAAc7/D,GACpC,IAAKA,EAAM,OAAO6/D,EAMlB,IAJA,IAAM06G,EAAc,0BAEhBzvJ,EAAQ,EACR0vJ,EAAaD,EAAYn5I,KAAKy+B,EAAK/mE,QAChC0hL,GACLx6K,EAAKC,KAAK,CAER6K,KAAM0vK,EAAW,IAAM1vJ,IACvBtpB,OAAQ,GACRmoG,OAAQ,GACRiwE,SAAU,GACVloI,QAAS,KAEX8oI,EAAaD,EAAYn5I,KAAKy+B,EAAK/mE,QAGrC,OAAO+mE,CACT,CAmJqC46G,CAAe56G,EAAM7/D,GACpDnC,MAAMK,QAAQ2hE,GA/IpB,SACElE,EACA37D,EACAyqC,GAEA,IAAMw6D,EAAQtpC,EAAM9xD,KAAI,SAACg2D,GAAS,OAAAy6G,GAAaz6G,EAAM7/D,EAAMyqC,GAAS3xC,MAAlC,IAClC,OAAO,IAAI4F,OAAO,MAAAoD,OAAMmjG,EAAM/hG,KAAK,KAAI,KAAKtD,GAAM6qC,GACpD,CAwIkCiwI,CAAc76G,EAAM7/D,EAAMyqC,GACnDsvI,GAAel6G,EAAM7/D,EAAMyqC,EACpC,CCvmBO,MAEMkwI,GAAe17J,GAAQA,EAAIzc,QAAQ,WAAW,CAAC3H,EAAG84D,IAAQA,EAAI4kB,gBAE9DqiG,GAAiB37J,GAAQA,EAAIzc,QAAQ,YAAY,CAAC3H,EAAG84D,IAAQA,EAAI4kB,gBAEjEsiG,GAAsBnlJ,GAAWA,EAASA,EAAOlzB,QAAQ,IAAI9D,OAAO,IAAK,KAAM,KAAO,GAEtFo8K,GAAwBA,CAAC77J,EAAK87J,KACzC,MAAMr6J,EAAM,CAAC,EAEb,GAAIzB,GAAe,KAARA,EAAY,CACrB,MAAM+7J,EAAUD,GAAsB,WAEtC97J,EACGzc,QAAQ,UAAW,IACnBzB,MAAMi6K,GACNh6K,SAAQguE,IACP,MAAOj2E,EAAKuH,GAAS0uE,EAAKjuE,MAAM,SAChC2f,EAAI3nB,GAAOuH,CAAK,GAEtB,CAEA,OAAOogB,CAAG,EAKCu6J,GAAoBA,CAACC,EAAaC,KAC7C,MAAMhd,EAAQ,CAAC,EAaf,OAZA+c,EAAYl6K,SAAQnF,IAClB,MAAMu/K,EAAa,GAEbrtJ,EADkBusJ,GAAaz+K,EAAGu/K,GACTh6I,KAAK+5I,GAEhCC,GAAcA,EAAWviL,QAAUk1B,GAAUA,EAAOl1B,QACtDuiL,EAAWp6K,SAAQ,CAACvD,EAAG9E,KACrBwlK,EAAM1gK,EAAEqN,MAAQijB,EAAOp1B,EAAI,EAAE,GAEjC,IAGKwlK,CAAK,EAaDkd,GAAoBA,CAACC,EAAQv1F,KACxC,IACE,OAAOu1F,GAAUv1F,EAAS,IAAIw1F,KAAKC,aAAaz1F,GAAQ7hD,OAAOo3I,GAAUA,CAC3E,CAAE,MAAO91K,IAEP,OADA5C,GAAO4C,MAAM,6DAA+DA,IACrE81K,GAAUv1F,EAAS,IAAIw1F,KAAKC,aAAa,SAASt3I,OAAOo3I,GAAUA,CAC5E,GAGWG,GAAqBA,CAACvsF,EAAMnJ,KACvC,IAAKmJ,EACH,OAAOA,EAET,MAAMwsF,EAAU,IAAI/8K,KAAKuwF,GACnBzkD,EAAU,CAAEwkD,MAAO,OAAQ+I,IAAK,UAAWvJ,KAAM,WACvD,IACE,OAAOS,EAAO,IAAIqsF,KAAKI,eAAe51F,EAAQt7C,GAASvG,OAAOw3I,GAAWxsF,CAC3E,CACA,MAAO1pF,IAEL,OADA5C,GAAO4C,MAAM,2DAA6DA,IACnE,IAAI+1K,KAAKI,eAAe,QAASlxI,GAASvG,OAAOw3I,EAC1D,GAOWE,GAAgBA,KAC3B,MAAM,oBAAEC,GJzFe,CACvBA,oBAAqB,CACnBhD,YAAa,iCACbiD,OAAS,iBACTC,WAAY,UACZC,sBAAuB,6BACvBC,aAAc,2BImF+B,CAC7CJ,oBAAqB,CACnBI,aAAc,OACdH,OAAQ,OACRE,sBAAuB,SAI3B,IAAIt9B,EAASm9B,EAAoBI,aACjCv9B,EAASniJ,OAAO4B,SAASigH,SAAW,KAAO7hH,OAAO4B,SAASqgJ,UAAqC,KAAzBjiJ,OAAO4B,SAAS2hK,KAAc,IAAMvjK,OAAO4B,SAAS2hK,KAAO,IAClI,MAAMoc,EAAU,+BAA+B96I,KAAK7kC,OAAO4B,SAASgpK,UASpE,OARA0U,EAAoBK,QAAUA,GAAWA,EAAQrjL,OAAS,EAAIqjL,EAAQ,GAAK,GAJtD,CAAC,SAAU,yBAMnBl7K,SAAQ2I,IACdkyK,EAAoBlyK,GAAG0gC,WAAW,UACrCwxI,EAAoBlyK,GAAM,GAAE+0I,IAASm9B,EAAoBlyK,KAC3D,IAGKkyK,CAAmB,EAGfM,GAAwB5nE,IACnC,MAIM7zF,GAJM6zF,EAAIz8B,cAAch/C,SAAS,gBACnC,0DACA,mCAEYsI,KAAKmzE,GAErB,IAAK7zF,EACH,OAAO,KAGT,MAAM07J,EAAe17J,EAAI,GACnB27J,EAAeD,EAAa55K,QAAQ,gCAAgC,KAE1E,MAAO,CACL65K,aAAsC,IAAxBA,EAAaxjL,OAAe,GAAKwjL,EAC/CD,eACAE,YAAa57J,EAAI,GAAGle,QAAQ,MAAO,IACpC,SC/HI,MAAM+5K,GAAoB,CAC7BH,aAAc,gBACdnxF,MAAO,SACPuxF,QAAS,WACTC,OAAQ,UACRC,QAAS,WACTC,UAAW,aACXC,SAAU,YACVC,WAAY,cACZC,aAAc,gBACdC,wBAAyB,2BACzBC,iBAAkB,qBAGf,MAAMC,IAuFZC,GAvFYD,GAAAA,GACFE,YAAc,CACjBC,kBAAmB,OACnBlzK,YAAa,QAHR+yK,GAMFI,kBAAoB,CACvB,CAACH,GAAKC,YAAYC,oBAAoB,EACtC,CAACF,GAAKC,YAAYjzK,cAAc,GAR3B+yK,GAWFK,oCAAsC,CACzCf,GAAkBtxF,MAClBsxF,GAAkBH,aAClBG,GAAkBI,UAClBJ,GAAkBG,QAClBH,GAAkBC,QAClBD,GAAkBE,OAClBF,GAAkBQ,wBAClBR,GAAkBS,kBAnBbC,GAsBFM,8BAAgC,CACnChB,GAAkBK,SAClBL,GAAkBM,WAClBN,GAAkBO,cAzBbG,GA4BFO,gBAAmBzkL,IAEtB,GAD6BA,KAAgF,IAAxEmkL,GAAKI,oCAAoC1zI,WAAU9pC,GAAK/G,IAAQ+G,IACjG29K,CAAoB1kL,IAAQmkL,GAAKG,kBAAkBH,GAAKC,YAAYC,mBACpE,OAAO,EAIX,SADuBrkL,KAA0E,IAAlEmkL,GAAKK,8BAA8B3zI,WAAU9pC,GAAK/G,IAAQ+G,IAC/E49K,CAAc3kL,KAAQmkL,GAAKG,kBAAkBH,GAAKC,YAAYjzK,aAAa,EAnChF+yK,GAyCFU,WAAa,CAAC5kL,EAAKuH,EAAOwjG,EAAMjkC,KACnC,GAAI9mE,IAAQwjL,GAAkBtxF,MAE1B,YADA1uF,OAAOqhL,eAAeC,QAAQ9kL,EAAKuH,GAGvC,IAAIw9K,EAAU,GACd,GAAIh6E,EAAM,CACN,MAAM5U,EAAO,IAAIvwF,KACjBuwF,EAAKkW,QAAQlW,EAAKxvF,UAAoB,GAAPokG,EAAY,GAAK,GAAK,KACrDg6E,EAAW,aAAY5uF,EAAK6uF,eAChC,CAEA,IAAIC,EAAW,GACkB,WAA7BzhL,OAAO4B,SAASigH,UAAyB7hH,OAAO4B,WAAa5B,OAAOiqB,OAAOroB,WAC3E6/K,EAAW,2BAGf5/K,SAAS6/K,OAAU,GAAEllL,KAAOuH,GAAS,KAAKw9K,WAAiBj+G,GAAQ,MAAMm+G,GAAU,EA1D9Ef,GA6DFiB,UAAaC,IAChB,MAAM,IAAEplL,EAAG,MAAEuH,EAAK,KAAEwjG,EAAI,KAAEjkC,GAASs+G,EAC/BjB,GAAKM,gBAAgBzkL,IACrBmkL,GAAKS,WAAW5kL,EAAKuH,EAAOwjG,EAAMjkC,EACtC,EAjEKo9G,GAoEFmB,UAAarlL,GACZA,IAAQwjL,GAAkBtxF,MACnB1uF,OAAOqhL,eAAe/8K,QAAQ9H,GAElC+hL,GAAsB18K,SAAS6/K,OAAQ,WAAWllL,GAxEpDkkL,GA2EFoB,aAAgBtlL,IACnB,GAAIA,IAAQwjL,GAAkBtxF,MAE1B,YADA1uF,OAAOqhL,eAAeU,WAAWvlL,IAIhB,IADDR,OAAOyT,OAAOuwK,IAAmB3yI,WAAU20I,GAAcA,IAAexlL,KAExF8J,QAAQwC,IAAI,oEAGhBjH,SAAS6/K,OAAU,GAAEllL,kDAAoD,EAI1E,MAAMylL,GAAwB,CACjC,CACI1zK,KAAMyxK,GAAkBtxF,MACxBwzF,WAAY,CAAE3wF,MAAO,gCACrB04D,YAAa,0BAEjB,CACI17I,KAAMyxK,GAAkBK,SACxB6B,WAAY,CAAEnD,OAAQ,KAAMxtF,MAAO,WACnC04D,YAAa,8BAEjB,CACI17I,KAAMyxK,GAAkBC,QACxBiC,WAAY,CAAE3wF,MAAO,gCACrB04D,YAAa,6BAEjB,CACI17I,KAAMyxK,GAAkBM,WACxB4B,WAAY,CAAEnD,OAAQ,KAAMxtF,MAAO,WACnC04D,YAAa,8BAEjB,CACI17I,KAAMyxK,GAAkBO,aACxB2B,WAAY,CAAEnD,OAAQ,KAAMxtF,MAAO,WACnC04D,YAAa,8BAEjB,CACI17I,KAAMyxK,GAAkBE,OACxBgC,WAAY,CAAEnD,OAAQ,KAAMxtF,MAAO,WACnC04D,YAAa,4BAEjB,CACI17I,KAAMyxK,GAAkBG,QACxB+B,WAAY,CAAE3wF,MAAO,gCACrB04D,YAAa,gCAEjB,CACI17I,KAAMyxK,GAAkBI,UACxB8B,WAAY,CAAE3wF,MAAO,gCACrB04D,YAAa,gCAEjB,CACI17I,KAAMyxK,GAAkBH,aACxBqC,WAAY,CAAE3wF,MAAO,gCACrB04D,YAAa,kCAEjB,CACI17I,KAAMyxK,GAAkBQ,wBACxB0B,WAAY,CAAE3wF,MAAO,gCACrB04D,YAAa,6CAEjB,CACI17I,KAAMyxK,GAAkBS,iBACxByB,WAAY,CAAE3wF,MAAO,gCACrB04D,YAAa,uCAIRk4B,GAAyB,CAClC,CAAE5zK,KAAM,YAAa2zK,WAAY,CAAE3wF,MAAO,gCAAkC04D,YAAa,gCACzF,CACI17I,KAAM,mBACN2zK,WAAY,CAAEnD,OAAQ,KAAMxtF,MAAO,WACnC04D,YAAa,gCAEjB,CACI17I,KAAM,YACN2zK,WAAY,CAAEnD,OAAQ,KAAMxtF,MAAO,WACnC04D,YAAa,8BAEjB,CACI17I,KAAM,aACN2zK,WAAY,CAAEnD,OAAQ,KAAMxtF,MAAO,WACnC04D,YAAa,8BAEjB,CACI17I,KAAM,MACN2zK,WAAY,CAAE3wF,MAAO,gCACrB04D,YAAa,6BAEjB,CACI17I,KAAM,0BACN2zK,WAAY,CAAE3wF,MAAO,gCACrB04D,YAAa,6CAEjB,CACI17I,KAAM,oBACN2zK,WAAY,CAAE3wF,MAAO,gCACrB04D,YAAa,uCAEjB,CACI17I,KAAM,oBACN2zK,WAAY,CAAE3wF,MAAO,gCACrB04D,YAAa,+BAEjB,CACI17I,KAAM,kBACN2zK,WAAY,CAAE3wF,MAAO,gCACrB04D,YAAa,mCAEjB,CACI17I,KAAM,6BACN2zK,WAAY,CAAE3wF,MAAO,gCACrB04D,YAAa,gCAEjB,CACI17I,KAAM,6BACN2zK,WAAY,CAAE3wF,MAAO,gCACrB04D,YAAa,+BAIRm4B,GAAsB,WAG5B,IAH6BC,EAAWhmL,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,CAC9C8iF,QAASgjG,GACTG,WAAYL,IAEZ,MAAM,QAAE9iG,EAAO,WAAEmjG,GAAeD,EAChC,OAAOljG,EACDmjG,EACI,IAAInjG,KAAYmjG,GAChB,IAAInjG,GACR,EACV,ECzNaojG,GAA6BA,KACxCC,GAAkB,iBAAgB,EA+DvBA,GAAoBC,IAC/B,MAAM,WAACjD,GAAckD,GAAahgL,MAGlC,OAFA1C,OAAO4B,SAAS0iJ,KAAQ,GAAEk7B,KAAciD,IAEjC,CAAC,CAAC,EAGEE,GAAqBC,IAChC5iL,OAAO4B,SAAS0iJ,KAAOs+B,CAAM,EAIlBC,GAAat5K,MAAOu5K,EAAkBC,KACjD,MAAM/qE,EAAMh4G,OAASA,OAAO4B,SAAS0iJ,KAAO,GACtCg7B,EAAsBD,KACtB2D,OA3EsBz5K,OAAO+1K,EAAqBtnE,KACxD,CAAC,gBAAiB,eAAgB,UAAW,cAAcvzG,SAAQjI,GAAOkmL,GAAaO,UAAUzmL,KAEjG,MAAMqP,EAAc62K,GAAahgL,IAAI,WAAag+K,GAAemB,UAAU7B,GAAkBE,QAEvF8C,QAAsBz6K,GAAAA,KAAKoO,KAAM,GAAE2oK,EAAoBC,6BAA8B,CACzF2D,QAASlrE,EACTmrE,OAAQt3K,GACP,CAACzC,MAAM,IAMV,OAJK45K,EAAcrhE,KACjBghE,GAAkBK,EAAcrhE,KAG5BqhE,EAActnK,OAAUsnK,EAActnK,MAAMA,OAAWsnK,EAAcrhE,IAMpEqhE,GAJLT,KACO,KAGW,EAuDQa,CAAe9D,EAAqBtnE,GAC5DgrE,IAxB0BA,KAE9BN,GAAa9/K,IAAI,oBAAgB3D,GACjCyjL,GAAa9/K,IAAI,gBAAiBogL,EAActnK,MAAMA,OACtDgnK,GAAa9/K,IAAI,UAAWogL,EAAcK,SAC1CX,GAAa9/K,IAAI,SAAUogL,EAAcG,OAAO,EAoB9CG,CAAgBN,GAtCMO,EAACT,EAAkBC,EAA2BC,KACtEtC,GAAeiB,UAAU,CAACnlL,IAAKwjL,GAAkBtxF,MAAO3qF,MAAO2+K,GAAahgL,IAAI,mBAChFg+K,GAAeiB,UAAU,CAACnlL,IAAKwjL,GAAkBC,QAASl8K,MAAO2+K,GAAahgL,IAAI,aAClFg+K,GAAeiB,UAAU,CAACnlL,IAAKwjL,GAAkBH,aAAc97K,MAAO++K,IACtEpC,GAAeiB,UAAU,CAACnlL,IAAKwjL,GAAkBQ,wBAAyBz8K,MAAOg/K,IAEjFrC,GAAeiB,UAAU,CACvBnlL,IAAKwjL,GAAkBE,OACvBn8K,MAAOi/K,EAAcG,OACrB57E,KAAMi8E,IACN,EA6BAD,CAAWT,EAAkBC,EAA2BC,GAGxD36K,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,mBAAoBiH,KAAKxE,MAAM09K,IA1D5CC,KAC1B,IAAIS,EAAYT,EAAcrhE,IAE9B,OAAI8hE,IACFA,GAAaA,EAAUlnJ,SAAS,KAAO,mBAAqB,mBAExDknJ,EAAUloG,cAAch/C,SAAS,iBACnCknJ,GAAa,oBAGfd,GAAkBc,IACX,EAEE,EA+CLC,CAAYV,IACdhjL,OAAO4B,SAAS+hL,SAEpB,ECnFWH,GAA0B,GAY1BI,GAAer6K,MAAOosK,EAAK39D,KACtC,MAAMsnE,EAAsBD,KACtBl7J,EAAMy7J,GAAqB5nE,GAEjC,IAAK7zF,EAAK,OAEV,GAAI6zF,EAAI5wG,QAAQ,uBAAyB,EACvC,OAGF,IAAIy8K,EAAuB,GAC3B,MAAQhE,aAAciD,EAAkB/C,YAAa+D,GAAuB3/J,EACtE4/J,EAAoBrD,GAAemB,UAAU7B,GAAkBK,UACrE,GAAI0D,GAAqBA,IAAsBD,EAE7C,OADAnB,GHyFmCqB,EAAChsE,EAAKisE,KAC3C,MAAM,aAAEpE,EAAY,YAAEE,GAAgBH,GAAqB5nE,GAE3D,OADA1xG,QAAQwC,IAAIkvG,EAAI,MAAMisE,EAAe,KAAKjsE,EAAI/xG,QAAS,GAAE45K,IAAeE,IAAgB,GAAEF,KAAgBoE,OACnGjsE,EAAI/xG,QAAS,GAAE45K,KAAgBE,KAAiB,GAAEF,KAAgBoE,KAAkB,EG5FvED,CAAwBhsE,EAAK+rE,KACxC,EAGT,GAAIrB,GAAahgL,IAAI,YAAa,CAChC,MAAMwhL,QAAyB77K,GAAAA,eAAeiX,IAAI3Q,MAAM8M,gBAAgBinK,GAAahgL,IAAI,aACzFggL,GAAa9/K,IAAI,gBAAiBshL,EAAiBxoK,OACnDmoK,EAAuBK,EAAiBxoK,MACxC,MAAMq8J,EAAa,IAAIp2D,IAAI3hH,OAAO4B,SAAS0iJ,MAC3CyzB,EAAWwC,aAAazkK,OAAO,YAC/B9V,OAAOyrK,QAAQM,aAAa/rK,OAAOyrK,QAAQ7lK,MAAO,GAAImyK,EAAWzzB,KACnE,CAEA,MAAM6/B,EAAmBzB,GAAahgL,IAAI,iBAAmBg+K,GAAemB,UAAU7B,GAAkBH,cACxG,IAAIkD,EAA4BrC,GAAemB,UAAU7B,GAAkBQ,0BAA4B,QAEvG,MAAM4D,EAAYpkL,OAAO4B,SAAS+Y,OAAO9P,UAAU,GAEnD,GAAIu5K,EAAW,CACb,MAAM52K,EAAI+wK,GAAsB6F,GAE5B52K,EAAE62K,gBACJR,EAAuBr2K,EAAE62K,eAEvB72K,EAAE82K,aACJvB,EAA4Bv1K,EAAE82K,WAAW/oG,cAE7C,CAEA,MAAMgpG,IAAyBvsE,IAAQ6rE,SACE5kL,IAAtCyjL,GAAahgL,IAAI,mBAAmCggL,GAAahgL,IAAI,kBACnEyhL,GAAoBrB,IAAqBqB,GACxCxxF,EAAO,IAAIvwF,KAGjB,GAFAuwF,EAAKkW,QAAQlW,EAAKxvF,UAAuC,GAA1BqgL,GAA+B,GAAK,GAAK,KAEpEe,EAAsB,CACxB,CAAC,gBAAiB,eAAgB,UAAW,cAAc9/K,SAAQjI,GAAOkmL,GAAaO,UAAUzmL,KAEjG,MAAMqP,EAAc62K,GAAahgL,IAAI,WAAag+K,GAAemB,UAAU7B,GAAkBE,QAE7F,IAAI8C,QAAsBz6K,GAAAA,KAAKoO,KAAM,GAAE2oK,EAAoBC,6BAA8B,CAAE2D,QAASlrE,EAAKmrE,OAAQt3K,GAAe,CAAEzC,MAAM,IAExI,KAAM45K,EAActnK,QAAUsnK,EAActnK,MAAMA,SAAWsnK,EAAcrhE,IAGzE,OADA4gE,MACO,EAITG,GAAa9/K,IAAI,oBAAgB3D,GACjCyjL,GAAa9/K,IAAI,gBAAiBogL,EAActnK,MAAMA,OACtDgnK,GAAa9/K,IAAI,UAAWogL,EAAcK,SAC1CX,GAAa9/K,IAAI,SAAUogL,EAAcG,QAEzCzC,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBtxF,MAAO3qF,MAAO2+K,GAAahgL,IAAI,mBACjFg+K,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBC,QAASl8K,MAAO2+K,GAAahgL,IAAI,aACnFg+K,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBH,aAAc97K,MAAO++K,IACvEpC,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBQ,wBAAyBz8K,MAAOg/K,IAElFrC,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBE,OAAQn8K,MAAOi/K,EAAcG,OAAQ57E,KAAMi8E,KAG7Fn7K,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,mBAAoBiH,KAAKxE,MAAM09K,IAEpE,IAAIU,EAAYT,EAAcrhE,IAE9B,GAAI8hE,EASF,OARAA,GAAaA,EAAUlnJ,SAAS,KAAO,mBAAqB,mBAExDknJ,EAAUloG,cAAch/C,SAAS,iBACnCl0B,GAAAA,eAAe+W,eAAexW,QAC9B66K,GAAa,oBAGfd,GAAkBc,IACX,CAEX,MAEE/C,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBtxF,MAAO3qF,MAAO2+K,GAAahgL,IAAI,mBACjFg+K,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBC,QAASl8K,MAAO2+K,GAAahgL,IAAI,aACnFg+K,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBH,aAAc97K,MAAO++K,IACvEpC,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBQ,wBAAyBz8K,MAAOg/K,IAElFrC,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBE,OAAQn8K,MAAO2+K,GAAahgL,IAAI,UAAW6kG,KAAMi8E,KAEnGn7K,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,mBAAoBiH,KAAKxE,MAAM09K,IActE,OAXAL,GAAa9/K,IAAI,eAAgBkgL,SAE3Bz6K,GAAAA,eAAegX,KAAKigK,EAAqB,IAC1CoD,GAAahgL,MAChB8hL,eAAgBA,IDjCYj7K,WAC9B,MAAM,cAACk7K,EAAa,gBAAEC,EAAe,QAAEzE,EAAO,aAAE0E,EAAY,UAAEvE,GAAasC,GAAahgL,MAClFkiL,EAAYv8K,GAAAA,gBAAkBA,GAAAA,eAAezC,MAAMlD,MAAMkJ,cAAgBvD,GAAAA,eAAezC,MAAMlD,MAAMkJ,aAAai5K,UAGvH,GAFAnE,GAAeoB,aAAa9B,GAAkBtxF,OAE5B,IAAdk2F,GAAmBxE,EACrBuC,GAAkBloJ,mBAAmB2lJ,SAChC,GAAKwE,GAA2B,IAAdA,EASvBpC,GAAkB,6BAA4BiC,eAA2BxE,aAAmByE,oDAAkEC,SATtH,CACxC,MAAMxgK,EAAMy7J,GAAqB5/K,OAAO4B,SAAS0iJ,MACjD,IAAKngI,EAAK,OAEV,MAAO07J,aAAciD,GAAoB3+J,EACzC,IAAI4+J,EAA4BrC,GAAemB,UAAU7B,GAAkBQ,0BAA4B,cAEjGqC,GAAWC,EAAkBC,EACrC,CAEA,ECgBwB+B,GACtBC,oBAAqBA,KDlIvBvC,GAAiB,+BCkIsC,EACrDwC,eAAgBA,IAAMzC,OACrBlyK,MAAK,KCzIwB9G,WAChC,MAAQ8U,WAAYtQ,SAAyB1F,GAAAA,eAAeiX,IAAIzR,WAAW0I,gBAAgB,GACrF0uK,EAAuBl3K,EAAeT,KAAKye,GAASA,EAAKje,WAI/D,GAHAzF,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,aAAcqiL,GACnD58K,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,iBAAkBmL,GAEnD1F,GAAAA,eAAezC,MAAMlD,MAAMkJ,aAAc,CAC3C,MAAQqQ,qBAAsBipK,GAAyB78K,GAAAA,eAAezC,MAAMlD,MAAMkJ,aAElF,GAAIs5K,EAAsB,CACxB,MAAMt3K,QAA0BvF,GAAAA,eAAeiX,IAAI9I,OAAOC,uBAC1DpO,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,oBAAqBgL,EAC5D,CACF,GD6HEu3K,EAAoB,KAGf,CAAI,EAGA39C,GAAcj+H,UACzB,MAAMosK,EAAMyP,GHjGeC,MAC3B,MAAMzG,EAAS5+K,OAAO4B,SAAS0iJ,KAAKr+I,QAAQjG,OAAO4B,SAASw/G,OAAQ,IAC9DwgD,EAAQ8c,GAAkBhS,GAAQkS,GAExC,MAAO,CACLhd,MAAO5lK,OAAOC,OAAOsiL,GAAsBv+K,OAAO4B,SAAS+Y,QAASinJ,GACpEgd,OAAQA,EACT,EG0FuByG,GAExB3C,GAAa4C,kBAAkB3P,GAE/B,MAAM4P,EAAUvlL,OAAO4B,SAAS0iJ,KAIhC,UAH2Bs/B,GAAajO,EAAK4P,GAGxB,MAAO,CAAC,EAG7B,MAAM,KAAEC,GAAS9C,GAAahgL,MACxB+iL,EAA2BrH,GAAYoH,GAGvCE,OA/IoBn8K,OAAOk8K,EAA0B9P,KAC3D,MAAMgQ,EAAa3pL,OAAOyH,KAAKmiL,IAAOz/K,QAAOjF,GAAKA,EAAEq6E,gBAAkBkqG,EAAyBlqG,gBAE/F,OAAIoqG,EAAWrpL,OAAS,GAAKspL,GAAMD,GAAYE,sBAChCD,GAAMD,GAAYE,gBAAgB,CAACjkB,MAAO+T,IAGlDiQ,GAAME,KAAKD,sBAAwBD,GAAME,KAAKD,gBAAgB,CAACjkB,MAAO+T,IAAQ,CAAC,CAAC,EAwIxDoQ,CAAoBN,EAA0B9P,GACzE+P,GACFr9K,GAAAA,eAAezC,MAAMmG,YAAY+S,QAAQ4mK,GAG3C,MAAMM,EAAkB,CAAEj6K,YAAa,IAAK1D,GAAAA,eAAezC,MAAMlD,MAAMqJ,eAAgB25K,IAGvF,MAAO,CAAE9/K,MAAO,IAAKyC,GAAAA,eAAezC,MAAMlD,SAAUsjL,GAAmBv9K,QAASktK,EAAI/T,MAAO,GEjKvF,oBAAE0d,ITTiB,CACvBA,oBAAqB,CACnBhD,YAAa,iCACbiD,OAAS,iBACTC,WAAY,UACZC,sBAAuB,6BACvBC,aAAc,0BS2HlB,MACA,GADqB,IAtHrB,MACEl3K,WAAAA,GACE3L,KAAK4L,QAAU,IAAK62K,GAA0BkG,KAAM,OACtD,CAEA9iL,GAAAA,CAAIlG,GACF,OAAOA,EAAMK,KAAK4L,QAAQjM,GAAOK,KAAK4L,OACxC,CAEA7F,GAAAA,CAAIpG,EAAKuH,GACPlH,KAAK4L,QAAQjM,GAAOuH,CACtB,CAEAk/K,SAAAA,CAAUzmL,UACDK,KAAK4L,QAAQjM,EACtB,CAEA8lF,YAAAA,CAAanpD,GACX,OAAOA,EAAOlzB,QAAQ,sBAAuB,OAC/C,CAEAq/K,iBAAAA,GACE,MAAM1G,EAAS5+K,OAAO4B,SAASgpK,SAE/B/tK,KAAK+F,IAAI,OAAQ,QACjB/F,KAAKomL,UAAU,MAEfpmL,KAAK4L,QAAU,IAAK5L,KAAK4L,WAAYi2K,GAAkBhS,GAAQkS,GACjE,CAKAv/J,IAAAA,CAAKmS,GACCA,GACEA,EAAOmzJ,eACT9nL,KAAK4L,QAAQk8K,aAAenzJ,EAAOmzJ,cAIvC,MAAMP,EAAYpkL,OAAO4B,SAAS+Y,OAAO9P,UAAU,GAEnD,GAAIu5K,EAAW,CACb,MAAM52K,EAAI+wK,GAAsB6F,GAE5B52K,EAAE62K,gBACJxnL,KAAK4L,QAAQg8K,cAAgBj3K,EAAE62K,cAC/B3D,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBtxF,MAAO3qF,MAAOlH,KAAK4L,QAAQg8K,iBAG3Ej3K,EAAEy4K,cACJppL,KAAK4L,QAAQk8K,aAAen3K,EAAEy4K,aAG5Bz4K,EAAE04K,YACJrpL,KAAK4L,QAAQw3K,QAAUzyK,EAAE04K,UACzBxF,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBC,QAASl8K,MAAOlH,KAAK4L,QAAQw3K,WAG7EzyK,EAAE24K,qBACJtpL,KAAK4L,QAAQ09K,mBAAqB34K,EAAE24K,oBAGlC34K,EAAE21K,SACJtmL,KAAK4L,QAAQy3K,OAAS1yK,EAAE21K,OACxBzC,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBE,OAAQn8K,MAAOlH,KAAK4L,QAAQy3K,OAAQ34E,KAAMi8E,MAG1Fh2K,EAAE82K,aACJj8K,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,mBAAoD,SAA/B4K,EAAE82K,WAAW/oG,eACvEmlG,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBQ,wBAAyBz8K,MAAOyJ,EAAE82K,WAAW/oG,iBAG7F/tE,EAAE44K,aACJ/9K,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,aAAe4K,EAAE44K,YACtDvpL,KAAK4L,QAAQ63K,WAAa9yK,EAAE44K,YAG1B54K,EAAE2yK,UACJ93K,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,UAAY4K,EAAE2yK,SACnDtjL,KAAK4L,QAAQ03K,QAAU3yK,EAAE2yK,QACzBO,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBG,QAASp8K,MAAOyJ,EAAE2yK,WAGlE3yK,EAAE4yK,YACJ/3K,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,YAAc4K,EAAE4yK,WACrDvjL,KAAK4L,QAAQ23K,UAAY5yK,EAAE4yK,UAC3BM,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBI,UAAWr8K,MAAOyJ,EAAE4yK,aAEpE5yK,EAAE64K,WACJh+K,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,WAAY4K,EAAE64K,UACnDxpL,KAAK4L,QAAQ69K,SAAW94K,EAAE64K,SAE9B,CAEAxpL,KAAK4L,QAAQk8K,aAAiBjE,GAAemB,UAAU7B,GAAkBK,WAAaxjL,KAAK4L,QAAQk8K,aACnG9nL,KAAK4L,QAAQg4K,iBAAqBC,GAAemB,UAAU7B,GAAkBS,mBAAqB5jL,KAAK4L,QAAQg4K,iBAC/G5jL,KAAK4L,QAAQg8K,cAAkB/D,GAAemB,UAAU7B,GAAkBtxF,QAAU7xF,KAAK4L,QAAQg8K,cACjG5nL,KAAK4L,QAAQw3K,QAAYS,GAAemB,UAAU7B,GAAkBC,UAAYpjL,KAAK4L,QAAQw3K,QAC7FpjL,KAAK4L,QAAQ09K,mBAAuBzF,GAAemB,UAAU7B,GAAkBM,aAAezjL,KAAK4L,QAAQ09K,mBAC3GtpL,KAAK4L,QAAQy3K,OAAWQ,GAAemB,UAAU7B,GAAkBE,SAAWrjL,KAAK4L,QAAQy3K,OAE3FrjL,KAAK4L,QAAQ29K,WAAe1F,GAAemB,UAAU7B,GAAkBO,eAAiB1jL,KAAK4L,QAAQ29K,WACrGvpL,KAAK4L,QAAQ03K,QAAYO,GAAemB,UAAU7B,GAAkBG,UAAYtjL,KAAK4L,QAAQ03K,QAC7FtjL,KAAK4L,QAAQ23K,UAAcM,GAAemB,UAAU7B,GAAkBI,YAAcvjL,KAAK4L,QAAQ23K,UAE7F/3K,GAAAA,eAAezC,MAAMlD,OAAS2F,GAAAA,eAAezC,MAAMlD,MAAMmJ,cAC3DhP,KAAK4L,QAAQy3K,OAAS73K,GAAAA,eAAezC,MAAMlD,MAAMmJ,YAAYsC,GAC7DuyK,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBE,OAAQn8K,MAAOlH,KAAK4L,QAAQy3K,OAAQ34E,KAAMi8E,MAG9F,MAAM5E,EAAS5+K,OAAO4B,SAASgpK,SAG/B/tK,KAAK4L,QAAU,IAAI5L,KAAK4L,WAAYi2K,GAAkBhS,GAAQkS,GAChE,mCCpHF,MAAM1iC,GAAOh7H,oBAAQ,MAEfqlK,GAAkBhjL,GAEfA,EAAE0C,QADQ,mBACU,SAEvBugL,GAAwB9mL,GACvBA,EAIE1D,OACJmF,QAAQzB,GACR4N,KAAIvQ,IAAA,IAAEqQ,EAAG7J,GAAExG,EAAA,MAAM,CAAEP,IAAK4Q,EAAGrJ,MAAOwiL,GAAehjL,GAAI,IACrD+F,QAAO,CAAChK,EAAGlD,KAAC,IAAWkD,EAAQ,CAAClD,EAAEI,KAAMJ,EAAE2H,SAAY,CAAC,GANjD,GASL0iL,GAAgB,CACpB,QAASvqC,GAAKj4I,OAAO,CAAEwL,OAAQ+2K,SAC/B,QAAStqC,GAAKj4I,OAAO,CAAEwL,OAAQ+2K,SAC/B,QAAStqC,GAAKj4I,OAAO,CAAEwL,OAAQ+2K,SAC/B,QAAStqC,GAAKj4I,OAAO,CAAEwL,OAAQ+2K,SAC/B,QAAStqC,GAAKj4I,OAAO,CAAEwL,OAAQ+2K,SAC/B,QAAStqC,GAAKj4I,OAAO,CAAEwL,OAAQ+2K,SAC/B,QAAStqC,GAAKj4I,OAAO,CAAEwL,OAAQ+2K,SAC/B,QAAStqC,GAAKj4I,OAAO,CAAEwL,OAAQ+2K,UAG3BE,GAAkB,oBACXhnL,GAAI,WACf,MAAMilL,EAAejC,GAAahgL,IAAI,gBAEtC,IAAKiiL,EACH,MAAO,GAGT,MAAMgC,EAAqB3mL,OAAO4mL,oBAAsB,CAAC,EAET,oBAArCD,EAAmBhC,KAC5BgC,EAAmBhC,GAAgBzoC,GAAKj4I,OAAO,CAAEwL,OAAQ+2K,GAAqBG,EAAmBhC,OAGnG,MAAM79K,EAAO,IAAIzK,WACbyK,EAAKxK,OAAS,GAAwB,kBAAZwK,EAAK,KACjCA,EAAK,GAAKy/K,GAAez/K,EAAK,KAEhC,MAAM+/K,EAAoBF,EAAmBhC,GAAgBgC,EAAmBhC,MAAiB79K,GAAQ4/K,GACnGI,EAAqBL,GAAc9B,GAAgB8B,GAAc9B,MAAiB79K,GAAQ4/K,GAEhG,OAAII,IAAuBzqL,UAAU,IAAMyqL,IAAuBJ,GACzDI,EAGFD,IAAsBxqL,UAAU,GAAKqqL,GAAkBG,CAChE,EAEaE,GAAK,WAChB,OAAOrnL,MAAKrD,WAAWmI,MAAM,MAAM8I,KAAI,CAACgW,EAAM9mB,KAAQwqL,EAAAA,GAAAA,MAAA,QAAA/qE,SAAA,CAAiB34F,GAAK2jK,EAAAA,GAAAA,KAAA,WAAXzqL,IACnE,ECvDA,GAXoBO,IAAoB,IAAnB,UAAE6B,GAAW7B,EAChC,OACEiqL,EAAAA,GAAAA,MAAA,OAAKpoL,UAAY,gBAAwB,OAATA,QAAS,IAATA,EAAAA,EAAa,KAAKq9G,SAAA,EAChDgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,iBACfqoL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,iBACfqoL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,iBACfqoL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,kBACX,ECcV,GAZe7B,IAAwD,IAAvD,KAAEuI,EAAI,QAAEowI,EAAO,UAAE92I,EAAS,UAAEsoL,EAAS,SAAE7rC,GAAUt+I,EAC/D,OACEiqL,EAAAA,GAAAA,MAAA,OAAK3rC,SAAUA,EACbz8I,UAAY,GAAEA,qBACd82I,QAAUj2I,IAAO47I,GAAY3F,EAAQj2I,GAAGw8G,SAAA,EAExCgrE,EAAAA,GAAAA,KAAA,QAAMroL,UAAY,IAAEsoL,EAAY,cAAgB,IAAKjrE,SAAE32G,IACtD4hL,IAAaD,EAAAA,GAAAA,KAACE,GAAW,MACtB,ECjBV,MAAMC,WAAqB9lD,EAAAA,UACzB94H,WAAAA,CAAarL,GACXukB,MAAMvkB,GAENN,KAAKwqL,YAAaC,EAAAA,EAAAA,aAClBzqL,KAAK0qL,mBAAqB1qL,KAAK0qL,mBAAmBrrL,KAAKW,KACzD,CAEA8tI,iBAAAA,GACE9oI,SAASgO,iBAAiB,YAAahT,KAAK0qL,mBAC9C,CAEAt8C,oBAAAA,GACEppI,SAASy5H,oBAAoB,YAAaz+H,KAAK0qL,mBACjD,CAEAA,kBAAAA,CAAoB1iE,GACdhoH,KAAKwqL,aAAexqL,KAAKwqL,WAAWhhI,QAAQ8E,SAAS05D,EAAM1oH,SAC7DU,KAAKM,MAAMqqL,QAAQ3iE,EAEvB,CAEAv+F,MAAAA,GACE,OAAO2gK,EAAAA,GAAAA,KAAA,OAAKroL,UAAW/B,KAAKM,MAAMyB,UAAW5B,IAAKH,KAAKwqL,WAAWprE,SAAEp/G,KAAKM,MAAM8+G,UACjF,EAGF,gBCOIwrE,uHApCJ,SAAS13C,GAAQxjH,GAAkC,OAAOwjH,GAAU,mBAAqB3vI,QAAU,iBAAmBA,OAAOW,SAAW,SAAUwrB,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAO,mBAAqBnsB,QAAUmsB,EAAI/jB,cAAgBpI,QAAUmsB,IAAQnsB,OAAO3D,UAAY,gBAAkB8vB,CAAK,EAAGwjH,GAAQxjH,EAAM,CAiBxU,SAASm7J,GAAkBlT,GAChC3yK,SAAS+H,KAAKpL,MAAM2jI,aAAeqyC,EAAU,EAAI,GAAGjvK,OAAOivK,EAAS,MAAQ,IAC9E,CAQO,SAASmT,KACd,IAAIpoD,EAxBC,WACL,IAAIqoD,EAAY/lL,SAASgxH,cAAc,OAEvC+0D,EAAUppL,MAAM6jF,SAAW,WAC3BulG,EAAUppL,MAAMi3H,IAAM,UACtBmyD,EAAUppL,MAAMpB,MAAQ,OACxBwqL,EAAUppL,MAAMnB,OAAS,OACzBuqL,EAAUppL,MAAMurF,SAAW,SAC3BloF,SAAS+H,KAAKy4H,YAAYulD,GAC1B,IAAIroD,EAAiBqoD,EAAU5qD,YAAc4qD,EAAU5tD,YAEvD,OADAn4H,SAAS+H,KAAKmzG,YAAY6qE,GACnBroD,CACT,CAYuBsoD,GAEjBC,EAAejmL,SAAS0pI,iBAAiB,qDAAqD,GAC9Fw8C,EAAcD,EAAe/pK,SAAS+pK,EAAatpL,MAAM2jI,cAAgB,EAAG,IAAM,EAV/EtgI,SAAS+H,KAAKowH,YAAch6H,OAAOgoL,YAYxCN,GAAkBK,EAAcxoD,EAEpC,CAKO,SAAS0oD,KACd,IAAIrpL,EAAYvC,UAAUC,OAAS,QAAsB2C,IAAjB5C,UAAU,GAAmBA,UAAU,GAAK,GAChF6rL,EAAY7rL,UAAUC,OAAS,QAAsB2C,IAAjB5C,UAAU,GAAmBA,UAAU,GAAKorL,GACpF,OAAKS,EACEtpL,EAAU4F,MAAM,KAAK8I,KAAI,SAAUxM,GACxC,OAAOonL,EAAUpnL,IAAMA,CACzB,IAAG6F,KAAK,KAHe/H,CAIzB,CAKO,SAASm8E,GAAKxuD,EAAK47J,GACxB,IAAI/lJ,EAAS,CAAC,EAMd,OALApmC,OAAOyH,KAAK8oB,GAAK9nB,SAAQ,SAAUjI,IACF,IAA3B2rL,EAAS/gL,QAAQ5K,KACnB4lC,EAAO5lC,GAAO+vB,EAAI/vB,GAEtB,IACO4lC,CACT,CAiBA,IAAIgmJ,GAAS,CAAC,EACP,SAASC,GAAS93J,GAClB63J,GAAO73J,KAEa,qBAAZjqB,SACTA,QAAQ2C,MAAMsnB,GAGhB63J,GAAO73J,IAAW,EAEtB,CAcA,IAAIi1G,GAA8E,YAAjD,qBAAXxlI,OAAyB,YAAc+vI,GAAQ/vI,UAAyBA,OAAOwlI,SAAW,WAAa,EACtH,SAAS8iD,GAAWnrL,EAAOi2H,EAAUC,GAC1C,KAAMl2H,EAAMi2H,aAAqBoS,IAC/B,OAAO,IAAIv6H,MAAM,iBAAmBmoH,EAAW,kBAAoBC,EAAgB,oEAEvF,CACO,IAAIk1D,GAAiBj0D,KAAAA,UAAoB,CAACA,KAAAA,OAAkBA,KAAAA,KAAgBg0D,GAAYh0D,KAAAA,MAAgB,CAC7GjuE,QAASiuE,KAAAA,QAEAk0D,GAAcl0D,KAAAA,UAAoB,CAACA,KAAAA,KAAgBA,KAAAA,OAAkBA,KAAAA,MAAgB,CAC9Fr0E,SAAUq0E,KAAAA,OACVhuG,OAAQguG,KAAAA,OACNA,KAAAA,QAAkBA,KAAAA,UAAoB,CAACA,KAAAA,KAAgBA,KAAAA,OAAkBA,KAAAA,MAAgB,CAC3Fr0E,SAAUq0E,KAAAA,OACVhuG,OAAQguG,KAAAA,YAKCm0D,GACH,IADGA,GAKF,IALEA,GAOC,IAQDC,GAAyB,CAAC,KAAM,eAAgB,gBAAiB,SAAU,QAAS,OAAQ,UAAW,UAAW,aAAc,YAAa,SAAU,YAAa,YACpKC,GACC,WADDA,GAEA,UAFAA,GAGA,UAGAC,GAAW,CACpBC,IAAK,GACL5iE,MAAO,GACP6iE,MAAO,GACPC,IAAK,EACLjkJ,GAAI,GACJkkJ,KAAM,GACNC,KAAM,GACN3jI,IAAK,GACLnlD,EAAG,GACHe,EAAG,IAGMgoL,KAAiC,qBAAXlpL,SAA0BA,OAAO6B,WAAY7B,OAAO6B,SAASgxH,eAO9F,SAAS7yD,GAAOj8D,GACd,OAAa,MAATA,OACe9E,IAAV8E,EAAsB,qBAAuB,gBAE/C/H,OAAOS,UAAU4F,SAAS1F,KAAKoH,EACxC,CACO,SAASsmD,GAAStmD,GACvB,IAAIpF,EAAOoxI,GAAQhsI,GACnB,OAAgB,MAATA,IAA2B,WAATpF,GAA8B,aAATA,EAChD,CA4BO,SAASwqL,GAAgBhtL,GAC9B,GA5CK,SAAuBA,GAC5B,SAAIA,GAA8B,WAApB4zI,GAAQ5zI,KACb,YAAaA,CAGxB,CAuCMitL,CAAcjtL,GAChB,OAAOA,EAAOkqD,QAEhB,GAXK,SAAoBtiD,GACzB,IAAKsmD,GAAStmD,GACZ,OAAO,EAET,IAAImD,EAAM84D,GAAOj8D,GACjB,MAAe,sBAARmD,GAAuC,2BAARA,GAA4C,+BAARA,GAAgD,mBAARA,CACpH,CAKMk8D,CAAWjnE,GACb,OAAOA,IAET,GAAsB,kBAAXA,GAAuB+sL,GAAW,CAC3C,IAAIG,EAAYxnL,SAAS0pI,iBAAiBpvI,GAI1C,GAHKktL,EAAU/sL,SACb+sL,EAAYxnL,SAAS0pI,iBAAiB,IAAIhmI,OAAOpJ,MAE9CktL,EAAU/sL,OACb,MAAM,IAAI2O,MAAM,eAAe1F,OAAOpJ,EAAQ,8DAEhD,OAAOktL,CACT,CACA,OAAOltL,CACT,CACO,SAASmtL,GAAkBC,GAChC,OAAY,OAARA,IAGGjoL,MAAMK,QAAQ4nL,IAAQL,IAAmC,kBAAfK,EAAIjtL,OACvD,CACO,SAASktL,GAAUrtL,EAAQstL,GAChC,IAAIF,EAAMJ,GAAgBhtL,GAC1B,OAAIstL,EACEH,GAAkBC,GACbA,EAEG,OAARA,EACK,GAEF,CAACA,GAEND,GAAkBC,GACbA,EAAI,GAENA,CACT,CA2BO,IAAIG,GAAoB,CAAC,UAAW,aAAc,2CAA4C,yBAA0B,2BAA4B,yBAA0B,SAAU,QAAS,yCAA0C,kBAAmB,kBAAmB,oDC1QxR,SAAS35C,GAAQxjH,GAAkC,OAAOwjH,GAAU,mBAAqB3vI,QAAU,iBAAmBA,OAAOW,SAAW,SAAUwrB,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAO,mBAAqBnsB,QAAUmsB,EAAI/jB,cAAgBpI,QAAUmsB,IAAQnsB,OAAO3D,UAAY,gBAAkB8vB,CAAK,EAAGwjH,GAAQxjH,EAAM,CAC/U,IAAIi8G,GAAY,CAAC,YAAa,YAAa,OAAQ,SAAU,QAAS,UAAW,MAAO,QAAS,YAAa,YAC9G,SAASzsI,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAAS+4H,GAAyB74H,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAAkEC,EAAKJ,EAAnED,EACzF,SAAuCI,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAA2DC,EAAKJ,EAA5DD,EAAS,CAAC,EAAO8vI,EAAajwI,OAAOyH,KAAKlH,GAAqB,IAAKH,EAAI,EAAGA,EAAI6vI,EAAW3vI,OAAQF,IAAOI,EAAMyvI,EAAW7vI,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,CAAQ,CADhN+vI,CAA8B3vI,EAAQyvI,GAAuB,GAAIhwI,OAAO2H,sBAAuB,CAAE,IAAIgmL,EAAmB3tL,OAAO2H,sBAAsBpH,GAAS,IAAKH,EAAI,EAAGA,EAAIutL,EAAiBrtL,OAAQF,IAAOI,EAAMmtL,EAAiBvtL,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,GAAkBR,OAAOS,UAAUmkD,qBAAqBjkD,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,GAAQ,CAAE,OAAOL,CAAQ,CAG3e,SAASu0I,GAAkBv0I,EAAQgB,GAAS,IAAK,IAAIf,EAAI,EAAGA,EAAIe,EAAMb,OAAQF,IAAK,CAAE,IAAI45H,EAAa74H,EAAMf,GAAI45H,EAAWlyH,WAAakyH,EAAWlyH,aAAc,EAAOkyH,EAAW1rH,cAAe,EAAU,UAAW0rH,IAAYA,EAAWzrH,UAAW,GAAMvO,OAAO6H,eAAe1H,EAAQ65H,EAAWx5H,IAAKw5H,EAAa,CAAE,CAG5T,SAASoS,GAAgB/nI,EAAGa,GAA6I,OAAxIknI,GAAkBpsI,OAAOoiH,eAAiBpiH,OAAOoiH,eAAeliH,OAAS,SAAyBmE,EAAGa,GAAsB,OAAjBb,EAAE+/G,UAAYl/G,EAAUb,CAAG,EAAU+nI,GAAgB/nI,EAAGa,EAAI,CACvM,SAASyvI,GAAaC,GAAW,IAAIC,EAGrC,WAAuC,GAAuB,qBAAZC,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,oBAAVpmB,MAAsB,OAAO,EAAM,IAAsF,OAAhF5nH,QAAQvG,UAAUwG,QAAQtG,KAAKm0I,QAAQC,UAAU/tI,QAAS,IAAI,WAAa,MAAY,CAAM,CAAE,MAAOvD,GAAK,OAAO,CAAO,CAAE,CAHvQwxI,GAA6B,OAAO,WAAkC,IAAsC7uG,EAAlC8uG,EAAQC,GAAgBP,GAAkB,GAAIC,EAA2B,CAAE,IAAIO,EAAYD,GAAgBt0I,MAAM2L,YAAa45B,EAAS0uG,QAAQC,UAAUG,EAAO70I,UAAW+0I,EAAY,MAAShvG,EAAS8uG,EAAMt0I,MAAMC,KAAMR,WAAc,OACpX,SAAoCwD,EAAMlD,GAAQ,GAAIA,IAA2B,WAAlBozI,GAAQpzI,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIyJ,UAAU,4DAA+D,OAAOirI,GAAuBxxI,EAAO,CAD4Fw3H,CAA2Bx6H,KAAMulC,EAAS,CAAG,CAExa,SAASivG,GAAuBxxI,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIu3H,eAAe,6DAAgE,OAAOv3H,CAAM,CAErK,SAASsxI,GAAgB9wI,GAA+J,OAA1J8wI,GAAkBn1I,OAAOoiH,eAAiBpiH,OAAOoF,eAAelF,OAAS,SAAyBmE,GAAK,OAAOA,EAAE+/G,WAAapkH,OAAOoF,eAAef,EAAI,EAAU8wI,GAAgB9wI,EAAI,CAOnN,IAAIkhI,GAAY,CACdtlB,SAAUqY,KAAAA,KACV31H,KAAM21H,KAAAA,OACN/8D,KAAM+8D,KAAAA,UAAoB,CAACA,KAAAA,OAAkBA,KAAAA,SAC7Cs1D,OAAQt1D,KAAAA,OACRv4F,MAAOu4F,KAAAA,KACPz5E,QAASy5E,KAAAA,KACTptH,IAAKshL,GACLtjD,SAAU5Q,KAAAA,UAAoB,CAACA,KAAAA,OAAkBA,KAAAA,KAAgBA,KAAAA,SACjE/tH,UAAW+tH,KAAAA,KACXu1D,MAAOv1D,KAAAA,KACP11H,UAAW01H,KAAAA,OACX4zD,UAAW5zD,KAAAA,QAETvU,GAAqB,SAAUsqB,IA3BnC,SAAmBnR,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI/yH,UAAU,sDAAyD8yH,EAASz8H,UAAYT,OAAOiI,OAAOk1H,GAAcA,EAAW18H,UAAW,CAAE+L,YAAa,CAAEzE,MAAOm1H,EAAU3uH,UAAU,EAAMD,cAAc,KAAWtO,OAAO6H,eAAeq1H,EAAU,YAAa,CAAE3uH,UAAU,IAAc4uH,GAAYiP,GAAgBlP,EAAUC,EAAa,CA4BjcC,CAAUrZ,EAAOsqB,GACjB,IA9BoBpU,EAAaC,EAAYC,EA8BzCob,EAASZ,GAAa5wB,GAC1B,SAASA,EAAM5iH,GACb,IAAIg6H,EAKJ,OAvCJ,SAAyBvwH,EAAUqvH,GAAe,KAAMrvH,aAAoBqvH,GAAgB,MAAM,IAAI7vH,UAAU,oCAAwC,CAmCpJ8wH,CAAgBr6H,KAAMkjH,IACtBoX,EAAQoa,EAAO50I,KAAKE,KAAMM,IACpB2sL,OAAS3yD,EAAM2yD,OAAO5tL,KAAKm1I,GAAuBla,IACxDA,EAAM8d,MAAQ9d,EAAM8d,MAAM/4I,KAAKm1I,GAAuBla,IAC/CA,CACT,CAyEA,OA/GoBlB,EAuCPlW,GAvCoBmW,EAuCb,CAAC,CACnB15H,IAAK,SACLuH,MAAO,SAAgB/G,GACjBH,KAAKM,MAAM+nI,UACbroI,KAAKM,MAAM+nI,SAASloI,GAEtBH,KAAKG,IAAMA,CACb,GACC,CACDR,IAAK,QACLuH,MAAO,WACDlH,KAAKG,KACPH,KAAKG,IAAIi4I,OAEb,GACC,CACDz4I,IAAK,SACLuH,MAAO,WACL,IAAI6nI,EAAc/uI,KAAKM,MACrByB,EAAYgtI,EAAYhtI,UACxBspL,EAAYt8C,EAAYs8C,UACxB6B,EAAmBn+C,EAAYjtI,KAC/BA,OAA4B,IAArBorL,EAA8B,OAASA,EAC9CH,EAASh+C,EAAYg+C,OACrB7tJ,EAAQ6vG,EAAY7vG,MACpB8e,EAAU+wF,EAAY/wF,QACtB3zC,EAAM0kI,EAAY1kI,IAClB2iL,EAAQj+C,EAAYi+C,MACpBtjL,EAAYqlI,EAAYrlI,UACxB2+H,EAAW0G,EAAY1G,SACvBwa,EAAatqB,GAAyBwW,EAAapD,IACjDwhD,EAAa,CAAC,SAAU,QAAS,YAAY5iL,QAAQzI,IAAS,EAG9DsrL,EAAuB,WAATtrL,EACdurL,EAAsB,UAATvrL,EACb83C,EAAMvvC,IAAQ+iL,GAHW,aAATtrL,EAG6BA,EAAO,SACpDwrL,EAAmB,eACnB5jL,GACF4jL,EAAmB,GAAG5kL,OAAO4kL,EAAkB,cAC/C1zI,EAAMvvC,GAAO,SACJgjL,EACTC,EAAmB,aACVF,EACTE,EAAmB,cACVH,IAEPG,EADEN,EACiB,KAEA,oBAGnBnqC,EAAWnoF,MApBI,MAoBiB7wD,KAAKg5I,EAAWnoF,QAClD8wH,GAAS,oFACTuB,EAASlqC,EAAWnoF,YACbmoF,EAAWnoF,MAEpB,IAAI7b,EAAUusI,GAAgBxsI,KAAW78C,EAAWi8C,GAAW,aAAc9e,GAAS,aAAY6tJ,IAASK,EAAc,eAAe1kL,OAAOqkL,GAAU,gBAAgBrkL,OAAOqkL,IAAiBO,GAAmBjC,GAQpN,OAPY,UAARzxI,GAAmBvvC,GAAsB,oBAARA,KACnCw4I,EAAW/gJ,KAAgB,WAATA,EAAoB,WAAaA,GAEjD+gJ,EAAWzjC,WAAc11G,GAAsB,WAAT5H,GAAoC,kBAAR83C,GAA4B,WAARA,IACxF4xI,GAAS,yBAA0B9iL,OAAO5G,EAAM,8EACzC+gJ,EAAWzjC,UAEAksD,IAAAA,cAAoB1xH,EAAK16C,GAAS,CAAC,EAAG2jJ,EAAY,CACpE1iJ,IAAKkoI,EACLtmI,UAAW88C,EACX,eAAgBb,IAEpB,MA7G0E61F,GAAkBza,EAAYx5H,UAAWy5H,GAAiBC,GAAaua,GAAkBza,EAAaE,GAAcn6H,OAAO6H,eAAeoyH,EAAa,YAAa,CAAE1rH,UAAU,IA+GrPw1G,CACT,CApFyB,CAoFvBooD,IAAAA,WACFpoD,GAAMwhB,UAAYA,GAClB,YCxHO,IAAI6oD,GAA8BjiB,EAAAA,gBAC9BkiB,GAAoCliB,EAAAA,gBACxC,SAASmiB,GAAQvtL,GACtB,IAAIk/G,EAAWl/G,EAAKk/G,SAEhBsuE,EAAkBpiB,EAAAA,SAAe,MACjCqiB,EAAgBD,EAAgB,GAChCE,EAAmBF,EAAgB,GAEnCG,EAAeviB,EAAAA,QAAa,GAChCA,EAAAA,WAAgB,WACd,OAAO,WACLuiB,EAAarkI,SAAU,CACzB,CACF,GAAG,IACH,IAAIskI,EAAyBxiB,EAAAA,aAAkB,SAAUp8I,GAClD2+J,EAAarkI,SAChBokI,EAAiB1+J,EAErB,GAAG,IACH,OAAoBo8I,EAAAA,cAAoBiiB,GAA4BtW,SAAU,CAC5E/vK,MAAOymL,GACOriB,EAAAA,cAAoBkiB,GAAkCvW,SAAU,CAC9E/vK,MAAO4mL,GACN1uE,GACL,CCdO,IAAI2uE,GAA+BziB,IAAAA,cAAoB,CAAC,GCXpD0iB,GAAiC1iB,IAAAA,cAAoB,CAAC,GCDjE,SAASp4B,GAAQxjH,GAAkC,OAAOwjH,GAAU,mBAAqB3vI,QAAU,iBAAmBA,OAAOW,SAAW,SAAUwrB,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAO,mBAAqBnsB,QAAUmsB,EAAI/jB,cAAgBpI,QAAUmsB,IAAQnsB,OAAO3D,UAAY,gBAAkB8vB,CAAK,EAAGwjH,GAAQxjH,EAAM,CAC/U,IAAIi8G,GAAY,CAAC,YAAa,YAAa,YAAa,SAAU,QAAS,OAAQ,MAAO,qBAAsB,SAAU,MAAO,YACjI,SAASzsI,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAAS+wI,GAAgB7gH,EAAK/vB,EAAKuH,GAAiK,OAApJvH,KAAO+vB,EAAOvwB,OAAO6H,eAAe0oB,EAAK/vB,EAAK,CAAEuH,MAAOA,EAAOD,YAAY,EAAMwG,cAAc,EAAMC,UAAU,IAAkBgiB,EAAI/vB,GAAOuH,EAAgBwoB,CAAK,CAChN,SAAS6oG,GAAyB74H,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAAkEC,EAAKJ,EAAnED,EACzF,SAAuCI,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAA2DC,EAAKJ,EAA5DD,EAAS,CAAC,EAAO8vI,EAAajwI,OAAOyH,KAAKlH,GAAqB,IAAKH,EAAI,EAAGA,EAAI6vI,EAAW3vI,OAAQF,IAAOI,EAAMyvI,EAAW7vI,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,CAAQ,CADhN+vI,CAA8B3vI,EAAQyvI,GAAuB,GAAIhwI,OAAO2H,sBAAuB,CAAE,IAAIgmL,EAAmB3tL,OAAO2H,sBAAsBpH,GAAS,IAAKH,EAAI,EAAGA,EAAIutL,EAAiBrtL,OAAQF,IAAOI,EAAMmtL,EAAiBvtL,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,GAAkBR,OAAOS,UAAUmkD,qBAAqBjkD,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,GAAQ,CAAE,OAAOL,CAAQ,CAG3e,SAASu0I,GAAkBv0I,EAAQgB,GAAS,IAAK,IAAIf,EAAI,EAAGA,EAAIe,EAAMb,OAAQF,IAAK,CAAE,IAAI45H,EAAa74H,EAAMf,GAAI45H,EAAWlyH,WAAakyH,EAAWlyH,aAAc,EAAOkyH,EAAW1rH,cAAe,EAAU,UAAW0rH,IAAYA,EAAWzrH,UAAW,GAAMvO,OAAO6H,eAAe1H,EAAQ65H,EAAWx5H,IAAKw5H,EAAa,CAAE,CAG5T,SAASoS,GAAgB/nI,EAAGa,GAA6I,OAAxIknI,GAAkBpsI,OAAOoiH,eAAiBpiH,OAAOoiH,eAAeliH,OAAS,SAAyBmE,EAAGa,GAAsB,OAAjBb,EAAE+/G,UAAYl/G,EAAUb,CAAG,EAAU+nI,GAAgB/nI,EAAGa,EAAI,CACvM,SAASyvI,GAAaC,GAAW,IAAIC,EAGrC,WAAuC,GAAuB,qBAAZC,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,oBAAVpmB,MAAsB,OAAO,EAAM,IAAsF,OAAhF5nH,QAAQvG,UAAUwG,QAAQtG,KAAKm0I,QAAQC,UAAU/tI,QAAS,IAAI,WAAa,MAAY,CAAM,CAAE,MAAOvD,GAAK,OAAO,CAAO,CAAE,CAHvQwxI,GAA6B,OAAO,WAAkC,IAAsC7uG,EAAlC8uG,EAAQC,GAAgBP,GAAkB,GAAIC,EAA2B,CAAE,IAAIO,EAAYD,GAAgBt0I,MAAM2L,YAAa45B,EAAS0uG,QAAQC,UAAUG,EAAO70I,UAAW+0I,EAAY,MAAShvG,EAAS8uG,EAAMt0I,MAAMC,KAAMR,WAAc,OACpX,SAAoCwD,EAAMlD,GAAQ,GAAIA,IAA2B,WAAlBozI,GAAQpzI,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIyJ,UAAU,4DAA+D,OAAOirI,GAAuBxxI,EAAO,CAD4Fw3H,CAA2Bx6H,KAAMulC,EAAS,CAAG,CAExa,SAASivG,GAAuBxxI,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIu3H,eAAe,6DAAgE,OAAOv3H,CAAM,CAErK,SAASsxI,GAAgB9wI,GAA+J,OAA1J8wI,GAAkBn1I,OAAOoiH,eAAiBpiH,OAAOoF,eAAelF,OAAS,SAAyBmE,GAAK,OAAOA,EAAE+/G,WAAapkH,OAAOoF,eAAef,EAAI,EAAU8wI,GAAgB9wI,EAAI,CAWnN,IAAIkhI,GAAY,CACdupD,KAAMx2D,KAAAA,KACN+mB,SAAU/mB,KAAAA,KACVzpB,UAAWypB,KAAAA,MAAgB,CAAC,KAAM,OAAQ,QAAS,MAAO,OAAQ,UAClEl5F,MAAOk5F,KAAAA,KACPy2D,OAAQz2D,KAAAA,KACR02D,IAAK12D,KAAAA,KACL22D,OAAQ32D,KAAAA,KACR/8D,KAAM+8D,KAAAA,OACNptH,IAAKshL,GACL0C,OAAQ52D,KAAAA,KACRrY,SAAUqY,KAAAA,KACV11H,UAAW01H,KAAAA,OACX4zD,UAAW5zD,KAAAA,OACX62D,OAAQ72D,KAAAA,KACR82D,SAAU92D,KAAAA,KACV+2D,mBAAoB/2D,KAAAA,KACpBg3D,SAAUh3D,KAAAA,MAAgB,CAAC,UAAW,UAWpCi3D,GAAqB,CAAC3C,GAAS3iE,MAAO2iE,GAASE,MAAOF,GAAS9jJ,GAAI8jJ,GAASI,KAAMJ,GAAStjI,IAAKsjI,GAASK,MACzGuC,GAAwB,SAAUnhD,IA9CtC,SAAmBnR,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI/yH,UAAU,sDAAyD8yH,EAASz8H,UAAYT,OAAOiI,OAAOk1H,GAAcA,EAAW18H,UAAW,CAAE+L,YAAa,CAAEzE,MAAOm1H,EAAU3uH,UAAU,EAAMD,cAAc,KAAWtO,OAAO6H,eAAeq1H,EAAU,YAAa,CAAE3uH,UAAU,IAAc4uH,GAAYiP,GAAgBlP,EAAUC,EAAa,CA+CjcC,CAAUoyD,EAAUnhD,GACpB,IAjDoBpU,EAAaC,EAAYC,EAiDzCob,EAASZ,GAAa66C,GAC1B,SAASA,EAASruL,GAChB,IAAIg6H,EAcJ,OAnEJ,SAAyBvwH,EAAUqvH,GAAe,KAAMrvH,aAAoBqvH,GAAgB,MAAM,IAAI7vH,UAAU,oCAAwC,CAsDpJ8wH,CAAgBr6H,KAAM2uL,IACtBr0D,EAAQoa,EAAO50I,KAAKE,KAAMM,IACpBsuL,UAAYt0D,EAAMs0D,UAAUvvL,KAAKm1I,GAAuBla,IAC9DA,EAAMu0D,oBAAsBv0D,EAAMu0D,oBAAoBxvL,KAAKm1I,GAAuBla,IAClFA,EAAMw0D,cAAgBx0D,EAAMw0D,cAAczvL,KAAKm1I,GAAuBla,IACtEA,EAAMy0D,aAAez0D,EAAMy0D,aAAa1vL,KAAKm1I,GAAuBla,IACpEA,EAAM+zD,OAAS/zD,EAAM+zD,OAAOhvL,KAAKm1I,GAAuBla,IACxDA,EAAM00D,cAAgB10D,EAAM00D,cAAc3vL,KAAKm1I,GAAuBla,IACtEA,EAAM20D,gBAAkB30D,EAAM20D,gBAAgB5vL,KAAKm1I,GAAuBla,IAC1EA,EAAM40D,aAA4B5jB,IAAAA,YAClChxC,EAAM60D,QAAuB7jB,IAAAA,YAC7BhxC,EAAM80D,UAAyB9jB,IAAAA,YAExBhxC,CACT,CA0PA,OA5ToBlB,EAmEPu1D,EAnEoBt1D,EAmEV,CAAC,CACtB15H,IAAK,oBACLuH,MAAO,WACLlH,KAAKqvL,aACP,GACC,CACD1vL,IAAK,qBACLuH,MAAO,SAA4BgnI,GAC7BluI,KAAKM,MAAM4tL,SAAWhgD,EAAUggD,QAClCluL,KAAKqvL,aAET,GACC,CACD1vL,IAAK,uBACLuH,MAAO,WACLlH,KAAK+uL,cACP,GACC,CACDpvL,IAAK,gBACLuH,MAAO,SAAuBioL,GAC5BnvL,KAAKmvL,QAAQ3lI,QAAU2lI,CACzB,GACC,CACDxvL,IAAK,kBACLuH,MAAO,SAAyBkoL,GAC9BpvL,KAAKovL,UAAU5lI,QAAU4lI,CAC3B,GACC,CACDzvL,IAAK,sBACLuH,MAAO,SAA6BtE,GAClC,IAAIA,GAAkB,IAAZA,EAAE0sL,QAA0B,UAAX1sL,EAAEd,MAAoBc,EAAE0sL,QAAUvD,GAASG,KAAtE,CACA,IAAI7nD,EAAYrkI,KAAKuvL,eACjBC,EAAOxvL,KAAKyvL,UAEZC,EADS1vL,KAAK2vL,YACUrhI,SAAS1rD,EAAEtD,QACnCswL,EAAgBJ,GAAQA,EAAKlhI,SAAS1rD,EAAEtD,SAAWkwL,IAAS5sL,EAAEtD,OAC9DuwL,GAAiB,EACjBxrD,IAEFwrD,EAAiBxrD,EAAUyrD,UAAUxhI,SAAS,gBAAkB+1E,EAAUyrD,UAAUxhI,SAAS,aAAoC,UAArB1rD,EAAEtD,OAAO+F,YAElHqqL,IAAmBG,GAAkBD,IAA8B,UAAXhtL,EAAEd,MAAoBc,EAAE0sL,QAAUvD,GAASG,MAGxGlsL,KAAKquL,OAAOzrL,EAdsE,CAepF,GACC,CACDjD,IAAK,gBACLuH,MAAO,SAAuBtE,GAC5B,IAAI+7H,EAAS3+H,KACT+vL,EAAqD,aAAlCntL,EAAEtD,OAAO8sK,aAAa,SAA4D,WAAlCxpK,EAAEtD,OAAO8sK,aAAa,QACzF4jB,EAAmBhwL,KAAKiwL,gBAAkBrtL,EAAEtD,OAC5C4wL,EAAQnE,GAASG,MAAQtpL,EAAE0sL,MAC/B,KAAI,kBAAkBzlL,KAAKjH,EAAEtD,OAAO+F,UAAY6qL,IAAUlwL,KAAKM,MAAM2tL,MAAQiC,IAAWH,IAAoBC,OAG/D,IAAzCtB,GAAmBnkL,QAAQ3H,EAAE0sL,QAAiB1sL,EAAE0sL,OAAS,IAAM1sL,EAAE0sL,OAAS,KAC5E1sL,EAAE88H,kBAEA1/H,KAAKM,MAAMk+I,UAAf,CACA,GAAIwxC,EACF,GAAI,CAACjE,GAAS3iE,MAAO2iE,GAASE,MAAOF,GAAS9jJ,GAAI8jJ,GAASI,MAAM5hL,QAAQ3H,EAAE0sL,QAAU,EAE9EtvL,KAAKM,MAAM4tL,QACdluL,KAAKquL,OAAOzrL,GAEd+P,YAAW,WACT,IAAIw9K,EACJ,OAA6D,QAArDA,EAAuBxxD,EAAOyxD,eAAe,UAAyC,IAAzBD,OAAkC,EAASA,EAAqB/3C,OACvI,SACK,GAAIp4I,KAAKM,MAAM4tL,QAAUgC,EAAO,CACrC,IAAIG,EAIJztL,EAAE88H,iBACiD,QAAlD2wD,EAAsBrwL,KAAKowL,eAAe,UAAwC,IAAxBC,GAA0CA,EAAoBj4C,OAC3H,MAAWp4I,KAAKM,MAAM4tL,QAAUtrL,EAAE0sL,QAAUvD,GAASC,KACnDhsL,KAAKquL,OAAOzrL,GAGhB,GAAI5C,KAAKM,MAAM4tL,QAAU6B,EACvB,GAAI,CAAChE,GAASG,IAAKH,GAASC,KAAKzhL,QAAQ3H,EAAE0sL,QAAU,EACnDtvL,KAAKquL,OAAOzrL,GACZ5C,KAAKiwL,cAAc73C,aACd,GAAI,CAAC2zC,GAAS3iE,MAAO2iE,GAASE,OAAO1hL,QAAQ3H,EAAE0sL,QAAU,EAC9D1sL,EAAEtD,OAAOgxL,QACTtwL,KAAKiwL,cAAc73C,aACd,GAAI,CAAC2zC,GAASI,KAAMJ,GAAS9jJ,IAAI19B,QAAQ3H,EAAE0sL,QAAU,GAAK,CAACvD,GAASzoL,EAAGyoL,GAAS1nL,GAAGkG,QAAQ3H,EAAE0sL,QAAU,GAAK1sL,EAAEg5K,QAAS,CAC5H,IAAI2U,EAAavwL,KAAKowL,eAClB1+J,EAAQ6+J,EAAWhmL,QAAQ3H,EAAEtD,QAC7BysL,GAAS9jJ,KAAOrlC,EAAE0sL,OAASvD,GAAS1nL,IAAMzB,EAAE0sL,OAAS1sL,EAAEg5K,QACzDlqJ,EAAkB,IAAVA,EAAcA,EAAQ,EAAI6+J,EAAW9wL,OAAS,GAC7CssL,GAASI,OAASvpL,EAAE0sL,OAASvD,GAASzoL,IAAMV,EAAE0sL,OAAS1sL,EAAEg5K,WAClElqJ,EAAQA,IAAU6+J,EAAW9wL,OAAS,EAAI,EAAIiyB,EAAQ,GAExD6+J,EAAW7+J,GAAO0mH,OACpB,MAAO,GAAI2zC,GAAStjI,MAAQ7lD,EAAE0sL,MAAO,CACnC,IAAIkB,EAAcxwL,KAAKowL,eACvBI,EAAYA,EAAY/wL,OAAS,GAAG24I,OACtC,MAAO,GAAI2zC,GAASK,OAASxpL,EAAE0sL,MACVtvL,KAAKowL,eACX,GAAGh4C,aACX,GAAIx1I,EAAE0sL,OAAS,IAAM1sL,EAAE0sL,OAAS,GAGrC,IAFA,IAAImB,EAAezwL,KAAKowL,eACpBM,EAAc9rL,OAAOsmD,aAAatoD,EAAE0sL,OAAO5wG,cACtCn/E,EAAI,EAAGA,EAAIkxL,EAAahxL,OAAQF,GAAK,EAE5C,IADkBkxL,EAAalxL,GAAG0sI,aAAewkD,EAAalxL,GAAG0sI,YAAY,GAAGvtD,iBAC5DgyG,EAAa,CAC/BD,EAAalxL,GAAG64I,QAChB,KACF,CApDyB,CAwDjC,GACC,CACDz4I,IAAK,cACLuH,MAAO,WACDlH,KAAKM,MAAM4tL,OACbluL,KAAK4uL,YAEL5uL,KAAK+uL,cAET,GACC,CACDpvL,IAAK,kBACLuH,MAAO,WACL,MAAO,CACLmnL,OAAQruL,KAAKquL,OACbH,OAAQluL,KAAKM,MAAM4tL,OACnBlgF,UAAoC,SAAzBhuG,KAAKM,MAAM0tG,WAAwBhuG,KAAKM,MAAMguL,OAAS,KAAOtuL,KAAKM,MAAM0tG,UACpFugF,SAAUvuL,KAAKM,MAAMiuL,SACrB/vC,SAAUx+I,KAAKM,MAAMk+I,SAGrBmyC,UAAW3wL,KAAKgvL,cAChB4B,YAAa5wL,KAAKivL,gBAClBR,SAAUzuL,KAAKM,MAAMmuL,SAEzB,GACC,CACD9uL,IAAK,eACLuH,MAAO,WACL,OAAOlH,KAAKkvL,aAAa1lI,OAC3B,GACC,CACD7pD,IAAK,UACLuH,MAAO,WACL,OAAOlH,KAAKmvL,QAAQ3lI,OACtB,GACC,CACD7pD,IAAK,YACLuH,MAAO,WACL,OAAOlH,KAAKovL,UAAU5lI,OACxB,GACC,CACD7pD,IAAK,cACLuH,MAAO,WACL,OAAIlH,KAAK6wL,aACT7wL,KAAK6wL,WAAa7wL,KAAK2vL,aADK3vL,KAAK6wL,UAGnC,GACC,CACDlxL,IAAK,cACLuH,MAAO,WACL,MAA4B,YAAxBlH,KAAKM,MAAMmuL,SACN,SAEF,UACT,GACC,CACD9uL,IAAK,eACLuH,MAAO,WAIL,IAAI4pL,EAAgB9wL,KAAKyvL,WAAazvL,KAAKuvL,eAC3C,MAAO,GAAG9pL,MAAM3F,KAAKgxL,EAAcpiD,iBAAiB,UAAWhmI,OAAO1I,KAAK+wL,cAAe,OAC5F,GACC,CACDpxL,IAAK,YACLuH,MAAO,WACL,IAAI+5H,EAASjhI,KACb,CAAC,QAAS,aAAc,SAAS4H,SAAQ,SAAUogH,GACjD,OAAOhjH,SAASgO,iBAAiBg1G,EAAOiZ,EAAO4tD,qBAAqB,EACtE,GACF,GACC,CACDlvL,IAAK,eACLuH,MAAO,WACL,IAAIk6H,EAASphI,KACb,CAAC,QAAS,aAAc,SAAS4H,SAAQ,SAAUogH,GACjD,OAAOhjH,SAASy5H,oBAAoBzW,EAAOoZ,EAAOytD,qBAAqB,EACzE,GACF,GACC,CACDlvL,IAAK,SACLuH,MAAO,SAAgBtE,GACrB,OAAI5C,KAAKM,MAAMk+I,SACN57I,GAAKA,EAAE88H,iBAET1/H,KAAKM,MAAM+tL,OAAOzrL,EAC3B,GACC,CACDjD,IAAK,SACLuH,MAAO,WACL,IAAI8pL,EACFtvD,EAAS1hI,KACPixL,EAAQ/yG,GAAKl+E,KAAKM,MAAO,CAAC,SAAU,WAAY,WAAY,SAC9DyB,EAAYkvL,EAAMlvL,UAClBspL,EAAY4F,EAAM5F,UAClBr9E,EAAYijF,EAAMjjF,UAClBkgF,EAAS+C,EAAM/C,OACf3vJ,EAAQ0yJ,EAAM1yJ,MACdm8B,EAAOu2H,EAAMv2H,KACbyzH,EAAM8C,EAAM9C,IACZK,EAAqByC,EAAMzC,mBAC3BJ,EAAS6C,EAAM7C,OACf/jL,EAAM4mL,EAAM5mL,IAEZ6mL,GADWD,EAAMxC,SACTl2D,GAAyB04D,EAAOtlD,KACtC/xF,EAAMvvC,IAAQ8jL,EAAM,KAAO,OAC3BgD,GAAkB,EAClB3C,GACFljB,IAAAA,SAAe76J,IAAIzQ,KAAKM,MAAM8+G,SAAS,GAAG9+G,MAAM8+G,UAAU,SAAUgyE,GAC9DA,GAAgBA,EAAa9wL,MAAM8tL,SAAQ+C,GAAkB,EACnE,IAEF,IAAItyI,EAAUusI,GAAgBxsI,KAAW78C,KAAWosL,IAAOC,IAAS,YAAkBI,IAAsB2C,IAAkB,UAE3H5gD,GAF8IygD,EAAc,CAC7J,YAAazyJ,GACiB,aAAa71B,OAAOgyD,KAASA,GAAO61E,GAAgBygD,EAAa,YAAazyJ,GAAQgyG,GAAgBygD,EAAa,SAAwB,OAAdhjF,GAAqBuiC,GAAgBygD,EAAa,YAA2B,UAAdhjF,GAAuC,SAAdA,GAAuBuiC,GAAgBygD,EAAa,UAAyB,QAAdhjF,GAAqC,UAAdA,GAAwBuiC,GAAgBygD,EAAa,OAAQ9C,GAAS39C,GAAgBygD,EAAa,WAAY7C,GAAM6C,IAAe3F,GAC/c,OAAIrrL,KAAK4L,QAAQylL,iBACK/lB,IAAAA,cAAoByiB,GAAgB9W,SAAU,CAChE/vK,MAAOlH,KAAKsxL,mBACEhmB,IAAAA,cAAoBmiB,GAAS,KAAMniB,IAAAA,SAAe76J,IAAIzQ,KAAKM,MAAM8+G,UAAU,SAAUC,GACnG,OAAoBisD,IAAAA,aAAmBjsD,EAAO,CAC5C48B,UAAWva,EAAOotD,eAEtB,MAEkBxjB,IAAAA,cAAoByiB,GAAgB9W,SAAU,CAChE/vK,MAAOlH,KAAKsxL,mBACEhmB,IAAAA,cAAoBmiB,GAAS,KAAmBniB,IAAAA,cAAoB1xH,EAAK16C,GAAS,CAAC,EAAGgyL,EAAO3gD,GAAgB,CAAC,EAAkB,kBAAR32F,EAAmB,MAAQ,WAAY55C,KAAKkvL,cAAe,CACjMjzC,UAAWj8I,KAAK8uL,cAChB/sL,UAAW88C,MAEf,IA1T8Dw6E,GAAYwa,GAAkBza,EAAYx5H,UAAWy5H,GAAiBC,GAAaua,GAAkBza,EAAaE,GAAcn6H,OAAO6H,eAAeoyH,EAAa,YAAa,CAAE1rH,UAAU,IA4TrPihL,CACT,CA9Q4B,CA8Q1BrjB,IAAAA,WACFqjB,GAASjqD,UAAYA,GACrBiqD,GAAShqD,aA1RU,CACjBspD,MAAM,EACNC,QAAQ,EACRlgF,UAAW,OACXmgF,KAAK,EACLC,QAAQ,EACRG,UAAU,EACVC,oBAAoB,GAoRtBG,GAAS4C,YAAcvD,GACvB,0ECnUWwD,GAAc,SAAqB/pK,GAC5C,OAAOhjB,MAAMK,QAAQ2iB,GAAOA,EAAI,GAAKA,CACvC,EAMWgqK,GAAa,SAAoBx9G,GAC1C,GAAkB,oBAAPA,EAAmB,CAC5B,IAAK,IAAIntD,EAAOtnB,UAAUC,OAAQwK,EAAO,IAAIxF,MAAMqiB,EAAO,EAAIA,EAAO,EAAI,GAAIC,EAAO,EAAGA,EAAOD,EAAMC,IAClG9c,EAAK8c,EAAO,GAAKvnB,UAAUunB,GAG7B,OAAOktD,EAAGl0E,WAAM,EAAQkK,EAC1B,CACF,EAKWynL,GAAS,SAAgBvxL,EAAK+uB,GAEvC,GAAmB,oBAAR/uB,EACT,OAAOsxL,GAAWtxL,EAAK+uB,GAET,MAAP/uB,IACLA,EAAIqpD,QAAUt6B,EAEpB,EAKWyiK,GAAc,SAAqBrtL,GAC5C,OAAOA,EAAQmI,QAAO,SAAUw5J,EAAK/lK,GACnC,IAAIP,EAAMO,EAAK,GACXgH,EAAQhH,EAAK,GAEjB,OADA+lK,EAAItmK,GAAOuH,EACJ++J,CACT,GAAG,CAAC,EACN,EAKWkP,GAA8C,qBAAXhyK,QAA0BA,OAAO6B,UAAY7B,OAAO6B,SAASgxH,cAAgBs1C,EAAAA,gBAAwBA,EAAAA,UChD5I,SAASsmB,GAAU1xL,GACxB,IAAIk/G,EAAWl/G,EAAKk/G,SAChBipB,EAAWnoI,EAAKmoI,SAChBulD,EAAmBtiB,EAAAA,WAAiBkiB,IACpCqE,EAAavmB,EAAAA,aAAkB,SAAUp8I,GAC3CwiK,GAAOrpD,EAAUn5G,GACjBuiK,GAAW7D,EAAkB1+J,EAC/B,GAAG,CAACm5G,EAAUulD,IAWd,OARAtiB,EAAAA,WAAgB,WACd,OAAO,WACL,OAAOomB,GAAOrpD,EAAU,KAC1B,CACF,GAAG,IACHijC,EAAAA,WAAgB,WACdp5C,KAAQ/rH,QAAQynL,GAAmB,mEACrC,GAAG,CAACA,IACG4D,GAAYpyE,EAAZoyE,CAAsB,CAC3BrxL,IAAK0xL,GAET,CCzBA,IAAIlmD,GAAY,CAAC,YAAa,YAAa,UAAW,YACtD,SAASzsI,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAAS0wI,GAAQ3hH,EAAQ4hH,GAAkB,IAAIvpI,EAAOzH,OAAOyH,KAAK2nB,GAAS,GAAIpvB,OAAO2H,sBAAuB,CAAE,IAAIspI,EAAUjxI,OAAO2H,sBAAsBynB,GAAS4hH,IAAmBC,EAAUA,EAAQ9mI,QAAO,SAAU+mI,GAAO,OAAOlxI,OAAOqO,yBAAyB+gB,EAAQ8hH,GAAKppI,UAAY,KAAKL,EAAKC,KAAK9G,MAAM6G,EAAMwpI,EAAU,CAAE,OAAOxpI,CAAM,CAEpV,SAAS2pI,GAAgB7gH,EAAK/vB,EAAKuH,GAAiK,OAApJvH,KAAO+vB,EAAOvwB,OAAO6H,eAAe0oB,EAAK/vB,EAAK,CAAEuH,MAAOA,EAAOD,YAAY,EAAMwG,cAAc,EAAMC,UAAU,IAAkBgiB,EAAI/vB,GAAOuH,EAAgBwoB,CAAK,CAChN,SAAS6oG,GAAyB74H,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAAkEC,EAAKJ,EAAnED,EACzF,SAAuCI,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAA2DC,EAAKJ,EAA5DD,EAAS,CAAC,EAAO8vI,EAAajwI,OAAOyH,KAAKlH,GAAqB,IAAKH,EAAI,EAAGA,EAAI6vI,EAAW3vI,OAAQF,IAAOI,EAAMyvI,EAAW7vI,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,CAAQ,CADhN+vI,CAA8B3vI,EAAQyvI,GAAuB,GAAIhwI,OAAO2H,sBAAuB,CAAE,IAAIgmL,EAAmB3tL,OAAO2H,sBAAsBpH,GAAS,IAAKH,EAAI,EAAGA,EAAIutL,EAAiBrtL,OAAQF,IAAOI,EAAMmtL,EAAiBvtL,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,GAAkBR,OAAOS,UAAUmkD,qBAAqBjkD,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,GAAQ,CAAE,OAAOL,CAAQ,CAM3e,IAAIolI,GAAY,CAEd0pD,OAAQ32D,KAAAA,KAER,aAAcA,KAAAA,OAEdohB,QAASphB,KAAAA,KAETq6D,QAASr6D,KAAAA,MAAgB,CAAC,UAC1B11H,UAAW01H,KAAAA,OACX4zD,UAAW5zD,KAAAA,OACX4Q,SAAU5Q,KAAAA,UAAoB,CAACA,KAAAA,OAAkBA,KAAAA,OAAkBA,KAAAA,QAErE,SAASs6D,GAAYzxL,GACnB,IAAIyB,EAAYzB,EAAMyB,UAEpB+vL,GADYxxL,EAAM+qL,UACR/qL,EAAMwxL,SAChBzpD,EAAW/nI,EAAM+nI,SACjBwa,EAAatqB,GAAyBj4H,EAAOqrI,IAC3C9sF,EAAUusI,GAAgBxsI,KAAW78C,EAAW,YAAa+vL,GAAW,aAAappL,OAAOopL,KAChG,OAAoBxmB,IAAAA,cAAoB,SAAUpsK,GAAS,CACzDiB,IAAKkoI,EACLvmI,KAAM,SACNC,UAAW88C,GA/Bf,SAAuBv/C,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAS,MAAQF,UAAUD,GAAKC,UAAUD,GAAK,CAAC,EAAGA,EAAI,EAAI2wI,GAAQ/wI,OAAOO,IAAS,GAAIkI,SAAQ,SAAUjI,GAAO4wI,GAAgBjxI,EAAQK,EAAKD,EAAOC,GAAO,IAAKR,OAAOwO,0BAA4BxO,OAAOyO,iBAAiBtO,EAAQH,OAAOwO,0BAA0BjO,IAAWwwI,GAAQ/wI,OAAOO,IAASkI,SAAQ,SAAUjI,GAAOR,OAAO6H,eAAe1H,EAAQK,EAAKR,OAAOqO,yBAAyB9N,EAAQC,GAAO,GAAI,CAAE,OAAOL,CAAQ,CAgCpfgxI,CAAc,CACf,aAAc,SACbuS,IACL,CACAkvC,GAAYrtD,UAAYA,GACxB,YCxCA,IAAIiH,GAAY,CAAC,SAAU,aAAc,QAAS,YAAa,QAAS,YAAa,QAAS,UAAW,OAAQ,MAAO,YACxH,SAASzsI,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAAS+4H,GAAyB74H,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAAkEC,EAAKJ,EAAnED,EACzF,SAAuCI,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAA2DC,EAAKJ,EAA5DD,EAAS,CAAC,EAAO8vI,EAAajwI,OAAOyH,KAAKlH,GAAqB,IAAKH,EAAI,EAAGA,EAAI6vI,EAAW3vI,OAAQF,IAAOI,EAAMyvI,EAAW7vI,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,CAAQ,CADhN+vI,CAA8B3vI,EAAQyvI,GAAuB,GAAIhwI,OAAO2H,sBAAuB,CAAE,IAAIgmL,EAAmB3tL,OAAO2H,sBAAsBpH,GAAS,IAAKH,EAAI,EAAGA,EAAIutL,EAAiBrtL,OAAQF,IAAOI,EAAMmtL,EAAiBvtL,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,GAAkBR,OAAOS,UAAUmkD,qBAAqBjkD,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,GAAQ,CAAE,OAAOL,CAAQ,CAO3e,IAAIolI,GAAY,CAEd0pD,OAAQ32D,KAAAA,KAER,aAAcA,KAAAA,OACdrnG,MAAOqnG,KAAAA,KAEPrY,SAAUqY,KAAAA,KAEV11H,UAAW01H,KAAAA,OAEX4zD,UAAW5zD,KAAAA,OAEXu6D,MAAOv6D,KAAAA,KAEPrV,MAAOqV,KAAAA,OAEP+mB,SAAU/mB,KAAAA,KACV4Q,SAAU5Q,KAAAA,UAAoB,CAACA,KAAAA,OAAkBA,KAAAA,KAAgBA,KAAAA,SAEjEohB,QAASphB,KAAAA,KAETw6D,QAASx6D,KAAAA,KAET/8D,KAAM+8D,KAAAA,OAENptH,IAAKshL,IAEP,SAASuG,GAAO5xL,GACd,IAAIu4I,GAAUs5C,EAAAA,EAAAA,cAAY,SAAUvvL,GAClC,IAAItC,EAAMk+I,SAIV,OAAIl+I,EAAMu4I,QACDv4I,EAAMu4I,QAAQj2I,QADvB,EAHEA,EAAE88H,gBAMN,GAAG,CAACp/H,EAAMu4I,QAASv4I,EAAMk+I,WACrB4vC,EAAS9tL,EAAM8tL,OACjBtzC,EAAYx6I,EAAM,cAClB8vB,EAAQ9vB,EAAM8vB,MACdruB,EAAYzB,EAAMyB,UAClBiwL,EAAQ1xL,EAAM0xL,MACd3G,EAAY/qL,EAAM+qL,UAClB+G,EAAe9xL,EAAM8hH,MACrBA,OAAyB,IAAjBgwE,EAA0B,YAAcA,EAChDH,EAAU3xL,EAAM2xL,QAChBv3H,EAAOp6D,EAAMo6D,KACb23H,EAAa/xL,EAAM+J,IACnBuvC,OAAqB,IAAfy4I,EAAwB,SAAWA,EACzChqD,EAAW/nI,EAAM+nI,SACjBwa,EAAatqB,GAAyBj4H,EAAOqrI,IAC/C,GAAIqmD,EACF,OAAoB1mB,IAAAA,cAAoBymB,GAAalvC,GAEvD,IAAIyvC,EAAkB,MAAM5pL,OAAOupL,EAAU,WAAa,GAAI,KAAKvpL,OAAO05G,GACtEvjE,EAAUusI,GAAgBxsI,KAAW78C,EAAW,MAAOuwL,IAAiB53H,GAAO,OAAOhyD,OAAOgyD,KAAetqC,GAAQ,gBAAyB,CAC/Ig+J,OAAQA,EACR5vC,SAAUl+I,EAAMk+I,WACd6sC,GAIJ,OAHIxoC,EAAW4E,MAAgB,WAAR7tG,IACrBA,EAAM,KAEY0xH,IAAAA,cAAoB1xH,EAAK16C,GAAS,CACpD4C,KAAc,WAAR83C,GAAoBipG,EAAWhK,QAAU,cAAWz2I,GACzDygJ,EAAY,CACb9gJ,UAAW88C,EACX1+C,IAAKkoI,EACLwQ,QAASA,EACT,aAAciC,IAElB,CACAo3C,GAAOxtD,UAAYA,GACnB,YClFA,SAASwO,GAAQxjH,GAAkC,OAAOwjH,GAAU,mBAAqB3vI,QAAU,iBAAmBA,OAAOW,SAAW,SAAUwrB,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAO,mBAAqBnsB,QAAUmsB,EAAI/jB,cAAgBpI,QAAUmsB,IAAQnsB,OAAO3D,UAAY,gBAAkB8vB,CAAK,EAAGwjH,GAAQxjH,EAAM,CAC/U,IAAIi8G,GAAY,CAAC,YAAa,QAAS,YAAa,QAAS,QAAS,MAAO,MAAO,YAEpF,SAASzsI,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAAS+4H,GAAyB74H,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAAkEC,EAAKJ,EAAnED,EACzF,SAAuCI,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAA2DC,EAAKJ,EAA5DD,EAAS,CAAC,EAAO8vI,EAAajwI,OAAOyH,KAAKlH,GAAqB,IAAKH,EAAI,EAAGA,EAAI6vI,EAAW3vI,OAAQF,IAAOI,EAAMyvI,EAAW7vI,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,CAAQ,CADhN+vI,CAA8B3vI,EAAQyvI,GAAuB,GAAIhwI,OAAO2H,sBAAuB,CAAE,IAAIgmL,EAAmB3tL,OAAO2H,sBAAsBpH,GAAS,IAAKH,EAAI,EAAGA,EAAIutL,EAAiBrtL,OAAQF,IAAOI,EAAMmtL,EAAiBvtL,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,GAAkBR,OAAOS,UAAUmkD,qBAAqBjkD,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,GAAQ,CAAE,OAAOL,CAAQ,CAG3e,SAASu0I,GAAkBv0I,EAAQgB,GAAS,IAAK,IAAIf,EAAI,EAAGA,EAAIe,EAAMb,OAAQF,IAAK,CAAE,IAAI45H,EAAa74H,EAAMf,GAAI45H,EAAWlyH,WAAakyH,EAAWlyH,aAAc,EAAOkyH,EAAW1rH,cAAe,EAAU,UAAW0rH,IAAYA,EAAWzrH,UAAW,GAAMvO,OAAO6H,eAAe1H,EAAQ65H,EAAWx5H,IAAKw5H,EAAa,CAAE,CAG5T,SAASoS,GAAgB/nI,EAAGa,GAA6I,OAAxIknI,GAAkBpsI,OAAOoiH,eAAiBpiH,OAAOoiH,eAAeliH,OAAS,SAAyBmE,EAAGa,GAAsB,OAAjBb,EAAE+/G,UAAYl/G,EAAUb,CAAG,EAAU+nI,GAAgB/nI,EAAGa,EAAI,CACvM,SAASyvI,GAAaC,GAAW,IAAIC,EAGrC,WAAuC,GAAuB,qBAAZC,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,oBAAVpmB,MAAsB,OAAO,EAAM,IAAsF,OAAhF5nH,QAAQvG,UAAUwG,QAAQtG,KAAKm0I,QAAQC,UAAU/tI,QAAS,IAAI,WAAa,MAAY,CAAM,CAAE,MAAOvD,GAAK,OAAO,CAAO,CAAE,CAHvQwxI,GAA6B,OAAO,WAAkC,IAAsC7uG,EAAlC8uG,EAAQC,GAAgBP,GAAkB,GAAIC,EAA2B,CAAE,IAAIO,EAAYD,GAAgBt0I,MAAM2L,YAAa45B,EAAS0uG,QAAQC,UAAUG,EAAO70I,UAAW+0I,EAAY,MAAShvG,EAAS8uG,EAAMt0I,MAAMC,KAAMR,WAAc,OACpX,SAAoCwD,EAAMlD,GAAQ,GAAIA,IAA2B,WAAlBozI,GAAQpzI,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIyJ,UAAU,4DAA+D,OAAOirI,GAAuBxxI,EAAO,CAD4Fw3H,CAA2Bx6H,KAAMulC,EAAS,CAAG,CAExa,SAASivG,GAAuBxxI,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIu3H,eAAe,6DAAgE,OAAOv3H,CAAM,CAErK,SAASsxI,GAAgB9wI,GAA+J,OAA1J8wI,GAAkBn1I,OAAOoiH,eAAiBpiH,OAAOoF,eAAelF,OAAS,SAAyBmE,GAAK,OAAOA,EAAE+/G,WAAapkH,OAAOoF,eAAef,EAAI,EAAU8wI,GAAgB9wI,EAAI,CAQnN,IAAIkhI,GAAY,CACd6tD,MAAO96D,KAAAA,KACPrV,MAAOqV,KAAAA,OACPrY,SAAUqY,KAAAA,KACV11H,UAAW01H,KAAAA,OACX4zD,UAAW5zD,KAAAA,OACX+mB,SAAU/mB,KAAAA,KACVohB,QAASphB,KAAAA,KACT,gBAAiBA,KAAAA,KACjB9vH,MAAO8vH,KAAAA,KACPptH,IAAKshL,GACLwC,IAAK12D,KAAAA,KACL4Q,SAAU5Q,KAAAA,UAAoB,CAACA,KAAAA,OAAkBA,KAAAA,OAAkBA,KAAAA,QAMjE+6D,GAA8B,SAAUhlD,IAhC5C,SAAmBnR,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI/yH,UAAU,sDAAyD8yH,EAASz8H,UAAYT,OAAOiI,OAAOk1H,GAAcA,EAAW18H,UAAW,CAAE+L,YAAa,CAAEzE,MAAOm1H,EAAU3uH,UAAU,EAAMD,cAAc,KAAWtO,OAAO6H,eAAeq1H,EAAU,YAAa,CAAE3uH,UAAU,IAAc4uH,GAAYiP,GAAgBlP,EAAUC,EAAa,CAiCjcC,CAAUi2D,EAAgBhlD,GAC1B,IAnCoBpU,EAAaC,EAAYC,EAmCzCob,EAASZ,GAAa0+C,GAC1B,SAASA,EAAelyL,GACtB,IAAIg6H,EAIJ,OA3CJ,SAAyBvwH,EAAUqvH,GAAe,KAAMrvH,aAAoBqvH,GAAgB,MAAM,IAAI7vH,UAAU,oCAAwC,CAwCpJ8wH,CAAgBr6H,KAAMwyL,IACtBl4D,EAAQoa,EAAO50I,KAAKE,KAAMM,IACpBu4I,QAAUve,EAAMue,QAAQx5I,KAAKm1I,GAAuBla,IACnDA,CACT,CAoFA,OA9HoBlB,EA2CPo5D,GA3CoBn5D,EA2CJ,CAAC,CAC5B15H,IAAK,UACLuH,MAAO,SAAiBtE,GAClB5C,KAAKM,MAAMk+I,UAAYx+I,KAAK4L,QAAQ4yI,SACtC57I,EAAE88H,kBAGA1/H,KAAKM,MAAM6tL,MAAQnuL,KAAKM,MAAM+J,KAChCzH,EAAE88H,iBAEA1/H,KAAKM,MAAMu4I,SACb74I,KAAKM,MAAMu4I,QAAQj2I,GAErB5C,KAAK4L,QAAQyiL,OAAOzrL,GACtB,GACC,CACDjD,IAAK,UACLuH,MAAO,WACL,OAAOlH,KAAK4L,QAAQ6iL,UAAYzuL,KAAKM,MAAM,gBAC7C,GACC,CACDX,IAAK,SACLuH,MAAO,WACL,IAoBI0yC,EApBA+kF,EAAS3+H,KACT+uI,EAAc/uI,KAAKM,MACrByB,EAAYgtI,EAAYhtI,UACxBqgH,EAAQ2sB,EAAY3sB,MACpBipE,EAAYt8C,EAAYs8C,UACxBkH,EAAQxjD,EAAYwjD,MACpB5qL,EAAQonI,EAAYpnI,MACpBwmL,EAAMp/C,EAAYo/C,IAClB9jL,EAAM0kI,EAAY1kI,IAClBg+H,EAAW0G,EAAY1G,SACvB/nI,EAAQi4H,GAAyBwW,EAAapD,IAC5CmP,EAAYx6I,EAAM,eAAiB,kBACnCu+C,EAAUusI,GAAgBxsI,KAAW78C,EAAW,CAClD,kBAAmBwwL,GAAS5qL,EAC5B,wBAAyBA,EACzB,WAAYwmL,IACV9C,GACAjsE,EAAqC,qBAAnB9+G,EAAM8+G,SAA2B9+G,EAAM8+G,SAAwBksD,IAAAA,cAAoB,OAAQ,CAC/GvpK,UAAW,mBACV+4I,GAYH,OAVIqzC,IAAQ9jL,GACVuvC,EAAM,IACNt5C,EAAMmnJ,KAAO,KACHp9I,EAKVuvC,EAAMvvC,GAJNuvC,EAAMs4I,GACN5xL,EAAM8hH,MAAQA,EACd9hH,EAAM+qL,UAAYA,GAIhBrrL,KAAK4L,QAAQ2iL,SACKjjB,IAAAA,cAAoB1xH,EAAK16C,GAAS,CAAC,EAAGoB,EAAO,CAC/DyB,UAAW88C,EACXg6F,QAAS74I,KAAK64I,QACd14I,IAAKH,KAAK4L,QAAQglL,YAClB,gBAAiB5wL,KAAK4L,QAAQsiL,OAC9B,gBAAiBluL,KAAKyyL,UACtBrzE,SAAUA,KAGMksD,IAAAA,cAAoBsmB,GAAW,CACjDvpD,SAAUA,IACT,SAAUnoI,GACX,IApHiBwvB,EAAK/vB,EAAKuH,EAoHvB/G,EAAMD,EAAKC,IAMf,OAAoBmrK,IAAAA,cAAoB1xH,EAAK16C,GAAS,CAAC,EAAGoB,GA1H/B4G,EAqHX,SAAmBwrL,GACjCvyL,EAAIuyL,GACJ,IAAI9B,EAAcjyD,EAAO/yH,QAAQglL,YAC7BA,GAAaA,EAAY8B,EAC/B,GAzHsB/yL,EA0H8E,kBAARi6C,EAAmB,MAAQ,cA1HtGlqB,EA0HgE,CAAC,GA1H5BvwB,OAAO6H,eAAe0oB,EAAK/vB,EAAK,CAAEuH,MAAOA,EAAOD,YAAY,EAAMwG,cAAc,EAAMC,UAAU,IAAkBgiB,EAAI/vB,GAAOuH,EAAgBwoB,GA0HpD,CAC7I3tB,UAAW88C,EACXg6F,QAASla,EAAOka,QAChB,gBAAiBla,EAAO/yH,QAAQsiL,OAChC,gBAAiBvvD,EAAO8zD,UACxBrzE,SAAUA,IAEd,GACF,MA5H0Ey0B,GAAkBza,EAAYx5H,UAAWy5H,GAAiBC,GAAaua,GAAkBza,EAAaE,GAAcn6H,OAAO6H,eAAeoyH,EAAa,YAAa,CAAE1rH,UAAU,IA8HrP8kL,CACT,CA9FkC,CA8FhClnB,IAAAA,WACFknB,GAAe9tD,UAAYA,GAC3B8tD,GAAe7tD,aApGI,CACjBviB,MAAO,YACP,iBAAiB,GAmGnBowE,GAAejB,YAAcxD,GAC7B,YC3Ie,SAAS4E,GAAUzjK,GAChC,GAAY,MAARA,EACF,OAAO/rB,OAGT,GAAwB,oBAApB+rB,EAAK1pB,WAAkC,CACzC,IAAIotL,EAAgB1jK,EAAK0jK,cACzB,OAAOA,GAAgBA,EAAcnkB,aAAwBtrK,MAC/D,CAEA,OAAO+rB,CACT,CCTA,SAASg3D,GAAUh3D,GAEjB,OAAOA,aADUyjK,GAAUzjK,GAAMy5G,SACIz5G,aAAgBy5G,OACvD,CAEA,SAASkqD,GAAc3jK,GAErB,OAAOA,aADUyjK,GAAUzjK,GAAM9pB,aACI8pB,aAAgB9pB,WACvD,CAEA,SAAS0tL,GAAa5jK,GAEpB,MAA0B,qBAAf6jK,aAKJ7jK,aADUyjK,GAAUzjK,GAAM6jK,YACI7jK,aAAgB6jK,WACvD,CCpBO,IAAIj1J,GAAMhwB,KAAKgwB,IACX2V,GAAM3lC,KAAK2lC,IACXmtC,GAAQ9yE,KAAK8yE,MCFT,SAASoyG,KACtB,IAAIC,EAAShuL,UAAUiuL,cAEvB,OAAc,MAAVD,GAAkBA,EAAOE,QAAU1uL,MAAMK,QAAQmuL,EAAOE,QACnDF,EAAOE,OAAO1iL,KAAI,SAAUgW,GACjC,OAAOA,EAAK2sK,MAAQ,IAAM3sK,EAAK6zF,OACjC,IAAGxwG,KAAK,KAGH7E,UAAUwF,SACnB,CCTe,SAAS4oL,KACtB,OAAQ,iCAAiCxpL,KAAKmpL,KAChD,CCCe,SAASnzD,GAAsBj8E,EAAS0vI,EAAcC,QAC9C,IAAjBD,IACFA,GAAe,QAGO,IAApBC,IACFA,GAAkB,GAGpB,IAAIC,EAAa5vI,EAAQi8E,wBACrB4zD,EAAS,EACTC,EAAS,EAETJ,GAAgBT,GAAcjvI,KAChC6vI,EAAS7vI,EAAQu8E,YAAc,GAAIv/C,GAAM4yG,EAAWjzL,OAASqjD,EAAQu8E,aAAmB,EACxFuzD,EAAS9vI,EAAQy8E,aAAe,GAAIz/C,GAAM4yG,EAAWhzL,QAAUojD,EAAQy8E,cAAoB,GAG7F,IACIszD,GADOztG,GAAUtiC,GAAW+uI,GAAU/uI,GAAWzgD,QAC3BwwL,eAEtBC,GAAoBP,MAAsBE,EAC1C9xL,GAAK+xL,EAAWrkE,MAAQykE,GAAoBD,EAAiBA,EAAeE,WAAa,IAAMJ,EAC/F/xL,GAAK8xL,EAAW56D,KAAOg7D,GAAoBD,EAAiBA,EAAe1oD,UAAY,IAAMyoD,EAC7FnzL,EAAQizL,EAAWjzL,MAAQkzL,EAC3BjzL,EAASgzL,EAAWhzL,OAASkzL,EACjC,MAAO,CACLnzL,MAAOA,EACPC,OAAQA,EACRo4H,IAAKl3H,EACL0tH,MAAO3tH,EAAIlB,EACXk4H,OAAQ/2H,EAAIlB,EACZ2uH,KAAM1tH,EACNA,EAAGA,EACHC,EAAGA,EAEP,CCvCe,SAASoyL,GAAgB5kK,GACtC,IAAI6kK,EAAMpB,GAAUzjK,GAGpB,MAAO,CACLksG,WAHe24D,EAAIC,YAInB34D,UAHc04D,EAAIlpD,YAKtB,CCTe,SAASopD,GAAYrwI,GAClC,OAAOA,GAAWA,EAAQswI,UAAY,IAAIx1G,cAAgB,IAC5D,CCDe,SAASy1G,GAAmBvwI,GAEzC,QAASsiC,GAAUtiC,GAAWA,EAAQgvI,cACtChvI,EAAQ5+C,WAAa7B,OAAO6B,UAAUwF,eACxC,CCFe,SAAS4pL,GAAoBxwI,GAQ1C,OAAOi8E,GAAsBs0D,GAAmBvwI,IAAUurE,KAAO2kE,GAAgBlwI,GAASw3E,UAC5F,CCXe,SAAS8J,GAAiBthF,GACvC,OAAO+uI,GAAU/uI,GAASshF,iBAAiBthF,EAC7C,CCFe,SAASywI,GAAezwI,GAErC,IAAIqhF,EAAoBC,GAAiBthF,GACrCspC,EAAW+3C,EAAkB/3C,SAC7BonG,EAAYrvD,EAAkBqvD,UAC9BC,EAAYtvD,EAAkBsvD,UAElC,MAAO,6BAA6B1qL,KAAKqjF,EAAWqnG,EAAYD,EAClE,CCSe,SAASE,GAAiBC,EAAyB3pD,EAAc4pD,QAC9D,IAAZA,IACFA,GAAU,GAGZ,IAAIC,EAA0B9B,GAAc/nD,GACxC8pD,EAAuB/B,GAAc/nD,IAf3C,SAAyBlnF,GACvB,IAAIixI,EAAOjxI,EAAQi8E,wBACf4zD,EAAS7yG,GAAMi0G,EAAKt0L,OAASqjD,EAAQu8E,aAAe,EACpDuzD,EAAS9yG,GAAMi0G,EAAKr0L,QAAUojD,EAAQy8E,cAAgB,EAC1D,OAAkB,IAAXozD,GAA2B,IAAXC,CACzB,CAU4DoB,CAAgBhqD,GACtEtgI,EAAkB2pL,GAAmBrpD,GACrC+pD,EAAOh1D,GAAsB40D,EAAyBG,EAAsBF,GAC5EK,EAAS,CACX35D,WAAY,EACZC,UAAW,GAET25D,EAAU,CACZvzL,EAAG,EACHC,EAAG,GAkBL,OAfIizL,IAA4BA,IAA4BD,MACxB,SAA9BT,GAAYnpD,IAChBupD,GAAe7pL,MACbuqL,ECnCS,SAAuB7lK,GACpC,OAAIA,IAASyjK,GAAUzjK,IAAU2jK,GAAc3jK,GCJxC,CACLksG,YAFyCx3E,EDQb10B,GCNRksG,WACpBC,UAAWz3E,EAAQy3E,WDGZy4D,GAAgB5kK,GCNZ,IAA8B00B,CDU7C,CD6BeqxI,CAAcnqD,IAGrB+nD,GAAc/nD,KAChBkqD,EAAUn1D,GAAsBiL,GAAc,IACtCrpI,GAAKqpI,EAAaoqD,WAC1BF,EAAQtzL,GAAKopI,EAAaqqD,WACjB3qL,IACTwqL,EAAQvzL,EAAI2yL,GAAoB5pL,KAI7B,CACL/I,EAAGozL,EAAK1lE,KAAO4lE,EAAO35D,WAAa45D,EAAQvzL,EAC3CC,EAAGmzL,EAAKj8D,IAAMm8D,EAAO15D,UAAY25D,EAAQtzL,EACzCnB,MAAOs0L,EAAKt0L,MACZC,OAAQq0L,EAAKr0L,OAEjB,CGtDe,SAAS40L,GAAcxxI,GACpC,IAAI4vI,EAAa3zD,GAAsBj8E,GAGnCrjD,EAAQqjD,EAAQu8E,YAChB3/H,EAASojD,EAAQy8E,aAUrB,OARIvyH,KAAKwjF,IAAIkiG,EAAWjzL,MAAQA,IAAU,IACxCA,EAAQizL,EAAWjzL,OAGjBuN,KAAKwjF,IAAIkiG,EAAWhzL,OAASA,IAAW,IAC1CA,EAASgzL,EAAWhzL,QAGf,CACLiB,EAAGmiD,EAAQiwI,WACXnyL,EAAGkiD,EAAQqnF,UACX1qI,MAAOA,EACPC,OAAQA,EAEZ,CCrBe,SAAS60L,GAAczxI,GACpC,MAA6B,SAAzBqwI,GAAYrwI,GACPA,EAMPA,EAAQ0xI,cACR1xI,EAAQ2mF,aACRuoD,GAAalvI,GAAWA,EAAQ+gH,KAAO,OAEvCwvB,GAAmBvwI,EAGvB,CCde,SAAS6mF,GAAgBv7G,GACtC,MAAI,CAAC,OAAQ,OAAQ,aAAa3kB,QAAQ0pL,GAAY/kK,KAAU,EAEvDA,EAAK0jK,cAAc7lL,KAGxB8lL,GAAc3jK,IAASmlK,GAAenlK,GACjCA,EAGFu7G,GAAgB4qD,GAAcnmK,GACvC,CCJe,SAASqmK,GAAkB3xI,EAASslE,GACjD,IAAIssE,OAES,IAATtsE,IACFA,EAAO,IAGT,IAAIshB,EAAeC,GAAgB7mF,GAC/B6xI,EAASjrD,KAAqE,OAAlDgrD,EAAwB5xI,EAAQgvI,oBAAyB,EAAS4C,EAAsBzoL,MACpHgnL,EAAMpB,GAAUnoD,GAChBlrI,EAASm2L,EAAS,CAAC1B,GAAKrrL,OAAOqrL,EAAIJ,gBAAkB,GAAIU,GAAe7pD,GAAgBA,EAAe,IAAMA,EAC7GkrD,EAAcxsE,EAAKxgH,OAAOpJ,GAC9B,OAAOm2L,EAASC,EAChBA,EAAYhtL,OAAO6sL,GAAkBF,GAAc/1L,IACrD,CCxBe,SAASq2L,GAAe/xI,GACrC,MAAO,CAAC,QAAS,KAAM,MAAMr5C,QAAQ0pL,GAAYrwI,KAAa,CAChE,CCKA,SAASgyI,GAAoBhyI,GAC3B,OAAKivI,GAAcjvI,IACoB,UAAvCshF,GAAiBthF,GAAS4hC,SAInB5hC,EAAQknF,aAHN,IAIX,CAwCe,SAAS+qD,GAAgBjyI,GAItC,IAHA,IAAIzgD,EAASwvL,GAAU/uI,GACnBknF,EAAe8qD,GAAoBhyI,GAEhCknF,GAAgB6qD,GAAe7qD,IAA6D,WAA5C5F,GAAiB4F,GAActlD,UACpFslD,EAAe8qD,GAAoB9qD,GAGrC,OAAIA,IAA+C,SAA9BmpD,GAAYnpD,IAA0D,SAA9BmpD,GAAYnpD,IAAwE,WAA5C5F,GAAiB4F,GAActlD,UAC3HriF,EAGF2nI,GAhDT,SAA4BlnF,GAC1B,IAAIkyI,EAAY,WAAWjsL,KAAKmpL,MAGhC,GAFW,WAAWnpL,KAAKmpL,OAEfH,GAAcjvI,IAII,UAFXshF,GAAiBthF,GAEnB4hC,SACb,OAAO,KAIX,IAAIuwG,EAAcV,GAAczxI,GAMhC,IAJIkvI,GAAaiD,KACfA,EAAcA,EAAYpxB,MAGrBkuB,GAAckD,IAAgB,CAAC,OAAQ,QAAQxrL,QAAQ0pL,GAAY8B,IAAgB,GAAG,CAC3F,IAAI1zE,EAAM6iB,GAAiB6wD,GAI3B,GAAsB,SAAlB1zE,EAAInhH,WAA4C,SAApBmhH,EAAI2zE,aAA0C,UAAhB3zE,EAAI4zE,UAAiF,IAA1D,CAAC,YAAa,eAAe1rL,QAAQ83G,EAAI6zE,aAAsBJ,GAAgC,WAAnBzzE,EAAI6zE,YAA2BJ,GAAazzE,EAAI/4G,QAAyB,SAAf+4G,EAAI/4G,OACjO,OAAOysL,EAEPA,EAAcA,EAAYxrD,UAE9B,CAEA,OAAO,IACT,CAgByB4rD,CAAmBvyI,IAAYzgD,CACxD,CCpEO,IAAIy1H,GAAM,MACNH,GAAS,SACTrJ,GAAQ,QACRD,GAAO,OACPinE,GAAO,OACPC,GAAiB,CAACz9D,GAAKH,GAAQrJ,GAAOD,IACtC3mE,GAAQ,QACRC,GAAM,MACN6tI,GAAkB,kBAClBC,GAAW,WACXC,GAAS,SACT/+G,GAAY,YACZg/G,GAAmCJ,GAAe5pL,QAAO,SAAUw5J,EAAKywB,GACjF,OAAOzwB,EAAIv9J,OAAO,CAACguL,EAAY,IAAMluI,GAAOkuI,EAAY,IAAMjuI,IAChE,GAAG,IACQkuI,GAA0B,GAAGjuL,OAAO2tL,GAAgB,CAACD,KAAO3pL,QAAO,SAAUw5J,EAAKywB,GAC3F,OAAOzwB,EAAIv9J,OAAO,CAACguL,EAAWA,EAAY,IAAMluI,GAAOkuI,EAAY,IAAMjuI,IAC3E,GAAG,IAaQmuI,GAAiB,CAXJ,aACN,OACK,YAEC,aACN,OACK,YAEE,cACN,QACK,cC3BxB,SAASjzK,GAAMkzK,GACb,IAAIpmL,EAAM,IAAIhN,IACVm/C,EAAU,IAAIj/C,IACd4hC,EAAS,GAKb,SAAS6mC,EAAKo0G,GACZ59H,EAAQ58C,IAAIw6K,EAAS9uK,MACN,GAAGhJ,OAAO83K,EAASsW,UAAY,GAAItW,EAASuW,kBAAoB,IACtEnvL,SAAQ,SAAUovL,GACzB,IAAKp0I,EAAQ98C,IAAIkxL,GAAM,CACrB,IAAIC,EAAcxmL,EAAI5K,IAAImxL,GAEtBC,GACF7qH,EAAK6qH,EAET,CACF,IACA1xJ,EAAO1+B,KAAK25K,EACd,CAQA,OAzBAqW,EAAUjvL,SAAQ,SAAU44K,GAC1B/vK,EAAI1K,IAAIy6K,EAAS9uK,KAAM8uK,EACzB,IAiBAqW,EAAUjvL,SAAQ,SAAU44K,GACrB59H,EAAQ98C,IAAI06K,EAAS9uK,OAExB06D,EAAKo0G,EAET,IACOj7I,CACT,CChCe,SAASm1C,GAASzG,GAC/B,IAAIijH,EACJ,OAAO,WAUL,OATKA,IACHA,EAAU,IAAI7zL,SAAQ,SAAUm1B,GAC9Bn1B,QAAQm1B,UAAUhlB,MAAK,WACrB0jL,OAAU90L,EACVo2B,EAAQy7C,IACV,GACF,KAGKijH,CACT,CACF,CCLA,IAAIC,GAAkB,CACpBT,UAAW,SACXG,UAAW,GACXO,SAAU,YAGZ,SAASC,KACP,IAAK,IAAIvwK,EAAOtnB,UAAUC,OAAQwK,EAAO,IAAIxF,MAAMqiB,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAC/E9c,EAAK8c,GAAQvnB,UAAUunB,GAGzB,OAAQ9c,EAAKZ,MAAK,SAAUu6C,GAC1B,QAASA,GAAoD,oBAAlCA,EAAQi8E,sBACrC,GACF,CAEO,SAASy3D,GAAgBC,QACL,IAArBA,IACFA,EAAmB,CAAC,GAGtB,IAAIC,EAAoBD,EACpBE,EAAwBD,EAAkBE,iBAC1CA,OAA6C,IAA1BD,EAAmC,GAAKA,EAC3DE,EAAyBH,EAAkBI,eAC3CA,OAA4C,IAA3BD,EAAoCR,GAAkBQ,EAC3E,OAAO,SAAsBlgH,EAAW++G,EAAQnlJ,QAC9B,IAAZA,IACFA,EAAUumJ,GAGZ,IAAI7uL,EAAQ,CACV2tL,UAAW,SACXmB,iBAAkB,GAClBxmJ,QAASlyC,OAAOC,OAAO,CAAC,EAAG+3L,GAAiBS,GAC5CE,cAAe,CAAC,EAChBC,SAAU,CACRtgH,UAAWA,EACX++G,OAAQA,GAEV3zC,WAAY,CAAC,EACbl6I,OAAQ,CAAC,GAEPqvL,EAAmB,GACnBC,GAAc,EACdluL,EAAW,CACbhB,MAAOA,EACPmvL,WAAY,SAAoBC,GAC9B,IAAI9mJ,EAAsC,oBAArB8mJ,EAAkCA,EAAiBpvL,EAAMsoC,SAAW8mJ,EACzFC,IACArvL,EAAMsoC,QAAUlyC,OAAOC,OAAO,CAAC,EAAGw4L,EAAgB7uL,EAAMsoC,QAASA,GACjEtoC,EAAMsvL,cAAgB,CACpB5gH,UAAWyO,GAAUzO,GAAa89G,GAAkB99G,GAAaA,EAAU6gH,eAAiB/C,GAAkB99G,EAAU6gH,gBAAkB,GAC1I9B,OAAQjB,GAAkBiB,IAI5B,IAAIqB,EFhCG,SAAwBhB,GAErC,IAAIgB,EAAmBl0K,GAAMkzK,GAE7B,OAAOD,GAAenqL,QAAO,SAAUw5J,EAAKsyB,GAC1C,OAAOtyB,EAAIv9J,OAAOmvL,EAAiBvuL,QAAO,SAAUk3K,GAClD,OAAOA,EAAS+X,QAAUA,CAC5B,IACF,GAAG,GACL,CEuB+BC,CClEhB,SAAqB3B,GAClC,IAAI4B,EAAS5B,EAAUpqL,QAAO,SAAUgsL,EAAQjvI,GAC9C,IAAIkvI,EAAWD,EAAOjvI,EAAQ93C,MAK9B,OAJA+mL,EAAOjvI,EAAQ93C,MAAQgnL,EAAWv5L,OAAOC,OAAO,CAAC,EAAGs5L,EAAUlvI,EAAS,CACrEnY,QAASlyC,OAAOC,OAAO,CAAC,EAAGs5L,EAASrnJ,QAASmY,EAAQnY,SACrDxgC,KAAM1R,OAAOC,OAAO,CAAC,EAAGs5L,EAAS7nL,KAAM24C,EAAQ34C,QAC5C24C,EACEivI,CACT,GAAG,CAAC,GAEJ,OAAOt5L,OAAOyH,KAAK6xL,GAAQhoL,KAAI,SAAU9Q,GACvC,OAAO84L,EAAO94L,EAChB,GACF,CDqD8Cg5L,CAAY,GAAGjwL,OAAOgvL,EAAkB3uL,EAAMsoC,QAAQwlJ,aAM5F,OAJA9tL,EAAM8uL,iBAAmBA,EAAiBvuL,QAAO,SAAUpD,GACzD,OAAOA,EAAE0yL,OACX,IA+FF7vL,EAAM8uL,iBAAiBjwL,SAAQ,SAAU1H,GACvC,IAAIwR,EAAOxR,EAAKwR,KACZmnL,EAAe34L,EAAKmxC,QACpBA,OAA2B,IAAjBwnJ,EAA0B,CAAC,EAAIA,EACzCC,EAAS54L,EAAK44L,OAElB,GAAsB,oBAAXA,EAAuB,CAChC,IAAIC,EAAYD,EAAO,CACrB/vL,MAAOA,EACP2I,KAAMA,EACN3H,SAAUA,EACVsnC,QAASA,IAGP2nJ,EAAS,WAAmB,EAEhChB,EAAiBnxL,KAAKkyL,GAAaC,EACrC,CACF,IA/GSjvL,EAASy6E,QAClB,EAMAi7C,YAAa,WACX,IAAIw4D,EAAJ,CAIA,IAAIgB,EAAkBlwL,EAAMgvL,SACxBtgH,EAAYwhH,EAAgBxhH,UAC5B++G,EAASyC,EAAgBzC,OAG7B,GAAKa,GAAiB5/G,EAAW++G,GAAjC,CAKAztL,EAAMmwL,MAAQ,CACZzhH,UAAW+8G,GAAiB/8G,EAAWo+G,GAAgBW,GAAoC,UAA3BztL,EAAMsoC,QAAQ+lJ,UAC9EZ,OAAQpB,GAAcoB,IAOxBztL,EAAMu9B,OAAQ,EACdv9B,EAAM2tL,UAAY3tL,EAAMsoC,QAAQqlJ,UAKhC3tL,EAAM8uL,iBAAiBjwL,SAAQ,SAAU44K,GACvC,OAAOz3K,EAAM+uL,cAActX,EAAS9uK,MAAQvS,OAAOC,OAAO,CAAC,EAAGohL,EAAS3vK,KACzE,IAEA,IAAK,IAAI6gB,EAAQ,EAAGA,EAAQ3oB,EAAM8uL,iBAAiBp4L,OAAQiyB,IACzD,IAAoB,IAAhB3oB,EAAMu9B,MAAV,CAMA,IAAI6yJ,EAAwBpwL,EAAM8uL,iBAAiBnmK,GAC/CuiD,EAAKklH,EAAsBllH,GAC3BmlH,EAAyBD,EAAsB9nJ,QAC/CgoJ,OAAsC,IAA3BD,EAAoC,CAAC,EAAIA,EACpD1nL,EAAOynL,EAAsBznL,KAEf,oBAAPuiE,IACTlrE,EAAQkrE,EAAG,CACTlrE,MAAOA,EACPsoC,QAASgoJ,EACT3nL,KAAMA,EACN3H,SAAUA,KACNhB,EAdR,MAHEA,EAAMu9B,OAAQ,EACd5U,GAAS,CAzBb,CATA,CAqDF,EAGA8yD,OAAQ9J,IAAS,WACf,OAAO,IAAIr3E,SAAQ,SAAUm1B,GAC3BzuB,EAAS01H,cACTjnG,EAAQzvB,EACV,GACF,IACAuwL,QAAS,WACPlB,IACAH,GAAc,CAChB,GAGF,IAAKZ,GAAiB5/G,EAAW++G,GAC/B,OAAOzsL,EAmCT,SAASquL,IACPJ,EAAiBpwL,SAAQ,SAAUqsE,GACjC,OAAOA,GACT,IACA+jH,EAAmB,EACrB,CAEA,OAvCAjuL,EAASmuL,WAAW7mJ,GAAS79B,MAAK,SAAUzK,IACrCkvL,GAAe5mJ,EAAQkoJ,eAC1BloJ,EAAQkoJ,cAAcxwL,EAE1B,IAmCOgB,CACT,CACF,CACO,IElMHm9H,GAAU,CACZA,SAAS,GCFI,SAASsyD,GAAiB9C,GACvC,OAAOA,EAAU/uL,MAAM,KAAK,EAC9B,CCHe,SAAS8xL,GAAa/C,GACnC,OAAOA,EAAU/uL,MAAM,KAAK,EAC9B,CCFe,SAAS+xL,GAAyBhD,GAC/C,MAAO,CAAC,MAAO,UAAUnsL,QAAQmsL,IAAc,EAAI,IAAM,GAC3D,CCEe,SAASiD,GAAez5L,GACrC,IAOI80L,EAPAv9G,EAAYv3E,EAAKu3E,UACjB7zB,EAAU1jD,EAAK0jD,QACf8yI,EAAYx2L,EAAKw2L,UACjBkD,EAAgBlD,EAAY8C,GAAiB9C,GAAa,KAC1DmD,EAAYnD,EAAY+C,GAAa/C,GAAa,KAClDoD,EAAUriH,EAAUh2E,EAAIg2E,EAAUl3E,MAAQ,EAAIqjD,EAAQrjD,MAAQ,EAC9Dw5L,EAAUtiH,EAAU/1E,EAAI+1E,EAAUj3E,OAAS,EAAIojD,EAAQpjD,OAAS,EAGpE,OAAQo5L,GACN,KAAKhhE,GACHo8D,EAAU,CACRvzL,EAAGq4L,EACHp4L,EAAG+1E,EAAU/1E,EAAIkiD,EAAQpjD,QAE3B,MAEF,KAAKi4H,GACHu8D,EAAU,CACRvzL,EAAGq4L,EACHp4L,EAAG+1E,EAAU/1E,EAAI+1E,EAAUj3E,QAE7B,MAEF,KAAK4uH,GACH4lE,EAAU,CACRvzL,EAAGg2E,EAAUh2E,EAAIg2E,EAAUl3E,MAC3BmB,EAAGq4L,GAEL,MAEF,KAAK5qE,GACH6lE,EAAU,CACRvzL,EAAGg2E,EAAUh2E,EAAImiD,EAAQrjD,MACzBmB,EAAGq4L,GAEL,MAEF,QACE/E,EAAU,CACRvzL,EAAGg2E,EAAUh2E,EACbC,EAAG+1E,EAAU/1E,GAInB,IAAIs4L,EAAWJ,EAAgBF,GAAyBE,GAAiB,KAEzE,GAAgB,MAAZI,EAAkB,CACpB,IAAIzpK,EAAmB,MAAbypK,EAAmB,SAAW,QAExC,OAAQH,GACN,KAAKrxI,GACHwsI,EAAQgF,GAAYhF,EAAQgF,IAAaviH,EAAUlnD,GAAO,EAAIqzB,EAAQrzB,GAAO,GAC7E,MAEF,KAAKk4B,GACHusI,EAAQgF,GAAYhF,EAAQgF,IAAaviH,EAAUlnD,GAAO,EAAIqzB,EAAQrzB,GAAO,GAKnF,CAEA,OAAOykK,CACT,CC5DA,IAAIiF,GAAa,CACfrhE,IAAK,OACLxJ,MAAO,OACPqJ,OAAQ,OACRtJ,KAAM,QAeD,SAAS+qE,GAAYjnL,GAC1B,IAAIknL,EAEA3D,EAASvjL,EAAMujL,OACf4D,EAAannL,EAAMmnL,WACnB1D,EAAYzjL,EAAMyjL,UAClBmD,EAAY5mL,EAAM4mL,UAClB7E,EAAU/hL,EAAM+hL,QAChBxvG,EAAWvyE,EAAMuyE,SACjB60G,EAAkBpnL,EAAMonL,gBACxBC,EAAWrnL,EAAMqnL,SACjBC,EAAetnL,EAAMsnL,aACrB7F,EAAUzhL,EAAMyhL,QAChB8F,EAAaxF,EAAQvzL,EACrBA,OAAmB,IAAf+4L,EAAwB,EAAIA,EAChCC,EAAazF,EAAQtzL,EACrBA,OAAmB,IAAf+4L,EAAwB,EAAIA,EAEhCz6K,EAAgC,oBAAjBu6K,EAA8BA,EAAa,CAC5D94L,EAAGA,EACHC,EAAGA,IACA,CACHD,EAAGA,EACHC,EAAGA,GAGLD,EAAIue,EAAMve,EACVC,EAAIse,EAAMte,EACV,IAAIg5L,EAAO1F,EAAQn1L,eAAe,KAC9B86L,EAAO3F,EAAQn1L,eAAe,KAC9B+6L,EAAQzrE,GACR0rE,EAAQjiE,GACRm7D,EAAM5wL,OAEV,GAAIm3L,EAAU,CACZ,IAAIxvD,EAAe+qD,GAAgBW,GAC/BsE,EAAa,eACbC,EAAY,cAchB,GAZIjwD,IAAiB6nD,GAAU6D,IAGmB,WAA5CtxD,GAFJ4F,EAAeqpD,GAAmBqC,IAEChxG,UAAsC,aAAbA,IAC1Ds1G,EAAa,eACbC,EAAY,eAOZrE,IAAc99D,KAAQ89D,IAAcvnE,IAAQunE,IAActnE,KAAUyqE,IAAcpxI,GACpFoyI,EAAQpiE,GAGR/2H,IAFcgzL,GAAW5pD,IAAiBipD,GAAOA,EAAIJ,eAAiBI,EAAIJ,eAAenzL,OACzFsqI,EAAagwD,IACEV,EAAW55L,OAC1BkB,GAAK24L,EAAkB,GAAK,EAG9B,GAAI3D,IAAcvnE,KAASunE,IAAc99D,IAAO89D,IAAcj+D,KAAWohE,IAAcpxI,GACrFmyI,EAAQxrE,GAGR3tH,IAFcizL,GAAW5pD,IAAiBipD,GAAOA,EAAIJ,eAAiBI,EAAIJ,eAAepzL,MACzFuqI,EAAaiwD,IACEX,EAAW75L,MAC1BkB,GAAK44L,EAAkB,GAAK,CAEhC,CAEA,IAgBMW,EAhBFC,EAAe97L,OAAOC,OAAO,CAC/BomF,SAAUA,GACT80G,GAAYL,IAEX1vK,GAAyB,IAAjBgwK,EAlFd,SAA2Br6L,EAAM6zL,GAC/B,IAAItyL,EAAIvB,EAAKuB,EACTC,EAAIxB,EAAKwB,EACTw5L,EAAMnH,EAAIoH,kBAAoB,EAClC,MAAO,CACL15L,EAAGm/E,GAAMn/E,EAAIy5L,GAAOA,GAAO,EAC3Bx5L,EAAGk/E,GAAMl/E,EAAIw5L,GAAOA,GAAO,EAE/B,CA0EsCE,CAAkB,CACpD35L,EAAGA,EACHC,EAAGA,GACFixL,GAAU6D,IAAW,CACtB/0L,EAAGA,EACHC,EAAGA,GAML,OAHAD,EAAI8oB,EAAM9oB,EACVC,EAAI6oB,EAAM7oB,EAEN24L,EAGKl7L,OAAOC,OAAO,CAAC,EAAG67L,IAAeD,EAAiB,CAAC,GAAkBH,GAASF,EAAO,IAAM,GAAIK,EAAeJ,GAASF,EAAO,IAAM,GAAIM,EAAe95L,WAAa6yL,EAAIoH,kBAAoB,IAAM,EAAI,aAAe15L,EAAI,OAASC,EAAI,MAAQ,eAAiBD,EAAI,OAASC,EAAI,SAAUs5L,IAG5R77L,OAAOC,OAAO,CAAC,EAAG67L,IAAed,EAAkB,CAAC,GAAmBU,GAASF,EAAOj5L,EAAI,KAAO,GAAIy4L,EAAgBS,GAASF,EAAOj5L,EAAI,KAAO,GAAI04L,EAAgBj5L,UAAY,GAAIi5L,GAC9L,CCvEA,UACEzoL,KAAM,SACNknL,SAAS,EACTL,MAAO,OACPzB,SAAU,CAAC,iBACX7iH,GA5BF,SAAgBhhE,GACd,IAAIlK,EAAQkK,EAAMlK,MACdsoC,EAAUp+B,EAAMo+B,QAChB3/B,EAAOuB,EAAMvB,KACb2pL,EAAkBhqJ,EAAQuW,OAC1BA,OAA6B,IAApByzI,EAA6B,CAAC,EAAG,GAAKA,EAC/CxqL,EAAO8lL,GAAWlqL,QAAO,SAAUw5J,EAAKywB,GAE1C,OADAzwB,EAAIywB,GA5BD,SAAiCA,EAAWwC,EAAOtxI,GACxD,IAAIgyI,EAAgBJ,GAAiB9C,GACjC4E,EAAiB,CAACnsE,GAAMyJ,IAAKruH,QAAQqvL,IAAkB,GAAK,EAAI,EAEhE15L,EAAyB,oBAAX0nD,EAAwBA,EAAOzoD,OAAOC,OAAO,CAAC,EAAG85L,EAAO,CACxExC,UAAWA,KACP9uI,EACF2zI,EAAWr7L,EAAK,GAChBs7L,EAAWt7L,EAAK,GAIpB,OAFAq7L,EAAWA,GAAY,EACvBC,GAAYA,GAAY,GAAKF,EACtB,CAACnsE,GAAMC,IAAO7kH,QAAQqvL,IAAkB,EAAI,CACjDn4L,EAAG+5L,EACH95L,EAAG65L,GACD,CACF95L,EAAG85L,EACH75L,EAAG85L,EAEP,CASqBC,CAAwB/E,EAAW3tL,EAAMmwL,MAAOtxI,GAC1Dq+G,CACT,GAAG,CAAC,GACAy1B,EAAwB7qL,EAAK9H,EAAM2tL,WACnCj1L,EAAIi6L,EAAsBj6L,EAC1BC,EAAIg6L,EAAsBh6L,EAEW,MAArCqH,EAAM+uL,cAAc6D,gBACtB5yL,EAAM+uL,cAAc6D,cAAcl6L,GAAKA,EACvCsH,EAAM+uL,cAAc6D,cAAcj6L,GAAKA,GAGzCqH,EAAM+uL,cAAcpmL,GAAQb,CAC9B,GC5CA,IAAI8sB,GAAO,CACTwxF,KAAM,QACNC,MAAO,OACPqJ,OAAQ,MACRG,IAAK,UAEQ,SAASgjE,GAAqBlF,GAC3C,OAAOA,EAAUttL,QAAQ,0BAA0B,SAAUuuF,GAC3D,OAAOh6D,GAAKg6D,EACd,GACF,CCVA,IAAIh6D,GAAO,CACT6qB,MAAO,MACPC,IAAK,SAEQ,SAASozI,GAA8BnF,GACpD,OAAOA,EAAUttL,QAAQ,cAAc,SAAUuuF,GAC/C,OAAOh6D,GAAKg6D,EACd,GACF,CCPe,SAASrpC,GAASlhC,EAAQiyF,GACvC,IAAIy8E,EAAWz8E,EAAM08E,aAAe18E,EAAM08E,cAE1C,GAAI3uK,EAAOkhC,SAAS+wD,GAClB,OAAO,EAEJ,GAAIy8E,GAAYhJ,GAAagJ,GAAW,CACzC,IAAIptL,EAAO2wG,EAEX,EAAG,CACD,GAAI3wG,GAAQ0e,EAAO4uK,WAAWttL,GAC5B,OAAO,EAITA,EAAOA,EAAK67H,YAAc77H,EAAKi2J,IACjC,OAASj2J,EACX,CAGF,OAAO,CACT,CCtBe,SAASutL,GAAiBpH,GACvC,OAAO11L,OAAOC,OAAO,CAAC,EAAGy1L,EAAM,CAC7B1lE,KAAM0lE,EAAKpzL,EACXm3H,IAAKi8D,EAAKnzL,EACV0tH,MAAOylE,EAAKpzL,EAAIozL,EAAKt0L,MACrBk4H,OAAQo8D,EAAKnzL,EAAImzL,EAAKr0L,QAE1B,CCqBA,SAAS07L,GAA2Bt4I,EAASu4I,EAAgB/E,GAC3D,OAAO+E,IAAmB5F,GAAW0F,GCzBxB,SAAyBr4I,EAASwzI,GAC/C,IAAIrD,EAAMpB,GAAU/uI,GAChB6pF,EAAO0mD,GAAmBvwI,GAC1B+vI,EAAiBI,EAAIJ,eACrBpzL,EAAQktI,EAAKtQ,YACb38H,EAASitI,EAAKrQ,aACd37H,EAAI,EACJC,EAAI,EAER,GAAIiyL,EAAgB,CAClBpzL,EAAQozL,EAAepzL,MACvBC,EAASmzL,EAAenzL,OACxB,IAAI47L,EAAiB/I,MAEjB+I,IAAmBA,GAA+B,UAAbhF,KACvC31L,EAAIkyL,EAAeE,WACnBnyL,EAAIiyL,EAAe1oD,UAEvB,CAEA,MAAO,CACL1qI,MAAOA,EACPC,OAAQA,EACRiB,EAAGA,EAAI2yL,GAAoBxwI,GAC3BliD,EAAGA,EAEP,CDDwD26L,CAAgBz4I,EAASwzI,IAAalxG,GAAUi2G,GAdxG,SAAoCv4I,EAASwzI,GAC3C,IAAIvC,EAAOh1D,GAAsBj8E,GAAS,EAAoB,UAAbwzI,GASjD,OARAvC,EAAKj8D,IAAMi8D,EAAKj8D,IAAMh1E,EAAQuxI,UAC9BN,EAAK1lE,KAAO0lE,EAAK1lE,KAAOvrE,EAAQsxI,WAChCL,EAAKp8D,OAASo8D,EAAKj8D,IAAMh1E,EAAQw5E,aACjCy3D,EAAKzlE,MAAQylE,EAAK1lE,KAAOvrE,EAAQu5E,YACjC03D,EAAKt0L,MAAQqjD,EAAQu5E,YACrB03D,EAAKr0L,OAASojD,EAAQw5E,aACtBy3D,EAAKpzL,EAAIozL,EAAK1lE,KACd0lE,EAAKnzL,EAAImzL,EAAKj8D,IACPi8D,CACT,CAG0HyH,CAA2BH,EAAgB/E,GAAY6E,GEtBlK,SAAyBr4I,GACtC,IAAI4xI,EAEA/nD,EAAO0mD,GAAmBvwI,GAC1B24I,EAAYzI,GAAgBlwI,GAC5B72C,EAA0D,OAAlDyoL,EAAwB5xI,EAAQgvI,oBAAyB,EAAS4C,EAAsBzoL,KAChGxM,EAAQu9B,GAAI2vG,EAAKxQ,YAAawQ,EAAKtQ,YAAapwH,EAAOA,EAAKkwH,YAAc,EAAGlwH,EAAOA,EAAKowH,YAAc,GACvG38H,EAASs9B,GAAI2vG,EAAKvQ,aAAcuQ,EAAKrQ,aAAcrwH,EAAOA,EAAKmwH,aAAe,EAAGnwH,EAAOA,EAAKqwH,aAAe,GAC5G37H,GAAK86L,EAAUnhE,WAAag5D,GAAoBxwI,GAChDliD,GAAK66L,EAAUlhE,UAMnB,MAJiD,QAA7C6J,GAAiBn4H,GAAQ0gI,GAAMz/B,YACjCvsG,GAAKq8B,GAAI2vG,EAAKtQ,YAAapwH,EAAOA,EAAKowH,YAAc,GAAK58H,GAGrD,CACLA,MAAOA,EACPC,OAAQA,EACRiB,EAAGA,EACHC,EAAGA,EAEP,CFCkM86L,CAAgBrI,GAAmBvwI,IACrO,CAsBe,SAAS64I,GAAgB74I,EAAS84I,EAAUC,EAAcvF,GACvE,IAAIwF,EAAmC,oBAAbF,EAlB5B,SAA4B94I,GAC1B,IAAI0yI,EAAkBf,GAAkBF,GAAczxI,IAElDi5I,EADoB,CAAC,WAAY,SAAStyL,QAAQ26H,GAAiBthF,GAAS4hC,WAAa,GACnDqtG,GAAcjvI,GAAWiyI,GAAgBjyI,GAAWA,EAE9F,OAAKsiC,GAAU22G,GAKRvG,EAAgBhtL,QAAO,SAAU6yL,GACtC,OAAOj2G,GAAUi2G,IAAmB7tI,GAAS6tI,EAAgBU,IAAmD,SAAhC5I,GAAYkI,EAC9F,IANS,EAOX,CAK6DW,CAAmBl5I,GAAW,GAAGl7C,OAAOg0L,GAC/FpG,EAAkB,GAAG5tL,OAAOk0L,EAAqB,CAACD,IAClDI,EAAsBzG,EAAgB,GACtC0G,EAAe1G,EAAgB7pL,QAAO,SAAUwwL,EAASd,GAC3D,IAAItH,EAAOqH,GAA2Bt4I,EAASu4I,EAAgB/E,GAK/D,OAJA6F,EAAQrkE,IAAM96F,GAAI+2J,EAAKj8D,IAAKqkE,EAAQrkE,KACpCqkE,EAAQ7tE,MAAQ37E,GAAIohJ,EAAKzlE,MAAO6tE,EAAQ7tE,OACxC6tE,EAAQxkE,OAAShlF,GAAIohJ,EAAKp8D,OAAQwkE,EAAQxkE,QAC1CwkE,EAAQ9tE,KAAOrxF,GAAI+2J,EAAK1lE,KAAM8tE,EAAQ9tE,MAC/B8tE,CACT,GAAGf,GAA2Bt4I,EAASm5I,EAAqB3F,IAK5D,OAJA4F,EAAaz8L,MAAQy8L,EAAa5tE,MAAQ4tE,EAAa7tE,KACvD6tE,EAAax8L,OAASw8L,EAAavkE,OAASukE,EAAapkE,IACzDokE,EAAav7L,EAAIu7L,EAAa7tE,KAC9B6tE,EAAat7L,EAAIs7L,EAAapkE,IACvBokE,CACT,CGpEe,SAASE,GAAmBC,GACzC,OAAOh+L,OAAOC,OAAO,CAAC,ECDf,CACLw5H,IAAK,EACLxJ,MAAO,EACPqJ,OAAQ,EACRtJ,KAAM,GDHuCguE,EACjD,CEHe,SAASC,GAAgBl2L,EAAON,GAC7C,OAAOA,EAAK6F,QAAO,SAAU4wL,EAAS19L,GAEpC,OADA09L,EAAQ19L,GAAOuH,EACRm2L,CACT,GAAG,CAAC,EACN,CCKe,SAASC,GAAev0L,EAAOsoC,QAC5B,IAAZA,IACFA,EAAU,CAAC,GAGb,IAAIgoJ,EAAWhoJ,EACXksJ,EAAqBlE,EAAS3C,UAC9BA,OAAmC,IAAvB6G,EAAgCx0L,EAAM2tL,UAAY6G,EAC9DC,EAAoBnE,EAASjC,SAC7BA,OAAiC,IAAtBoG,EAA+Bz0L,EAAMquL,SAAWoG,EAC3DC,EAAoBpE,EAASqD,SAC7BA,OAAiC,IAAtBe,EAA+BnH,GAAkBmH,EAC5DC,EAAwBrE,EAASsD,aACjCA,OAAyC,IAA1Be,EAAmCnH,GAAWmH,EAC7DC,EAAwBtE,EAASuE,eACjCA,OAA2C,IAA1BD,EAAmCnH,GAASmH,EAC7DE,EAAuBxE,EAASyE,YAChCA,OAAuC,IAAzBD,GAA0CA,EACxDE,EAAmB1E,EAAS1hB,QAC5BA,OAA+B,IAArBomB,EAA8B,EAAIA,EAC5CZ,EAAgBD,GAAsC,kBAAZvlB,EAAuBA,EAAUylB,GAAgBzlB,EAAS0e,KACpG2H,EAAaJ,IAAmBpH,GAAS/+G,GAAY++G,GACrD4D,EAAarxL,EAAMmwL,MAAM1C,OACzB5yI,EAAU76C,EAAMgvL,SAAS+F,EAAcE,EAAaJ,GACpDK,EAAqBxB,GAAgBv2G,GAAUtiC,GAAWA,EAAUA,EAAQ00I,gBAAkBnE,GAAmBprL,EAAMgvL,SAASvB,QAASkG,EAAUC,EAAcvF,GACjK8G,EAAsBr+D,GAAsB92H,EAAMgvL,SAAStgH,WAC3DkkH,EAAgBhC,GAAe,CACjCliH,UAAWymH,EACXt6I,QAASw2I,EACThD,SAAU,WACVV,UAAWA,IAETyH,EAAmBlC,GAAiB98L,OAAOC,OAAO,CAAC,EAAGg7L,EAAYuB,IAClEyC,EAAoBR,IAAmBpH,GAAS2H,EAAmBD,EAGnEG,EAAkB,CACpBzlE,IAAKqlE,EAAmBrlE,IAAMwlE,EAAkBxlE,IAAMukE,EAAcvkE,IACpEH,OAAQ2lE,EAAkB3lE,OAASwlE,EAAmBxlE,OAAS0kE,EAAc1kE,OAC7EtJ,KAAM8uE,EAAmB9uE,KAAOivE,EAAkBjvE,KAAOguE,EAAchuE,KACvEC,MAAOgvE,EAAkBhvE,MAAQ6uE,EAAmB7uE,MAAQ+tE,EAAc/tE,OAExEkvE,EAAav1L,EAAM+uL,cAAclwI,OAErC,GAAIg2I,IAAmBpH,IAAU8H,EAAY,CAC3C,IAAI12I,EAAS02I,EAAW5H,GACxBv3L,OAAOyH,KAAKy3L,GAAiBz2L,SAAQ,SAAUjI,GAC7C,IAAI8gF,EAAW,CAAC2uC,GAAOqJ,IAAQluH,QAAQ5K,IAAQ,EAAI,GAAK,EACpD+vI,EAAO,CAAC9W,GAAKH,IAAQluH,QAAQ5K,IAAQ,EAAI,IAAM,IACnD0+L,EAAgB1+L,IAAQioD,EAAO8nF,GAAQjvD,CACzC,GACF,CAEA,OAAO49G,CACT,CC/DO,SAASE,GAAO9qJ,EAAKvsC,EAAO42B,GACjC,OAAO0gK,GAAQ/qJ,EAAKgrJ,GAAQv3L,EAAO42B,GACrC,CCoIA,UACEpsB,KAAM,kBACNknL,SAAS,EACTL,MAAO,OACPtkH,GA/HF,SAAyB/zE,GACvB,IAAI6I,EAAQ7I,EAAK6I,MACbsoC,EAAUnxC,EAAKmxC,QACf3/B,EAAOxR,EAAKwR,KACZgtL,EAAoBrtJ,EAAQ2oJ,SAC5B2E,OAAsC,IAAtBD,GAAsCA,EACtDE,EAAmBvtJ,EAAQwtJ,QAC3BC,OAAoC,IAArBF,GAAsCA,EACrDlC,EAAWrrJ,EAAQqrJ,SACnBC,EAAetrJ,EAAQsrJ,aACvBmB,EAAczsJ,EAAQysJ,YACtBnmB,EAAUtmI,EAAQsmI,QAClBonB,EAAkB1tJ,EAAQ2tJ,OAC1BA,OAA6B,IAApBD,GAAoCA,EAC7CE,EAAwB5tJ,EAAQ6tJ,aAChCA,OAAyC,IAA1BD,EAAmC,EAAIA,EACtD/xG,EAAWowG,GAAev0L,EAAO,CACnC2zL,SAAUA,EACVC,aAAcA,EACdhlB,QAASA,EACTmmB,YAAaA,IAEXlE,EAAgBJ,GAAiBzwL,EAAM2tL,WACvCmD,EAAYJ,GAAa1wL,EAAM2tL,WAC/ByI,GAAmBtF,EACnBG,EAAWN,GAAyBE,GACpCiF,ECrCY,MDqCS7E,ECrCH,IAAM,IDsCxB2B,EAAgB5yL,EAAM+uL,cAAc6D,cACpCyD,EAAgBr2L,EAAMmwL,MAAMzhH,UAC5B2iH,EAAarxL,EAAMmwL,MAAM1C,OACzB6I,EAA4C,oBAAjBH,EAA8BA,EAAa//L,OAAOC,OAAO,CAAC,EAAG2J,EAAMmwL,MAAO,CACvGxC,UAAW3tL,EAAM2tL,aACbwI,EACFI,EAA2D,kBAAtBD,EAAiC,CACxErF,SAAUqF,EACVR,QAASQ,GACPlgM,OAAOC,OAAO,CAChB46L,SAAU,EACV6E,QAAS,GACRQ,GACCE,EAAsBx2L,EAAM+uL,cAAclwI,OAAS7+C,EAAM+uL,cAAclwI,OAAO7+C,EAAM2tL,WAAa,KACjG7lL,EAAO,CACTpP,EAAG,EACHC,EAAG,GAGL,GAAKi6L,EAAL,CAIA,GAAIgD,EAAe,CACjB,IAAIa,EAEAC,EAAwB,MAAbzF,EAAmBphE,GAAMzJ,GACpCuwE,EAAuB,MAAb1F,EAAmBvhE,GAASrJ,GACtC7+F,EAAmB,MAAbypK,EAAmB,SAAW,QACpCpyI,EAAS+zI,EAAc3B,GACvBvmJ,EAAMmU,EAASslC,EAASuyG,GACxB3hK,EAAM8pB,EAASslC,EAASwyG,GACxBC,EAAWX,GAAU5E,EAAW7pK,GAAO,EAAI,EAC3CqvK,EAAS/F,IAAcrxI,GAAQ42I,EAAc7uK,GAAO6pK,EAAW7pK,GAC/DsvK,EAAShG,IAAcrxI,IAAS4xI,EAAW7pK,IAAQ6uK,EAAc7uK,GAGjEuvK,EAAe/2L,EAAMgvL,SAASgI,MAC9BC,EAAYhB,GAAUc,EAAe1K,GAAc0K,GAAgB,CACrEv/L,MAAO,EACPC,OAAQ,GAENy/L,EAAqBl3L,EAAM+uL,cAAc,oBAAsB/uL,EAAM+uL,cAAc,oBAAoBngB,QJhFtG,CACL/+C,IAAK,EACLxJ,MAAO,EACPqJ,OAAQ,EACRtJ,KAAM,GI6EF+wE,EAAkBD,EAAmBR,GACrCU,EAAkBF,EAAmBP,GAMrCU,EAAW7B,GAAO,EAAGa,EAAc7uK,GAAMyvK,EAAUzvK,IACnD8vK,EAAYlB,EAAkBC,EAAc7uK,GAAO,EAAIovK,EAAWS,EAAWF,EAAkBZ,EAA4BtF,SAAW4F,EAASQ,EAAWF,EAAkBZ,EAA4BtF,SACxMsG,EAAYnB,GAAmBC,EAAc7uK,GAAO,EAAIovK,EAAWS,EAAWD,EAAkBb,EAA4BtF,SAAW6F,EAASO,EAAWD,EAAkBb,EAA4BtF,SACzMuG,EAAoBx3L,EAAMgvL,SAASgI,OAASlK,GAAgB9sL,EAAMgvL,SAASgI,OAC3ES,EAAeD,EAAiC,MAAbvG,EAAmBuG,EAAkBpL,WAAa,EAAIoL,EAAkBrL,YAAc,EAAI,EAC7HuL,EAAwH,OAAjGjB,EAA+C,MAAvBD,OAA8B,EAASA,EAAoBvF,IAAqBwF,EAAwB,EAEvJkB,EAAY94I,EAAS04I,EAAYG,EACjCE,EAAkBpC,GAAOS,EAASP,GAAQhrJ,EAF9BmU,EAASy4I,EAAYI,EAAsBD,GAEK/sJ,EAAKmU,EAAQo3I,EAASR,GAAQ1gK,EAAK4iK,GAAa5iK,GAChH69J,EAAc3B,GAAY2G,EAC1B9vL,EAAKmpL,GAAY2G,EAAkB/4I,CACrC,CAEA,GAAIk3I,EAAc,CAChB,IAAI8B,EAEAC,EAAyB,MAAb7G,EAAmBphE,GAAMzJ,GAErC2xE,GAAwB,MAAb9G,EAAmBvhE,GAASrJ,GAEvChgC,GAAUusG,EAAckD,GAExB/3K,GAAmB,MAAZ+3K,EAAkB,SAAW,QAEpCkC,GAAO3xG,GAAUlC,EAAS2zG,GAE1BG,GAAO5xG,GAAUlC,EAAS4zG,IAE1BG,IAAuD,IAAxC,CAACroE,GAAKzJ,IAAM5kH,QAAQqvL,GAEnCsH,GAAyH,OAAjGN,EAAgD,MAAvBrB,OAA8B,EAASA,EAAoBV,IAAoB+B,EAAyB,EAEzJO,GAAaF,GAAeF,GAAO3xG,GAAUgwG,EAAct4K,IAAQszK,EAAWtzK,IAAQo6K,GAAuB5B,EAA4BT,QAEzIuC,GAAaH,GAAe7xG,GAAUgwG,EAAct4K,IAAQszK,EAAWtzK,IAAQo6K,GAAuB5B,EAA4BT,QAAUmC,GAE5IK,GAAmBrC,GAAUiC,GDzH9B,SAAwBxtJ,EAAKvsC,EAAO42B,GACzC,IAAIp3B,EAAI63L,GAAO9qJ,EAAKvsC,EAAO42B,GAC3B,OAAOp3B,EAAIo3B,EAAMA,EAAMp3B,CACzB,CCsHoD46L,CAAeH,GAAY/xG,GAASgyG,IAAc7C,GAAOS,EAASmC,GAAaJ,GAAM3xG,GAAS4vG,EAASoC,GAAaJ,IAEpKrF,EAAckD,GAAWwC,GACzBxwL,EAAKguL,GAAWwC,GAAmBjyG,EACrC,CAEArmF,EAAM+uL,cAAcpmL,GAAQb,CAvE5B,CAwEF,EAQEkmL,iBAAkB,CAAC,WE3DrB,UACErlL,KAAM,QACNknL,SAAS,EACTL,MAAO,OACPtkH,GApEF,SAAe/zE,GACb,IAAIqhM,EAEAx4L,EAAQ7I,EAAK6I,MACb2I,EAAOxR,EAAKwR,KACZ2/B,EAAUnxC,EAAKmxC,QACfyuJ,EAAe/2L,EAAMgvL,SAASgI,MAC9BpE,EAAgB5yL,EAAM+uL,cAAc6D,cACpC/B,EAAgBJ,GAAiBzwL,EAAM2tL,WACvChnD,EAAOgqD,GAAyBE,GAEhCrpK,EADa,CAAC4+F,GAAMC,IAAO7kH,QAAQqvL,IAAkB,EAClC,SAAW,QAElC,GAAKkG,GAAiBnE,EAAtB,CAIA,IAAIwB,EAxBgB,SAAyBxlB,EAAS5uK,GAItD,OAAOm0L,GAAsC,kBAH7CvlB,EAA6B,oBAAZA,EAAyBA,EAAQx4K,OAAOC,OAAO,CAAC,EAAG2J,EAAMmwL,MAAO,CAC/ExC,UAAW3tL,EAAM2tL,aACb/e,GACkDA,EAAUylB,GAAgBzlB,EAAS0e,IAC7F,CAmBsBmL,CAAgBnwJ,EAAQsmI,QAAS5uK,GACjDi3L,EAAY5K,GAAc0K,GAC1B2B,EAAmB,MAAT/xD,EAAe9W,GAAMzJ,GAC/BuyE,EAAmB,MAAThyD,EAAejX,GAASrJ,GAClCuyE,EAAU54L,EAAMmwL,MAAMzhH,UAAUlnD,GAAOxnB,EAAMmwL,MAAMzhH,UAAUi4D,GAAQisD,EAAcjsD,GAAQ3mI,EAAMmwL,MAAM1C,OAAOjmK,GAC9GqxK,EAAYjG,EAAcjsD,GAAQ3mI,EAAMmwL,MAAMzhH,UAAUi4D,GACxD6wD,EAAoB1K,GAAgBiK,GACpC+B,EAAatB,EAA6B,MAAT7wD,EAAe6wD,EAAkBnjE,cAAgB,EAAImjE,EAAkBpjE,aAAe,EAAI,EAC3H2kE,EAAoBH,EAAU,EAAIC,EAAY,EAG9CnuJ,EAAM0pJ,EAAcsE,GACpB3jK,EAAM+jK,EAAa7B,EAAUzvK,GAAO4sK,EAAcuE,GAClDK,EAASF,EAAa,EAAI7B,EAAUzvK,GAAO,EAAIuxK,EAC/Cl6I,EAAS22I,GAAO9qJ,EAAKsuJ,EAAQjkK,GAE7BkkK,EAAWtyD,EACf3mI,EAAM+uL,cAAcpmL,KAAS6vL,EAAwB,CAAC,GAAyBS,GAAYp6I,EAAQ25I,EAAsBU,aAAer6I,EAASm6I,EAAQR,EAnBzJ,CAoBF,EAkCEzI,OAhCF,SAAgB7lL,GACd,IAAIlK,EAAQkK,EAAMlK,MAEdm5L,EADUjvL,EAAMo+B,QACWuS,QAC3Bk8I,OAAoC,IAArBoC,EAA8B,sBAAwBA,EAErD,MAAhBpC,IAKwB,kBAAjBA,IACTA,EAAe/2L,EAAMgvL,SAASvB,OAAO2L,cAAcrC,MAOhDxxI,GAASvlD,EAAMgvL,SAASvB,OAAQsJ,KAIrC/2L,EAAMgvL,SAASgI,MAAQD,EACzB,EASEhJ,SAAU,CAAC,iBACXC,iBAAkB,CAAC,oBCrFrB,SAASqL,GAAel1G,EAAU2nG,EAAMwN,GAQtC,YAPyB,IAArBA,IACFA,EAAmB,CACjB5gM,EAAG,EACHC,EAAG,IAIA,CACLk3H,IAAK1rC,EAAS0rC,IAAMi8D,EAAKr0L,OAAS6hM,EAAiB3gM,EACnD0tH,MAAOliC,EAASkiC,MAAQylE,EAAKt0L,MAAQ8hM,EAAiB5gM,EACtDg3H,OAAQvrC,EAASurC,OAASo8D,EAAKr0L,OAAS6hM,EAAiB3gM,EACzDytH,KAAMjiC,EAASiiC,KAAO0lE,EAAKt0L,MAAQ8hM,EAAiB5gM,EAExD,CAEA,SAAS6gM,GAAsBp1G,GAC7B,MAAO,CAAC0rC,GAAKxJ,GAAOqJ,GAAQtJ,IAAM9lH,MAAK,SAAUk5L,GAC/C,OAAOr1G,EAASq1G,IAAS,CAC3B,GACF,CCbA,IACIC,GAA4BlL,GAAgB,CAC9CI,iBAFqB,CvB+BvB,CACEhmL,KAAM,iBACNknL,SAAS,EACTL,MAAO,QACPtkH,GAAI,WAAe,EACnB6kH,OAxCF,SAAgB54L,GACd,IAAI6I,EAAQ7I,EAAK6I,MACbgB,EAAW7J,EAAK6J,SAChBsnC,EAAUnxC,EAAKmxC,QACfoxJ,EAAkBpxJ,EAAQ0jJ,OAC1BA,OAA6B,IAApB0N,GAAoCA,EAC7CC,EAAkBrxJ,EAAQsxJ,OAC1BA,OAA6B,IAApBD,GAAoCA,EAC7Cv/L,EAASwvL,GAAU5pL,EAAMgvL,SAASvB,QAClC6B,EAAgB,GAAG3vL,OAAOK,EAAMsvL,cAAc5gH,UAAW1uE,EAAMsvL,cAAc7B,QAYjF,OAVIzB,GACFsD,EAAczwL,SAAQ,SAAU4iI,GAC9BA,EAAax3H,iBAAiB,SAAUjJ,EAASy6E,OAAQ0iD,GAC3D,IAGEy7D,GACFx/L,EAAO6P,iBAAiB,SAAUjJ,EAASy6E,OAAQ0iD,IAG9C,WACD6tD,GACFsD,EAAczwL,SAAQ,SAAU4iI,GAC9BA,EAAa/L,oBAAoB,SAAU10H,EAASy6E,OAAQ0iD,GAC9D,IAGEy7D,GACFx/L,EAAOs7H,oBAAoB,SAAU10H,EAASy6E,OAAQ0iD,GAE1D,CACF,EASEr2H,KAAM,CAAC,GwB7BT,CACEa,KAAM,gBACNknL,SAAS,EACTL,MAAO,OACPtkH,GApBF,SAAuB/zE,GACrB,IAAI6I,EAAQ7I,EAAK6I,MACb2I,EAAOxR,EAAKwR,KAKhB3I,EAAM+uL,cAAcpmL,GAAQioL,GAAe,CACzCliH,UAAW1uE,EAAMmwL,MAAMzhH,UACvB7zB,QAAS76C,EAAMmwL,MAAM1C,OACrBY,SAAU,WACVV,UAAW3tL,EAAM2tL,WAErB,EAQE7lL,KAAM,CAAC,GnB2IT,CACEa,KAAM,gBACNknL,SAAS,EACTL,MAAO,cACPtkH,GA9CF,SAAuBxpD,GACrB,IAAI1hB,EAAQ0hB,EAAM1hB,MACdsoC,EAAU5mB,EAAM4mB,QAChBuxJ,EAAwBvxJ,EAAQgpJ,gBAChCA,OAA4C,IAA1BuI,GAA0CA,EAC5DC,EAAoBxxJ,EAAQipJ,SAC5BA,OAAiC,IAAtBuI,GAAsCA,EACjDC,EAAwBzxJ,EAAQkpJ,aAChCA,OAAyC,IAA1BuI,GAA0CA,EACzD7H,EAAe,CACjBvE,UAAW8C,GAAiBzwL,EAAM2tL,WAClCmD,UAAWJ,GAAa1wL,EAAM2tL,WAC9BF,OAAQztL,EAAMgvL,SAASvB,OACvB4D,WAAYrxL,EAAMmwL,MAAM1C,OACxB6D,gBAAiBA,EACjB3F,QAAoC,UAA3B3rL,EAAMsoC,QAAQ+lJ,UAGgB,MAArCruL,EAAM+uL,cAAc6D,gBACtB5yL,EAAMJ,OAAO6tL,OAASr3L,OAAOC,OAAO,CAAC,EAAG2J,EAAMJ,OAAO6tL,OAAQ0D,GAAY/6L,OAAOC,OAAO,CAAC,EAAG67L,EAAc,CACvGjG,QAASjsL,EAAM+uL,cAAc6D,cAC7Bn2G,SAAUz8E,EAAMsoC,QAAQ+lJ,SACxBkD,SAAUA,EACVC,aAAcA,OAIe,MAA7BxxL,EAAM+uL,cAAciI,QACtBh3L,EAAMJ,OAAOo3L,MAAQ5gM,OAAOC,OAAO,CAAC,EAAG2J,EAAMJ,OAAOo3L,MAAO7F,GAAY/6L,OAAOC,OAAO,CAAC,EAAG67L,EAAc,CACrGjG,QAASjsL,EAAM+uL,cAAciI,MAC7Bv6G,SAAU,WACV80G,UAAU,EACVC,aAAcA,OAIlBxxL,EAAM85I,WAAW2zC,OAASr3L,OAAOC,OAAO,CAAC,EAAG2J,EAAM85I,WAAW2zC,OAAQ,CACnE,wBAAyBztL,EAAM2tL,WAEnC,EAQE7lL,KAAM,CAAC,GoB3FT,CACEa,KAAM,cACNknL,SAAS,EACTL,MAAO,QACPtkH,GA5EF,SAAqB/zE,GACnB,IAAI6I,EAAQ7I,EAAK6I,MACjB5J,OAAOyH,KAAKmC,EAAMgvL,UAAUnwL,SAAQ,SAAU8J,GAC5C,IAAI/P,EAAQoH,EAAMJ,OAAO+I,IAAS,CAAC,EAC/BmxI,EAAa95I,EAAM85I,WAAWnxI,IAAS,CAAC,EACxCkyC,EAAU76C,EAAMgvL,SAASrmL,GAExBmhL,GAAcjvI,IAAaqwI,GAAYrwI,KAO5CzkD,OAAOC,OAAOwkD,EAAQjiD,MAAOA,GAC7BxC,OAAOyH,KAAKi8I,GAAYj7I,SAAQ,SAAU8J,GACxC,IAAIxK,EAAQ27I,EAAWnxI,IAET,IAAVxK,EACF08C,EAAQm/I,gBAAgBrxL,GAExBkyC,EAAQ/wC,aAAanB,GAAgB,IAAVxK,EAAiB,GAAKA,EAErD,IACF,GACF,EAoDE4xL,OAlDF,SAAgB7lL,GACd,IAAIlK,EAAQkK,EAAMlK,MACdi6L,EAAgB,CAClBxM,OAAQ,CACNhxG,SAAUz8E,EAAMsoC,QAAQ+lJ,SACxBjoE,KAAM,IACNyJ,IAAK,IACLqqE,OAAQ,KAEVlD,MAAO,CACLv6G,SAAU,YAEZ/N,UAAW,CAAC,GASd,OAPAt4E,OAAOC,OAAO2J,EAAMgvL,SAASvB,OAAO70L,MAAOqhM,EAAcxM,QACzDztL,EAAMJ,OAASq6L,EAEXj6L,EAAMgvL,SAASgI,OACjB5gM,OAAOC,OAAO2J,EAAMgvL,SAASgI,MAAMp+L,MAAOqhM,EAAcjD,OAGnD,WACL5gM,OAAOyH,KAAKmC,EAAMgvL,UAAUnwL,SAAQ,SAAU8J,GAC5C,IAAIkyC,EAAU76C,EAAMgvL,SAASrmL,GACzBmxI,EAAa95I,EAAM85I,WAAWnxI,IAAS,CAAC,EAGxC/P,EAFkBxC,OAAOyH,KAAKmC,EAAMJ,OAAO9I,eAAe6R,GAAQ3I,EAAMJ,OAAO+I,GAAQsxL,EAActxL,IAE7EjF,QAAO,SAAU9K,EAAOiwB,GAElD,OADAjwB,EAAMiwB,GAAY,GACXjwB,CACT,GAAG,CAAC,GAECkxL,GAAcjvI,IAAaqwI,GAAYrwI,KAI5CzkD,OAAOC,OAAOwkD,EAAQjiD,MAAOA,GAC7BxC,OAAOyH,KAAKi8I,GAAYj7I,SAAQ,SAAUs7L,GACxCt/I,EAAQm/I,gBAAgBG,EAC1B,IACF,GACF,CACF,EASEpM,SAAU,CAAC,kBFxEsElvI,GG+HnF,CACEl2C,KAAM,OACNknL,SAAS,EACTL,MAAO,OACPtkH,GA5HF,SAAc/zE,GACZ,IAAI6I,EAAQ7I,EAAK6I,MACbsoC,EAAUnxC,EAAKmxC,QACf3/B,EAAOxR,EAAKwR,KAEhB,IAAI3I,EAAM+uL,cAAcpmL,GAAMyxL,MAA9B,CAoCA,IAhCA,IAAIzE,EAAoBrtJ,EAAQ2oJ,SAC5B2E,OAAsC,IAAtBD,GAAsCA,EACtDE,EAAmBvtJ,EAAQwtJ,QAC3BC,OAAoC,IAArBF,GAAqCA,EACpDwE,EAA8B/xJ,EAAQgyJ,mBACtC1rB,EAAUtmI,EAAQsmI,QAClB+kB,EAAWrrJ,EAAQqrJ,SACnBC,EAAetrJ,EAAQsrJ,aACvBmB,EAAczsJ,EAAQysJ,YACtBwF,EAAwBjyJ,EAAQkyJ,eAChCA,OAA2C,IAA1BD,GAA0CA,EAC3DE,EAAwBnyJ,EAAQmyJ,sBAChCC,EAAqB16L,EAAMsoC,QAAQqlJ,UACnCkD,EAAgBJ,GAAiBiK,GAEjCJ,EAAqBD,IADHxJ,IAAkB6J,IACqCF,EAAiB,CAAC3H,GAAqB6H,IAjCtH,SAAuC/M,GACrC,GAAI8C,GAAiB9C,KAAeN,GAClC,MAAO,GAGT,IAAIsN,EAAoB9H,GAAqBlF,GAC7C,MAAO,CAACmF,GAA8BnF,GAAYgN,EAAmB7H,GAA8B6H,GACrG,CA0B6IC,CAA8BF,IACrK9M,EAAa,CAAC8M,GAAoB/6L,OAAO26L,GAAoB52L,QAAO,SAAUw5J,EAAKywB,GACrF,OAAOzwB,EAAIv9J,OAAO8wL,GAAiB9C,KAAeN,GCvCvC,SAA8BrtL,EAAOsoC,QAClC,IAAZA,IACFA,EAAU,CAAC,GAGb,IAAIgoJ,EAAWhoJ,EACXqlJ,EAAY2C,EAAS3C,UACrBgG,EAAWrD,EAASqD,SACpBC,EAAetD,EAASsD,aACxBhlB,EAAU0hB,EAAS1hB,QACnB4rB,EAAiBlK,EAASkK,eAC1BK,EAAwBvK,EAASmK,sBACjCA,OAAkD,IAA1BI,EAAmCC,GAAgBD,EAC3E/J,EAAYJ,GAAa/C,GACzBC,EAAakD,EAAY0J,EAAiB9M,GAAsBA,GAAoBntL,QAAO,SAAUotL,GACvG,OAAO+C,GAAa/C,KAAemD,CACrC,IAAKxD,GACDyN,EAAoBnN,EAAWrtL,QAAO,SAAUotL,GAClD,OAAO8M,EAAsBj5L,QAAQmsL,IAAc,CACrD,IAEiC,IAA7BoN,EAAkBrkM,SACpBqkM,EAAoBnN,GAItB,IAAIoN,EAAYD,EAAkBr3L,QAAO,SAAUw5J,EAAKywB,GAOtD,OANAzwB,EAAIywB,GAAa4G,GAAev0L,EAAO,CACrC2tL,UAAWA,EACXgG,SAAUA,EACVC,aAAcA,EACdhlB,QAASA,IACR6hB,GAAiB9C,IACbzwB,CACT,GAAG,CAAC,GACJ,OAAO9mK,OAAOyH,KAAKm9L,GAAW33H,MAAK,SAAU1oE,EAAGiB,GAC9C,OAAOo/L,EAAUrgM,GAAKqgM,EAAUp/L,EAClC,GACF,CDC6Dq/L,CAAqBj7L,EAAO,CACnF2tL,UAAWA,EACXgG,SAAUA,EACVC,aAAcA,EACdhlB,QAASA,EACT4rB,eAAgBA,EAChBC,sBAAuBA,IACpB9M,EACP,GAAG,IACC0I,EAAgBr2L,EAAMmwL,MAAMzhH,UAC5B2iH,EAAarxL,EAAMmwL,MAAM1C,OACzByN,EAAY,IAAIxgM,IAChBygM,GAAqB,EACrBC,EAAwBxN,EAAW,GAE9Bp3L,EAAI,EAAGA,EAAIo3L,EAAWl3L,OAAQF,IAAK,CAC1C,IAAIm3L,EAAYC,EAAWp3L,GAEvB6kM,EAAiB5K,GAAiB9C,GAElC2N,EAAmB5K,GAAa/C,KAAeluI,GAC/C87I,EAAa,CAAC1rE,GAAKH,IAAQluH,QAAQ65L,IAAmB,EACtD7zK,EAAM+zK,EAAa,QAAU,SAC7Bp3G,EAAWowG,GAAev0L,EAAO,CACnC2tL,UAAWA,EACXgG,SAAUA,EACVC,aAAcA,EACdmB,YAAaA,EACbnmB,QAASA,IAEP4sB,EAAoBD,EAAaD,EAAmBj1E,GAAQD,GAAOk1E,EAAmB5rE,GAASG,GAE/FwmE,EAAc7uK,GAAO6pK,EAAW7pK,KAClCg0K,EAAoB3I,GAAqB2I,IAG3C,IAAIC,EAAmB5I,GAAqB2I,GACxCE,EAAS,GAUb,GARI9F,GACF8F,EAAO59L,KAAKqmF,EAASk3G,IAAmB,GAGtCtF,GACF2F,EAAO59L,KAAKqmF,EAASq3G,IAAsB,EAAGr3G,EAASs3G,IAAqB,GAG1EC,EAAOjlK,OAAM,SAAUklK,GACzB,OAAOA,CACT,IAAI,CACFP,EAAwBzN,EACxBwN,GAAqB,EACrB,KACF,CAEAD,EAAUl+L,IAAI2wL,EAAW+N,EAC3B,CAEA,GAAIP,EAqBF,IAnBA,IAEIS,EAAQ,SAAe11G,GACzB,IAAI21G,EAAmBjO,EAAW51K,MAAK,SAAU21K,GAC/C,IAAI+N,EAASR,EAAUp+L,IAAI6wL,GAE3B,GAAI+N,EACF,OAAOA,EAAOh/L,MAAM,EAAGwpF,GAAIzvD,OAAM,SAAUklK,GACzC,OAAOA,CACT,GAEJ,IAEA,GAAIE,EAEF,OADAT,EAAwBS,EACjB,OAEX,EAES31G,EAnBYs0G,EAAiB,EAAI,EAmBZt0G,EAAK,EAAGA,IAAM,CAG1C,GAAa,UAFF01G,EAAM11G,GAEK,KACxB,CAGElmF,EAAM2tL,YAAcyN,IACtBp7L,EAAM+uL,cAAcpmL,GAAMyxL,OAAQ,EAClCp6L,EAAM2tL,UAAYyN,EAClBp7L,EAAMu9B,OAAQ,EA5GhB,CA8GF,EAQEywJ,iBAAkB,CAAC,UACnBlmL,KAAM,CACJsyL,OAAO,IHtIsF0B,GAAiB9E,GD4ClH,CACEruL,KAAM,OACNknL,SAAS,EACTL,MAAO,OACPxB,iBAAkB,CAAC,mBACnB9iH,GAlCF,SAAc/zE,GACZ,IAAI6I,EAAQ7I,EAAK6I,MACb2I,EAAOxR,EAAKwR,KACZ0tL,EAAgBr2L,EAAMmwL,MAAMzhH,UAC5B2iH,EAAarxL,EAAMmwL,MAAM1C,OACzB6L,EAAmBt5L,EAAM+uL,cAAc+M,gBACvCC,EAAoBxH,GAAev0L,EAAO,CAC5C60L,eAAgB,cAEdmH,EAAoBzH,GAAev0L,EAAO,CAC5C+0L,aAAa,IAEXkH,EAA2B5C,GAAe0C,EAAmB1F,GAC7D6F,EAAsB7C,GAAe2C,EAAmB3K,EAAYiI,GACpE6C,EAAoB5C,GAAsB0C,GAC1CG,EAAmB7C,GAAsB2C,GAC7Cl8L,EAAM+uL,cAAcpmL,GAAQ,CAC1BszL,yBAA0BA,EAC1BC,oBAAqBA,EACrBC,kBAAmBA,EACnBC,iBAAkBA,GAEpBp8L,EAAM85I,WAAW2zC,OAASr3L,OAAOC,OAAO,CAAC,EAAG2J,EAAM85I,WAAW2zC,OAAQ,CACnE,+BAAgC0O,EAChC,sBAAuBC,GAE3B,8DM9CIC,GAAkB,GCAlBC,GAAO,WAEX,EAEIC,GAAe,WACjB,OAAOjiM,QAAQm1B,QAAQ,KACzB,EAEI4sK,GAAkB,GACf,SAASG,GAAOrlM,GACrB,IAAIslM,EAAiBtlM,EAAKw2L,UACtBA,OAA+B,IAAnB8O,EAA4B,SAAWA,EACnDC,EAAgBvlM,EAAKk3L,SACrBA,OAA6B,IAAlBqO,EAA2B,WAAaA,EACnDC,EAAiBxlM,EAAK22L,UACtBA,OAA+B,IAAnB6O,EAA4BN,GAAkBM,EAC1DC,EAAmBzlM,EAAKylM,iBACxBpM,EAAgBr5L,EAAKq5L,cACrBlxD,EAAWnoI,EAAKmoI,SAChBjpB,EAAWl/G,EAAKk/G,SAChBuuE,EAAgBriB,EAAAA,WAAiBiiB,IAEjCG,EAAkBpiB,EAAAA,SAAe,MACjCs6B,EAAgBlY,EAAgB,GAChCmY,EAAmBnY,EAAgB,GAEnCoY,EAAmBx6B,EAAAA,SAAe,MAClCw0B,EAAegG,EAAiB,GAChCC,EAAkBD,EAAiB,GAEvCx6B,EAAAA,WAAgB,WACdomB,GAAOrpD,EAAUu9D,EACnB,GAAG,CAACv9D,EAAUu9D,IACd,IAAIv0J,EAAUi6H,EAAAA,SAAc,WAC1B,MAAO,CACLorB,UAAWA,EACXU,SAAUA,EACVmC,cAAeA,EACf1C,UAAW,GAAGnuL,OAAOmuL,EAAW,CAAC,CAC/BnlL,KAAM,QACNknL,QAAyB,MAAhBkH,EACTzuJ,QAAS,CACPuS,QAASk8I,MAIjB,GAAG,CAACpJ,EAAWU,EAAUmC,EAAe1C,EAAWiJ,IAE/CkG,ED/CiB,SAAmBL,EAAkBC,EAAev0J,QACzD,IAAZA,IACFA,EAAU,CAAC,GAGb,IAAI40J,EAAc36B,EAAAA,OAAa,MAC3B46B,EAAsB,CACxB3M,cAAeloJ,EAAQkoJ,cACvB7C,UAAWrlJ,EAAQqlJ,WAAa,SAChCU,SAAU/lJ,EAAQ+lJ,UAAY,WAC9BP,UAAWxlJ,EAAQwlJ,WAAauO,IAG9B1X,EAAkBpiB,EAAAA,SAAe,CACnC3iK,OAAQ,CACN6tL,OAAQ,CACNhxG,SAAU0gH,EAAoB9O,SAC9BjoE,KAAM,IACNyJ,IAAK,KAEPmnE,MAAO,CACLv6G,SAAU,aAGdq9D,WAAY,CAAC,IAEX95I,EAAQ2kL,EAAgB,GACxB/wD,EAAW+wD,EAAgB,GAE3ByY,EAAsB76B,EAAAA,SAAc,WACtC,MAAO,CACL55J,KAAM,cACNknL,SAAS,EACTL,MAAO,QACPtkH,GAAI,SAAY/zE,GACd,IAAI6I,EAAQ7I,EAAK6I,MACbgvL,EAAW54L,OAAOyH,KAAKmC,EAAMgvL,UACjCvqB,EAAAA,WAAmB,WACjB7wC,EAAS,CACPh0H,OAAQgpL,GAAYoG,EAAStnL,KAAI,SAAUmzC,GACzC,MAAO,CAACA,EAAS76C,EAAMJ,OAAOi7C,IAAY,CAAC,EAC7C,KACAi/F,WAAY8uC,GAAYoG,EAAStnL,KAAI,SAAUmzC,GAC7C,MAAO,CAACA,EAAS76C,EAAM85I,WAAWj/F,GACpC,MAEJ,GACF,EACAkzI,SAAU,CAAC,iBAEf,GAAG,IACCsP,EAAgB96B,EAAAA,SAAc,WAChC,IAAI+6B,EAAa,CACf9M,cAAe2M,EAAoB3M,cACnC7C,UAAWwP,EAAoBxP,UAC/BU,SAAU8O,EAAoB9O,SAC9BP,UAAW,GAAGnuL,OAAOw9L,EAAoBrP,UAAW,CAACsP,EAAqB,CACxEz0L,KAAM,cACNknL,SAAS,MAIb,OAAIxyG,KAAQ6/G,EAAYz8I,QAAS68I,GACxBJ,EAAYz8I,SAAW68I,GAE9BJ,EAAYz8I,QAAU68I,EACfA,EAEX,GAAG,CAACH,EAAoB3M,cAAe2M,EAAoBxP,UAAWwP,EAAoB9O,SAAU8O,EAAoBrP,UAAWsP,IAC/HG,EAAoBh7B,EAAAA,SAmBxB,OAlBA6J,IAA0B,WACpBmxB,EAAkB98I,SACpB88I,EAAkB98I,QAAQ0uI,WAAWkO,EAEzC,GAAG,CAACA,IACJjxB,IAA0B,WACxB,GAAwB,MAApBwwB,GAA6C,MAAjBC,EAAhC,CAIA,IACIW,GADel1J,EAAQmxJ,cAAgBgE,IACTb,EAAkBC,EAAeQ,GAEnE,OADAE,EAAkB98I,QAAU+8I,EACrB,WACLA,EAAejN,UACfgN,EAAkB98I,QAAU,IAC9B,CARA,CASF,GAAG,CAACm8I,EAAkBC,EAAev0J,EAAQmxJ,eACtC,CACLz5L,MAAOu9L,EAAkB98I,QAAU88I,EAAkB98I,QAAQzgD,MAAQ,KACrEJ,OAAQI,EAAMJ,OACdk6I,WAAY95I,EAAM85I,WAClBr+D,OAAQ8hH,EAAkB98I,QAAU88I,EAAkB98I,QAAQg7B,OAAS,KACvEi7C,YAAa6mE,EAAkB98I,QAAU88I,EAAkB98I,QAAQi2E,YAAc,KAErF,CChDmBgnE,CAAUd,GAAoBhY,EAAeiY,EAAev0J,GACzEtoC,EAAQi9L,EAAWj9L,MACnBJ,EAASq9L,EAAWr9L,OACpB82H,EAAcumE,EAAWvmE,YACzBj7C,EAASwhH,EAAWxhH,OAEpBkiH,EAAgBp7B,EAAAA,SAAc,WAChC,MAAO,CACLnrK,IAAK0lM,EACLlkM,MAAOgH,EAAO6tL,OACdE,UAAW3tL,EAAQA,EAAM2tL,UAAYA,EACrCyO,iBAAkBp8L,GAASA,EAAM+uL,cAAc6O,KAAO59L,EAAM+uL,cAAc6O,KAAKxB,iBAAmB,KAClGD,kBAAmBn8L,GAASA,EAAM+uL,cAAc6O,KAAO59L,EAAM+uL,cAAc6O,KAAKzB,kBAAoB,KACpG0B,WAAY,CACVjlM,MAAOgH,EAAOo3L,MACd5/L,IAAK4lM,GAEPtmE,YAAaA,GAAe4lE,GAC5B7gH,OAAQA,GAAU8gH,GAEtB,GAAG,CAACO,EAAkBE,EAAiBrP,EAAW3tL,EAAOJ,EAAQ67E,EAAQi7C,IACzE,OAAO+xD,GAAYpyE,EAAZoyE,CAAsBkV,EAC/B,CC3EA,SAASxzD,GAAQxjH,GAAkC,OAAOwjH,GAAU,mBAAqB3vI,QAAU,iBAAmBA,OAAOW,SAAW,SAAUwrB,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAO,mBAAqBnsB,QAAUmsB,EAAI/jB,cAAgBpI,QAAUmsB,IAAQnsB,OAAO3D,UAAY,gBAAkB8vB,CAAK,EAAGwjH,GAAQxjH,EAAM,CAC/U,IAAIi8G,GAAY,CAAC,YAAa,YAAa,OAAQ,MAAO,QAAS,MAAO,OAAQ,YAAa,UAAW,WAAY,YAAa,kBACnI,SAASzsI,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAAS0wI,GAAQ3hH,EAAQ4hH,GAAkB,IAAIvpI,EAAOzH,OAAOyH,KAAK2nB,GAAS,GAAIpvB,OAAO2H,sBAAuB,CAAE,IAAIspI,EAAUjxI,OAAO2H,sBAAsBynB,GAAS4hH,IAAmBC,EAAUA,EAAQ9mI,QAAO,SAAU+mI,GAAO,OAAOlxI,OAAOqO,yBAAyB+gB,EAAQ8hH,GAAKppI,UAAY,KAAKL,EAAKC,KAAK9G,MAAM6G,EAAMwpI,EAAU,CAAE,OAAOxpI,CAAM,CACpV,SAAS0pI,GAAchxI,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAS,MAAQF,UAAUD,GAAKC,UAAUD,GAAK,CAAC,EAAGA,EAAI,EAAI2wI,GAAQ/wI,OAAOO,IAAS,GAAIkI,SAAQ,SAAUjI,GAAO4wI,GAAgBjxI,EAAQK,EAAKD,EAAOC,GAAO,IAAKR,OAAOwO,0BAA4BxO,OAAOyO,iBAAiBtO,EAAQH,OAAOwO,0BAA0BjO,IAAWwwI,GAAQ/wI,OAAOO,IAASkI,SAAQ,SAAUjI,GAAOR,OAAO6H,eAAe1H,EAAQK,EAAKR,OAAOqO,yBAAyB9N,EAAQC,GAAO,GAAI,CAAE,OAAOL,CAAQ,CACzf,SAASixI,GAAgB7gH,EAAK/vB,EAAKuH,GAAiK,OAApJvH,KAAO+vB,EAAOvwB,OAAO6H,eAAe0oB,EAAK/vB,EAAK,CAAEuH,MAAOA,EAAOD,YAAY,EAAMwG,cAAc,EAAMC,UAAU,IAAkBgiB,EAAI/vB,GAAOuH,EAAgBwoB,CAAK,CAChN,SAASm3K,GAAmBr3K,GAAO,OAInC,SAA4BA,GAAO,GAAI/qB,MAAMK,QAAQ0qB,GAAM,OAAOs3K,GAAkBt3K,EAAM,CAJhDu3K,CAAmBv3K,IAG7D,SAA0Bw3K,GAAQ,GAAsB,qBAAXzjM,QAAmD,MAAzByjM,EAAKzjM,OAAOW,WAA2C,MAAtB8iM,EAAK,cAAuB,OAAOviM,MAAMkB,KAAKqhM,EAAO,CAHxFC,CAAiBz3K,IAEtF,SAAqChsB,EAAGo8L,GAAU,IAAKp8L,EAAG,OAAQ,GAAiB,kBAANA,EAAgB,OAAOsjM,GAAkBtjM,EAAGo8L,GAAS,IAAIt8L,EAAInE,OAAOS,UAAU4F,SAAS1F,KAAK0D,GAAGiC,MAAM,GAAI,GAAc,WAANnC,GAAkBE,EAAEmI,cAAarI,EAAIE,EAAEmI,YAAY+F,MAAM,GAAU,QAANpO,GAAqB,QAANA,EAAa,OAAOmB,MAAMkB,KAAKnC,GAAI,GAAU,cAANF,GAAqB,2CAA2CuG,KAAKvG,GAAI,OAAOwjM,GAAkBtjM,EAAGo8L,EAAS,CAFjUsH,CAA4B13K,IAC1H,WAAgC,MAAM,IAAIjmB,UAAU,uIAAyI,CAD3D49L,EAAsB,CAKxJ,SAASL,GAAkBt3K,EAAKe,IAAkB,MAAPA,GAAeA,EAAMf,EAAI/vB,UAAQ8wB,EAAMf,EAAI/vB,QAAQ,IAAK,IAAIF,EAAI,EAAG4iG,EAAO,IAAI19F,MAAM8rB,GAAMhxB,EAAIgxB,EAAKhxB,IAAO4iG,EAAK5iG,GAAKiwB,EAAIjwB,GAAM,OAAO4iG,CAAM,CACtL,SAASo2B,GAAyB74H,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAAkEC,EAAKJ,EAAnED,EACzF,SAAuCI,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAA2DC,EAAKJ,EAA5DD,EAAS,CAAC,EAAO8vI,EAAajwI,OAAOyH,KAAKlH,GAAqB,IAAKH,EAAI,EAAGA,EAAI6vI,EAAW3vI,OAAQF,IAAOI,EAAMyvI,EAAW7vI,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,CAAQ,CADhN+vI,CAA8B3vI,EAAQyvI,GAAuB,GAAIhwI,OAAO2H,sBAAuB,CAAE,IAAIgmL,EAAmB3tL,OAAO2H,sBAAsBpH,GAAS,IAAKH,EAAI,EAAGA,EAAIutL,EAAiBrtL,OAAQF,IAAOI,EAAMmtL,EAAiBvtL,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,GAAkBR,OAAOS,UAAUmkD,qBAAqBjkD,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,GAAQ,CAAE,OAAOL,CAAQ,CAG3e,SAASu0I,GAAkBv0I,EAAQgB,GAAS,IAAK,IAAIf,EAAI,EAAGA,EAAIe,EAAMb,OAAQF,IAAK,CAAE,IAAI45H,EAAa74H,EAAMf,GAAI45H,EAAWlyH,WAAakyH,EAAWlyH,aAAc,EAAOkyH,EAAW1rH,cAAe,EAAU,UAAW0rH,IAAYA,EAAWzrH,UAAW,GAAMvO,OAAO6H,eAAe1H,EAAQ65H,EAAWx5H,IAAKw5H,EAAa,CAAE,CAG5T,SAASoS,GAAgB/nI,EAAGa,GAA6I,OAAxIknI,GAAkBpsI,OAAOoiH,eAAiBpiH,OAAOoiH,eAAeliH,OAAS,SAAyBmE,EAAGa,GAAsB,OAAjBb,EAAE+/G,UAAYl/G,EAAUb,CAAG,EAAU+nI,GAAgB/nI,EAAGa,EAAI,CACvM,SAASyvI,GAAaC,GAAW,IAAIC,EAGrC,WAAuC,GAAuB,qBAAZC,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,oBAAVpmB,MAAsB,OAAO,EAAM,IAAsF,OAAhF5nH,QAAQvG,UAAUwG,QAAQtG,KAAKm0I,QAAQC,UAAU/tI,QAAS,IAAI,WAAa,MAAY,CAAM,CAAE,MAAOvD,GAAK,OAAO,CAAO,CAAE,CAHvQwxI,GAA6B,OAAO,WAAkC,IAAsC7uG,EAAlC8uG,EAAQC,GAAgBP,GAAkB,GAAIC,EAA2B,CAAE,IAAIO,EAAYD,GAAgBt0I,MAAM2L,YAAa45B,EAAS0uG,QAAQC,UAAUG,EAAO70I,UAAW+0I,EAAY,MAAShvG,EAAS8uG,EAAMt0I,MAAMC,KAAMR,WAAc,OACpX,SAAoCwD,EAAMlD,GAAQ,GAAIA,IAA2B,WAAlBozI,GAAQpzI,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIyJ,UAAU,4DAA+D,OAC1P,SAAgCvG,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIu3H,eAAe,6DAAgE,OAAOv3H,CAAM,CAD4FwxI,CAAuBxxI,EAAO,CAD4Fw3H,CAA2Bx6H,KAAMulC,EAAS,CAAG,CAIxa,SAAS+uG,GAAgB9wI,GAA+J,OAA1J8wI,GAAkBn1I,OAAOoiH,eAAiBpiH,OAAOoF,eAAelF,OAAS,SAAyBmE,GAAK,OAAOA,EAAE+/G,WAAapkH,OAAOoF,eAAef,EAAI,EAAU8wI,GAAgB9wI,EAAI,CAQnN,InEyD2B4jM,GAAUC,GmEzDjC3iE,GAAY,CACdr6H,IAAKshL,GACLvsE,SAAUqY,KAAAA,KAAeb,WACzB0wE,KAAM7vE,KAAAA,KACNhvE,IAAKgvE,KAAAA,KAELv1C,KAAMu1C,KAAAA,KACNo/D,UAAWp/D,KAAAA,MACX11H,UAAW01H,KAAAA,OACX4zD,UAAW5zD,KAAAA,OACX91H,MAAO81H,KAAAA,OACP8vE,QAAS9vE,KAAAA,KACT2/D,SAAU3/D,KAAAA,OACV4M,UAAWqnD,GAEX8b,eAAgB/vE,KAAAA,KAChBrI,OnEyCyBg4E,GmEzCP3vE,KAAAA,KnEyCiB4vE,GmEzCD,4BnE0C3B,SAAkB/mM,EAAOi2H,EAAUC,GAChB,OAApBl2H,EAAMi2H,IAAiD,qBAApBj2H,EAAMi2H,IAC3Ci1D,GAAS,IAAK9iL,OAAO6tH,EAAU,mBAAqB7tH,OAAO8tH,EAAe,4BAA6B9tH,OAAO2+L,KAEhH,IAAK,IAAIvgL,EAAOtnB,UAAUC,OAAQ0jF,EAAO,IAAI1+E,MAAMqiB,EAAO,EAAIA,EAAO,EAAI,GAAIC,EAAO,EAAGA,EAAOD,EAAMC,IAClGo8D,EAAKp8D,EAAO,GAAKvnB,UAAUunB,GAE7B,OAAOqgL,GAASrnM,WAAM,EAAQ,CAACO,EAAOi2H,EAAUC,GAAe9tH,OAAOy6E,GACxE,ImEhDEskH,GAAuB,CACzBx/J,GAAI,MACJknF,KAAM,OACNC,MAAO,QACP5mE,MAAO,OACPC,IAAK,QACL0jI,KAAM,UAEJub,GAA4B,SAAUl6D,IAxC1C,SAAmBnR,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI/yH,UAAU,sDAAyD8yH,EAASz8H,UAAYT,OAAOiI,OAAOk1H,GAAcA,EAAW18H,UAAW,CAAE+L,YAAa,CAAEzE,MAAOm1H,EAAU3uH,UAAU,EAAMD,cAAc,KAAWtO,OAAO6H,eAAeq1H,EAAU,YAAa,CAAE3uH,UAAU,IAAc4uH,GAAYiP,GAAgBlP,EAAUC,EAAa,CAyCjcC,CAAUmrE,EAAcl6D,GACxB,IA3CoBpU,EAAaC,EAAYC,EA2CzCob,EAASZ,GAAa4zD,GAC1B,SAASA,IAEP,OAhDJ,SAAyB39L,EAAUqvH,GAAe,KAAMrvH,aAAoBqvH,GAAgB,MAAM,IAAI7vH,UAAU,oCAAwC,CA+CpJ8wH,CAAgBr6H,KAAM0nM,GACfhzD,EAAO30I,MAAMC,KAAMR,UAC5B,CAmGA,OAlJoB45H,EAgDPsuE,EAhDoBruE,EAgDN,CAAC,CAC1B15H,IAAK,UACLuH,MAAO,WACL,MAA8B,YAA1BlH,KAAK4L,QAAQ6iL,SACR,UAEF,MACT,GACC,CACD9uL,IAAK,SACLuH,MAAO,WACL,IAAIozH,EAAQt6H,KACR+uI,EAAc/uI,KAAKM,MACrByB,EAAYgtI,EAAYhtI,UACxBspL,EAAYt8C,EAAYs8C,UACxBic,EAAOv4D,EAAYu4D,KACnB7+I,EAAMsmF,EAAYtmF,IAClB2mE,EAAQ2f,EAAY3f,MACpBu4E,EAAkB54D,EAAY1kI,IAC9BA,OAA0B,IAApBs9L,EAA6B,MAAQA,EAC3CC,EAAmB74D,EAAY7sD,KAC/BA,OAA4B,IAArB0lH,GAAqCA,EAC5CC,EAAwB94D,EAAY8nD,UACpCA,OAAsC,IAA1BgR,EAAmC,GAAKA,EACpDN,EAAUx4D,EAAYw4D,QACtBnQ,EAAWroD,EAAYqoD,SACvB/yD,EAAY0K,EAAY1K,UACxBmjE,EAAiBz4D,EAAYy4D,eAC7BtW,EAAQ34D,GAAyBwW,EAAapD,IAC5C9sF,EAAUusI,GAAgBxsI,KAAW78C,EAAW,gBAAiB,CACnE,qBAAsBulM,EACtB,oBAAqB7+I,GAAO2mE,EAC5B04E,KAAM9nM,KAAK4L,QAAQsiL,SACjB7C,GACAzxI,EAAMvvC,EACV,GAAIk9L,GAAWvnM,KAAK4L,QAAQsiL,SAAWluL,KAAK4L,QAAQ2iL,SAAU,CAC5D,IAAIwZ,EAAYN,GAAqBznM,KAAK4L,QAAQoiG,YAAc,SAC5Dg6F,EAAYv/I,GAAO2mE,EAAQ,MAAQ,QACnC64E,EAAiB,GAAGv/L,OAAOq/L,EAAW,KAAKr/L,OAAOs/L,GAClDE,EAAiB,GAAGx/L,OAAOm+L,GAAmBhQ,GAAY,CAAC,CAC7DnlL,KAAM,OACNknL,UAAW12G,KAETimH,EAAgB,CAAC,EACjBZ,IACFY,EAAchkE,QAAU,QACxBgkE,EAAc5lE,WAAaviI,KAAK4L,QAAQsiL,OAAS,UAAY,UAE/D,IAAIsI,EAAsBlrB,IAAAA,cAAoBi6B,GAAQ,CACpD7O,UAAWuR,EACXpR,UAAWqR,EACX9Q,SAAUA,IACT,SAAUl3L,GACX,IAAIC,EAAMD,EAAKC,IACbwB,EAAQzB,EAAKyB,MACb+0L,EAAYx2L,EAAKw2L,UACjBlyG,EAAStkF,EAAKskF,OACZ4jH,EAAgB93D,GAAcA,GAAcA,GAAc,CAAC,EAAGhW,EAAMh6H,MAAMqB,OAAQwmM,GAAgBxmM,GAStG,OAAoB2pK,IAAAA,cAAoB1xH,EAAK16C,GAAS,CACpD+7I,SAAU,KACViB,KAAM5hB,EAAMm4D,UACZtyL,IAXc,SAAmBuyL,GAEjCvyL,EAAIuyL,GAGJ,IAAI/B,EAAYr2D,EAAM1uH,QAAQ+kL,UAC1BA,GAAWA,EAAU+B,EAC3B,GAKGxB,EAAO,CACRvvL,MAAOymM,EACP,eAAgB9tE,EAAM1uH,QAAQsiL,OAC9BnsL,UAAW88C,EACX,wBAAyB63I,EACzB79C,QAAS,WACP,OAAO2uD,GAAkBhjH,GAC3B,IAEJ,IACA,OAAI6/C,EACkBmpC,IAAAA,aAAsBgpB,EAAQ7J,GAAUtoD,IAEvDmyD,CACT,CACA,IAAI7F,EAAY3wL,KAAK4L,QAAQ+kL,UAC7B,OAAoBrlB,IAAAA,cAAoB1xH,EAAK16C,GAAS,CACpD+7I,SAAU,KACViB,KAAMl8I,KAAKyyL,WACVvB,EAAO,CACR/wL,IAAKwwL,EACL,eAAgB3wL,KAAK4L,QAAQsiL,OAC7BnsL,UAAW88C,EACX,wBAAyBqyI,EAAMwF,UAC/B,iBAAkB,WAEtB,IAhJ8Dr9D,GAAYwa,GAAkBza,EAAYx5H,UAAWy5H,GAAiBC,GAAaua,GAAkBza,EAAaE,GAAcn6H,OAAO6H,eAAeoyH,EAAa,YAAa,CAAE1rH,UAAU,IAkJrPg6L,CACT,CA1GgC,CA0G9Bp8B,IAAAA,WACFo8B,GAAahjE,UAAYA,GACzBgjE,GAAanW,YAAcxD,GAC3B,YCtKA,SAAS76C,GAAQxjH,GAAkC,OAAOwjH,GAAU,mBAAqB3vI,QAAU,iBAAmBA,OAAOW,SAAW,SAAUwrB,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAO,mBAAqBnsB,QAAUmsB,EAAI/jB,cAAgBpI,QAAUmsB,IAAQnsB,OAAO3D,UAAY,gBAAkB8vB,CAAK,EAAGwjH,GAAQxjH,EAAM,CAC/U,IAAIi8G,GAAY,CAAC,YAAa,YAAa,UAAW,MAAO,SAAU,SAAU,QACjF,SAASzsI,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAAS+4H,GAAyB74H,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAAkEC,EAAKJ,EAAnED,EACzF,SAAuCI,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAA2DC,EAAKJ,EAA5DD,EAAS,CAAC,EAAO8vI,EAAajwI,OAAOyH,KAAKlH,GAAqB,IAAKH,EAAI,EAAGA,EAAI6vI,EAAW3vI,OAAQF,IAAOI,EAAMyvI,EAAW7vI,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,CAAQ,CADhN+vI,CAA8B3vI,EAAQyvI,GAAuB,GAAIhwI,OAAO2H,sBAAuB,CAAE,IAAIgmL,EAAmB3tL,OAAO2H,sBAAsBpH,GAAS,IAAKH,EAAI,EAAGA,EAAIutL,EAAiBrtL,OAAQF,IAAOI,EAAMmtL,EAAiBvtL,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,GAAkBR,OAAOS,UAAUmkD,qBAAqBjkD,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,GAAQ,CAAE,OAAOL,CAAQ,CAG3e,SAASu0I,GAAkBv0I,EAAQgB,GAAS,IAAK,IAAIf,EAAI,EAAGA,EAAIe,EAAMb,OAAQF,IAAK,CAAE,IAAI45H,EAAa74H,EAAMf,GAAI45H,EAAWlyH,WAAakyH,EAAWlyH,aAAc,EAAOkyH,EAAW1rH,cAAe,EAAU,UAAW0rH,IAAYA,EAAWzrH,UAAW,GAAMvO,OAAO6H,eAAe1H,EAAQ65H,EAAWx5H,IAAKw5H,EAAa,CAAE,CAG5T,SAASoS,GAAgB/nI,EAAGa,GAA6I,OAAxIknI,GAAkBpsI,OAAOoiH,eAAiBpiH,OAAOoiH,eAAeliH,OAAS,SAAyBmE,EAAGa,GAAsB,OAAjBb,EAAE+/G,UAAYl/G,EAAUb,CAAG,EAAU+nI,GAAgB/nI,EAAGa,EAAI,CACvM,SAASyvI,GAAaC,GAAW,IAAIC,EAGrC,WAAuC,GAAuB,qBAAZC,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,oBAAVpmB,MAAsB,OAAO,EAAM,IAAsF,OAAhF5nH,QAAQvG,UAAUwG,QAAQtG,KAAKm0I,QAAQC,UAAU/tI,QAAS,IAAI,WAAa,MAAY,CAAM,CAAE,MAAOvD,GAAK,OAAO,CAAO,CAAE,CAHvQwxI,GAA6B,OAAO,WAAkC,IAAsC7uG,EAAlC8uG,EAAQC,GAAgBP,GAAkB,GAAIC,EAA2B,CAAE,IAAIO,EAAYD,GAAgBt0I,MAAM2L,YAAa45B,EAAS0uG,QAAQC,UAAUG,EAAO70I,UAAW+0I,EAAY,MAAShvG,EAAS8uG,EAAMt0I,MAAMC,KAAMR,WAAc,OACpX,SAAoCwD,EAAMlD,GAAQ,GAAIA,IAA2B,WAAlBozI,GAAQpzI,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIyJ,UAAU,4DAA+D,OAAOirI,GAAuBxxI,EAAO,CAD4Fw3H,CAA2Bx6H,KAAMulC,EAAS,CAAG,CAExa,SAASivG,GAAuBxxI,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIu3H,eAAe,6DAAgE,OAAOv3H,CAAM,CAErK,SAASsxI,GAAgB9wI,GAA+J,OAA1J8wI,GAAkBn1I,OAAOoiH,eAAiBpiH,OAAOoF,eAAelF,OAAS,SAAyBmE,GAAK,OAAOA,EAAE+/G,WAAapkH,OAAOoF,eAAef,EAAI,EAAU8wI,GAAgB9wI,EAAI,CAMnN,IAAIkhI,GAAY,CACdtlB,SAAUqY,KAAAA,KACV22D,OAAQ32D,KAAAA,KACR+mB,SAAU/mB,KAAAA,KACV4wE,QAAS5wE,KAAAA,KACTptH,IAAKshL,GACL2c,OAAQ7wE,KAAAA,KACRohB,QAASphB,KAAAA,KACT11H,UAAW01H,KAAAA,OACX4zD,UAAW5zD,KAAAA,OACX42D,OAAQ52D,KAAAA,KACRhvH,KAAMgvH,KAAAA,MAEJ8wE,GAA4B,SAAU/6D,IAzB1C,SAAmBnR,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI/yH,UAAU,sDAAyD8yH,EAASz8H,UAAYT,OAAOiI,OAAOk1H,GAAcA,EAAW18H,UAAW,CAAE+L,YAAa,CAAEzE,MAAOm1H,EAAU3uH,UAAU,EAAMD,cAAc,KAAWtO,OAAO6H,eAAeq1H,EAAU,YAAa,CAAE3uH,UAAU,IAAc4uH,GAAYiP,GAAgBlP,EAAUC,EAAa,CA0BjcC,CAAUgsE,EAAc/6D,GACxB,IA5BoBpU,EAAaC,EAAYC,EA4BzCob,EAASZ,GAAay0D,GAC1B,SAASA,EAAajoM,GACpB,IAAIg6H,EAKJ,OArCJ,SAAyBvwH,EAAUqvH,GAAe,KAAMrvH,aAAoBqvH,GAAgB,MAAM,IAAI7vH,UAAU,oCAAwC,CAiCpJ8wH,CAAgBr6H,KAAMuoM,IACtBjuE,EAAQoa,EAAO50I,KAAKE,KAAMM,IACpBu4I,QAAUve,EAAMue,QAAQx5I,KAAKm1I,GAAuBla,IAC1DA,EAAMkuE,YAAcluE,EAAMkuE,YAAYnpM,KAAKm1I,GAAuBla,IAC3DA,CACT,CAsFA,OA1HoBlB,EAqCPmvE,GArCoBlvE,EAqCN,CAAC,CAC1B15H,IAAK,UACLuH,MAAO,SAAiBtE,GACtB,IAAI6lM,EACA15D,EAAc/uI,KAAKM,MACrBk+I,EAAWzP,EAAYyP,SACvB8pD,EAASv5D,EAAYu5D,OACrBD,EAAUt5D,EAAYs5D,QACtB5/L,EAAOsmI,EAAYtmI,KACjB+1I,GAAY8pD,GAAUD,GAAW5/L,EACnC7F,EAAE88H,kBAGA1/H,KAAKM,MAAMu4I,SACb74I,KAAKM,MAAMu4I,QAAQj2I,IAE4B,QAA5C6lM,EAAqBzoM,KAAKM,MAAM+tL,cAA2C,IAAvBoa,GAAgCA,IACvFzoM,KAAK4L,QAAQyiL,OAAOzrL,GAExB,GACC,CACDjD,IAAK,UACLuH,MAAO,WACL,MAA8B,YAA1BlH,KAAK4L,QAAQ6iL,SACR,SAEF,UACT,GACC,CACD9uL,IAAK,cACLuH,MAAO,WACL,IAAIgoI,EAAelvI,KAAKM,MACtBk+I,EAAWtP,EAAasP,SACxB8pD,EAASp5D,EAAao5D,OACtBD,EAAUn5D,EAAam5D,QACvB5/L,EAAOymI,EAAazmI,KACtB,OAAI+1I,GAAY8pD,GAAUD,GAAW5/L,EAC5B,KAEF,GACT,GACC,CACD9I,IAAK,SACLuH,MAAO,WACL,IAAI+zI,EAAWj7I,KAAKwoM,cAChBtsD,EAAOjB,GAAY,EAAIj7I,KAAKyyL,eAAYrwL,EACxC6uL,EAAQ/yG,GAAKl+E,KAAKM,MAAO,CAAC,WAC5ByB,EAAYkvL,EAAMlvL,UAClBspL,EAAY4F,EAAM5F,UAClBgd,EAAUpX,EAAMoX,QAChBK,EAAYzX,EAAM5mL,IAClBuvC,OAAoB,IAAd8uJ,EAAuB,SAAWA,EACxCJ,EAASrX,EAAMqX,OACfla,EAAS6C,EAAM7C,OACf3lL,EAAOwoL,EAAMxoL,KACbnI,EAAQi4H,GAAyB04D,EAAOtlD,IACtC9sF,EAAUusI,GAAgBxsI,KAAW78C,EAAW,CAClDy8I,SAAUl+I,EAAMk+I,SAChB,iBAAkB6pD,IAAYC,IAAW7/L,EACzC2lL,OAAQA,EACR,kBAAmBka,EACnB,mBAAoBD,EACpB,qBAAsB5/L,IACpB4iL,GAYJ,MAXY,WAARzxI,IACE0uJ,EACF1uJ,EAAM,KACGyuJ,EACTzuJ,EAAM,MACGt5C,EAAMmnJ,KACf7tG,EAAM,IACGnxC,IACTmxC,EAAM,SAGU0xH,IAAAA,cAAoB1xH,EAAK16C,GAAS,CACpD4C,KAAc,WAAR83C,IAAqBt5C,EAAMu4I,SAAW74I,KAAKM,MAAM+tL,QAAU,cAAWjsL,GAC3E9B,EAAO,CACR26I,SAAUA,EACViB,KAAMA,EACNn6I,UAAW88C,EACXg6F,QAAS74I,KAAK64I,UAElB,MAxH0EhF,GAAkBza,EAAYx5H,UAAWy5H,GAAiBC,GAAaua,GAAkBza,EAAaE,GAAcn6H,OAAO6H,eAAeoyH,EAAa,YAAa,CAAE1rH,UAAU,IA0HrP66L,CACT,CAjGgC,CAiG9Bj9B,IAAAA,WACFi9B,GAAa7jE,UAAYA,GACzB6jE,GAAahX,YAAcxD,GAC3B,YCzHM4a,GAAiBzoM,IAAgC,IAA/B,SAAE61I,EAAQ,YAAEl7E,GAAa36D,EAC/C,MAAO0oM,EAAaC,IAAkBj+B,EAAAA,EAAAA,UAAS,IAY/C,OAAOuf,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,8BAA6Bq9G,SAAA,EACjDgrE,EAAAA,GAAAA,KAAClnE,GAAK,CAACphH,KAAK,OAAOoF,MAAO0hM,EAAa7mM,UAAU,yBAAyBg0I,SAAWnzI,IAAMkmM,OAXpE5hM,EAWoFtE,EAAEtD,OAAO4H,MAVpH2hM,EAAe3hM,QACf6uI,EAAS7uI,GAFcA,KAWoG,EAAC2zD,YAAaA,KACzIuvH,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,kCAAiCq9G,SAC7CwpF,GAAcxe,EAAAA,GAAAA,KAAC2e,GAAI,CAACr3L,KAAK,kBAAkBs3L,iBAAiB,wBAAwBzoM,MAAM,OAAOC,OAAO,OAAOq4I,QARvFowD,KAC3BJ,EAAe,IACf9yD,EAAS,GAAG,KAOTq0C,EAAAA,GAAAA,KAAC2e,GAAI,CAACr3L,KAAK,aAAas3L,iBAAiB,wBAAwBzoM,MAAM,OAAOC,OAAO,aAEpF,EAiDR,GA9CiByS,IAAsH,IAArH,UAAE+6F,EAAS,MAAEphF,EAAK,cAAEs8K,EAAa,SAAEnzD,EAAQ,WAAEozD,EAAU,eAAEC,EAAc,kBAAEC,EAAiB,SAAE7qD,KAAav0I,GAAMgJ,EAC/H,MAAOq2L,EAAcC,IAAmB3+B,EAAAA,EAAAA,WAAS,IAE1Cg+B,EAAaC,IAAkBj+B,EAAAA,EAAAA,UAAS,IAEzC4+B,EAAgB58K,EAAMtjB,QAAOmd,GAAwB,KAAhBmiL,GAAsBniL,EAAK/U,KAAKgtE,cAAcn0E,QAAQq+L,EAAYlqH,gBAAkB,IAEzH+qH,EAAOzpL,IAAe,IAAD0pL,EAAAC,EAAA,IAAb,KAAEljL,GAAMzG,EACpB,OAAIyG,EAAKsmH,UACAu+B,IAAAA,cAAoB7kJ,EAAKsmH,YAE3Bo9C,EAAAA,GAAAA,MAAA,OAAKpoL,UAAY,6BAA2B0kB,EAAK+3H,SAAW,WAAa,IAAKp/B,SAAA,CAClF34F,EAAKmjL,OAAQxf,EAAAA,GAAAA,KAAC2e,GAAI,CAACr3L,KAAM+U,EAAKmjL,KAAM7nM,UAAY,sCAAqC0kB,EAAKmjL,KAAKxgM,QAAQ,OAAO,MAAO7I,MAAiB,QAAZmpM,EAAEjjL,EAAKlmB,aAAK,IAAAmpM,EAAAA,EAAI,OAAQlpM,OAAmB,QAAbmpM,EAAEljL,EAAKjmB,cAAM,IAAAmpM,EAAAA,EAAI,UAC1Kvf,EAAAA,GAAAA,KAAA,QAAAhrE,SAAO34F,EAAK/U,SACR,EAGR,OAEEy4K,EAAAA,GAAAA,MAACwE,GAAQ,CAACT,OAAQob,EAAcjb,OAjBnBA,IAAMkb,GAAiBryD,IAAeA,IAiBHlpC,UAAWA,EAAWjsG,UAAU,YAAWq9G,SAAA,CACxFgqF,GACEhf,EAAAA,GAAAA,KAACoI,GAAc,CAACzwL,UAAU,6BAA6By8I,SAAUA,EAASp/B,UAACgrE,EAAAA,GAAAA,KAAA,QAAAhrE,SAAOgqF,OAClFhf,EAAAA,GAAAA,KAACoI,GAAc,CAACh0C,SAAUA,EAAU+zC,OAAK,EAAAnzE,SAAe,OAAb8pF,QAAa,IAAbA,GAAAA,EAAex3L,MAAO04K,EAAAA,GAAAA,KAAA,QAAAhrE,SAAO8pF,EAAcx3L,QAAe04K,EAAAA,GAAAA,KAAA,QAAAhrE,SAAM,YAE9G+qE,EAAAA,GAAAA,MAACud,GAAY,IAAKz9L,EAAIm1G,SAAA,CACnB+pF,IAAc/e,EAAAA,GAAAA,KAACue,GAAc,CAAC5yD,SAAU8yD,EAAgBhuI,YAAawuI,IACrEG,EAAc/4L,KAAI,CAACgW,EAAMiL,IACpBjL,EAAK4hL,SACAje,EAAAA,GAAAA,KAACme,GAAY,CAAaF,SAAO,GAAd32K,IAErB04J,EAAAA,GAAAA,KAACme,GAAY,CACCtsD,UAAWA,KAAOx1H,EAAK+3H,UAAYzI,EAAStvH,GAC5CoyH,QAASA,KAAOpyH,EAAK+3H,UAAYzI,EAAStvH,GAC1C2nK,QAAqB,OAAb8a,QAAa,IAAbA,OAAa,EAAbA,EAAehiM,SAAUuf,EAAKvf,MACtCs3I,SAAU/3H,EAAK+3H,SAASp/B,UAE3CgrE,EAAAA,GAAAA,KAACqf,EAAI,CAAChjL,KAAMA,KANYiL,KASF,IAAzB83K,EAAc/pM,SAAgB2qL,EAAAA,GAAAA,KAACme,GAAY,CAAC/pD,UAAQ,EAAAp/B,SAAEv8G,GAAE,kCAElD,EC8Bf,MC5DA,GA3CoB3C,IAAiF,IAAhF,KAAEwR,EAAI,MAAEnR,EAAK,OAAEC,EAAM,KAAEk6D,EAAI,iBAAEsuI,EAAgB,UAAEjnM,EAAS,MAAE3B,KAAU6J,GAAM/J,EAC7F,MAAO2pM,EAAcC,GAAmBx+B,IAAAA,SAAe,MACjD5mK,EAAInE,GAASm6D,EACbj0D,EAAIjG,GAAUk6D,EA0BpB,OAxBAmwG,EAAAA,EAAAA,YAAU,KAeWn+J,WACjB,MAAM,eAAEq9L,SAAyB,0BAAQ,KAAgBr4L,KACzDo4L,GAAgB1f,EAAAA,GAAAA,KAAC2f,EAAc,CAACxpM,MAAOmE,EAAGlE,OAAQiG,EAAG1E,UAAWA,EAAW3B,MAAOA,KAAW6J,IAAS,EAExG+/L,GAhBMhlM,SAAS0pI,iBAAkB,OAAM3sI,KAAatC,QAChDuF,SAAS0pI,iBAAkB,OAAM3sI,KAAa6F,SAASqiM,IACrDA,EAAIv7D,iBAAiB,KAAK9mI,SAASg8C,GAC/BA,EAAQksI,UAAU9pL,IAAIjE,KAE1BkoM,EAAIv7D,iBAAiB,QAAQ9mI,SAASg8C,GAClCA,EAAQksI,UAAU9pL,IAAIjE,IACzB,GAUM,GAEZ,CAAC2P,EAAMnR,EAAOC,EAAQuB,EAAW3B,IAE/BsR,IAAUgpD,GAAUl6D,GAAWD,IAKlC6pL,EAAAA,GAAAA,KAAA,OACIroL,UAAY,oBAAkBinM,EAAoB,IAAGA,IAAqB,IAC1ErnM,MAAO,CAAEpB,MAAQ,GAAEmE,IAAKlE,OAAS,GAAEiG,IAAK,eAAmB,GAAE/B,KAAK+B,KAAM24G,SAEvEyqF,GAA8B,OAR5B,IASD,ECmDV,GAxFoB3pM,IAUb,IAVc,YACnBgqM,GAAc,EAAK,UACnBnoM,EAAS,IACTyqK,EAAG,eACH29B,EAAc,QACdtxD,EAAUA,SAAQ,aAClBuxD,EAAeA,SAAQ,cACvBC,EAAgBA,SAAQ,aACxBC,EAAeA,SAAQ,YACvBC,EAAcA,UACfrqM,EACC,MAAM42I,GAAQ0zD,EAAAA,EAAAA,WACPC,EAAUC,IAAe9/B,EAAAA,EAAAA,WAAS,IACzCC,EAAAA,EAAAA,YAAU,KACR,MAAMzuB,EAAMtF,EAAMttF,QAKlB,OAJI4yF,GAAOA,EAAIrF,UACb4zD,IAEFxnM,OAAO6P,iBAAiB,SAAU23L,GAC3B,IAAMxnM,OAAOs7H,oBAAoB,SAAUksE,EAAY,GAE7D,IAEH,MAAMA,EAAcjwH,GAAS,IAAI,KAC/B,MAAM0hE,EAAMtF,EAAMttF,QAGlB,GAFAkhJ,GAAY,GACZP,GAAkBA,GAAe,GAC7B/tD,EAAK,CACP,MAAMwuD,EAAgBxuD,EAAI3S,cAAcohE,QAAQ,eAC1CC,EAAgB1uD,EAAI3S,cAAcohE,QAAQ,yBAChDzuD,EAAI0zC,UAAU5sG,OAAO,QACrB,IAAImhD,EAAY+X,EAAI3S,cAAcohE,QAAQ,6BACxCzuD,EAAI3S,cAAcohE,QAAQ,mBAC1BzuD,EAAI3S,cAAcohE,QAAQ,qBAC1BzuD,EAAI3S,cAAcohE,QAAQ,mBAC1BzuD,EAAI3S,cAAcohE,QAAQ,iBAE5B,MAAME,EAAgE,EAAlD7pL,SAASgkH,iBAAiBkX,GAAK2uD,YAAa,IAChE,IAAIC,EAAyB3mE,EAAUlE,YAAc4qE,EACjDE,EAA0B5mE,EAAUhE,aAAe0qE,EAEvD,KAAOC,GAA0B,GAAKC,GAA2B,GAC/D5mE,EAAYA,EAAUoF,cACtBuhE,EAAyB3mE,EAAUlE,YAAc4qE,EACjDE,EAA0B5mE,EAAUhE,aAAe0qE,EAErD,MAAMG,EAAuB7mE,EAAUyrD,UAAUxhI,SAAS,2BACpD68I,EAAoBP,EAAgB,EAAIE,EAAgB,EAAKI,EAAuB,IAAM,GAC5F9uD,EAAIgvD,aAAehvD,EAAIivD,cAAgBL,EAAyBC,GAClE7uD,EAAIz6I,MAAMpB,MAAWyqM,EAAyBG,EAA3B,KACnB/uD,EAAIz6I,MAAMnB,OAAS,SAEnB47I,EAAIz6I,MAAMpB,MAAQ,OAClB67I,EAAIz6I,MAAMnB,OAAYyqM,EAA0BE,EAA5B,KAExB,KAcF,OACEhhB,EAAAA,GAAAA,MAAA,OAAKpoL,UAAY,gBAAeA,GAAwB,KAC9C82I,UAASwxD,gBAAeD,eAAcE,eAAcC,cAAWnrF,SAAA,EACrEqrF,IAAYrgB,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBAC7BqoL,EAAAA,GAAAA,KAAA,OAAKroL,UAAW,sBAAsBq9G,UACpCgrE,EAAAA,GAAAA,KAAA,OACEzoL,MAAO,CAAEwiI,QAASsmE,EAAW,QAAU,QACvCa,IAAI,GACJnrM,IAAK22I,EACL01B,IAAKA,EACL++B,QArBaC,KACnB,MAAMC,EAAY30D,EAAMttF,QACpBiiJ,IACFA,EAAUj/B,IAAMnoJ,oBAAS,MACzBonL,EAAU3b,UAAU5sG,OAAO,QAC3BuoH,EAAU3b,UAAU9pL,IAAI,QACxBylM,EAAUrgD,gBAAgB0kC,UAAU5sG,OAAO,QAC3CuoH,EAAUrgD,gBAAgB0kC,UAAU9pL,IAAI,QAC1C,EAcM0lM,OAAQf,EACR5oM,UAAU,aAGV,ECTV,GA3EkB7B,IAAkD,IAAjD,IAAEssK,EAAG,cAAEm/B,EAAa,YAAEC,GAAc,GAAO1rM,EAC5D,MAAM2yE,GAAU23H,EAAAA,EAAAA,QAAO,MACjBpuD,EAAMowB,GAAOnoJ,oBAAS,OAErBwnL,EAAQC,IAAalhC,EAAAA,EAAAA,WAAS,IAC9BmhC,EAAoBC,IAAyBphC,EAAAA,EAAAA,UAAS,YACtDqhC,EAAgBC,IAAqBthC,EAAAA,EAAAA,UAAS,YAC9Cs/B,EAAaiC,IAAkBvhC,EAAAA,EAAAA,UAAS,CAAEnpK,GAAG,EAAOC,GAAG,IAExD0qM,EAAqBA,KACzB,MAAM,YAAEjsE,EAAW,aAAEE,GAAiBxtD,EAAQrpB,QAC9C,GAAoB,IAAhB22E,GAAsC,IAAjBE,EAAoB,CAC3C,MAAM+b,EAAMvpE,EAAQrpB,QAAQ24I,cAAc,QAClCiJ,aAAciB,EAAUhB,cAAeiB,GAAclwD,EAE7D+vD,EAAe,CAAE1qM,EAAG4qM,EAAWlsE,EAAaz+H,EAAG4qM,EAAYjsE,GAC7D,IAGFwqC,EAAAA,EAAAA,YAAU,KACR8gC,GAAiBA,EAAcE,EAAO,GAErC,CAACA,IAEJ,MAAMU,EAAoB3pM,IACxB,IAAKipM,EACH,OAGF,MAAM7nL,EAAOphB,EAAE4pM,eACT,QAAEC,EAAO,QAAEC,GAAY9pM,EAAE+pM,YACzBlrM,EAAIyoM,EAAYzoM,EAAIgrM,EAAUzoL,EAAKm8G,YAAc,IAAM,GACvDz+H,EAAIwoM,EAAYxoM,EAAIgrM,EAAU1oL,EAAKq8G,aAAe,IAAM,GAC9D2rE,EAAuB,GAAEvqM,MAAMC,KAAK,EAchCkrM,EAAc1C,EAAYzoM,GAAKyoM,EAAYxoM,EACjD,OACEyoL,EAAAA,GAAAA,MAAA,OACE0iB,YAAaT,EACbV,OAAQU,EACRrqM,UAAY,qBAAoB8pM,EAAS,iBAAmB,KAAKe,EAAc,QAAU,KACzFzsM,IAAK0yE,EACLgmE,QAlBkBi0D,KACpB,GAAI5C,EAAYzoM,GAAKyoM,EAAYxoM,EAAG,CAClC,IAAKmqM,EAAQ,CACX,MAAM,cAAER,EAAa,aAAED,GAAiBv4H,EAAQrpB,QAAQ24I,cAAc,OACtE+J,EAAmB,GAAEd,OAAkBC,MACzC,CAEAS,GAAUrnJ,IAASA,GACrB,GAWE2lJ,aAAcA,KACZ0B,GAAU,EAAM,EAChB1sF,SAAA,EAEFgrE,EAAAA,GAAAA,KAAC2iB,GAAW,CAAChrM,UAAY,UAAS8pM,EAAuB,YAAd,aAA6Br/B,IAAKpwB,EAAKwvD,YAAaA,KAC/FxhB,EAAAA,GAAAA,KAAA,OACEmgB,YAAagC,EACbb,OAAQa,EAAiBltM,UAAK,EAAM,CAAE8gI,YAAa,GAAKE,aAAc,KACtEt+H,UAAY,eAAa8pM,EAAS,YAAc,aAChDlqM,MAAO,CACLqrM,gBAAkB,OAAM5wD,KACxB6vD,iBACAF,qBACAkB,iBAAkB,iBAGlB,EC+CV,MC3FA,GAtBoB3sM,IAClB,MAAM,UAAEyB,EAAS,UAAEmrM,EAAS,QAAE77J,EAAO,cAAE63J,EAAa,SAAEnzD,GAAaz1I,EAEnE,OAAK+wC,GAA8B,IAAnBA,EAAQ5xC,QAAiBytM,GAIlC9iB,EAAAA,GAAAA,KAAA,OAAKroL,UAAY,GAAEA,gBAAyBk5I,SAAS,KAAI77B,SAE5D/tE,EAAQ5gC,KAAK6gC,IACX,MAAMgnG,EAAahnG,EAAIpqC,QAAUgiM,EACjC,OAAO/e,EAAAA,GAAAA,MAAA,SAAuBpoL,UAAU,eAAek5I,SAAS,KAAI77B,SAAA,EAClEgrE,EAAAA,GAAAA,KAAA,SAAkCtoL,KAAK,QAAQ,wBAAuBwvC,EAAIpqC,MAAO,kBAAiBoxI,EAC3FgY,QAAShY,EAAY5mI,KAAMw7L,EAAWn3D,SAAUA,EAAS12I,UAAK,EAAMiyC,EAAIpqC,MAAOoqC,GAAM1wC,GAAI0wC,EAAI1wC,IADvF,SAAQ0wC,EAAIpqC,UAEzBkjL,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,oBACfuvC,EAAIhnB,QAJYgnB,EAAIpqC,MAKf,MAZL,IAeH,+DCfR,MAAMimM,WAA0B1oE,EAAAA,UAC9Bh7G,MAAAA,GACE,MAAM,MAAErpB,EAAK,SAAEy+H,EAAQ,aAAEuuE,EAAY,SAAEhuF,GAAap/G,KAAKM,MAEzD,OAAKu+H,GAAazf,GAKhB+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,UAASq9G,SAAA,EACtBgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,MAAKq9G,SAEhBh/G,IAASgqL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,8BAA6Bq9G,SAAEh/G,OAG3DgqL,EAAAA,GAAAA,KAACphD,KAAc,CACbjnI,UAAU,OACVynI,SAAU3K,EACV6L,QAAS0iE,EACTziE,aAAa,EAAMvrB,SAClBA,OAfE,IAmBX,EAGF,YCTA,MAAMiuF,WAAe5oE,EAAAA,UACnB94H,WAAAA,CAAarL,GACXukB,MAAMvkB,GAENN,KAAKm+I,OAASmtB,IAAAA,YAEdtrK,KAAK+I,MAAQ,CACXq2G,SAAU,GACV4yB,eAAgB,EAChBd,gBAAiB,EACjBo8D,YAAa,EACbC,eAAgB,EAChBC,oBAAqB,KACrBC,mBAAoB,KACpBC,cAAe,MAGjB1tM,KAAK2tM,cAAe,CACtB,CAEA7/D,iBAAAA,GAEE9tI,KAAK+R,eAGL5O,OAAO6P,iBAAiB,UAAU,KAChChT,KAAK4tM,UAAU,IAGjB5pH,GAAS,IAAKhkF,KAAK4tM,UACnB5pH,GAAS,IAAKhkF,KAAKu+I,MACrB,CAEAnQ,oBAAAA,GACEjrI,OAAOs7H,oBAAoB,SAAUz+H,KAAK4tM,SAC5C,CAEAA,QAAAA,GACE,MAAM,MAAEC,GAAU7tM,KAAKM,MAEvB,IAAKN,KAAKm+I,SAAWn+I,KAAK+I,QAAU8kM,IAAU7tM,KAAK2tM,aACjD,OAGF,MAAMvuF,EAAWp/G,KAAKm+I,OAAO7R,WACvBihE,EAAiBz/L,KAAK8yE,MAAM5gF,KAAKm+I,OAAOhhB,YAAc/d,EAAS,GAAG+d,aAElEuwE,EAAgB1tM,KAAK+I,MAAM2kM,cACjC,IAAII,EAAc,EAEdJ,IAAkBtuF,EAAS,GAAG+d,cAC5BuwE,EAAgBtuF,EAAS,GAAG+d,YAC9B2wE,GAAe1uF,EAAS,GAAG+d,YAE3B2wE,GAAe1uF,EAAS,GAAG+d,aAI/B,MAAM+T,GAAmBlxI,KAAKm+I,OAAOhhB,YAAc2wE,EACnD9tM,KAAKm+I,OAAOx8I,MAAMwtH,KAAQ,GAAE+hB,MAE5BlxI,KAAK28H,SAAS,CACZuU,kBACAq8D,iBACAG,iBAEJ,CAEAK,UAAAA,GACE,GAAI/tM,KAAKm+I,QAAUn+I,KAAKm+I,OAAO5T,WAAY,CACzC,MAAMyjE,EAAoBhuM,KAAKm+I,OAAOhhB,YAEhC8wE,EAAUjuM,KAAKm+I,OAAO5T,WAAW43D,cAAe,aAChD+L,EAAWluM,KAAKm+I,OAAO5T,WAAW43D,cAAe,cAEnD8L,GAAWC,IACTluM,KAAK2tM,cACPM,EAAQtsM,MAAM4gI,WAAa,UAC3B2rE,EAASvsM,MAAM4gI,WAAa,UAC5B2rE,EAASvsM,MAAMwtH,KAAU6+E,EAlFf,GADC,GAmFY,OAEvBC,EAAQtsM,MAAM4gI,WAAa,SAC3B2rE,EAASvsM,MAAM4gI,WAAa,UAGlC,CACF,CAEAxwH,YAAAA,GACE,IAAM/R,KAAKm+I,SAAUn+I,KAAKm+I,OAAO7R,WAC/B,OAGF,MAAMltB,EAAWp/G,KAAKm+I,OAAO7R,WACvB6hE,EAAanuM,KAAKouM,iBAAmB,EACrCC,EAAc,GACdr8D,EAAiBhyI,KAAK+I,MAAMipI,gBAAkB5yB,EAAS3/G,OAO7D,GALAO,KAAK28H,SAAS,CACZqV,mBAIiC,IAA/BhyI,KAAK+I,MAAMq2G,SAAS3/G,OAAc,CACpC,IAAK,IAAIF,EAAI,EAAGA,EAAIyyI,EAAgBzyI,IAClC8uM,EAAYxnM,KAAKu4G,EAAS7/G,GAAGmtH,WAAU,IAEzC1sH,KAAK28H,SAAS,CACZvd,SAAUivF,GAEd,KAEK,CACHruM,KAAKm+I,OAAO7P,UAAY,GAExB,IAAK,IAAI/uI,EAAI,EAAGA,EAAIS,KAAK+I,MAAMq2G,SAAS3/G,OAAQF,IAC9CS,KAAKm+I,OAAO3Y,YAAYxlI,KAAK+I,MAAMq2G,SAAS7/G,IAG9CS,KAAKm+I,OAAOx8I,MAAMwtH,KAAO,KAC3B,CAEA,GAAI6iB,GAAkBm8D,EAGpB,OAFAnuM,KAAKm+I,OAAOx8I,MAAM2sM,eAAiB,cACnCtuM,KAAK2tM,cAAe,GAItB3tM,KAAK2tM,cAAe,EAGpB,MAAMJ,EAAiBz/L,KAAK8yE,MAAM5gF,KAAKm+I,OAAOhhB,YAAc/d,EAAS,GAAG+d,aAExEn9H,KAAK28H,SAAS,CACZ4wE,iBACAG,cAAetuF,EAAS,GAAG+d,cAG7Bn9H,KAAKuuM,uBAAuBhB,EAAgBc,GAC5CruM,KAAKwuM,sBAAsBjB,EAAgBc,GAC3CruM,KAAKyuM,mBAAkB,GAAM,EAAOlB,GACpCvtM,KAAK0uM,kBACL1uM,KAAK2uM,SAAS38D,EAChB,CAEAu8D,sBAAAA,CAAwBhB,EAAgBnuF,GACtC,MAAMwvF,EAAsB,GAGtBC,EAActB,EAAiBnuF,EAAS3/G,OAAS8tM,EAEvD,IAAK,IAAIhuM,EAAI,EAAGA,EAAIsvM,EAAatvM,IAC1B6/G,EAAS7/G,KAIdqvM,EAAoB/nM,KAAKu4G,EAAS7/G,GAAGmtH,WAAU,IAE3CntH,IAAMsvM,EAAc,GACtB7uM,KAAK28H,SAAS,CACZ6wE,oBAAqBjuM,KAM3B,IAAK,IAAIA,EAAI,EAAGA,EAAIqvM,EAAoBnvM,OAAQF,IAC9CS,KAAKm+I,OAAO7qI,OAAOs7L,EAAoBrvM,GAE3C,CAEAivM,qBAAAA,CAAuBjB,EAAgBnuF,GACrC,MAAM0vF,EAAuB,GAG7B,IAAI/+L,EAAIw9L,EACR,IAAK,IAAIhuM,EAAI6/G,EAAS3/G,OAAS,EAAGF,GAAK,EAAGA,IAGxC,GAFAuvM,EAAqBjoM,KAAKu4G,EAAS7/G,GAAGmtH,WAAU,IAChD38G,IACU,IAANA,EAAS,CACX/P,KAAK28H,SAAS,CACZ8wE,mBAAoBluM,IAEtB,KACF,CAIF,IAAK,IAAIA,EAAI,EAAGA,EAAIuvM,EAAqBrvM,OAAQF,IAAK,CACpD,MAAMo2I,EAAY31I,KAAKm+I,OAAO4wD,WAC9B/uM,KAAKm+I,OAAOl+B,aAAa6uF,EAAqBvvM,GAAIo2I,EACpD,CACF,CAEAq5D,YAAAA,CAAcC,GACZ,IAAIC,EAAkBD,EAAajvM,KAAK+I,MAAMykM,oBAAsBxtM,KAAK+I,MAAM0kM,mBAE/E,GAAuB,OAAnByB,EAIJ,GAAID,EAAW,CACb,MAAML,EAAsB,GAC5B,IAAI7+L,EAAIm/L,EAAiB,EAGzB,IAAK,IAAI3vM,EAAI,EAAGA,EAAIS,KAAK+I,MAAMwkM,eAAgBhuM,IACzCwQ,IAAM/P,KAAK+I,MAAMq2G,SAAS3/G,SAC5BsQ,EAAI,GAEN6+L,EAAoB/nM,KAAK7G,KAAK+I,MAAMq2G,SAASrvG,GAAG28G,WAAU,IAEtDntH,IAAMS,KAAK+I,MAAMwkM,eAAiB,IACpCvtM,KAAK28H,SAAS,CACZ6wE,oBAAqBz9L,IAEvBm/L,EAAiBn/L,GAEnBA,IAIF,IAAK,IAAIxQ,EAAI,EAAGA,EAAIqvM,EAAoBnvM,OAAQF,IAC9CS,KAAKm+I,OAAO7qI,OAAOs7L,EAAoBrvM,IAIzC,IAAK,IAAIA,EAAI,EAAGA,EAAIS,KAAK+I,MAAMwkM,eAAgBhuM,IAC7CS,KAAKm+I,OAAO7R,WAAW,GAAGppD,SAI5BnzE,EAAIm/L,EAAiB,EACrB,IAAK,IAAI3vM,EAAI,EAAGA,EAAIS,KAAK+I,MAAMwkM,eAAgBhuM,KAClC,IAAPwQ,IACFA,EAAI/P,KAAK+I,MAAMq2G,SAAS3/G,OAAS,GAG/BF,IAAMS,KAAK+I,MAAMwkM,eAAiB,GACpCvtM,KAAK28H,SAAS,CACZ8wE,mBAAoB19L,IAGxBA,IAGF/P,KAAKyuM,mBAAkB,GAAO,EAAOzuM,KAAK+I,MAAMwkM,eAClD,KAAO,CACL,MAAMnuF,EAAWp/G,KAAKm+I,OAAO7R,WACvBwiE,EAAuB,GAC7B,IAAI/+L,EAAIm/L,EAAiB,EAGzB,IAAK,IAAI3vM,EAAI,EAAGA,EAAIS,KAAK+I,MAAMwkM,eAAgBhuM,KAClC,IAAPwQ,IACFA,EAAI/P,KAAK+I,MAAMq2G,SAAS3/G,OAAS,GAGnCqvM,EAAqBjoM,KAAK7G,KAAK+I,MAAMq2G,SAASrvG,GAAG28G,WAAU,IAEvDntH,IAAMS,KAAK+I,MAAMwkM,eAAiB,IACpCvtM,KAAK28H,SAAS,CACZ8wE,mBAAoB19L,IAEtBm/L,EAAiBn/L,GAEnBA,IAIF,IAAK,IAAIxQ,EAAI,EAAGA,EAAIuvM,EAAqBrvM,OAAQF,IAAK,CACpD,MAAMo2I,EAAYv2B,EAAS,GAC3Bp/G,KAAKm+I,OAAOl+B,aAAa6uF,EAAqBvvM,GAAIo2I,EACpD,CAGA,IAAK,IAAIp2I,EAAI,EAAGA,EAAIS,KAAK+I,MAAMwkM,eAAgBhuM,IAC7CS,KAAKm+I,OAAO7R,WAAWtsI,KAAKm+I,OAAO7R,WAAW7sI,OAAS,GAAGyjF,SAI5DnzE,EAAIm/L,EAAiB,EACrB,IAAK,IAAI3vM,EAAI,EAAGA,EAAIS,KAAK+I,MAAMwkM,eAAgBhuM,IACzCwQ,IAAM/P,KAAK+I,MAAMq2G,SAAS3/G,SAC5BsQ,EAAI,GAGFxQ,IAAMS,KAAK+I,MAAMwkM,eAAiB,GACpCvtM,KAAK28H,SAAS,CACZ6wE,oBAAqBz9L,IAGzBA,IAGF/P,KAAKyuM,mBAAkB,GAAM,EAAOzuM,KAAK+I,MAAMwkM,eACjD,CACF,CAEAkB,iBAAAA,CAAmBQ,EAAWE,EAAc5B,GAC1C,MACM6B,EAAc7B,EADFvtM,KAAKm+I,OAAO7R,WAAW,GAAGnP,YAE5C,IAAI+T,EAAkBlxI,KAAK+I,MAAMmoI,gBAE7B+9D,EACF/9D,GAAmBk+D,EAEnBl+D,GAAmBk+D,EAInBpvM,KAAKm+I,OAAOx8I,MAAMsiI,WADhBkrE,EAC8B,aAEA,OAGlC,MAAMhgF,EAAQ,GAAE+hB,MAChBlxI,KAAKm+I,OAAOx8I,MAAMwtH,KAAOA,EAEzBnvH,KAAK28H,SAAS,CACZuU,mBAEJ,CAEAqN,KAAAA,CAAO0wD,EAAWI,GACXrvM,KAAK2tM,eAIV3tM,KAAKyuM,kBAAkBQ,GAAW,EAAMjvM,KAAK+I,MAAMwkM,gBAEnD56L,YAAW,KACL08L,GACFrvM,KAAKgvM,aAAaC,EACpB,GAvVmB,KA0VrBjvM,KAAKsvM,aAAaL,GACpB,CAEAP,eAAAA,GACE,MAAMa,EAAOvvM,KAAKm+I,OAAO5T,WAAW43D,cAAe,YAC9CoN,IAGLA,EAAK5tM,MAAMi3H,IAAM,SACnB,CAEA+1E,QAAAA,CAAU38D,GACR,MAAMu9D,EAAOvvM,KAAKm+I,OAAO5T,WAAW43D,cAAe,YACnD,GAAKoN,EAAL,CAEAA,EAAKjhE,UAAY,GAEjB,IAAK,IAAI/uI,EAAI,EAAGA,EAAIyyI,EAAgBzyI,IAAK,CACvC,MAAMk/I,EAAMz5I,SAASgxH,cAAc,OACnCyoB,EAAI18I,UAAY,MAChBwtM,EAAK/pE,YAAYiZ,EACnB,CAEA8wD,EAAKjjE,WAAW,GAAGz5H,aAAa,QAAS,aAVrB,CAWtB,CAEAy8L,YAAAA,CAAcL,GACZ,MAAMM,EAAOvvM,KAAKm+I,OAAO5T,WAAW43D,cAAe,YACnD,IAAKoN,EACH,OAGF,IAAIjC,EAActtM,KAAK+I,MAAMukM,YAC7B,MAAMt7D,EAAiBhyI,KAAK+I,MAAMipI,eAE9Bi9D,GACF3B,GAAe,EACXA,IAAgBt7D,IAClBs7D,EAAc,KAGhBA,GAAe,GACM,IAAjBA,IACFA,EAAct7D,EAAiB,IAInChyI,KAAK28H,SAAS,CACZ2wE,gBAGF,IAAK,IAAI/tM,EAAI,EAAGA,EAAIgwM,EAAKjjE,WAAW7sI,OAAQF,IAC1CgwM,EAAKjjE,WAAW/sI,GAAGsT,aAAa,QAAS,OAE3C08L,EAAKjjE,WAAWghE,GAAaz6L,aAAa,QAAS,aACrD,CAEA28L,aAAAA,CAAe7vM,GACb,IAAIqpH,EAAU7lH,OAAO+hI,iBAAiBllI,KAAKm+I,OAAQ,UAAUsxD,iBAAiB,WAG9E,GAFAzmF,EAAUA,EAAQ5/G,QAAQ,IAAI9D,OAAO,IAAK,KAAM,IAAI8D,QAAQ,IAAI9D,OAAO,IAAK,KAAM,KAElE,SAAZ0jH,EACF,OAAO,KAGT,IAEE,OADAA,EAAUh8G,KAAKxE,MAAMwgH,GACdA,EAAQrpH,EACjB,CAAE,MAAOiD,GACP6G,QAAQ2C,MAAMxJ,EAChB,CACF,CAEAwrM,aAAAA,GACE,OAAOpuM,KAAKwvM,cAAc,QAC5B,CAEAE,QAAAA,CAAU1hG,GACR,MAAMihG,EA9aI,OA8aQjhG,EAClBhuG,KAAKu+I,MAAM0wD,GAAW,EACxB,CAEAxlL,MAAAA,GACE,MAAM,SAAE21F,EAAQ,MAAEyuF,GAAU7tM,KAAKM,MAEjC,OAAK8+G,GAILp/G,KAAK+tM,cAGH3jB,EAAAA,GAAAA,KAACulB,GAAS,CACRC,YAAU,EACVC,8BAA4B,EAC5BC,aAAcA,IAAM1wF,EAAS3/G,OAAS,GAAKO,KAAK0vM,SA9b3C,MA+bLK,cAAeA,IAAM3wF,EAAS3/G,OAAS,GAAKO,KAAK0vM,SAhc3C,MAgc2DtwF,UAEjE+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAY,kBAAgB8rM,EAAQ,SAAW,WAAYzuF,SAAA,EAC9DgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,SAAS5B,IAAMA,IAAUH,KAAKm+I,OAASh+I,CAAG,EAAGi/G,SACzDA,KAEHgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,kBAAkB82I,QAAS74I,KAAKu+I,MAAMl/I,KAAKW,MAAM,GAAO,GAAMo/G,UAC3EgrE,EAAAA,GAAAA,KAAC2e,GAAI,CAACr3L,KAAK,YAAYnR,MAAQ,OAAmBC,OAAS,OAAoBuB,UAAU,uBAE3FqoL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,mBAAmB82I,QAAS74I,KAAKu+I,MAAMl/I,KAAKW,MAAM,GAAM,GAAMo/G,UAC3EgrE,EAAAA,GAAAA,KAAC2e,GAAI,CAACr3L,KAAK,YAAYnR,MAAQ,OAAmBC,OAAS,OAAoBuB,UAAU,wBAEzF8rM,IAASzjB,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,eAtBvB,IA0BX,EAGF,YCheMiuM,GAAW1vM,IACf,MAAM,KAAEmI,EAAI,UAAE1G,EAAS,UAAE20L,EAAS,MAAEqJ,EAAK,QAAE9yD,GAAY3sI,EACjD2vM,GAAazF,EAAAA,EAAAA,UACb0F,GAAW1F,EAAAA,EAAAA,UAEX2F,EAAkBF,EAAWzmJ,SAAY0mJ,EAAS1mJ,QAAQ62E,aAAe6vE,EAAS1mJ,QAAQ0zE,aAEhG,OACEitD,EAAAA,GAAAA,MAAA,OACEhqL,IAAK8vM,EACLluM,UAAY,wBAAuBA,eAAuB20L,IAAYt3E,SAAA,EAEtEgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAY,uBAAsBkrI,IAAW9sI,IAAK+vM,EAAU3gE,wBAA0B,CAAEC,OAAQ/mI,KACpG0nM,IAAmBhmB,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,eAAe5B,IAAK8vM,EAAW7wF,SAAA,EAChEgrE,EAAAA,GAAAA,KAAA,QAAMroL,UAAY,SAAQg+L,MACzBt3L,OAEC,EAIVunM,GAAQrrE,aAAe,CACrBl8H,KAAM,GACN1G,UAAW,GACX20L,UAAW,MACXqJ,OAAO,EACP9yD,QAAS,GAGX,YC9BamjE,GAAO,OACPC,GAAQ,QACRC,GAAK,KACLC,GAAO,OCiCd5rE,GAAqC,CACzCmN,MAAO,GACP0+D,sBAAsB,EACtBC,cAAe,EACfb,YAAY,EACZc,YAAY,EACZC,cAAe/1K,IACfg2K,kBAAmB,CAAE1pE,SAAS,IAE1B7kH,GAA+B,CACnCooE,OAAO,EACPnI,QAAS,CAAC,EAAG,GACb95B,MAAO,EACPgpF,SAAS,EACTq/D,GAAI,CAAC,EAAG,IAEJC,GAAY,YACZC,GAAU,UACVC,GAAW,WACXC,GAAY,YACZC,GAAa,aAmBnB,SAASC,GAAgBj/J,EAAck/J,GACrC,GAAc,IAAVA,EAAa,OAAOl/J,EACxB,MAAMm/J,EAAkBvjM,KAAKwjM,GAAK,IAAOF,EAKzC,MAAO,CAHLl/J,EAAI,GAAKpkC,KAAKyjM,IAAIF,GAAkBn/J,EAAI,GAAKpkC,KAAK0jM,IAAIH,GAEtDn/J,EAAI,GAAKpkC,KAAKyjM,IAAIF,GAAkBn/J,EAAI,GAAKpkC,KAAK0jM,IAAIH,GAE1D,CAEA,SAASI,GACP1rM,EACA2rM,GAQA,MAAMC,EAAW3pF,IACf,MAAM4pF,EAAU,YAAa5pF,EAEzB4pF,GAAW5pF,EAAMoe,QAAQ3mI,OAAS,GAEtCsG,GAAI,CAACgD,EAAOzI,KAENA,EAAMsvM,aAAegC,IACvB5sM,SAASgO,iBAAiB89L,GAAWe,GACrC7sM,SAASgO,iBAAiB+9L,GAASe,IAErC,MAAM,QAAEnyE,EAAO,QAAEI,GAAY6xE,EAAU5pF,EAAMoe,QAAQ,GAAKpe,EACpD6oF,EAAKM,GAAgB,CAACxxE,EAASI,GAAUz/H,EAAMmwM,eAKrD,OAHAnwM,EAAMyxM,2BACJzxM,EAAMyxM,0BAA0B,CAAE/pF,UAEpC7oH,OAAAC,OAAAD,OAAAC,OAAAD,OAAAC,OAAA,GACK2J,GACAsZ,IAAY,CACfigE,QAASuuH,EAAGprM,QACZorM,KACAroJ,MAAOw/D,EAAMgqF,WAAa,GAAC,GAE7B,EAGEH,EAAU7pF,IACdjiH,GAAI,CAACgD,EAAOzI,KACV,MAAMsxM,EAAU,YAAa5pF,EAG7B,GAAI4pF,GAAW5pF,EAAMoe,QAAQ3mI,OAAS,EACpC,OAAOsJ,EAIT,GAAIi/G,EAAMgqF,UAAYjpM,EAAMy/C,MAAQloD,EAAMqwM,cACxC,OAAO5nM,EAAMyoI,QAAOryI,OAAAC,OAAAD,OAAAC,OAAA,GAAQ2J,GAAK,CAAEyoI,SAAS,IAAUzoI,EAGxD,MAAM,QAAE42H,EAAO,QAAEI,GAAY6xE,EAAU5pF,EAAMoe,QAAQ,GAAKpe,GACnDvmH,EAAGC,GAAKyvM,GAAgB,CAACxxE,EAASI,GAAUz/H,EAAMmwM,eACnDhpE,EAAShmI,EAAIsH,EAAM8nM,GAAG,GACtBnpE,EAAShmI,EAAIqH,EAAM8nM,GAAG,GACtBoB,EAAOnkM,KAAKwjF,IAAIm2C,GAChByqE,EAAOpkM,KAAKwjF,IAAIo2C,GAChBtsD,GAAQ4sC,EAAMgqF,WAAa,GAAKjpM,EAAMy/C,MACtC2pJ,EAAWrkM,KAAKskM,KAAKH,EAAOA,EAAOC,EAAOA,IAAS92H,GAAQ,GAC3Di3H,EAAgB,CAAC5qE,GAAUrsD,GAAQ,GAAIssD,GAAUtsD,GAAQ,IAEzDoQ,EAxFZ,SACEymH,EACAC,EACAzqE,EACAC,GAEA,OAAIuqE,EAAOC,EACLzqE,EAAS,EACJ4oE,GAEFD,GACE1oE,EAAS,EACX6oE,GAEFD,EACT,CAyEkBgC,CAAaL,EAAMC,EAAMzqE,EAAQC,GAGvCoK,EACmB,kBAAhBxxI,EAAMwxI,MACTxxI,EAAMwxI,MACNxxI,EAAMwxI,MAAMtmD,EAAI9M,gBAChBimD,GAAamN,MACnB,GAAImgE,EAAOngE,GAASogE,EAAOpgE,IAAU/oI,EAAMyoI,QAAS,OAAOzoI,EAE3D,MAAMwpM,EAAY,CAChBN,OACAC,OACAzqE,SACAC,SACAl8C,MACAw8B,QACAv9B,MAAO1hF,EAAM0hF,MACbnI,QAASv5E,EAAMu5E,QACf6vH,WACAE,QAIFE,EAAU9nH,OAASnqF,EAAMinI,cAAgBjnI,EAAMinI,aAAagrE,GAG5DjyM,EAAMkyM,WAAalyM,EAAMkyM,UAAUD,GAInC,IAAIE,GAAsB,EAkB1B,OAhBEnyM,EAAMkyM,WACNlyM,EAAMovM,UACNpvM,EAAM,WAAWkrF,QAEjBinH,GAAsB,GAItBA,GACAnyM,EAAMkwM,sBACNlwM,EAAMowM,YACN1oF,EAAM6f,YAEN7f,EAAM0X,iBAGRvgI,OAAAC,OAAAD,OAAAC,OAAA,GACK2J,GAAK,CAER0hF,OAAO,EACP8nH,YACA/gE,SAAS,GAAI,GAEf,EAGEkhE,EAAS1qF,IACbjiH,GAAI,CAACgD,EAAOzI,KACV,IAAIiyM,EACJ,GAAIxpM,EAAMyoI,SAAWzoI,EAAMwpM,WAEzB,GAAIvqF,EAAMgqF,UAAYjpM,EAAMy/C,MAAQloD,EAAMqwM,cAAe,CACvD4B,EAASpzM,OAAAC,OAAAD,OAAAC,OAAA,GAAQ2J,EAAMwpM,WAAS,CAAEvqF,UAClC1nH,EAAMovM,UAAYpvM,EAAMovM,SAAS6C,GAEjC,MAAMI,EACJryM,EACE,WAAWiyM,EAAU/mH,OAEzBmnH,GAAeA,EAAYJ,SAG7BjyM,EAAMsyM,OAAStyM,EAAMsyM,MAAM,CAAE5qF,UAK/B,OAFA1nH,EAAMuyM,uBAAyBvyM,EAAMuyM,sBAAsB,CAAE7qF,UAE7D7oH,OAAAC,OAAAD,OAAAC,OAAAD,OAAAC,OAAA,GAAY2J,GAAUsZ,IAAY,CAAEkwL,aAAS,GAC7C,EASET,EAAQlvM,IAJZoC,SAASy5H,oBAAoBqyE,GAAWe,GACxC7sM,SAASy5H,oBAAoBsyE,GAASe,GAKtCY,EAAM9vM,EAAE,EAeJkwM,EAA2BA,CAAC9tE,EAAI1kI,KACpC,IAAIy7J,EAAUA,OACd,GAAI/2B,GAAMA,EAAGhyH,iBAAkB,CAC7B,MAAM+/L,EAAW5zM,OAAAC,OAAAD,OAAAC,OAAA,GACZulI,GAAaisE,mBACbtwM,EAAMswM,mBAGLoC,EAIA,CACJ,CAAC9B,GAAYS,EAASoB,GAEtB,CACE9B,GACAY,EAAM,+BAEDkB,GACCzyM,EAAMkwM,qBAAuB,CAAEtpE,SAAS,GAAU,CAAC,IAG3D,CAAC8pE,GAAU0B,EAAOK,IAEpBC,EAAIprM,SAAQ1H,IAAA,IAAE0C,EAAG6D,EAAGjD,GAAEtD,EAAA,OAAK8kI,EAAGhyH,iBAAiBpQ,EAAG6D,EAAGjD,EAAE,IAEvDu4J,EAAUA,IAAMi3C,EAAIprM,SAAQqL,IAAA,IAAErQ,EAAG6D,GAAEwM,EAAA,OAAK+xH,EAAGvG,oBAAoB77H,EAAG6D,EAAE,IAEtE,OAAOs1J,CAAO,EA4BV9wG,EAA8D,CAClE9qD,IA1Ba6kI,IAGF,OAAPA,GACJj/H,GAAI,CAACgD,EAAOzI,KAEV,GAAIyI,EAAMi8H,KAAOA,EAAI,OAAOj8H,EAE5B,MAAMkqM,EAA0C,CAAC,EAYjD,OAVIlqM,EAAMi8H,IAAMj8H,EAAMi8H,KAAOA,GAAMj8H,EAAMmqM,eACvCnqM,EAAMmqM,eACND,EAASC,kBAAe,GAGtB5yM,EAAMowM,YAAc1rE,IACtBiuE,EAASC,aAAeJ,EAAY9tE,EAAI1kI,IAI1CnB,OAAAC,OAAAD,OAAAC,OAAAD,OAAAC,OAAA,GAAY2J,GAAK,CAAEi8H,OAAOiuE,EAAQ,GAClC,GAaJ,OAJIvB,EAAa9B,aACf3kJ,EAAOq9E,YAAcqpE,GAGhB,CAAC1mJ,EAAQ6nJ,EAClB,UA8CgBK,GAAa9hK,GAC3B,MAAM,WAAEu+J,GAAev+J,EACjB+hK,EAAiB9nC,EAAAA,OAAYnsK,OAAAC,OAAC,CAAC,EAAIijB,KACnCgxL,EAAiB/nC,EAAAA,OAAYnsK,OAAAC,OAAA,GAC9BulI,KAIC2uE,EAAgBhoC,EAAAA,OAAYnsK,OAAAC,OAAA,GAC7Bi0M,EAAe7pJ,UAUpB,IAAI+pJ,EACJ,IAAKA,KATLD,EAAc9pJ,QAAOrqD,OAAAC,OAAA,GAAQi0M,EAAe7pJ,SAG5C6pJ,EAAe7pJ,QAAOrqD,OAAAC,OAAAD,OAAAC,OAAA,GACjBulI,IACAtzF,GAIcszF,QAC0B,IAAvC0uE,EAAe7pJ,QAAQ+pJ,KACxBF,EAAe7pJ,QAAQ+pJ,GAAsB5uE,GAAa4uE,IAI/D,MAAOC,EAAUV,GAAexnC,EAAAA,SAC9B,IACEmmC,IACGgC,GACEL,EAAe5pJ,QAAUiqJ,EACxBL,EAAe5pJ,QACf6pJ,EAAe7pJ,UAEnB,CAAEomJ,gBAEN,CAACA,IAUH,OAPAwD,EAAe5pJ,QAnFjB,SACEzgD,EACAzI,EACAgzM,EACAR,GAGA,OAAKxyM,EAAMowM,YAAe3nM,EAAMi8H,GAY3Bj8H,EAAMmqM,aAWT5yM,EAAMkwM,uBAAyB8C,EAAc9C,sBAC7ClwM,EAAMswM,kBAAkB1pE,UAAYosE,EAAc1C,kBAAkB1pE,SAEpEn+H,EAAMmqM,eAEN/zM,OAAAC,OAAAD,OAAAC,OAAA,GACK2J,GAAK,CACRmqM,aAAcJ,EAAY/pM,EAAMi8H,GAAI1kI,MAIjCyI,EArBL5J,OAAAC,OAAAD,OAAAC,OAAA,GACK2J,GAAK,CACRmqM,aAAcJ,EAAY/pM,EAAMi8H,GAAI1kI,MAdlCyI,EAAMmqM,cACRnqM,EAAMmqM,eAGR/zM,OAAAC,OAAAD,OAAAC,OAAA,GACK2J,GAAK,CACRmqM,kBAAc9wM,IA4BpB,CAyC2BsxM,CACvBN,EAAe5pJ,QACf6pJ,EAAe7pJ,QACf8pJ,EAAc9pJ,QACdspJ,GAGKU,CACT,CC5ZO,MAAM7D,GAAYzvM,IAA2B,IAA1B,SAACk/G,KAAa9+G,GAAMJ,EAC5C,MAAMszM,EAAWL,GAAa7yM,GAC9B,OAAQ8pL,EAAAA,GAAAA,KAAA,UAASopB,EAAQp0F,SAAGA,GAAe,SCL7Cu0F,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,0DACtB,aAAiB,iGCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,8FACtB,aAAiB,+FCFnBC,GAAiB,CAAG,cAAkB,sCACpC,kBAAsB,uBACtB,aAAiB,+BCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,qBACtB,aAAiB,kCCFnBC,GAAiB,CAAG,cAAkB,gBACpC,kBAAsB,oBACtB,aAAiB,gCCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,yIACtB,aAAiB,gGCFnBC,GAAiB,CAAG,kBAAsB,iBACxC,aAAiB,UACjB,cAAkB,mBCFpBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,6BACtB,aAAiB,iCCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,kBACtB,aAAiB,yBCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,gBACtB,aAAiB,wBCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,mCACtB,aAAiB,0BCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,8CACtB,aAAiB,kECFnBC,GAAiB,CAAG,cAAkB,sBACpC,kBAAsB,mBACtB,aAAiB,iCCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,6BACtB,aAAiB,gCCFnBC,GAAiB,CAAG,cAAkB,mBACpC,kBAAsB,wBACtB,aAAiB,4BCFnBC,GAAiB,CAAG,cAAkB,6CACpC,kBAAsB,iCACtB,aAAiB,2DCFnBC,GAAiB,CAAG,cAAkB,4BACpC,kBAAsB,4BACtB,aAAiB,0CCFnBC,GAAiB,CAAG,cAAkB,uBACpC,kBAAsB,4BACtB,aAAiB,gCCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,+BACtB,aAAiB,0CCFnBC,GAAiB,CAAG,cAAkB,YACpC,kBAAsB,kBACtB,aAAiB,8BCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,qBACtB,aAAiB,kBCFnBC,GAAiB,CAAG,cAAkB,qBACpC,kBAAsB,kBACtB,aAAiB,0BCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,oBACtB,aAAiB,0BCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,oBACtB,aAAiB,0BCFnBC,GAAiB,CAAG,cAAkB,uBACpC,kBAAsB,4BACtB,aAAiB,uCCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,8FACtB,aAAiB,6JCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,uBACtB,aAAiB,4CCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,mBACtB,aAAiB,iCCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,mBACtB,aAAiB,gCCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,qBACtB,aAAiB,6BCFnBC,GAAiB,CAAG,cAAkB,0BACpC,kBAAsB,2BACtB,aAAiB,gDCFnBC,GAAiB,CAAG,cAAkB,WACpC,kBAAsB,8FACtB,aAAiB,qICFnBC,GAAiB,CAAG,cAAkB,2BACpC,kBAAsB,uCACtB,aAAiB,yCCFnBC,GAAiB,CAAG,cAAkB,qBACpC,kBAAsB,2BACtB,aAAiB,kCC+BnB,MAAMC,GAAkC,CACtCztM,OAAQxD,OAAOkJ,KAAK8yE,MAAsB,KAAhB9yE,KAAKC,WAC/By7C,QAAS,GAGLssJ,GAAaC,EAAMvtB,cAA+BqtB,IAClDG,GAAeD,EAAMvtB,eAAc,GAwDzC,IAAIytB,GAAY9vM,QACI,qBAAXhD,QACPA,OAAO6B,UACP7B,OAAO6B,SAASgxH,eAGdkgF,GAAe,IAAIryM,QAEvB,SAASsyM,KAA6B,IAAlBC,EAAA52M,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,IAAAA,UAAA,GACds5K,GAAM,EAAAu9B,EAAAA,YAAWP,IACjB31M,GAAM,EAAAm2M,EAAAA,QAAsB,MAEhC,GAAoB,OAAhBn2M,EAAIqpD,UAAqB4sJ,EAAY,KAWpBG,EAAAC,EAAnB,IAAIC,EAAuE,QAAxDD,EAAAT,EAAMl3D,0DAAN,IAAA23D,GAA2E,QAA3ED,EAAAC,EAA0D13D,yBAA1D,IAAAy3D,OAAA,EAAAA,EAA6E/sJ,QAChG,GAAIitJ,EAAc,CAChB,IAAIC,EAAqBR,GAAarwM,IAAI4wM,GAChB,MAAtBC,EAEFR,GAAanwM,IAAI0wM,EAAc,CAC7B71M,GAAIk4K,EAAItvH,QACRzgD,MAAO0tM,EAAaE,gBAEbF,EAAaE,gBAAkBD,EAAmB3tM,QAI3D+vK,EAAItvH,QAAUktJ,EAAmB91M,GACjCs1M,GAAaj9L,OAAOw9L,GAExB,CAGAt2M,EAAIqpD,UAAYsvH,EAAItvH,OACtB,CAGA,OAAOrpD,EAAIqpD,OACb,CA0BO,MAAMotJ,GAAyC,oBAAnBb,EAAM,MAVzC,SAA4Bc,GAE1B,IAAIj2M,EAAKm1M,EAAMe,SACVC,IAAU,EAAAC,EAAAA,UAASC,MACpB7uM,EAAS2uM,EAA4C,aAAgB,aAAYlB,GAAeztM,SACpG,OAAOyuM,GAAc,GAAEzuM,KAAUxH,GACnC,EApBA,SAA4Bi2M,GAC1B,IAAI/9B,GAAM,EAAAu9B,EAAAA,YAAWP,IAIjBh9B,IAAQ+8B,IAAmBI,IAC7BxsM,QAAQyC,KAAK,mJAGf,IAAI01J,EAAUu0C,KAAaU,GACvBzuM,EAAqF,aAAY0wK,EAAI1wK,SACzG,OAAOyuM,GAAc,GAAEzuM,KAAUw5J,GACnC,EAcA,SAASs1C,KACP,OAAO,CACT,CAEA,SAASC,KACP,OAAO,CACT,CAGA,SAASC,GAAUC,GAEjB,MAAO,MACT,CAOO,SAASJ,KAEd,MAA6C,oBAAlClB,EAAM,qBACRA,EAAM,qBAAwBqB,GAAWF,GAAaC,KAIxD,EAAAd,EAAAA,YAAWL,GACpB,CCrMA,SAASvzM,GAAEG,GAAG,IAAIC,EAAE2B,EAAElB,EAAE,GAAG,GAAG,iBAAiBV,GAAG,iBAAiBA,EAAEU,GAAGV,OAAO,GAAG,iBAAiBA,EAAE,GAAG6B,MAAMK,QAAQlC,GAAG,CAAC,IAAIY,EAAEZ,EAAEnD,OAAO,IAAIoD,EAAE,EAAEA,EAAEW,EAAEX,IAAID,EAAEC,KAAK2B,EAAE/B,GAAEG,EAAEC,OAAOS,IAAIA,GAAG,KAAKA,GAAGkB,EAAE,MAAM,IAAIA,KAAK5B,EAAEA,EAAE4B,KAAKlB,IAAIA,GAAG,KAAKA,GAAGkB,GAAG,OAAOlB,CAAC,CAAgI,SAAxH,WAAgB,IAAI,IAAIV,EAAEC,EAAE2B,EAAE,EAAElB,EAAE,GAAGE,EAAEhE,UAAUC,OAAO+E,EAAEhB,EAAEgB,KAAK5B,EAAEpD,UAAUgF,MAAM3B,EAAEJ,GAAEG,MAAMU,IAAIA,GAAG,KAAKA,GAAGT,GAAG,OAAOS,CAAC,ECiBlWg0M,GAAsC,qBAAbtyM,SAClCuyM,EAAMzsC,gBACN,OCJG,SAAS0sC,GAAmCvjI,GACjD,MAAM9zE,GAAM,EAAAs3M,EAAAA,QAA6B,MAKzC,OAJAH,IAAgB,KACdn3M,EAAIqpD,QAAUyqB,CAAA,GACb,CAACA,KAEG,EAAAyjI,EAAAA,cAAe,WACpB,MAAMlzM,EAAIrE,EAAIqpD,QACd,OAAO,OAAAhlD,QAAA,IAAAA,OAAA,EAAAA,KAAAhF,UACT,GAAG,GACL,CCJO,SAASm4M,GAAkBj2K,GAChC,IAAKx6B,EAAO4E,IAAY,EAAA8rM,EAAAA,UAASl2K,GAC7Bo3J,GAAgD,EAAA2e,EAAAA,QAA4B,MAI5EI,EAAUL,IAAe,KAC3B,IAAK1e,EAAOtvI,QACV,OAGF,IAAIiiB,EAAWqtH,EAAOtvI,QAAQ96C,OAG1B+8D,EAAS0R,KACX27G,EAAOtvI,QAAU,KAOftiD,IAAUukE,EAASvkE,MACrB2wM,IAEA/rM,EAAS2/D,EAASvkE,MAAM,IAI5BowM,IAAgB,KAEVxe,EAAOtvI,SACTquJ,GAAA,IAIJ,IAAIhgF,EAAQ2/E,IAAevjI,IACzB6kH,EAAOtvI,QAAUyqB,EAAG/sE,GACpB2wM,GAAA,IAGF,MAAO,CAAC3wM,EAAO2wH,EACjB,CC7CA,IAAIigF,GAAY3xM,QACI,qBAAXhD,QACPA,OAAO6B,UACP7B,OAAO6B,SAASgxH,eAGd+hF,GAAkD,IAAIt0M,IAMnD,SAASu0M,GAAMnB,GACpB,IAAK3vM,EAAO4E,IAAY,EAAA8rM,EAAAA,UAASf,GAC7BoB,GAAS,EAAAR,EAAAA,QAAO,MAEhBnwL,EAAM4wL,GAAahxM,GAEnBixM,GAAc,EAAAT,EAAAA,cAAah0J,IAC7Bu0J,EAAOzuJ,QAAU9F,CAAA,GAChB,IAuBH,OArBIo0J,IACFC,GAAchyM,IAAIuhB,EAAK6wL,GAGzBb,IAAgB,KACd,IAAI70M,EAAI6kB,EACR,MAAO,KACLywL,GAAc9+L,OAAOxW,EAAA,CACtB,GACA,CAAC6kB,KAIJ,EAAA8wL,EAAAA,YAAU,KACR,IAAIC,EAAQJ,EAAOzuJ,QACf6uJ,IACFJ,EAAOzuJ,QAAU,KACjB19C,EAASusM,GACX,IAGK/wL,CACT,CAMO,SAASgxL,GAASC,EAAaC,GACpC,GAAID,IAAQC,EACV,OAAOD,EAGT,IAAIE,EAASV,GAAclyM,IAAI0yM,GAC/B,GAAIE,EAEF,OADAA,EAAOD,GACAA,EAGT,IAAIE,EAASX,GAAclyM,IAAI2yM,GAC/B,OAAIE,GACFA,EAAOH,GACAA,GAGFC,CACT,CAOO,SAASG,KAA2C,IAAjCC,EAAAp5M,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA+B,GACnDoB,EAAKo3M,MACJa,EAAYC,GAAiBnB,GAAe/2M,GAC7Cm4M,GAAW,EAAArB,EAAAA,cAAY,KACzBoB,GAAc,kBACNl4M,QAEAoE,SAASg0M,eAAep4M,GAAMA,OAAKwB,CAC3C,GAAE,GACD,CAACxB,EAAIk4M,IAIR,OAFAxB,GAAgByB,EAAU,CAACn4M,EAAIm4M,KAAaH,IAErCC,CACT,CC5FO,SAASI,KAAyB,QAAAnyL,EAAAtnB,UAAAC,OAAhBy5M,EAAgB,IAAAz0M,MAAAqiB,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAhBmyL,EAAgBnyL,GAAAvnB,UAAAunB,GACvC,OAAO,WACL,IAAK,IAAIkrD,KAAYinI,EACK,oBAAbjnI,GACTA,KAAAzyE,UAGN,CACF,CCvBO,MAAM25M,GAAoBn0E,QACxBo0E,EAAP,OAAwB,QAAjBA,EAAA,OAAAp0E,QAAA,IAAAA,OAAA,EAAAA,EAAI4tD,qBAAJ,IAAAwmB,EAAAA,EAAqBp0M,QAAA,EAGjBq0M,GACXr0E,IAEA,GAAIA,GAAM,WAAYA,GAAMA,EAAG7hI,SAAW6hI,EACxC,OAAOA,EAIT,OADYm0E,GAAiBn0E,GAClBypC,aAAetrK,MAAA,ECuBrB,SAASm2M,KAGd,IAAI/zK,EAAgB,IAAC/lC,UAAAC,QAAA,OAAA2C,EAAA5C,UAAA,IACrB,IAAK,IAAID,EAAI,EAAGA,EAAIC,UAAKC,OAAQF,IAAK,CACpC,IAAIe,EAAaf,EAAA,GAAAC,UAAAC,QAAAF,OAAA6C,EAAA5C,UAAAD,GACjB,IAAK,IAAII,KAAOW,EAAO,CACrB,IAAIoD,EAAI6hC,EAAO5lC,GACXgF,EAAIrE,EAAMX,GAIC,oBAAN+D,GACM,oBAANiB,GAEI,MAAXhF,EAAI,IACO,MAAXA,EAAI,IACJA,EAAIwyC,WAAW,IAAgB,IAC/BxyC,EAAIwyC,WAAW,IAAgB,GAE/B5M,EAAO5lC,GAAOs5M,GAAMv1M,EAAGiB,GAId,cAARhF,GAA+B,qBAARA,GACX,kBAAN+D,GACM,kBAANiB,EAGU,OAARhF,GAAgB+D,GAAKiB,EAC9B4gC,EAAO3kC,GAAK03M,GAAS50M,EAAGiB,GAGxB4gC,EAAO5lC,QAAayC,IAANuC,EAAkBA,EAAIjB,EALpC6hC,EAAO5lC,GAAO45M,GAAK71M,EAAGiB,EAO1B,CACF,CAEA,OAAO4gC,CACT,CCzDO,SAASi0K,KAAuC,QAAApyL,EAAA5nB,UAAAC,OAAvB8lB,EAAuB,IAAA9gB,MAAA2iB,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAvB9B,EAAuB8B,GAAA7nB,UAAA6nB,GACrD,OAAoB,IAAhB9B,EAAK9lB,OACA8lB,EAAK,GAGNre,IACN,IAAK,IAAI/G,KAAOolB,EACK,oBAARplB,EACTA,EAAI+G,GACY,MAAP/G,IACTA,EAAIqpD,QAAUtiD,EAElB,CAEJ,CCjBA,MAAMuyM,GAAe,IAAI91M,IAAI,CAC3B,OAGI+1M,GAAqB,IAAI/1M,IAAI,CACjC,aACA,kBACA,mBACA,iBAIIg2M,GAAgB,IAAIh2M,IAAI,CAC5B,OACA,SACA,MACA,WACA,OACA,mBAgBIi2M,GAAS,cAOR,SAASC,GAAev5M,GAAsE,IAAlB6H,EAAA3I,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAgB,CAAC,GAC9Fs6M,UAACA,EAASC,OAAEA,EAAMC,UAAEA,GAAa7xM,EACjC8xM,EAAgB,CAAC,EAErB,IAAK,MAAMx4K,KAAQnhC,EAEfnB,OAAOS,UAAUC,eAAeC,KAAKQ,EAAOmhC,KAC1Cg4K,GAAa3zM,IAAI27B,IAChBq4K,GAAaJ,GAAmB5zM,IAAI27B,IACpCs4K,GAAUJ,GAAc7zM,IAAI27B,KAC7B,OAAAu4K,QAAA,IAAAA,OAAA,EAAAA,EAAWl0M,IAAI27B,KACfm4K,GAAO/vM,KAAK43B,MAGdw4K,EAAcx4K,GAAQnhC,EAAMmhC,IAIhC,OAAOw4K,CACT,CC5CO,SAASC,GAAsBt2J,GACpC,GAUF,WACE,GAAmC,MAA/Bu2J,GAAqC,CACvCA,IAA8B,EAC9B,IACkBn1M,SAASgxH,cAAc,OAC7BoiB,MAAM,CACd,iBAAIgiE,GAEF,OADAD,IAA8B,GACvB,CACT,GAEJ,CAAE,MAAOv3M,GACP,CAEJ,CAEA,OAAOu3M,EACT,CA3BME,GACFz2J,EAAQw0F,MAAM,CAACgiE,eAAe,QACzB,CACL,IAAIE,EA0BR,SAA+B12J,GAC7B,IAAIx2B,EAASw2B,EAAQ2mF,WACjB+vE,EAA0C,GAC1CC,EAAuBv1M,SAASw1M,kBAAoBx1M,SAASwF,gBAEjE,KAAO4iB,aAAkBhoB,aAAegoB,IAAWmtL,IAE/CntL,EAAOizG,aAAejzG,EAAO8vG,cAC7B9vG,EAAO+yG,YAAc/yG,EAAO6vG,cAE5Bq9E,EAAmBzzM,KAAK,CACtB+8C,QAASx2B,EACTiuG,UAAWjuG,EAAOiuG,UAClBD,WAAYhuG,EAAOguG,aAGvBhuG,EAASA,EAAOm9G,WAGdgwE,aAAgCn1M,aAClCk1M,EAAmBzzM,KAAK,CACtB+8C,QAAS22J,EACTl/E,UAAWk/E,EAAqBl/E,UAChCD,WAAYm/E,EAAqBn/E,aAIrC,OAAOk/E,CACT,CAtD6BG,CAAsB72J,GAC/CA,EAAQw0F,QAuDZ,SAA+BkiE,GAC7B,IAAK,IAAI12J,QAACA,EAAOy3E,UAAEA,EAASD,WAAEA,KAAek/E,EAC3C12J,EAAQy3E,UAAYA,EACpBz3E,EAAQw3E,WAAaA,CAEzB,CA3DIs/E,CAAsBJ,EACxB,CACF,CAEA,IAAIH,GAA8C,KC5BlD,SAASQ,GAAc7lM,OAKnB8lM,EAJF,MAAsB,qBAAXz3M,QAA8C,MAApBA,OAAO8B,aAIT,QAAjC21M,EAAAz3M,OAAO8B,UAAU,qBAAjB,IAAA21M,OAAA,EAAAA,EAAmCznB,OAAO9pL,MAAM+pL,GAA4Ct+K,EAAGjL,KAAKupL,EAAMA,WAE5Gt+K,EAAGjL,KAAK1G,OAAO8B,UAAUwF,WAC3B,CAEA,SAASowM,GAAa/lM,OAER8lM,EADZ,MAAyB,qBAAXz3M,QAA8C,MAApBA,OAAO8B,WAC3C6P,EAAGjL,MAAsC,QAAjC+wM,EAAAz3M,OAAO8B,UAAU,qBAAjB,IAAA21M,OAAA,EAAAA,EAAmCE,WAAY33M,OAAO8B,UAAU61M,SAE9E,CAEO,SAASC,KACd,OAAOF,GAAa,QACtB,CAMO,SAASG,KACd,OAAOH,GAAa,WAEjBE,MAAW91M,UAAUg2M,eAAiB,CAC3C,CAEO,SAASC,KACd,OAVOL,GAAa,aAUCG,IACvB,CAMO,SAASG,KACd,OAAOR,GAAc,kBAIdA,GAAc,UAHvB,CAMO,SAASS,KACd,OAAOT,GAAc,WACvB,CCtCA,MAAMU,IAAgB,EAAAC,EAAAA,eAAsB,CAC1C70H,UAAU,EACV8nC,KAoHF,SAA2BjvH,EAAiBu3L,GAC1C0kB,GAAiBj8M,GAAQ6tJ,GAAQquD,GAASruD,EAAM0pC,IAClD,IAnFO,SAAS4kB,KACd,OAAO,EAAAC,EAAAA,YAAWL,GACpB,CASO,SAASM,GAAqBxuD,EAAyB0pC,GAE5D,IAAIv3L,EAAS6tJ,EAAKif,aAAa,UAC/B,QACI9sK,GAAqB,UAAXA,IACZ6tJ,EAAK5oC,SAAWx/G,SAASw/G,SACxB4oC,EAAKyuD,aAAa,cAClB/kB,EAAUnb,UACVmb,EAAUjb,UACVib,EAAUlb,SACVkb,EAAUhb,QAEf,CAEO,SAAS2/B,GAASl8M,EAA2Bu3L,GAAuC,IAAjBglB,IAAAr8M,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,KAAAA,UAAA,OAOrDs8M,EAAAC,EANnB,IAAIrgC,QAACA,EAAOE,QAAEA,EAAOD,OAAEA,EAAME,SAAEA,GAAYgb,EDtBpC8jB,GAAc,cC4BU,QAAZoB,EAAA54M,OAAO6kH,aAAP,IAAA+zF,GAAkB,QAAlBD,EAAAC,EAAcj6M,YAAd,IAAAg6M,OAAA,EAAAA,EAAoB7qK,WAAW,SAA4B,WAAlB3xC,EAAOA,SAC7Dy7M,KACFr/B,GAAU,EAEVE,GAAU,GAMd,IAAI5zD,EAAQmzF,MAAcJ,OAAYC,KAElC,IAAIgB,cAAc,UAAW,CAACC,cAAe,gBAASvgC,UAASE,SAASD,WAAQE,IAChF,IAAIqgC,WAAW,QAAS,SAACxgC,UAASE,SAASD,WAAQE,EAAUsgC,SAAS,EAAMt0E,YAAY,IAC3F2zE,GAAiBY,UAAYP,EAC9B3B,GAAsB56M,GACtBA,EAAO+8M,cAAcr0F,GACpBwzF,GAAiBY,WAAY,CAChC,CAIA,SAASb,GAAiBj8M,EAAiBivH,GACzC,GAAIjvH,aAAkBg9M,kBACpB/tF,EAAKjvH,QACA,GAAIA,EAAOs8M,aAAa,aAAc,CAC3C,IAAIzuD,EAAOnoJ,SAASgxH,cAAc,KAClCm3B,EAAK1F,KAAOnoJ,EAAO8sK,aAAa,aAC5B9sK,EAAOs8M,aAAa,iBACtBzuD,EAAK7tJ,OAASA,EAAO8sK,aAAa,gBAEhC9sK,EAAOs8M,aAAa,cACtBzuD,EAAKovD,IAAMj9M,EAAO8sK,aAAa,aAE7B9sK,EAAOs8M,aAAa,mBACtBzuD,EAAKvgJ,SAAWtN,EAAO8sK,aAAa,kBAElC9sK,EAAOs8M,aAAa,eACtBzuD,EAAKqvD,KAAOl9M,EAAO8sK,aAAa,cAE9B9sK,EAAOs8M,aAAa,0BACtBzuD,EAAKsvD,eAAiBn9M,EAAO8sK,aAAa,yBAE5C9sK,EAAOkmI,YAAY2nB,GACnB5+B,EAAK4+B,GACL7tJ,EAAO4gH,YAAYitC,EACrB,CACF,CA3BCquD,GAAiBY,WAAY,EC7F9B,IAAIM,GAAuB,IAAIj5M,IAG3Bk5M,GAAsB,IAAIh5M,IAE9B,SAASi5M,KACP,GAAsB,qBAAXz5M,OACT,OAGF,SAAS05M,EAAkB70F,GACzB,MAAO,iBAAkBA,CAC3B,CAEA,IAqBI80F,EAAmBl6M,IACrB,IAAKi6M,EAAkBj6M,KAAOA,EAAEtD,OAC9B,OAGF,IAAI0e,EAAa0+L,GAAqB72M,IAAIjD,EAAEtD,QAC5C,GAAK0e,IAILA,EAAW/E,OAAOrW,EAAEgyB,cAGI,IAApB5W,EAAW08C,OACb93D,EAAEtD,OAAOm/H,oBAAoB,mBAAoBq+E,GACjDJ,GAAqBzjM,OAAOrW,EAAEtD,SAIE,IAA9Bo9M,GAAqBhiJ,MAAY,CACnC,IAAK,IAAI9M,KAAM+uJ,GACb/uJ,IAGF+uJ,GAAoB5wM,OACtB,GAGF/G,SAAS+H,KAAKiG,iBAAiB,iBAjDNpQ,IACvB,IAAKi6M,EAAkBj6M,KAAOA,EAAEtD,OAC9B,OAGF,IAAIy9M,EAAcL,GAAqB72M,IAAIjD,EAAEtD,QACxCy9M,IACHA,EAAc,IAAIp5M,IAClB+4M,GAAqB32M,IAAInD,EAAEtD,OAAQy9M,GAKnCn6M,EAAEtD,OAAO0T,iBAAiB,mBAAoB8pM,EAAiB,CAC7Dl6H,MAAM,KAIVm6H,EAAY/2M,IAAIpD,EAAEgyB,aAAa,IAgCjC5vB,SAAS+H,KAAKiG,iBAAiB,gBAAiB8pM,EAClD,CAUO,SAASE,GAAmB/oI,GAEjCikD,uBAAsB,KAGc,IAA9BwkF,GAAqBhiJ,KACvBuZ,IAEA0oI,GAAoB32M,IAAIiuE,EAAA,GAG9B,CAnBwB,qBAAbjvE,WACmB,YAAxBA,SAASi4M,WACXL,KAEA53M,SAASgO,iBAAiB,mBAAoB4pM,KCnE3C,SAASM,KACd,IAAIC,GAAkB,EAAA1F,EAAAA,QAAO,IAAIh0M,KAC7B25M,GAAoB,EAAA1F,EAAAA,cAAY,CAAC2F,EAAav7M,EAAMgtK,EAAUz9H,KAEhE,IAAI4iC,GAAK,OAAA5iC,QAAA,IAAAA,OAAA,EAAAA,EAASuxC,MAAO,WACvBu6H,EAAgB3zJ,QAAQvwC,OAAO61J,GAC/BA,KAAAtvK,UACF,EAAIsvK,EACJquC,EAAgB3zJ,QAAQzjD,IAAI+oK,EAAU,MAAChtK,cAAMu7M,KAAappI,UAAI5iC,IAC9DgsK,EAAYrqM,iBAAiBlR,EAAMgtK,EAAUz9H,EAAA,GAC5C,IACCisK,GAAuB,EAAA5F,EAAAA,cAAY,CAAC2F,EAAav7M,EAAMgtK,EAAUz9H,SAC1DksK,EAAT,IAAItpI,GAAiC,QAA5BspI,EAAAJ,EAAgB3zJ,QAAQ3jD,IAAIipK,UAA5B,IAAAyuC,OAAA,EAAAA,EAAuCtpI,KAAM66F,EACtDuuC,EAAY5+E,oBAAoB38H,EAAMmyE,EAAI5iC,GAC1C8rK,EAAgB3zJ,QAAQvwC,OAAO61J,EAAA,GAC9B,IACC0uC,GAA2B,EAAA9F,EAAAA,cAAY,KACzCyF,EAAgB3zJ,QAAQ5hD,SAAQ,CAACV,EAAOvH,KACtC29M,EAAqBp2M,EAAMm2M,YAAan2M,EAAMpF,KAAMnC,EAAKuH,EAAMmqC,QAAQ,GACvE,GACD,CAACisK,IAOJ,OAJA,EAAAlF,EAAAA,YAAU,IACDoF,GACN,CAACA,IAEG,mBAACJ,uBAAmBE,2BAAsBE,EACnD,CC9BO,SAASC,GAAUn9M,EAAqCo9M,GAC7D,IAAI98M,GACFA,EACA,aAAc0pB,EACd,kBAAmBqzL,GACjBr9M,EAKJ,GADAM,EAAKo3M,GAAMp3M,GACP+8M,GAAcrzL,EAAO,CACvB,IAAI+gJ,EAAM,IAAI1nK,IAAI,CAAC/C,KAAO+8M,EAAW91M,OAAOF,MAAM,SAClDg2M,EAAa,IAAItyC,GAAKvhK,KAAK,IAC7B,MAAW6zM,IACTA,EAAaA,EAAW91M,OAAOF,MAAM,OAAOmC,KAAK,MAQnD,OAJKwgB,GAAUqzL,IAAcD,IAC3BpzL,EAAQozL,GAGH,IACL98M,EACA,aAAc0pB,EACd,kBAAmBqzL,EAEvB,CCxBO,SAASC,GAAgBC,GAC9B,MAAMC,GAAqC,EAAArG,EAAAA,QAAU,MACrD,OAAO,EAAAsG,EAAAA,UAAQ,KAAM,CACnB,WAAIv0J,GACF,OAAOs0J,EAAOt0J,OAChB,EACA,WAAIA,CAAQtiD,GACV42M,EAAOt0J,QAAUtiD,EACW,oBAAjB22M,EACTA,EAAa32M,GACJ22M,IACTA,EAAar0J,QAAUtiD,EAE3B,KACE,CAAC22M,GACP,CC3BO,SAASG,GAAqC3sK,GACnD,MAAMlxC,IAACA,EAAGytM,SAAEA,GAAYv8J,GAExB,EAAA+mK,EAAAA,YAAU,KACR,IAAIx0J,EAAU,OAAAzjD,QAAA,IAAAA,OAAA,EAAAA,EAAKqpD,QACnB,GAAK5F,EAAL,CAIA,GAjBsC,qBAA1BzgD,OAAO86M,eAmBjB,OADA96M,OAAO6P,iBAAiB,SAAU46L,GAAU,GACrC,KACLzqM,OAAOs7H,oBAAoB,SAAUmvE,GAAU,EAAM,EAElD,CAEL,MAAMsQ,EAAyB,IAAI/6M,OAAO86M,gBAAgB35M,IACnDA,EAAQ7E,QAIbmuM,GAAA,IAIF,OAFAsQ,EAAuBC,QAAQv6J,GAExB,KACDA,GACFs6J,EAAuBE,UAAUx6J,EAAA,CAGvC,CAxBQ,CAwBR,GAEC,CAACgqJ,EAAUztM,GAChB,CCxBO,SAASk+M,GAAczyM,EAAkCzL,GAC9Dm3M,IAAgB,KACd,GAAI1rM,GAAWA,EAAQzL,KAAOA,EAE5B,OADAyL,EAAQzL,IAAIqpD,QAAUrpD,EAAIqpD,QACnB,KACD59C,EAAQzL,MACVyL,EAAQzL,IAAIqpD,QAAU,KAAI,CAGhC,GAEJ,CCnBO,SAAS80J,GAAgBpvL,EAAeqvL,GAC7C,IAAIC,EAAiCtvL,EAKrC,IAJIuvL,GAAaD,EAAgBD,KAC/BC,EAAiBA,EAAe/0E,eAG3B+0E,IAAmBC,GAAaD,EAAgBD,IACrDC,EAAiBA,EAAe/0E,cAGlC,OAAO+0E,GAAkBx5M,SAASw1M,kBAAoBx1M,SAASwF,eACjE,CAEO,SAASi0M,GAAavvL,EAAeqvL,GAC1C,IAAI58M,EAAQwB,OAAO+hI,iBAAiBh2G,GAChCwvL,EAAe,gBAAgB70M,KAAKlI,EAAMurF,SAAWvrF,EAAM2yL,UAAY3yL,EAAM4yL,WAMjF,OAJImqB,GAAgBH,IAClBG,EAAexvL,EAAKguG,eAAiBhuG,EAAKkuG,cAAgBluG,EAAK+tG,cAAgB/tG,EAAKiuG,aAG/EuhF,CACT,CCbyC,qBAAb15M,UAA4B7B,OAAOwwL,eCL/D,IAAIgrB,GAAgB,EACpB,MAAMC,GAAmB,IAAIn7M,IAEtB,SAASo7M,GAAezxD,GAC7B,IAAKxsJ,EAAIk+M,IAAS,EAAAlH,EAAAA,YAgClB,OA9BAN,IAAgB,KACd,IAAKlqD,EACH,OAGF,IAAIpxC,EAAO4iG,GAAiB/4M,IAAIunJ,GAChC,GAAKpxC,EAYH8iG,EAAM9iG,EAAKp4D,QAAQhjD,QAZV,CACT,IAAIA,EAAM,0BAAyB+9M,KACnCG,EAAMl+M,GAEN,IAAIsuB,EAAOlqB,SAASgxH,cAAc,OAClC9mG,EAAKtuB,GAAKA,EACVsuB,EAAKvtB,MAAMwiI,QAAU,OACrBj1G,EAAK+8G,YAAcmhB,EACnBpoJ,SAAS+H,KAAKy4H,YAAYt2G,GAC1B8sF,EAAO,CAAC+iG,SAAU,EAAGn7J,QAAS10B,GAC9B0vL,GAAiB74M,IAAIqnJ,EAAapxC,EACpC,CAKA,OADAA,EAAK+iG,WACE,KACD/iG,GAA4B,MAAlBA,EAAK+iG,WACjB/iG,EAAKp4D,QAAQs/B,SACb07H,GAAiB3lM,OAAOm0I,GAC1B,CACD,GACA,CAACA,IAEG,CACL,mBAAoBA,EAAcxsJ,OAAKwB,EAE3C,CCxCO,SAAS48M,GACd7+M,EACA6nH,EACA+0B,EACA1rG,GAEA,IAAI4tK,EAAczH,GAAez6D,GAC7Bq5D,EAAwB,MAAXr5D,GAEjB,EAAAq7D,EAAAA,YAAU,KACR,GAAIhC,IAAej2M,EAAIqpD,QACrB,OAGF,IAAI5F,EAAUzjD,EAAIqpD,QAElB,OADA5F,EAAQ5wC,iBAAiBg1G,EAAOi3F,EAA8B5tK,GACvD,KACLuS,EAAQ66E,oBAAoBzW,EAAOi3F,EAA8B5tK,EAAA,CAClE,GACA,CAAClxC,EAAK6nH,EAAO32E,EAAS+kK,EAAY6I,GACvC,CCXO,SAASC,GAAeC,EAAyBv7J,GACtD,IAAI6oJ,EAAU2S,GAAeD,EAAYv7J,EAAS,QAC9C8oJ,EAAU0S,GAAeD,EAAYv7J,EAAS,OAC9CrjD,EAAQqjD,EAAQu8E,YAChB3/H,EAASojD,EAAQy8E,aACjB5+H,EAAI09M,EAAW/jF,WACf15H,EAAIy9M,EAAW9jF,WAGfgkF,eAACA,EAAcC,gBAAEA,GAAmBp6E,iBAAiBi6E,GACrDI,EAAkBJ,EAAW/jF,WAAal6G,SAASo+L,EAAiB,IACpEE,EAAkBL,EAAW9jF,UAAYn6G,SAASm+L,EAAgB,IAElEI,EAAOF,EAAkBJ,EAAWhiF,YACpCuiF,EAAOF,EAAkBL,EAAW/hF,aAEpCqvE,GAAWhrM,EACbA,EAAIgrM,EAAUvrL,SAASo+L,EAAiB,IAC/B7S,EAAUlsM,EAAQk/M,IAC3Bh+M,GAAKgrM,EAAUlsM,EAAQk/M,GAErB/S,GAAW8S,EACb99M,EAAIgrM,EAAUxrL,SAASm+L,EAAgB,IAC9B3S,EAAUlsM,EAASk/M,IAC5Bh+M,GAAKgrM,EAAUlsM,EAASk/M,GAE1BP,EAAW/jF,WAAa35H,EACxB09M,EAAW9jF,UAAY35H,CACzB,CAMA,SAAS09M,GAAehwD,EAAuB/vC,EAAoBqwB,GACjE,MAAMjuG,EAAgB,SAATiuG,EAAkB,aAAe,YAC9C,IAAI/mD,EAAM,EACV,KAAO02B,EAAMyrB,eACXniD,GAAO02B,EAAM59E,GACT49E,EAAMyrB,eAAiBskB,IAFF,CAKlB,GAAI/vC,EAAMyrB,aAAax8E,SAAS8gG,GAAW,CAIhDzmE,GAAOymE,EAAS3tH,GAChB,KACF,CACA49E,EAAQA,EAAMyrB,YAChB,CACA,OAAOniD,CACT,CAOO,SAASg3H,GAAmBC,EAAwBz3M,GACzD,GAAInD,SAASspD,SAASsxJ,GAAgB,CACpC,IAAI3pL,EAAOjxB,SAASw1M,kBAAoBx1M,SAASwF,gBAGjD,GAFmE,WAA3CrH,OAAO+hI,iBAAiBjvG,GAAMi3D,SAc/C,CACL,IAAIs9C,EAAe8zE,GAAgBsB,GAEnC,KAAOA,GAAiBp1E,GAAgBo1E,IAAkB3pL,GAAQu0G,IAAiBv0G,GACjFipL,GAAe10E,EAA6Bo1E,GAE5Cp1E,EAAe8zE,GADfsB,EAAgBp1E,EAGpB,KApBwB,KAKtBq1E,EAJA,IAAK1wF,KAAM2wF,EAAclnF,IAAKmnF,GAAeH,EAAc//E,wBAI3D,OAAA+/E,QAAA,IAAAA,GAA6B,QAA7BC,EAAAD,EAAeI,sBAAf,IAAAH,GAAAA,EAAA//M,KAAA8/M,EAAgC,CAACxvL,MAAO,YACxC,IAAK++F,KAAM8wF,EAASrnF,IAAKsnF,GAAUN,EAAc//E,4BAG/CsgF,EAAAC,EACAC,EAFF,GAAIvyM,KAAMwjF,IAAIwuH,EAAeG,GAAW,GAAOnyM,KAAKwjF,IAAIyuH,EAAcG,GAAU,EAC9E,OAAA/3M,QAAA,IAAAA,GAAuB,QAAvBi4M,EAAAj4M,EAAMm4M,yBAAN,IAAAF,GAAuC,QAAvCD,EAAAC,EAAyBJ,sBAAzB,IAAAG,GAAAA,EAAArgN,KAAAsgN,EAA0C,CAAChwL,MAAO,SAAU82F,OAAQ,WACxC,QAA5Bm5F,EAAAT,EAAcI,sBAAd,IAAAK,GAAAA,EAAAvgN,KAAA8/M,EAA+B,CAACxvL,MAAO,WAE3C,CASF,CACF,CCrFO,SAASmwL,GAAev4F,GAE7B,QAAsC,IAAlCA,EAAew4F,iBAAwBx4F,EAAMy4F,aAO7CrF,MAAepzF,EAAwB3/E,YACnB,UAAf2/E,EAAMlmH,MAAsC,IAAlBkmH,EAAM04F,QAGjB,IAAjB14F,EAAM24F,SAAiB34F,EAAwB3/E,YACxD,CCzBO,SAASu4K,GACdzgN,EACA0gN,EACAC,GAEA,IAAIC,GAAa,EAAAtJ,EAAAA,QAAOoJ,GACpBG,EAAcxJ,IAAe,KAC3BsJ,GACFA,EAAQC,EAAWv3J,QAAQ,KAI/B,EAAA4uJ,EAAAA,YAAU,SACG6I,EAAX,IAAIC,EAAO,OAAA/gN,QAAA,IAAAA,GAAY,QAAZ8gN,EAAA9gN,EAAKqpD,eAAL,IAAAy3J,OAAA,EAAAA,EAAcC,KAEzB,OADA,OAAAA,QAAA,IAAAA,GAAAA,EAAMluM,iBAAiB,QAASguM,GACzB,KACL,OAAAE,QAAA,IAAAA,GAAAA,EAAMziF,oBAAoB,QAASuiF,EAAA,CACpC,GACA,CAAC7gN,EAAK6gN,GACX,CCjCO,SAASG,GAAgCC,EAAUC,EAAY7xI,GAClE,IAAK6xI,EAAWv7M,IAAIs7M,GAAW,MAAM,IAAI73M,UAAU,gBAAkBimE,EAAS,kCAE9E,OAAO6xI,EAAWx7M,IAAIu7M,EAC1B,CCFO,SAASE,GAA0B5xL,EAAK2xL,EAAYn6M,ICFpD,SAAsCwoB,EAAK6xL,GAC9C,GAAIA,EAAkBz7M,IAAI4pB,GACtB,MAAM,IAAInmB,UAAU,iEAE5B,CDDIi4M,CAA6B9xL,EAAK2xL,GAClCA,EAAWt7M,IAAI2pB,EAAKxoB,EACxB,CEFO,SAASu6M,GAAyBL,EAAUC,EAAYn6M,GAG3D,OCNG,SAAqCk6M,EAAUjoF,EAAYjyH,GAC9D,GAAIiyH,EAAWpzH,IAAKozH,EAAWpzH,IAAIjG,KAAKshN,EAAUl6M,OAC7C,CACD,IAAKiyH,EAAWzrH,SAIZ,MAAM,IAAInE,UAAU,4CAExB4vH,EAAWjyH,MAAQA,CACvB,CACJ,CDNIw6M,CAA4BN,EADXD,GAAgCC,EAAUC,EAAY,OACrBn6M,GAC3CA,CACX,CEwBA,IAAIy6M,GAAe,UACfC,GAAkB,GAClBC,GAAqB,IAAIh+M,QAEtB,SAASi+M,GAAqBxiN,GACnC,GAAIyiN,KAAS,CACX,GAAc,YAAVJ,GAAqB,CAEvB,MAAMK,EAAiBC,GAAiB3iN,GACxCsiN,GAAkBI,EAAex3M,gBAAgB7I,MAAMugN,iBACvDF,EAAex3M,gBAAgB7I,MAAMugN,iBAAmB,MAC1D,CAEAP,GAAQ,UACV,MAAWriN,aAAkB8F,aAAe9F,aAAkB6iN,cAG5DN,GAAmB97M,IAAIzG,EAAQA,EAAOqC,MAAMkjI,YAC5CvlI,EAAOqC,MAAMkjI,WAAa,OAE9B,CAEO,SAASu9E,GAAqB9iN,GACnC,GAAIyiN,KAAS,CAGX,GAAc,aAAVJ,GACF,OAGFA,GAAQ,YAIRhvM,YAAW,KAGT0vM,IAAmB,KAEjB,GAAc,cAAVV,GAAuB,CAEzB,MAAMK,EAAiBC,GAAiB3iN,GACsB,SAA1D0iN,EAAex3M,gBAAgB7I,MAAMugN,mBACvCF,EAAex3M,gBAAgB7I,MAAMugN,iBAAmBN,IAAmB,IAG7EA,GAAkB,GAClBD,GAAQ,SACV,IACA,GACD,IACL,MAAO,IAAIriN,aAAkB8F,aAAe9F,aAAkB6iN,aAGxD7iN,GAAUuiN,GAAmB/7M,IAAIxG,GAAS,CAC5C,IAAIgjN,EAAsBT,GAAmBh8M,IAAIvG,GAEjB,SAA5BA,EAAOqC,MAAMkjI,aACfvlI,EAAOqC,MAAMkjI,WAAay9E,GAGS,KAAjChjN,EAAO8sK,aAAa,UACtB9sK,EAAOyjM,gBAAgB,SAEzB8e,GAAmB5oM,OAAO3Z,EAC5B,CAEJ,CC7EO,MAAMijN,GAAwBC,EAAMh6B,cAAsC,CAAC11K,SAAUA,SAC5FyvM,GAAsB95E,YAAc,4BC0ElCg6E,GAAA,IAAA5+M,QARF,MAAM6+M,GAoBJC,mBAAAA,WACQF,IAAwB,EAChC,CAEA,yBAAIG,GACF,OCjHG,SAAqCxB,EAAUjoF,GAClD,OAAIA,EAAWtzH,IAAYszH,EAAWtzH,IAAI/F,KAAKshN,GAExCjoF,EAAWjyH,KACtB,CCCW27M,CAF8BzB,EF8G9BphN,KE7GUmhN,GAAgCC,EF6GpCqB,GE7G0D,QADpE,IAAkCrB,CF+GvC,CAhBAz1M,WAAAA,CAAY7J,EAA2BumC,EAA0By6K,GAFjEC,GAAA,KAAAN,GAAA,oCAACA,IAAwB,GAGvBziN,KAAK8B,KAAOA,EACZ9B,KAAKqoC,YAAcA,EACnBroC,KAAKV,OAASwjN,EAActW,cAC5BxsM,KAAK67K,SAAWinC,EAAcjnC,SAC9B77K,KAAK07K,QAAUonC,EAAcpnC,QAC7B17K,KAAK47K,QAAUknC,EAAclnC,QAC7B57K,KAAK27K,OAASmnC,EAAcnnC,MAC9B,EAWF,MAAMqnC,GAAez/M,OAAO,eAOrB,SAAS0/M,GAAS3iN,GACvB,IAAI4iN,QACFA,EAAOC,cACPA,EAAaC,aACbA,EAAYC,WACZA,EAAUC,UACVA,EAASlN,WACTA,EACAmN,UAAWC,EAAaC,oBACxBA,EAAmBC,0BACnBA,EAAyBC,0BACzBA,EAEAxjN,IAAK0E,KACF++M,GA/DP,SAAkCtjN,GAEhC,IAAIsL,GAAU,EAAAi4M,EAAAA,YAAWtB,IACzB,GAAI32M,EAAS,CACX,IAAIkH,SAACA,KAAa+iD,GAAgBjqD,EAClCtL,EAAQwjN,GAAWjuJ,EAAcv1D,GACjCwS,GACF,CAGA,OAFAixM,GAAWn4M,EAAStL,EAAMH,KAEnBG,CACT,CAqDM0jN,CAAyB1jN,IAExBijN,EAAWU,IAAc,EAAAC,EAAAA,WAAS,GACnC/jN,GAAM,EAAAgkN,EAAAA,QAAmB,CAC3BZ,WAAW,EACXa,2BAA2B,EAC3BC,uBAAuB,EACvBC,mBAAmB,EACnBC,mBAAmB,EACnBC,gBAAiB,KACjBllN,OAAQ,KACRmlN,cAAc,EACdp8K,YAAa,QAGX+0K,kBAACA,EAAiBI,yBAAEA,GAA4BkH,KAEhDC,EAAoBC,IAAe,CAAC9B,EAA0Bz6K,KAChE,IAAIt/B,EAAQ5I,EAAIqpD,QAChB,GAAI4sJ,GAAcrtM,EAAMu7M,kBACtB,OAAO,EAGT,IAAI1B,GAAwB,EAE5B,GADA75M,EAAMw7M,mBAAoB,EACtBnB,EAAc,CAChB,IAAIp7F,EAAQ,IAAI06F,GAAW,aAAcr6K,EAAay6K,GACtDM,EAAap7F,GACb46F,EAAwB56F,EAAM46F,qBAChC,CASA,OAPIO,GACFA,GAAc,GAGhBp6M,EAAMw7M,mBAAoB,EAC1Bx7M,EAAMu7M,mBAAoB,EAC1BL,GAAW,GACJrB,CAAA,IAGLiC,EAAkBD,IAAe,SAAC9B,EAA0Bz6K,GAA2C,IAAjBy8K,IAAAtlN,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,KAAAA,UAAA,GACpFuJ,EAAQ5I,EAAIqpD,QAChB,IAAKzgD,EAAMu7M,kBACT,OAAO,EAGTv7M,EAAMs7M,uBAAwB,EAC9Bt7M,EAAMu7M,mBAAoB,EAC1Bv7M,EAAMw7M,mBAAoB,EAE1B,IAAI3B,GAAwB,EAC5B,GAAIS,EAAY,CACd,IAAIr7F,EAAQ,IAAI06F,GAAW,WAAYr6K,EAAay6K,GACpDO,EAAWr7F,GACX46F,EAAwB56F,EAAM46F,qBAChC,CAQA,GANIO,GACFA,GAAc,GAGhBc,GAAW,GAEPf,GAAW4B,IAAe1O,EAAY,CACxC,IAAIpuF,EAAQ,IAAI06F,GAAW,QAASr6K,EAAay6K,GACjDI,EAAQl7F,GACR46F,IAAAA,EAA0B56F,EAAM46F,sBAClC,CAGA,OADA75M,EAAMw7M,mBAAoB,EACnB3B,CACT,IAEImC,EAAiBH,IAAe,CAAC9B,EAA0Bz6K,KAC7D,IAAIt/B,EAAQ5I,EAAIqpD,QAChB,GAAI4sJ,EACF,OAAO,EAGT,GAAIkN,EAAW,CACbv6M,EAAMw7M,mBAAoB,EAC1B,IAAIv8F,EAAQ,IAAI06F,GAAW,UAAWr6K,EAAay6K,GAGnD,OAFAQ,EAAUt7F,GACVj/G,EAAMw7M,mBAAoB,EACnBv8F,EAAM46F,qBACf,CAEA,OAAO,CAAI,IAGT9mI,EAAS8oI,IAAgBhiN,IAC3B,IAAImG,EAAQ5I,EAAIqpD,QACZzgD,EAAMw6M,WAAax6M,EAAMzJ,SACvByJ,EAAM07M,cAAqC,MAArB17M,EAAMs/B,aAC9Bw8K,EAAgBG,GAAYj8M,EAAMzJ,OAAQsD,GAAImG,EAAMs/B,aAAa,GAEnEt/B,EAAMw6M,WAAY,EAClBx6M,EAAM07M,cAAe,EACrB17M,EAAMy7M,gBAAkB,KACxBz7M,EAAMs/B,YAAc,KACpBm1K,IACKmG,GACHvB,GAAqBr5M,EAAMzJ,QAE/B,IAGE2lN,EAAsBL,IAAgBhiN,IACpC8gN,GACF5nI,EAAOl5E,EAAA,IAIPsiN,GAAa,EAAAC,EAAAA,UAAQ,KACvB,IAAIp8M,EAAQ5I,EAAIqpD,QACZ07J,EAA4B,CAC9BjpE,SAAAA,CAAUr5I,GACR,GAAIwiN,GAAqBxiN,EAAE+pM,YAAa/pM,EAAE4pM,gBAAkB5pM,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,QAAoB,KAuCvG+lN,EAtCEC,GAA6B1iN,EAAEtD,OAAmBsD,EAAEjD,MACtDiD,EAAE88H,iBAMJ,IAAIkjF,GAAwB,EAC5B,IAAK75M,EAAMw6M,YAAc3gN,EAAEulF,OAAQ,CACjCp/E,EAAMzJ,OAASsD,EAAE4pM,cACjBzjM,EAAMw6M,WAAY,EAClBX,EAAwB+B,EAAkB/hN,EAAG,YAK7C,IAAI2iN,EAAiB3iN,EAAE4pM,cACnBgZ,EAAW5iN,IACTwiN,GAAqBxiN,EAAG2iN,KAAoB3iN,EAAEulF,QAAUo9H,EAAej3J,SAAS1rD,EAAEtD,SAAsByJ,EAAMzJ,QAChHylN,EAAeC,GAAYj8M,EAAMzJ,OAAQsD,GAAI,aAIjDw6M,EAAkB6E,GAAiBr/M,EAAE4pM,eAAgB,QAASiZ,GAAMD,EAASE,IAAU,EACzF,CAEI9C,GACFhgN,EAAE+iN,kBAUA/iN,EAAE84K,SAAWkqC,OACI,QAAnBP,EAAAt8M,EAAM88M,qBAAN,IAAAR,GAAAA,EAAqBt/M,IAAInD,EAAEjD,IAAKiD,EAAE+pM,aAEtC,KAAqB,SAAV/pM,EAAEjD,MACXoJ,EAAM88M,cAAgB,IAAIpiN,IAE9B,EACAo1I,OAAAA,CAAQj2I,GACN,KAAIA,GAAMA,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,UAIjCsD,GAAkB,IAAbA,EAAE64K,SAAiB1yK,EAAMw7M,oBAAuBuB,GAAiB1J,UAAW,CACnF,IAAIwG,GAAwB,EAO5B,GANIxM,GACFxzM,EAAE88H,kBAKC32H,EAAMs7M,wBAA0Bt7M,EAAMq7M,4BAA8Br7M,EAAMw6M,YAAoC,YAAtBx6M,EAAMs/B,aAA6B09K,GAAenjN,EAAE+pM,cAAe,CAEzJyJ,GAAeqN,GAClBuC,GAAsBpjN,EAAE4pM,eAG1B,IAAIyZ,EAAiBtB,EAAkB/hN,EAAG,WACtCsjN,EAAcnB,EAAeniN,EAAG,WAChCujN,EAAetB,EAAgBjiN,EAAG,WACtCggN,EAAwBqD,GAAkBC,GAAeC,CAC3D,CAEAp9M,EAAMq7M,2BAA4B,EAClCr7M,EAAMs7M,uBAAwB,EAC1BzB,GACFhgN,EAAE+iN,iBAEN,CACF,GAGED,EAAW9iN,QAsBkByiN,EArB/B,GAAIt8M,EAAMw6M,WAAax6M,EAAMzJ,QAAU8lN,GAAqBxiN,EAAGmG,EAAMzJ,QAAS,KAoB5E8mN,EAnBId,GAA6B1iN,EAAEtD,OAAmBsD,EAAEjD,MACtDiD,EAAE88H,iBAGJ,IAAIpgI,EAASsD,EAAEtD,OACfulN,EAAgBG,GAAYj8M,EAAMzJ,OAAQsD,GAAI,WAAYmG,EAAMzJ,OAAOgvD,SAAShvD,IAChFk+M,IAKc,UAAV56M,EAAEjD,KAAmB0mN,GAAiBt9M,EAAMzJ,SAAWyJ,EAAMzJ,OAAOgvD,SAAShvD,KAAYsD,EAAEogN,MAG7FpgN,EAAEogN,KAAgB,EAClB8C,GAAS/8M,EAAMzJ,OAAQsD,GAAG,IAG5BmG,EAAMw6M,WAAY,EACC,QAAnB6C,EAAAr9M,EAAM88M,qBAAN,IAAAO,GAAAA,EAAqBntM,OAAOrW,EAAEjD,IAChC,MAAO,GAAc,SAAViD,EAAEjD,MAAqC,QAAnB0lN,EAAAt8M,EAAM88M,qBAAN,IAAAR,OAAA,EAAAA,EAAqB3qJ,MAAM,KAOtD4rJ,EAHF,IAAI7/F,EAAS19G,EAAM88M,cACnB98M,EAAM88M,mBAAgBzjN,EACtB,IAAK,IAAI4lH,KAASvB,EAAO7zG,SACX,QAAZ0zM,EAAAv9M,EAAMzJ,cAAN,IAAAgnN,GAAAA,EAAcjK,cAAc,IAAIL,cAAc,QAASh0F,GAE3D,GAGF,GAA4B,qBAAjBu+F,aAA8B,CACvCrB,EAAWsB,cAAiB5jN,IAE1B,GAAiB,IAAbA,EAAE64K,SAAiB74K,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,QAChD,OAOF,GTpV8B0oH,ESoVJplH,EAAE+pM,aT5U9ByO,MAA+B,IAAhBpzF,EAAMznH,OAAgC,IAAjBynH,EAAMxnH,QAC3B,IAAhBwnH,EAAMznH,OACY,IAAjBynH,EAAMxnH,QACa,IAAnBwnH,EAAMy+F,UACW,IAAjBz+F,EAAM24F,QACgB,UAAtB34F,EAAM3/E,YSyUF,YADAt/B,EAAMs/B,YAAc,WTrVvB,IAA+B2/E,ES2V1B0+F,GAAqB9jN,EAAE4pM,gBACzB5pM,EAAE88H,iBAGJ32H,EAAMs/B,YAAczlC,EAAEylC,YAEtB,IAAIu6K,GAAwB,EACvB75M,EAAMw6M,YACTx6M,EAAMw6M,WAAY,EAClBx6M,EAAM07M,cAAe,EACrB17M,EAAMy7M,gBAAkB5hN,EAAE+jN,UAC1B59M,EAAMzJ,OAASsD,EAAE4pM,cAEZ4J,GAAeqN,GAClBuC,GAAsBpjN,EAAE4pM,eAGrBmX,GACH7B,GAAqB/4M,EAAMzJ,QAG7BsjN,EAAwB+B,EAAkB/hN,EAAGmG,EAAMs/B,aAEnD+0K,EAAkB6E,GAAiBr/M,EAAE4pM,eAAgB,cAAeoa,GAAe,GACnFxJ,EAAkB6E,GAAiBr/M,EAAE4pM,eAAgB,YAAaqa,GAAa,GAC/EzJ,EAAkB6E,GAAiBr/M,EAAE4pM,eAAgB,gBAAiBsa,GAAiB,IAGrFlE,GACFhgN,EAAE+iN,iBAAiB,EAIvBT,EAAW58E,YAAe1lI,IACnBA,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,SAIf,IAAbsD,EAAE64K,SAIAirC,GAAqB9jN,EAAE4pM,gBACzB5pM,EAAE88H,iBAGJ98H,EAAE+iN,kBACJ,EAGFT,EAAW2B,YAAejkN,IAEnBA,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,SAA4C,YAAtByJ,EAAMs/B,aAO3C,IAAbzlC,EAAE64K,QAAgBsrC,GAAankN,EAAGA,EAAE4pM,gBACtCuY,EAAeniN,EAAGmG,EAAMs/B,aAAezlC,EAAEylC,YAAY,EAOzD,IAAIu+K,EAAiBhkN,IACfA,EAAE+jN,YAAc59M,EAAMy7M,kBAItBz7M,EAAMzJ,QAAUynN,GAAankN,EAAGmG,EAAMzJ,QACnCyJ,EAAM07M,cAAqC,MAArB17M,EAAMs/B,cAC/Bt/B,EAAM07M,cAAe,EACrBE,EAAkBK,GAAYj8M,EAAMzJ,OAAQsD,GAAImG,EAAMs/B,cAE/Ct/B,EAAMzJ,QAAUyJ,EAAM07M,cAAqC,MAArB17M,EAAMs/B,cACrDt/B,EAAM07M,cAAe,EACrBI,EAAgBG,GAAYj8M,EAAMzJ,OAAQsD,GAAImG,EAAMs/B,aAAa,GACjE48K,EAAoBriN,IACtB,EAGEikN,EAAejkN,IACbA,EAAE+jN,YAAc59M,EAAMy7M,iBAAmBz7M,EAAMw6M,WAA0B,IAAb3gN,EAAE64K,QAAgB1yK,EAAMzJ,SAClFynN,GAAankN,EAAGmG,EAAMzJ,SAAgC,MAArByJ,EAAMs/B,YACzCw8K,EAAgBG,GAAYj8M,EAAMzJ,OAAQsD,GAAImG,EAAMs/B,aAC3Ct/B,EAAM07M,cAAqC,MAArB17M,EAAMs/B,aACrCw8K,EAAgBG,GAAYj8M,EAAMzJ,OAAQsD,GAAImG,EAAMs/B,aAAa,GAGnEt/B,EAAMw6M,WAAY,EAClBx6M,EAAM07M,cAAe,EACrB17M,EAAMy7M,gBAAkB,KACxBz7M,EAAMs/B,YAAc,KACpBm1K,IACKmG,GACHvB,GAAqBr5M,EAAMzJ,QAE/B,EAGEwnN,EAAmBlkN,IACrBk5E,EAAOl5E,EAAA,EAGTsiN,EAAW8B,YAAepkN,IACnBA,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,SAKhCw8E,EAAOl5E,EAAA,CAEX,KAAO,CACLsiN,EAAW58E,YAAe1lI,IAExB,GAAiB,IAAbA,EAAE64K,SAAiB74K,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,QAChD,OASF,GAJIonN,GAAqB9jN,EAAE4pM,gBACzB5pM,EAAE88H,iBAGA32H,EAAMq7M,0BAER,YADAxhN,EAAE+iN,kBAIJ58M,EAAMw6M,WAAY,EAClBx6M,EAAM07M,cAAe,EACrB17M,EAAMzJ,OAASsD,EAAE4pM,cACjBzjM,EAAMs/B,YAAc09K,GAAenjN,EAAE+pM,aAAe,UAAY,QAE3DyJ,GAAeqN,GAClBuC,GAAsBpjN,EAAE4pM,eAGEmY,EAAkB/hN,EAAGmG,EAAMs/B,cAErDzlC,EAAE+iN,kBAGJvI,EAAkB6E,GAAiBr/M,EAAE4pM,eAAgB,UAAWya,GAAW,EAAM,EAGnF/B,EAAW5a,aAAgB1nM,IACzB,IAAKA,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,QAC9B,OAGF,IAAIsjN,GAAwB,EACxB75M,EAAMw6M,YAAcx6M,EAAMq7M,2BAAkD,MAArBr7M,EAAMs/B,cAC/Dt/B,EAAM07M,cAAe,EACrB7B,EAAwB+B,EAAkB/hN,EAAGmG,EAAMs/B,cAGjDu6K,GACFhgN,EAAE+iN,iBAAiB,EAIvBT,EAAW9a,aAAgBxnM,IACzB,IAAKA,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,QAC9B,OAGF,IAAIsjN,GAAwB,EACxB75M,EAAMw6M,YAAcx6M,EAAMq7M,2BAAkD,MAArBr7M,EAAMs/B,cAC/Dt/B,EAAM07M,cAAe,EACrB7B,EAAwBiC,EAAgBjiN,EAAGmG,EAAMs/B,aAAa,GAC9D48K,EAAoBriN,IAGlBggN,GACFhgN,EAAE+iN,iBAAiB,EAIvBT,EAAW+B,UAAarkN,IACjBA,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,UAI3ByJ,EAAMq7M,2BAA0C,IAAbxhN,EAAE64K,QACxCspC,EAAeniN,EAAGmG,EAAMs/B,aAAe,WAI3C,IAAI4+K,EAAarkN,IAEE,IAAbA,EAAE64K,SAIN1yK,EAAMw6M,WAAY,EAClB/F,IAEIz0M,EAAMq7M,0BACRr7M,EAAMq7M,2BAA4B,GAIhCr7M,EAAMzJ,QAAUynN,GAAankN,EAAGmG,EAAMzJ,SAAgC,MAArByJ,EAAMs/B,YACzDw8K,EAAgBG,GAAYj8M,EAAMzJ,OAAQsD,GAAImG,EAAMs/B,aAC3Ct/B,EAAMzJ,QAAUyJ,EAAM07M,cAAqC,MAArB17M,EAAMs/B,aACrDw8K,EAAgBG,GAAYj8M,EAAMzJ,OAAQsD,GAAImG,EAAMs/B,aAAa,GAGnEt/B,EAAM07M,cAAe,GAAK,EAG5BS,EAAW38E,aAAgB3lI,IACzB,IAAKA,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,QAC9B,OAGF,IAAI4nN,EA6KZ,SAA2Bl/F,GACzB,MAAMm/F,cAACA,GAAiBn/F,EACxB,OAAIm/F,EAAc1nN,OAAS,EAClB0nN,EAAc,GAEhB,IACT,CAnLoBC,CAAkBxkN,EAAE+pM,aAC3Bua,IAGLn+M,EAAMy7M,gBAAkB0C,EAAMG,WAC9Bt+M,EAAMq7M,2BAA4B,EAClCr7M,EAAM07M,cAAe,EACrB17M,EAAMw6M,WAAY,EAClBx6M,EAAMzJ,OAASsD,EAAE4pM,cACjBzjM,EAAMs/B,YAAc,QAIf+tK,GAAeqN,GAClBuC,GAAsBpjN,EAAE4pM,eAGrBmX,GACH7B,GAAqB/4M,EAAMzJ,QAGDqlN,EAAkB/hN,EAAGmG,EAAMs/B,cAErDzlC,EAAE+iN,kBAGJvI,EAAkBkK,GAAe1kN,EAAE4pM,eAAgB,SAAU3tE,GAAU,GAAK,EAG9EqmF,EAAWqC,YAAe3kN,IACxB,IAAKA,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,QAC9B,OAGF,IAAKyJ,EAAMw6M,UAET,YADA3gN,EAAE+iN,kBAIJ,IAAIuB,EAAQM,GAAa5kN,EAAE+pM,YAAa5jM,EAAMy7M,iBAC1C5B,GAAwB,EACxBsE,GAASH,GAAaG,EAAOtkN,EAAE4pM,eAC5BzjM,EAAM07M,cAAqC,MAArB17M,EAAMs/B,cAC/Bt/B,EAAM07M,cAAe,EACrB7B,EAAwB+B,EAAkB/hN,EAAGmG,EAAMs/B,cAE5Ct/B,EAAM07M,cAAqC,MAArB17M,EAAMs/B,cACrCt/B,EAAM07M,cAAe,EACrB7B,EAAwBiC,EAAgBjiN,EAAGmG,EAAMs/B,aAAa,GAC9D48K,EAAoBriN,IAGlBggN,GACFhgN,EAAE+iN,iBAAiB,EAIvBT,EAAW18E,WAAc5lI,IACvB,IAAKA,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,QAC9B,OAGF,IAAKyJ,EAAMw6M,UAET,YADA3gN,EAAE+iN,kBAIJ,IAAIuB,EAAQM,GAAa5kN,EAAE+pM,YAAa5jM,EAAMy7M,iBAC1C5B,GAAwB,EACxBsE,GAASH,GAAaG,EAAOtkN,EAAE4pM,gBAAuC,MAArBzjM,EAAMs/B,aACzD08K,EAAeniN,EAAGmG,EAAMs/B,aACxBu6K,EAAwBiC,EAAgBjiN,EAAGmG,EAAMs/B,cACxCt/B,EAAM07M,cAAqC,MAArB17M,EAAMs/B,cACrCu6K,EAAwBiC,EAAgBjiN,EAAGmG,EAAMs/B,aAAa,IAG5Du6K,GACFhgN,EAAE+iN,kBAGJ58M,EAAMw6M,WAAY,EAClBx6M,EAAMy7M,gBAAkB,KACxBz7M,EAAM07M,cAAe,EACrB17M,EAAMq7M,2BAA4B,EAC9Br7M,EAAMzJ,SAAWqkN,GACnBvB,GAAqBr5M,EAAMzJ,QAE7Bk+M,GAAA,EAGF0H,EAAWuC,cAAiB7kN,IACrBA,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,UAIhCsD,EAAE+iN,kBACE58M,EAAMw6M,WACRznI,EAAOl5E,GAAA,EAIX,IAAIi8H,EAAYj8H,IACVmG,EAAMw6M,WAAa3gN,EAAGtD,OAAmBgvD,SAASvlD,EAAMzJ,SAC1Dw8E,EAAO,CACL0wH,cAAezjM,EAAMzJ,OACrBu8K,UAAU,EACVD,SAAS,EACTF,SAAS,EACTC,QAAQ,GACR,EAINupC,EAAW8B,YAAepkN,IACnBA,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,SAIhCw8E,EAAOl5E,EAAA,CAEX,CAEA,OAAOsiN,CAAA,GACN,CACD9H,EACAhH,EACAqN,EACAjG,EACAmG,EACA7nI,EACAmpI,EACAJ,EACAF,EACAI,IAcF,OATA,EAAA2C,EAAAA,YAAU,IACD,SAGkBC,EAFlBhE,GAEHvB,GAAuC,QAAlBuF,EAAAxnN,EAAIqpD,QAAQlqD,cAAZ,IAAAqoN,EAAAA,OAAsBvlN,EAAA,GAG9C,CAACuhN,IAEG,CACLJ,UAAWC,GAAiBD,EAC5B2B,WAAYpB,GAAWF,EAAUsB,GAErC,CAEA,SAASmB,GAAiB/mN,GACxB,MAA0B,MAAnBA,EAAO+F,SAAmB/F,EAAOs8M,aAAa,OACvD,CAEA,SAASwJ,GAAqBp9F,EAAsBwkF,GAClD,MAAM7sM,IAACA,EAAG4mB,KAAEA,GAAQyhG,EACdpkE,EAAU4oJ,EACVtwD,EAAOt4F,EAAQwoH,aAAa,QAGlC,OACW,UAARzsK,GAA2B,MAARA,GAAuB,aAARA,GAA+B,UAAT4mB,MACvDq9B,aAAoB0jK,GAAe1jK,GAASgkK,mBAAqBC,GAAgBjkK,EAASjkD,IAC1FikD,aAAmB0jK,GAAe1jK,GAASkkK,qBAC3ClkK,EAAQmkK,uBAEE,SAAT7rE,IAAqBA,GAAQmqE,GAAiBziK,KAAsB,UAARjkD,EAEnE,CAUA,SAAS6nN,GACPx/F,EACA2+F,GAEA,MAAMqB,EAAiBhgG,EAAMggG,eAC7B,IAAK,IAAIzoN,EAAI,EAAGA,EAAIyoN,EAAevoN,OAAQF,IAAK,CAC9C,MAAM2nN,EAAQc,EAAezoN,GAC7B,GAAI2nN,EAAMG,aAAeV,EACvB,OAAOO,CAEX,CACA,OAAO,IACT,CAEA,SAASlC,GAAY1lN,EAA0BsD,GAC7C,MAAO,CACL4pM,cAAeltM,EACfu8K,SAAUj5K,EAAEi5K,SACZD,QAASh5K,EAAEg5K,QACXF,QAAS94K,EAAE84K,QACXC,OAAQ/4K,EAAE+4K,OAEd,CAoDA,SAASorC,GAAakB,EAAmB3oN,GACvC,IAAIu1L,EAAOv1L,EAAOugI,wBACdqoF,EApCN,SAA4BD,GAC1B,IAAIxb,EAAU,EACVC,EAAU,EAYd,YAXoBtqM,IAAhB6lN,EAAM1nN,MACRksM,EAAWwb,EAAM1nN,MAAQ,OACE6B,IAAlB6lN,EAAME,UACf1b,EAAUwb,EAAME,cAEG/lN,IAAjB6lN,EAAMznN,OACRksM,EAAWub,EAAMznN,OAAS,OACC4B,IAAlB6lN,EAAMG,UACf1b,EAAUub,EAAMG,SAGX,CACLxvF,IAAKqvF,EAAMloF,QAAU2sE,EACrBt9E,MAAO64F,EAAMtoF,QAAU8sE,EACvBh0E,OAAQwvF,EAAMloF,QAAU2sE,EACxBv9E,KAAM84F,EAAMtoF,QAAU8sE,EAE1B,CAgBkB4b,CAAmBJ,GACnC,OAfyCtjN,EAeHujN,KAfNxkN,EAeAmxL,GAb1B1lE,KAAOxqH,EAAEyqH,OAASzqH,EAAEwqH,KAAOzrH,EAAE0rH,UAI/B1rH,EAAEk1H,IAAMj0H,EAAE8zH,QAAU9zH,EAAEi0H,IAAMl1H,EAAE+0H,QANpC,IAAkC/0H,EAASiB,CAgB3C,CAEA,SAAS+hN,GAAqBpnN,GAE5B,QAASA,aAAkB8F,eAAiB9F,EAAOs8M,aAAa,YAClE,CAEA,SAAS0J,GAA6BhmN,EAAiBK,GACrD,OAAIL,aAAkBsoN,kBACZC,GAAgBvoN,EAAQK,GAG9BL,aAAkBgpN,kBACG,WAAhBhpN,EAAOwC,MAAqC,UAAhBxC,EAAOwC,MAGxCukN,GAAiB/mN,EAKvB,CAEA,MAAMipN,GAAoB,IAAI5kN,IAAI,CAChC,WACA,QACA,QACA,QACA,OACA,QACA,SACA,SACA,UAGF,SAASkkN,GAAgBvoN,EAA0BK,GAEjD,MAAuB,aAAhBL,EAAOwC,MAAuC,UAAhBxC,EAAOwC,KAChC,MAARnC,EACA4oN,GAAkBziN,IAAIxG,EAAOwC,KACnC,CGv3BO,MCCM0mN,GAAiBhG,EAAMphN,YAAW,CAAA6R,EAA4C9S,KAAA,IAA3Ci/G,SAACA,KAAa9+G,GAA2B2S,EACnFw1M,GAAe,EAAAtE,EAAAA,SAAO,GACtBuE,GAAc,EAAA7E,EAAAA,YAAWtB,IAC7BpiN,EAAMwoN,GAAaxoN,IAAO,OAAAuoN,QAAA,IAAAA,OAAA,EAAAA,EAAavoN,MACvC,IAAIyL,EAAUk4M,GAAW4E,GAAe,CAAC,EAAG,IACvCpoN,MACHH,EACA2S,QAAAA,GACE21M,EAAaj/J,SAAU,EACnBk/J,GACFA,EAAY51M,UAEhB,IAeF,OAZAixM,GAAW2E,EAAavoN,IAExB,EAAAunN,EAAAA,YAAU,KACHe,EAAaj/J,UAChB//C,QAAQyC,KACN,6IAGFu8M,EAAaj/J,SAAU,EACzB,GACC,IAGDg5J,EAAAxsF,cAACusF,GAAsBtrC,SAAQ,CAAC/vK,MAAO0E,GACpCwzG,EAAA,IAKA,SAASwpG,GAAA5oM,GAAqD,IAAjCo/F,SAACA,GAAgCp/F,EAC/DpU,GAAU,EAAAu5M,EAAAA,UAAQ,KAAM,CAAEryM,SAAUA,UAAY,IACpD,OACE0vM,EAAAxsF,cAACusF,GAAsBtrC,SAAQ,CAAC/vK,MAAO0E,GACpCwzG,EAGP,CChDO,MAAMypG,GA2BXC,kBAAAA,GACE,OAAO9oN,KAAK2sM,YAAY1wB,gBAC1B,CAEAv8C,cAAAA,GACE1/H,KAAKi8K,kBAAmB,EACxBj8K,KAAK2sM,YAAYjtE,gBACnB,CAEAimF,eAAAA,GACE3lN,KAAK2sM,YAAYgZ,kBACjB3lN,KAAK+oN,qBAAuB,KAAM,CACpC,CAEAA,oBAAAA,GACE,OAAO,CACT,CAEAxhB,OAAAA,GAAW,CAhCX57L,WAAAA,CAAY7J,EAAc6qM,GACxB3sM,KAAK2sM,YAAcA,EACnB3sM,KAAKV,OAASqtM,EAAYrtM,OAC1BU,KAAKwsM,cAAgBG,EAAYH,cACjCxsM,KAAKgpN,cAAgBrc,EAAYqc,cACjChpN,KAAKm8M,QAAUxP,EAAYwP,QAC3Bn8M,KAAK6nI,WAAa8kE,EAAY9kE,WAC9B7nI,KAAKi8K,iBAAmB0wB,EAAY1wB,iBACpCj8K,KAAKipN,WAAatc,EAAYsc,WAC9BjpN,KAAKygN,UAAY9T,EAAY8T,UAC7BzgN,KAAKgyM,UAAYrF,EAAYqF,UAC7BhyM,KAAK8B,KAAOA,CACd,EAuBK,SAASonN,GAAwCC,GACtD,IAAIC,GAAW,EAAAjF,EAAAA,QAAO,CACpBkF,WAAW,EACXC,SAAU,OAKZC,IAAgB,KACd,MAAMxgN,EAAQqgN,EAAS5/J,QACvB,MAAO,KACDzgD,EAAMugN,WACRvgN,EAAMugN,SAASE,aACfzgN,EAAMugN,SAAW,KACnB,CACD,GACA,IAEH,IAAIG,EAAe7E,IAAgBhiN,IACjC,OAAAumN,QAAA,IAAAA,GAAAA,EAASvmN,EAAA,IAIX,OAAO,EAAA8mN,EAAAA,cAAa9mN,IAKlB,GACEA,EAAEtD,kBAAkBgpN,mBACpB1lN,EAAEtD,kBAAkBsoN,kBACpBhlN,EAAEtD,kBAAkBwoN,qBACpBllN,EAAEtD,kBAAkBqqN,kBACpB,CACAP,EAAS5/J,QAAQ6/J,WAAY,EAE7B,IAAI/pN,EAASsD,EAAEtD,OACXsqN,EAA4DhnN,IAC9DwmN,EAAS5/J,QAAQ6/J,WAAY,EAEzB/pN,EAAOk/I,UAETirE,EAAa,IAAIZ,GAAoB,OAAQjmN,IAI3CwmN,EAAS5/J,QAAQ8/J,WACnBF,EAAS5/J,QAAQ8/J,SAASE,aAC1BJ,EAAS5/J,QAAQ8/J,SAAW,KAC9B,EAGFhqN,EAAO0T,iBAAiB,WAAY42M,EAAe,CAAChnI,MAAM,IAE1DwmI,EAAS5/J,QAAQ8/J,SAAW,IAAIO,kBAAiB,KAC/C,GAAIT,EAAS5/J,QAAQ6/J,WAAa/pN,EAAOk/I,SAAU,KACjDsrE,EAAyB,QAAzBA,EAAAV,EAAS5/J,QAAQ8/J,gBAAjB,IAAAQ,GAAAA,EAA2BN,aAC3B,IAAIO,EAAkBzqN,IAAW0F,SAASqwI,cAAgB,KAAOrwI,SAASqwI,cAC1E/1I,EAAO+8M,cAAc,IAAI2N,WAAW,OAAQ,CAAChB,cAAee,KAC5DzqN,EAAO+8M,cAAc,IAAI2N,WAAW,WAAY,CAAC7N,SAAS,EAAM6M,cAAee,IACjF,KAGFX,EAAS5/J,QAAQ8/J,SAASnL,QAAQ7+M,EAAQ,CAACujJ,YAAY,EAAMonE,gBAAiB,CAAC,aACjF,IACC,CAACR,GACN,CC9FO,SAASS,GAA6D5pN,GAC3E,IAAI81M,WACFA,EACA+T,QAASC,EACTjB,OAAQkB,EAAUC,cAClBA,GACEhqN,EAEJ,MAAM6oN,GAAuC,EAAAO,EAAAA,cAAa9mN,IACxD,GAAIA,EAAEtD,SAAWsD,EAAE4pM,cASjB,OARI6d,GACFA,EAAWznN,GAGT0nN,GACFA,GAAc,IAGT,CACT,GACC,CAACD,EAAYC,IAGVC,EAAmBrB,GAA8BC,GAEjDgB,GAAyC,EAAAT,EAAAA,cAAa9mN,IAGtDA,EAAEtD,SAAWsD,EAAE4pM,eAAiBxnM,SAASqwI,gBAAkBzyI,EAAEtD,SAC3D8qN,GACFA,EAAYxnN,GAGV0nN,GACFA,GAAc,GAGhBC,EAAiB3nN,GACnB,GACC,CAAC0nN,EAAeF,EAAaG,IAEhC,MAAO,CACLC,WAAY,CACVL,SAAW/T,IAAegU,GAAeE,GAAiBD,GAAeF,OAAU/nN,EACnF+mN,OAAU/S,IAAeiU,IAAcC,OAA2BloN,EAAT+mN,GAG/D,CC7CA,IAAIsB,GAAmC,KACnCC,GAAiB,IAAI/mN,IAIdgnN,GAA0B,IAAIlnN,IACrCmnN,IAAsB,EACtBC,IAA2B,EAG/B,MAAMC,GAA2B,CAC/Br2D,KAAK,EACLs2D,QAAQ,GAGV,SAASC,GAAsBC,EAAoBroN,GACjD,IAAK,IAAIm6I,KAAW2tE,GAClB3tE,EAAQkuE,EAAUroN,EAEtB,CAWA,SAASsoN,GAAoBtoN,GAC3BgoN,IAAsB,EAPxB,SAAoBhoN,GAElB,QAASA,EAAE84K,UAAakqC,MAAWhjN,EAAE+4K,QAAW/4K,EAAEg5K,SAAqB,YAAVh5K,EAAEjD,KAA+B,UAAViD,EAAEjD,KAA6B,SAAViD,EAAEjD,IAC7G,CAKMwrN,CAAWvoN,KACb6nN,GAAkB,WAClBO,GAAsB,WAAYpoN,GAEtC,CAEA,SAASwoN,GAAmBxoN,GAC1B6nN,GAAkB,UACH,cAAX7nN,EAAEd,MAAmC,gBAAXc,EAAEd,OAC9B8oN,IAAsB,EACtBI,GAAsB,UAAWpoN,GAErC,CAEA,SAASyoN,GAAiBzoN,GACpBmjN,GAAenjN,KACjBgoN,IAAsB,EACtBH,GAAkB,UAEtB,CAEA,SAASa,GAAiB1oN,GAIpBA,EAAEtD,SAAW6D,QAAUP,EAAEtD,SAAW0F,WAMnC4lN,IAAwBC,KAC3BJ,GAAkB,UAClBO,GAAsB,UAAWpoN,IAGnCgoN,IAAsB,EACtBC,IAA2B,EAC7B,CAEA,SAASU,KAGPX,IAAsB,EACtBC,IAA2B,CAC7B,CAKA,SAASW,GAAuB5nK,GAC9B,GAAsB,qBAAXzgD,QAA0BwnN,GAAwB9kN,IAAIyhN,GAAe1jK,IAC9E,OAGF,MAAM6nK,EAAenE,GAAe1jK,GAC9Bo+J,EAAiBC,GAAiBr+J,GAMxC,IAAIw0F,EAAQqzE,EAAarmN,YAAYxF,UAAUw4I,MAC/CqzE,EAAarmN,YAAYxF,UAAUw4I,MAAQ,WACzCwyE,IAAsB,EACtBxyE,EAAMr4I,MAAMC,KAAMR,UACpB,EAEAwiN,EAAehvM,iBAAiB,UAAWk4M,IAAqB,GAChElJ,EAAehvM,iBAAiB,QAASk4M,IAAqB,GAC9DlJ,EAAehvM,iBAAiB,QAASq4M,IAAkB,GAI3DI,EAAaz4M,iBAAiB,QAASs4M,IAAkB,GACzDG,EAAaz4M,iBAAiB,OAAQu4M,IAAkB,GAE5B,qBAAjBhF,cACTvE,EAAehvM,iBAAiB,cAAeo4M,IAAoB,GACnEpJ,EAAehvM,iBAAiB,cAAeo4M,IAAoB,GACnEpJ,EAAehvM,iBAAiB,YAAao4M,IAAoB,KAEjEpJ,EAAehvM,iBAAiB,YAAao4M,IAAoB,GACjEpJ,EAAehvM,iBAAiB,YAAao4M,IAAoB,GACjEpJ,EAAehvM,iBAAiB,UAAWo4M,IAAoB,IAIjEK,EAAaz4M,iBAAiB,gBAAgB,KAC5C04M,GAA4B9nK,EAAA,GAC3B,CAACg/B,MAAM,IAEV+nI,GAAwB5kN,IAAI0lN,EAAc,OAACrzE,GAC7C,CAEA,MAAMszE,GAA8BA,CAAC9nK,EAAS+nK,KAC5C,MAAMF,EAAenE,GAAe1jK,GAC9Bo+J,EAAiBC,GAAiBr+J,GACpC+nK,GACF3J,EAAevjF,oBAAoB,mBAAoBktF,GAEpDhB,GAAwB7kN,IAAI2lN,KAGjCA,EAAarmN,YAAYxF,UAAUw4I,MAAQuyE,GAAwB9kN,IAAI4lN,GAAerzE,MAEtF4pE,EAAevjF,oBAAoB,UAAWysF,IAAqB,GACnElJ,EAAevjF,oBAAoB,QAASysF,IAAqB,GACjElJ,EAAevjF,oBAAoB,QAAS4sF,IAAkB,GAC9DI,EAAahtF,oBAAoB,QAAS6sF,IAAkB,GAC5DG,EAAahtF,oBAAoB,OAAQ8sF,IAAkB,GAE/B,qBAAjBhF,cACTvE,EAAevjF,oBAAoB,cAAe2sF,IAAoB,GACtEpJ,EAAevjF,oBAAoB,cAAe2sF,IAAoB,GACtEpJ,EAAevjF,oBAAoB,YAAa2sF,IAAoB,KAEpEpJ,EAAevjF,oBAAoB,YAAa2sF,IAAoB,GACpEpJ,EAAevjF,oBAAoB,YAAa2sF,IAAoB,GACpEpJ,EAAevjF,oBAAoB,UAAW2sF,IAAoB,IAGpET,GAAwB1xM,OAAOwyM,GAAA,EA4C1B,SAASG,KACd,MAA2B,YAApBnB,EACT,CAEO,SAASoB,KACd,OAAOpB,EACT,CAEO,SAASqB,GAAuBb,GACrCR,GAAkBQ,EAClBD,GAAsBC,EAAU,KAClC,CAKO,SAASc,KACdP,KAEA,IAAKP,EAAUe,IAAe,EAAA9H,EAAAA,UAASuG,IAYvC,OAXA,EAAA/C,EAAAA,YAAU,KACR,IAAI3qE,EAAUA,KACZivE,EAAYvB,GAAA,EAId,OADAC,GAAe1kN,IAAI+2I,GACZ,KACL2tE,GAAezxM,OAAO8jI,EAAA,CACvB,GACA,IAEIkvE,KAAa,KAAOhB,CAC7B,CAvCwB,qBAAbjmN,UAjBJ,SAAgC4+C,GACrC,MAAMo+J,EAAiBC,GAAiBr+J,GACxC,IAAI+nK,EAC8B,YAA9B3J,EAAe/E,WACjBuO,GAAuB5nK,IAEvB+nK,EAAeA,KACbH,GAAuB5nK,EAAA,EAEzBo+J,EAAehvM,iBAAiB,mBAAoB24M,GAIxD,CAKEO,GAwCF,MAAMC,GAAoB,IAAIxoN,IAAI,CAChC,WACA,QACA,QACA,QACA,OACA,QACA,SACA,SACA,UAoCK,SAASyoN,GAAwBn4I,EAAyBtqC,EAA0BxhC,GACzFqjN,MAEA,EAAA9D,EAAAA,YAAU,KACR,IAAI3qE,EAAUA,CAACkuE,EAAoBroN,MAjCvC,SAA8BypN,EAAsBpB,EAAoBroN,OAOF0pN,EANpE,MAAMC,EAAsC,qBAAXppN,OAAyBmkN,GAAe,OAAA1kN,QAAA,IAAAA,OAAA,EAAAA,EAAGtD,QAAmBsoN,iBAAmBA,iBAC5G4E,EAAyC,qBAAXrpN,OAAyBmkN,GAAe,OAAA1kN,QAAA,IAAAA,OAAA,EAAAA,EAAGtD,QAAmBwoN,oBAAsBA,oBAClH2E,EAAiC,qBAAXtpN,OAAyBmkN,GAAe,OAAA1kN,QAAA,IAAAA,OAAA,EAAAA,EAAGtD,QAAmB8F,YAAcA,YAClGsnN,EAAmC,qBAAXvpN,OAAyBmkN,GAAe,OAAA1kN,QAAA,IAAAA,OAAA,EAAAA,EAAGtD,QAAmB08M,cAAgBA,cAM5G,SAJAqQ,EAAcA,IACX,OAAAzpN,QAAA,IAAAA,OAAA,EAAAA,EAAGtD,kBAAkBitN,IAAsBJ,GAAkBrmN,IAAI,OAAAlD,QAAA,IAAAA,GAAS,QAAT0pN,EAAA1pN,EAAGtD,cAAH,IAAAgtN,OAAA,EAAAA,EAAWxqN,QAC7E,OAAAc,QAAA,IAAAA,OAAA,EAAAA,EAAGtD,kBAAkBktN,IACpB,OAAA5pN,QAAA,IAAAA,OAAA,EAAAA,EAAGtD,kBAAkBmtN,IAAgB,OAAA7pN,QAAA,IAAAA,OAAA,EAAAA,EAAGtD,OAAOyoN,qBACb,aAAbkD,GAA2BroN,aAAa8pN,IAAmB5B,GAAyBloN,EAAEjD,KAChH,EAuBWgtN,IAAwB,OAAAxkN,QAAA,IAAAA,OAAA,EAAAA,EAAMkkN,aAAcpB,EAAUroN,IAG3DqxE,EAAG23I,KAAA,EAGL,OADAlB,GAAe1kN,IAAI+2I,GACZ,KACL2tE,GAAezxM,OAAO8jI,EAAA,CACvB,GAEApzG,EACL,CClSO,SAASijL,GAAetsN,GAC7B,IAAI81M,WACFA,EAAUyW,aACVA,EAAYC,cACZA,EAAaC,oBACbA,GACEzsN,EACAyI,GAAQ,EAAAo7M,EAAAA,QAAO,CACjB6I,eAAe,IAGb7D,GAAS,EAAAO,EAAAA,cAAa9mN,IAIpBmG,EAAMygD,QAAQwjK,gBAAkBpqN,EAAG4pM,cAA0Bl+I,SAAS1rD,EAAEomN,iBAC1EjgN,EAAMygD,QAAQwjK,eAAgB,EAE1BH,GACFA,EAAajqN,GAGXmqN,GACFA,GAAoB,GAExB,GACC,CAACF,EAAcE,EAAqBhkN,IAEnCwhN,EAAmBrB,GAAsBC,GACzCgB,GAAU,EAAAT,EAAAA,cAAa9mN,IAGpBmG,EAAMygD,QAAQwjK,eAAiBhoN,SAASqwI,gBAAkBzyI,EAAEtD,SAC3DwtN,GACFA,EAAclqN,GAGZmqN,GACFA,GAAoB,GAGtBhkN,EAAMygD,QAAQwjK,eAAgB,EAC9BzC,EAAiB3nN,GACnB,GACC,CAACkqN,EAAeC,EAAqBxC,IAExC,OAAInU,EACK,CACL6W,iBAAkB,CAEhB9C,aAAS/nN,EACT+mN,YAAQ/mN,IAKP,CACL6qN,iBAAkB,SAChB9C,SACAhB,GAGN,CCpEA,IAAI+D,IAAkC,EAClCC,GAAa,EAEjB,SAASC,KACPF,IAAkC,EAMlCv6M,YAAW,KACTu6M,IAAkC,CAAK,GACtC,GACL,CAEA,SAASG,GAAyBzqN,GACV,UAAlBA,EAAEylC,aACJ+kL,IAEJ,CAEA,SAASE,KACP,GAAwB,qBAAbtoN,SAWX,MAP4B,qBAAjBuhN,aACTvhN,SAASgO,iBAAiB,YAAaq6M,IAEvCroN,SAASgO,iBAAiB,WAAYo6M,IAGxCD,KACO,KACLA,KACIA,GAAa,IAIW,qBAAjB5G,aACTvhN,SAASy5H,oBAAoB,YAAa4uF,IAE1CroN,SAASy5H,oBAAoB,WAAY2uF,IAAA,CAG/C,CAMO,SAASG,GAASjtN,GACvB,IAAIktN,aACFA,EAAYC,cACZA,EAAaC,WACbA,EAAUtX,WACVA,GACE91M,GAECqtN,EAAWC,IAAc,EAAA1J,EAAAA,WAAS,GACnCn7M,GAAQ,EAAAo7M,EAAAA,QAAO,CACjBwJ,WAAW,EACXvJ,2BAA2B,EAC3B/7K,YAAa,GACb/oC,OAAQ,OACPkqD,SAEH,EAAAk+J,EAAAA,WAAU4F,GAAwB,IAElC,IAAIO,WAACA,EAAUC,gBAAEA,IAAmB,EAAA3I,EAAAA,UAAQ,KAC1C,IAAI4I,EAAoBA,CAAC/lG,EAAO3/E,KAE9B,GADAt/B,EAAMs/B,YAAcA,EAChB+tK,GAA8B,UAAhB/tK,GAA2Bt/B,EAAM4kN,YAAc3lG,EAAMwkF,cAAcl+I,SAAS05D,EAAM1oH,QAClG,OAGFyJ,EAAM4kN,WAAY,EAClB,IAAIruN,EAAS0oH,EAAMwkF,cACnBzjM,EAAMzJ,OAASA,EAEXkuN,GACFA,EAAa,CACX1rN,KAAM,oBACNxC,cACA+oC,IAIAolL,GACFA,GAAc,GAGhBG,GAAW,EAAK,EAGdE,EAAkBA,CAAC9lG,EAAO3/E,KAI5B,GAHAt/B,EAAMs/B,YAAc,GACpBt/B,EAAMzJ,OAAS,KAEK,UAAhB+oC,IAA4Bt/B,EAAM4kN,UACpC,OAGF5kN,EAAM4kN,WAAY,EAClB,IAAIruN,EAAS0oH,EAAMwkF,cACfkhB,GACFA,EAAW,CACT5rN,KAAM,kBACNxC,cACA+oC,IAIAolL,GACFA,GAAc,GAGhBG,GAAW,EAAM,EAGfC,EAA4B,CAAC,EAmCjC,MAjC4B,qBAAjBtH,cACTsH,EAAWG,eAAkBprN,IACvBsqN,IAAqD,UAAlBtqN,EAAEylC,aAIzC0lL,EAAkBnrN,EAAGA,EAAEylC,YAAY,EAGrCwlL,EAAWI,eAAkBrrN,KACtBwzM,GAAcxzM,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,SAC5CwuN,EAAgBlrN,EAAGA,EAAEylC,YAAY,IAIrCwlL,EAAWtlF,aAAe,KACxBx/H,EAAMq7M,2BAA4B,CAAI,EAGxCyJ,EAAWvjB,aAAgB1nM,IACpBmG,EAAMq7M,2BAA8B8I,IACvCa,EAAkBnrN,EAAG,SAGvBmG,EAAMq7M,2BAA4B,CAAK,EAGzCyJ,EAAWzjB,aAAgBxnM,KACpBwzM,GAAcxzM,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,SAC5CwuN,EAAgBlrN,EAAG,WAIlB,YAACirN,kBAAYC,EAAgB,GACnC,CAACN,EAAcC,EAAeC,EAAYtX,EAAYrtM,IAWzD,OATA,EAAA2+M,EAAAA,YAAU,KAGJtR,GACF0X,EAAgB,CAACthB,cAAezjM,EAAMzJ,QAASyJ,EAAMs/B,YAAY,GAGlE,CAAC+tK,IAEG,YACLyX,YACAF,EAEJ,CC7KO,SAASO,GAAmB5tN,GACjC,IAAIH,IAACA,EAAGguN,kBAAEA,EAAiB/X,WAAEA,EAAUgY,uBAAEA,GAA0B9tN,EAC/D8oN,GAAW,EAAAjF,EAAAA,QAAO,CACpBkK,eAAe,EACfjK,2BAA2B,IAGzBoC,EAAgB5B,IAAgBhiN,IAC9BurN,GAAqBG,GAAa1rN,EAAGzC,KACnCiuN,GACFA,EAAuBxrN,GAEzBwmN,EAAS5/J,QAAQ6kK,eAAgB,EACnC,IAGEE,EAAyB3J,IAAgBhiN,IACvCurN,GACFA,EAAkBvrN,EAAA,KAItB,EAAA8kN,EAAAA,YAAU,KACR,IAAI3+M,EAAQqgN,EAAS5/J,QACrB,GAAI4sJ,EACF,OAGF,MAAMxyJ,EAAUzjD,EAAIqpD,QACdw4J,EAAiBC,GAAiBr+J,GAGxC,GAA4B,qBAAjB2iK,aAA8B,CACvC,IAAIM,EAAejkN,IACbmG,EAAMslN,eAAiBC,GAAa1rN,EAAGzC,IACzCouN,EAAuB3rN,GAEzBmG,EAAMslN,eAAgB,CAAK,EAO7B,OAHArM,EAAehvM,iBAAiB,cAAewzM,GAAe,GAC9DxE,EAAehvM,iBAAiB,YAAa6zM,GAAa,GAEnD,KACL7E,EAAevjF,oBAAoB,cAAe+nF,GAAe,GACjExE,EAAevjF,oBAAoB,YAAaooF,GAAa,EAAK,CAEtE,CAAO,CACL,IAAII,EAAarkN,IACXmG,EAAMq7M,0BACRr7M,EAAMq7M,2BAA4B,EACzBr7M,EAAMslN,eAAiBC,GAAa1rN,EAAGzC,IAChDouN,EAAuB3rN,GAEzBmG,EAAMslN,eAAgB,CAAK,EAGzB7lF,EAAc5lI,IAChBmG,EAAMq7M,2BAA4B,EAC9Br7M,EAAMslN,eAAiBC,GAAa1rN,EAAGzC,IACzCouN,EAAuB3rN,GAEzBmG,EAAMslN,eAAgB,CAAK,EAQ7B,OALArM,EAAehvM,iBAAiB,YAAawzM,GAAe,GAC5DxE,EAAehvM,iBAAiB,UAAWi0M,GAAW,GACtDjF,EAAehvM,iBAAiB,aAAcwzM,GAAe,GAC7DxE,EAAehvM,iBAAiB,WAAYw1H,GAAY,GAEjD,KACLw5E,EAAevjF,oBAAoB,YAAa+nF,GAAe,GAC/DxE,EAAevjF,oBAAoB,UAAWwoF,GAAW,GACzDjF,EAAevjF,oBAAoB,aAAc+nF,GAAe,GAChExE,EAAevjF,oBAAoB,WAAY+J,GAAY,EAAK,CAEpE,IACC,CAACroI,EAAKi2M,EAAYoQ,EAAe+H,GACtC,CAEA,SAASD,GAAatmG,EAAO7nH,GAC3B,GAAI6nH,EAAMyzD,OAAS,EACjB,OAAO,EAGT,GAAIzzD,EAAM1oH,OAAQ,CAEhB,MAAMszL,EAAgB5qE,EAAM1oH,OAAOszL,cACnC,IAAKA,IAAkBA,EAAcpoL,gBAAgB8jD,SAAS05D,EAAM1oH,QAClE,OAAO,EAIT,GAAI0oH,EAAM1oH,OAAOurM,QAAQ,+BACvB,OAAO,CAEX,CAEA,OAAO1qM,EAAIqpD,UAAYrpD,EAAIqpD,QAAQ8E,SAAS05D,EAAM1oH,OACpD,CClHO,SAASkvN,GAA6CzxE,GAC3D,IAAKA,EACH,OAGF,IAAI6lE,GAAwB,EAC5B,OAAQhgN,IACN,IAAIolH,EAAsB,IACrBplH,EACH88H,cAAAA,GACE98H,EAAE88H,gBACJ,EACAopF,mBAAkB,IACTlmN,EAAEkmN,qBAEXnD,eAAAA,GACEl8M,QAAQ2C,MAAM,uIAChB,EACAu2M,mBAAAA,GACEC,GAAwB,CAC1B,GAGF7lE,EAAQ/0B,GAEJ46F,GACFhgN,EAAE+iN,iBAAiB,CAGzB,CCnBO,SAAS8I,GAAYnuN,GAC1B,MAAO,CACLouN,cAAepuN,EAAM81M,WAAa,CAAC,EAAI,CACrCn6D,UAAWuyE,GAAmBluN,EAAM27I,WACpCypE,QAAS8I,GAAmBluN,EAAMolN,UAGxC,CCcA,MAAMiJ,GAAoB,IAMnB,SAASC,GAAatuN,GAC3B,IAAI81M,WACFA,EAAUyY,iBACVA,EAAgBC,eAChBA,EAAcC,YACdA,EAAW,UACXx1G,EAAYo1G,GAAAK,yBACZA,GACE1uN,EAEJ,MAAM2uN,GAAU,EAAA9K,EAAAA,UAChB,IAAI/G,kBAACA,EAAiBE,qBAAEA,GAAwBoH,MAE5CQ,WAACA,GAAcjC,GAAS,YAC1B7M,EACAgN,YAAAA,CAAaxgN,GAEX,GADAA,EAAE+/M,uBACoB,UAAlB//M,EAAEylC,aAA6C,UAAlBzlC,EAAEylC,eAC7BwmL,GACFA,EAAiB,IACZjsN,EACHd,KAAM,mBAIVmtN,EAAQzlK,QAAU72C,YAAW,KAE3B/P,EAAEtD,OAAO+8M,cAAc,IAAIkK,aAAa,gBAAiB,CAACpK,SAAS,KAC/D4S,GACFA,EAAY,IACPnsN,EACHd,KAAM,cAGVmtN,EAAQzlK,aAAUpnD,CAAA,GACjBm3G,GAGmB,UAAlB32G,EAAEylC,aAAyB,CAC7B,IAAI6mL,EAAgBtsN,IAClBA,EAAE88H,gBAAgB,EAGpB09E,EAAkBx6M,EAAEtD,OAAQ,cAAe4vN,EAAe,CAACtsI,MAAM,IACjEw6H,EAAkBj6M,OAAQ,aAAa,KAGrCwP,YAAW,KACT2qM,EAAqB16M,EAAEtD,OAAQ,cAAe4vN,EAAA,GAC7C,GAAG,GACL,CAACtsI,MAAM,GACZ,CAEJ,EACAygI,UAAAA,CAAWzgN,GACLqsN,EAAQzlK,SACVyT,aAAagyJ,EAAQzlK,UAGnBslK,GAAqC,UAAlBlsN,EAAEylC,aAA6C,UAAlBzlC,EAAEylC,aACpDymL,EAAe,IACVlsN,EACHd,KAAM,gBAGZ,IAKF,MAAO,CACLqtN,eAAgBrL,GAAWoB,EAHNkK,GAAeL,IAAgB3Y,EAAa4Y,OAA2B5sN,IAKhG,CC5GO,SAASitN,GAAYzrK,GAM1B,MAAMgvI,EAAgB08B,GAAiB1rK,GACvC,GAAiC,YAA7B2rK,KAAwC,CAC1C,IAAIC,EAAqB58B,EAAcv9C,cACvCo6E,IAAmB,KAEb78B,EAAcv9C,gBAAkBm6E,GAAsB5rK,EAAQ8rK,aAChEC,GAAsB/rK,EAAA,GAG5B,MACE+rK,GAAsB/rK,EAE1B,CCqBO,SAASgsK,GAAiBhsK,EAAkBisK,GACjD,MACuB,aAArBjsK,EAAQswI,UA/CZ,SAAwBtwI,GACtB,MAAM6nK,EAAeqE,GAAelsK,GACpC,KAAMA,aAAmB6nK,EAAarmN,gBAAkBw+C,aAAmB6nK,EAAatJ,YACtF,OAAO,EAGT,IAAIh+E,QAACA,EAAO5B,WAAEA,GAAc3+E,EAAQjiD,MAEhCouN,EACU,SAAZ5rF,GACe,WAAf5B,GACe,aAAfA,EAGF,GAAIwtF,EAAW,CACb,MAAM7qF,iBAACA,GAAoBthF,EAAQgvI,cAAcnkB,YACjD,IAAKtqC,QAAS6rF,EAAiBztF,WAAY0tF,GAAsB/qF,EAAiBthF,GAElFmsK,EACsB,SAApBC,GACuB,WAAvBC,GACuB,aAAvBA,CAEJ,CAEA,OAAOF,CACT,CAsBIG,CAAetsK,IApBnB,SAA4BA,EAAkBisK,GAC5C,OACGjsK,EAAQg4J,aAAa,YACA,YAArBh4J,EAAQswI,WACP27B,GAC0B,YAA1BA,EAAa37B,UACXtwI,EAAQg4J,aAAa,QAG7B,CAYIuU,CAAmBvsK,EAASisK,MAC1BjsK,EAAQ6lF,eAAiBmmF,GAAiBhsK,EAAQ6lF,cAAe7lF,GAEvE,CCAA,MAAMwsK,GAAeC,EAAM7nC,cAAoC,MAE/D,IAAI8nC,GAAwB,KAYrB,SAASC,GAAWjwN,GACzB,IAAI8+G,SAACA,EAAQ62E,QAAEA,EAAOu6B,aAAEA,EAAYr5E,UAAEA,GAAa72I,EAC/CmwN,GAAW,EAAAC,EAAAA,QAAwB,MACnCC,GAAS,EAAAD,EAAAA,QAAwB,MACjCE,GAAW,EAAAF,EAAAA,QAAkB,KAC7BnmF,WAACA,IAAc,EAAAsmF,EAAAA,YAAWT,KAAiB,CAAC,EAG5ClhM,GAAO,EAAA4hM,EAAAA,UAAQ,IAAM,IAAIC,GAAS,UAACH,KAAY,CAACA,IAEpDI,IAAgB,KAKd,IAAI5jM,EAASm9G,GAAc0mF,GAAeh7L,KAC1C,GAAIg7L,GAAeC,YAAY9jM,EAAOwjM,WAAaN,KAAgBa,GAAgBb,GAAaljM,EAAOwjM,UAAW,CAChH,IAAIQ,EAAaH,GAAeC,YAAYZ,IACxCc,IACFhkM,EAASgkM,EAEb,CAGAhkM,EAAOikM,SAASniM,GAChB+hM,GAAepmE,QAAQ37H,EAAA,GACtB,CAACA,EAAMq7G,IAEVymF,IAAgB,KACd,IAAI9hM,EAAO+hM,GAAeC,YAAYN,GAClC1hM,IACFA,EAAK+mK,UAAYA,EAAA,GAElB,CAACA,IAEJ+6B,IAAgB,SAEHM,EAAX,IAAIpiM,EAAuB,QAAhBoiM,EAAAb,EAASjnK,eAAT,IAAA8nK,OAAA,EAAAA,EAAkBC,YACzBxmM,EAAmB,GACvB,KAAOmE,GAAQA,IAASyhM,EAAOnnK,SAC7Bz+B,EAAMlkB,KAAKqoB,GACXA,EAAOA,EAAKqiM,YAGdX,EAASpnK,QAAUz+B,CAAA,GAClB,CAACq0F,IAuXN,SAA+BwxG,EAAgCY,EAAmBv7B,GAGhF+6B,IAAgB,KACd,GAAIQ,GAAWv7B,EACb,OAGF,IAAIjkK,EAAQ4+L,EAASpnK,QACrB,MAAMopI,EAAgB08B,GAAiBt9L,EAAQA,EAAM,QAAK5vB,GAE1D,IAAI+nN,EAAWvnN,IACb,IAAItD,EAASsD,EAAEtD,OACXmyN,GAAiBnyN,EAAQsxN,EAASpnK,SACpC8mK,GAAcM,EACJc,GAAoBpyN,KAC9BgxN,GAAc,KAAI,EAMtB,OAFA19B,EAAc5/K,iBAAiB,UAAWm3M,GAAS,GACnD,OAAAn4L,QAAA,IAAAA,GAAAA,EAAOpqB,SAAQg8C,GAAWA,EAAQ5wC,iBAAiB,UAAWm3M,GAAS,KAChE,KACLv3B,EAAcn0D,oBAAoB,UAAW0rF,GAAS,GACtD,OAAAn4L,QAAA,IAAAA,GAAAA,EAAOpqB,SAAQg8C,GAAWA,EAAQ66E,oBAAoB,UAAW0rF,GAAS,IAAO,CAClF,GACA,CAACyG,EAAUY,EAASv7B,GACzB,CAhZE07B,CAAsBf,EAAUJ,EAAcv6B,GA0KhD,SAA6B26B,EAAgC36B,GAC3D,IAAI27B,GAAc,EAAAlB,EAAAA,UAEd/4F,GAAM,EAAA+4F,EAAAA,UACVM,IAAgB,KACd,IAAIh/L,EAAQ4+L,EAASpnK,QACrB,IAAKysI,EAMH,YAJIt+D,EAAInuE,UACN2uE,qBAAqBR,EAAInuE,SACzBmuE,EAAInuE,aAAUpnD,IAKlB,MAAMwwL,EAAgB08B,GAAiBt9L,EAAQA,EAAM,QAAK5vB,GAG1D,IAAI65I,EAAar5I,IACf,GAAc,QAAVA,EAAEjD,KAAiBiD,EAAE+4K,QAAU/4K,EAAEg5K,SAAWh5K,EAAE84K,UAAYm2C,GAAmBjB,GAC/E,OAGF,IAAIkB,EAAiBl/B,EAAcv9C,cAC/BrjH,EAAQ4+L,EAASpnK,QACrB,IAAKx3B,IAAUy/L,GAAiBK,EAAgB9/L,GAC9C,OAGF,IACI+/L,EAASC,GADGC,GAAajgM,GACkB,CAACkgM,UAAU,GAAOlgM,GACjE,IAAK8/L,EACH,OAEFC,EAAOh8B,YAAc+7B,EACrB,IAAIK,EAAevvN,EAAEi5K,SAAWk2C,EAAOK,eAAiBL,EAAOM,WAC1DF,IACHJ,EAAOh8B,YAAcnzL,EAAEi5K,SAAW7pJ,EAAMA,EAAMvyB,OAAS,GAAGitI,mBAAsB16G,EAAM,GAAGsgM,uBACzFH,EAAevvN,EAAEi5K,SAAWk2C,EAAOK,eAAiBL,EAAOM,YAG7DzvN,EAAE88H,iBACEyyF,GACFI,GAAaJ,GAAa,EAAK,EAI/BhI,EAAWvnN,IAGP0tN,KAAea,GAAgBb,GAAaM,KAAca,GAAiB7uN,EAAEtD,OAAQsxN,EAASpnK,SAGzFqoK,GAAmBjB,KAAc4B,GAAsB5vN,EAAEtD,OAAQsxN,GAGtEgB,EAAYpoK,QACdooK,EAAYpoK,QAAQ4uF,QACXk4E,IAAeA,GAAY9mK,SACpCipK,GAAkBnC,GAAY9mK,SAEvBqoK,GAAmBjB,KAC5BgB,EAAYpoK,QAAU5mD,EAAEtD,SAXxBgxN,GAAcM,EACdgB,EAAYpoK,QAAU5mD,EAAEtD,OAUM,EAI9B6pN,EAAUvmN,IAER+0H,EAAInuE,SACN2uE,qBAAqBR,EAAInuE,SAE3BmuE,EAAInuE,QAAU0uE,uBAAsB,SAM9Bw6F,EAJA9/B,EAAcv9C,eAAiBw8E,GAAmBjB,KAAc4B,GAAsB5/B,EAAcv9C,cAAeu7E,KACrHN,GAAcM,EACVh+B,EAAc7lL,KAAKuhD,SAAS1rD,EAAEtD,SAChCsyN,EAAYpoK,QAAU5mD,EAAEtD,OACL,QAAnBozN,EAAAd,EAAYpoK,eAAZ,IAAAkpK,GAAAA,EAAqBt6E,SACZk4E,GAAY9mK,SACrBipK,GAAkBnC,GAAY9mK,SAElC,GACA,EAOJ,OAJAopI,EAAc5/K,iBAAiB,UAAWipI,GAAW,GACrD22C,EAAc5/K,iBAAiB,UAAWm3M,GAAS,GACnD,OAAAn4L,QAAA,IAAAA,GAAAA,EAAOpqB,SAAQg8C,GAAWA,EAAQ5wC,iBAAiB,UAAWm3M,GAAS,KACvE,OAAAn4L,QAAA,IAAAA,GAAAA,EAAOpqB,SAAQg8C,GAAWA,EAAQ5wC,iBAAiB,WAAYm2M,GAAQ,KAChE,KACLv2B,EAAcn0D,oBAAoB,UAAWwd,GAAW,GACxD22C,EAAcn0D,oBAAoB,UAAW0rF,GAAS,GACtD,OAAAn4L,QAAA,IAAAA,GAAAA,EAAOpqB,SAAQg8C,GAAWA,EAAQ66E,oBAAoB,UAAW0rF,GAAS,KAC1E,OAAAn4L,QAAA,IAAAA,GAAAA,EAAOpqB,SAAQg8C,GAAWA,EAAQ66E,oBAAoB,WAAY0qF,GAAQ,IAAO,CAClF,GACA,CAACyH,EAAU36B,IAId+6B,IAAgB,IACP,KACDr5F,EAAInuE,SACN2uE,qBAAqBR,EAAInuE,QAAQ,GAGpC,CAACmuE,GACN,CAnREg7F,CAAoB/B,EAAU36B,GA8ZhC,SAAyB26B,EAAgCJ,EAAwBv6B,GAG/E,MAAM28B,GAAmB,EAAAlC,EAAAA,QAA2B,qBAAb1rN,SAA2BsqN,GAAiBsB,EAASpnK,QAAUonK,EAASpnK,QAAQ,QAAKpnD,GAAWizI,cAAoC,MAI3K27E,IAAgB,KACd,IAAIh/L,EAAQ4+L,EAASpnK,QACrB,MAAMopI,EAAgB08B,GAAiBt9L,EAAQA,EAAM,QAAK5vB,GAC1D,IAAKouN,GAAgBv6B,EACnB,OAGF,IAAIk0B,EAAUA,KAGNmG,KAAea,GAAgBb,GAAaM,KAClDa,GAAiB7+B,EAAcv9C,cAAeu7E,EAASpnK,WAErD8mK,GAAcM,EAAA,EAMlB,OAFAh+B,EAAc5/K,iBAAiB,UAAWm3M,GAAS,GACnD,OAAAn4L,QAAA,IAAAA,GAAAA,EAAOpqB,SAAQg8C,GAAWA,EAAQ5wC,iBAAiB,UAAWm3M,GAAS,KAChE,KACLv3B,EAAcn0D,oBAAoB,UAAW0rF,GAAS,GACtD,OAAAn4L,QAAA,IAAAA,GAAAA,EAAOpqB,SAAQg8C,GAAWA,EAAQ66E,oBAAoB,UAAW0rF,GAAS,IAAO,CAClF,GAEA,CAACyG,EAAU36B,IAEd+6B,IAAgB,KACd,MAAMp+B,EAAgB08B,GAAiBsB,EAASpnK,QAAUonK,EAASpnK,QAAQ,QAAKpnD,GAEhF,IAAKouN,EACH,OAOF,IAAIv0E,EAAar5I,IACf,GAAc,QAAVA,EAAEjD,KAAiBiD,EAAE+4K,QAAU/4K,EAAEg5K,SAAWh5K,EAAE84K,UAAYm2C,GAAmBjB,GAC/E,OAGF,IAAIkB,EAAiBl/B,EAAcv9C,cACnC,IAAKo8E,GAAiBK,EAAgBlB,EAASpnK,SAC7C,OAEF,IAAIqpK,EAAW5B,GAAeC,YAAYN,GAC1C,IAAKiC,EACH,OAEF,IAAIC,EAAgBD,EAASC,cAGzBf,EAASC,GAAuBp/B,EAAc7lL,KAAM,CAACmlN,UAAU,IAGnEH,EAAOh8B,YAAc+7B,EACrB,IAAIK,EAAevvN,EAAEi5K,SAAWk2C,EAAOK,eAAiBL,EAAOM,WAS/D,GAPKS,GAAkBlgC,EAAc7lL,KAAKuhD,SAASwkK,IAAkBA,IAAkBlgC,EAAc7lL,OACnG+lN,OAAgB1wN,EAChBywN,EAASC,mBAAgB1wN,KAKrB+vN,IAAgBV,GAAiBU,EAAavB,EAASpnK,WAAaspK,EAAe,CACvFf,EAAOh8B,YAAc+8B,EAGrB,GACEX,EAAevvN,EAAEi5K,SAAWk2C,EAAOK,eAAiBL,EAAOM,iBACpDZ,GAAiBU,EAAavB,EAASpnK,UAEhD5mD,EAAE88H,iBACF98H,EAAE+iN,kBACEwM,EACFI,GAAaJ,GAAa,GAKrBT,GAAoBoB,GAGvBP,GAAaO,GAAe,GAF5BhB,EAAeiB,MAKrB,GAOF,OAJK98B,GACHrD,EAAc5/K,iBAAiB,UAAWipI,GAAW,GAGhD,KACAg6C,GACHrD,EAAcn0D,oBAAoB,UAAWwd,GAAW,EAAK,CAEhE,GACA,CAAC20E,EAAUJ,EAAcv6B,IAG5B+6B,IAAgB,KACd,MAAMp+B,EAAgB08B,GAAiBsB,EAASpnK,QAAUonK,EAASpnK,QAAQ,QAAKpnD,GAEhF,IAAKouN,EACH,OAGF,IAAIqC,EAAW5B,GAAeC,YAAYN,OAIjBoC,EAHzB,OAAKH,GAGLA,EAASC,cAAwC,QAAxBE,EAAAJ,EAAiBppK,eAAjB,IAAAwpK,EAAAA,OAA4B5wN,EAC9C,KACL,IAAIywN,EAAW5B,GAAeC,YAAYN,GAC1C,IAAKiC,EACH,OAEF,IAAIC,EAAgBD,EAASC,cAG7B,GACEtC,GACGsC,IAGDrB,GAAiB7+B,EAAcv9C,cAAeu7E,EAASpnK,UACnDopI,EAAcv9C,gBAAkBu9C,EAAc7lL,MArJ5D,SAA4B6jN,GAC1B,IAAI5+L,EAAQi/L,GAAeC,YAAYZ,IACvC,KAAOt+L,GAASA,EAAM4+L,WAAaA,GAAU,CAC3C,GAAI5+L,EAAM8gM,cACR,OAAO,EAGT9gM,EAAQA,EAAM5E,MAChB,CAEA,OAAO,OAAA4E,QAAA,IAAAA,OAAA,EAAAA,EAAO4+L,YAAaA,CAC7B,CA0IoEqC,CAAmBrC,IAE/E,CAEA,IAAIsC,EAAajC,GAAevuK,QAChCw1E,uBAAsB,KAEpB,GAAI06D,EAAcv9C,gBAAkBu9C,EAAc7lL,KAAM,CAEtD,IAAI8lN,EAAWK,EAAWhC,YAAYN,GACtC,KAAOiC,GAAU,CACf,GAAIA,EAASC,eAAiBD,EAASC,cAAcpD,YAEnD,YADA6C,GAAaM,EAASC,eAGxBD,EAAWA,EAASzlM,MACtB,CAKA,IADAylM,EAAWK,EAAWhC,YAAYN,GAC3BiC,GAAU,CACf,GAAIA,EAASjC,UAAYiC,EAASjC,SAASpnK,SAAWynK,GAAeC,YAAY2B,EAASjC,UAExF,YADA6B,GAAkBI,EAASjC,SAASpnK,SAAS,GAG/CqpK,EAAWA,EAASzlM,MACtB,CACF,IAEJ,SAhDF,CAiDC,GACA,CAACwjM,EAAUJ,GAChB,CAtkBE2C,CAAgBvC,EAAUJ,EAAcv6B,GAqW1C,SAAsB26B,EAAgCz5E,GACpD,MAAMi8E,EAAe/C,EAAM7lB,OAAOrzD,IAClC,EAAAk8E,EAAAA,YAAU,KACR,GAAID,EAAa5pK,QAAS,CACxB8mK,GAAcM,GAETa,GADiBnC,GAAiBsB,EAASpnK,QAAUonK,EAASpnK,QAAQ,QAAKpnD,GAC5CizI,cAAei7E,GAAY9mK,UAAYonK,EAASpnK,SAClFipK,GAAkB7B,EAASpnK,QAE/B,CACA4pK,EAAa5pK,SAAU,CAAK,GAC3B,CAAConK,GACN,CAhXE0C,CAAa1C,EAAUz5E,IAIvB,EAAAk8E,EAAAA,YAAU,KACR,MAAMh+E,EAAgBi6E,GAAiBsB,EAASpnK,QAAUonK,EAASpnK,QAAQ,QAAKpnD,GAAWizI,cAC3F,IAAIrjH,EAAyB,KAE7B,GAAIy/L,GAAiBp8E,EAAeu7E,EAASpnK,SAAU,CAGrD,IAAK,IAAIt6B,KAAQ+hM,GAAe52L,WAC1BnL,EAAK0hM,UAAYa,GAAiBp8E,EAAenmH,EAAK0hM,SAASpnK,WACjEx3B,EAAQ9C,GAIR8C,IAAUi/L,GAAeC,YAAYN,KACvCN,GAAct+L,EAAM4+L,SAExB,IACC,CAACA,IAIJI,IAAgB,IACP,SAEauC,EAAAC,EAAAC,EAAlB,IAAIC,EAAoE,QAAtDD,EAA2B,QAA3BD,EAAAvC,GAAeC,YAAYN,UAA3B,IAAA4C,GAA4C,QAA5CD,EAAAC,EAAsCpmM,cAAtC,IAAAmmM,OAAA,EAAAA,EAA8C3C,gBAA9C,IAAA6C,EAAAA,EAA0D,KAGzE7C,IAAaN,KAAea,GAAgBP,EAAUN,KACrDoD,IAAezC,GAAeC,YAAYwC,KAE5CpD,GAAcoD,GAEhBzC,GAAe0C,eAAe/C,EAAA,GAE/B,CAACA,IAEJ,IAAIgD,GAAe,EAAA9C,EAAAA,UAAQ,IAwB7B,SAAoCF,GAClC,MAAO,CACLiD,SAAAA,GAAwC,IAA9B1rN,EAAA3I,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA4B,CAAC,EACjCwyB,EAAQ4+L,EAASpnK,SACjB7jD,KAACA,EAAIusN,SAAEA,EAAQvtI,KAAEA,EAAImvI,OAAEA,GAAU3rN,EACjC+mB,EAAOvpB,GAAQ2pN,GAAiBt9L,EAAM,IAAIqjH,cAC1C0+E,EAAW/hM,EAAM,GAAGsgM,uBAEpBP,EAASC,GADGC,GAAajgM,GACkB,UAACkgM,SAAU4B,GAAS9hM,GACnE+/L,EAAOh8B,YAAc07B,GAAiBviM,EAAM8C,GAAS9C,EAAO6kM,EAC5D,IAAI1B,EAAWN,EAAOM,WAQtB,OAPKA,GAAY1tI,IACfotI,EAAOh8B,YAAcg+B,EACrB1B,EAAWN,EAAOM,YAEhBA,GACFE,GAAaF,GAAU,GAElBA,CACT,EACA2B,aAAAA,GAA4C,IAA9B7rN,EAAA3I,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA4B,CAAC,EACrCwyB,EAAQ4+L,EAASpnK,SACjB7jD,KAACA,EAAIusN,SAAEA,EAAQvtI,KAAEA,EAAImvI,OAAEA,GAAU3rN,EACjC+mB,EAAOvpB,GAAQ2pN,GAAiBt9L,EAAM,IAAIqjH,cAC1C0+E,EAAW/hM,EAAMA,EAAMvyB,OAAS,GAAGitI,mBAEnCqlF,EAASC,GADGC,GAAajgM,GACkB,UAACkgM,SAAU4B,GAAS9hM,GACnE+/L,EAAOh8B,YAAc07B,GAAiBviM,EAAM8C,GAAS9C,EAAO6kM,EAC5D,IAAI3B,EAAeL,EAAOK,eAQ1B,OAPKA,GAAgBztI,IACnBotI,EAAOh8B,YAAcg+B,EACrB3B,EAAeL,EAAOK,gBAEpBA,GACFG,GAAaH,GAAc,GAEtBA,CACT,EACA6B,UAAAA,GAAoB,IAAT9rN,EAAA3I,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAO,CAAC,EACbwyB,EAAQ4+L,EAASpnK,SACjB0oK,SAACA,EAAQ4B,OAAEA,GAAU3rN,EAErB4pN,EAASC,GADGC,GAAajgM,GACkB,UAACkgM,SAAU4B,GAAS9hM,GACnE+/L,EAAOh8B,YAAc/jK,EAAM,GAAGsgM,uBAC9B,IAAID,EAAWN,EAAOM,WAItB,OAHIA,GACFE,GAAaF,GAAU,GAElBA,CACT,EACA6B,SAAAA,GAAmB,IAAT/rN,EAAA3I,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAO,CAAC,EACZwyB,EAAQ4+L,EAASpnK,SACjB0oK,SAACA,EAAQ4B,OAAEA,GAAU3rN,EAErB4pN,EAASC,GADGC,GAAajgM,GACkB,UAACkgM,SAAU4B,GAAS9hM,GACnE+/L,EAAOh8B,YAAc/jK,EAAMA,EAAMvyB,OAAS,GAAGitI,mBAC7C,IAAI0lF,EAAeL,EAAOK,eAI1B,OAHIA,GACFG,GAAaH,GAAc,GAEtBA,CACT,EAEJ,CAvFmC+B,CAA2BvD,IAAW,IACnE1pN,GAAQ,EAAA4pN,EAAAA,UAAQ,KAAM,cACxB8C,EACArpF,WAAYr7G,KACV,CAACA,EAAM0kM,IAEX,OACEvD,EAAAr6F,cAACo6F,GAAan5C,SAAQ,CAAC/vK,MAAOA,GAC5BmpN,EAAAr6F,cAAC,QAAK,4BAAuB3Y,QAAA,EAAOl9G,IAAKswN,IACxCrxG,EACDixG,EAAAr6F,cAAC,QAAK,0BAAqB3Y,QAAA,EAAOl9G,IAAKwwN,IAG7C,CA4EA,MAAMyD,GAAoB,CACxB,2CACA,yBACA,2BACA,yBACA,UACA,aACA,UACA,SACA,SACA,QACA,kBACA,kBACA,qBAGIC,GAA6BD,GAAkBtqN,KAAK,mBAAqB,4CAE/EsqN,GAAkBvtN,KAAK,mDACvB,MAAMytN,GAA4BF,GAAkBtqN,KAAK,wCAEzD,SAASmoN,GAAajgM,GACpB,OAAOA,EAAM,GAAGy3G,aAClB,CAEA,SAASooF,GAAmBjB,GAC1B,IAAI5+L,EAAQi/L,GAAeC,YAAYZ,IACvC,KAAOt+L,GAASA,EAAM4+L,WAAaA,GAAU,CAC3C,GAAI5+L,EAAMikK,QACR,OAAO,EAGTjkK,EAAQA,EAAM5E,MAChB,CAEA,OAAO,CACT,CA8GA,SAASskM,GAAoB9tK,GAC3B,OAAO4uK,GAAsB5uK,EAC/B,CAEA,SAAS6tK,GAAiB7tK,EAA0B5xB,GAClD,QAAK4xB,MAGA5xB,GAGEA,EAAM3oB,MAAK6lB,GAAQA,EAAKo/B,SAAS1K,KAC1C,CAEA,SAAS4uK,GAAsB5uK,GAAwC,IAAtB5xB,EAAAxyB,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAkB,KAEjE,GAAIokD,aAAmB+kF,SAAW/kF,EAAQinJ,QAAQ,+BAChD,OAAO,EAKT,IAAK,IAAK+lB,SAAUhtN,KAAMqtN,GAAe52L,SAAS42L,GAAeC,YAAYl/L,IAC3E,GAAIpuB,GAAK6tN,GAAiB7tK,EAAShgD,EAAE4lD,SACnC,OAAO,EAIX,OAAO,CACT,CAOA,SAAS2nK,GAAgB/hE,EAAoBp9H,OAC9BwhM,EAAb,IAAIpmM,EAAoC,QAA3BomM,EAAAvC,GAAeC,YAAYl/L,UAA3B,IAAAwhM,OAAA,EAAAA,EAAmCpmM,OAChD,KAAOA,GAAQ,CACb,GAAIA,EAAOwjM,WAAaxhE,EACtB,OAAO,EAEThiI,EAASA,EAAOA,MAClB,CACA,OAAO,CACT,CAEA,SAASmlM,GAAa3uK,GACpB,GAAe,MAAXA,GADkDpkD,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,IAAAA,UAAA,IAO/C,GAAe,MAAXokD,EACT,IACEA,EAAQw0F,OACV,CAAE,MAAOnlH,GACP,OATF,IACEo8L,GAAYzrK,EACd,CAAE,MAAO3wB,GACP,CASN,CAEA,SAASw/L,GAAkBzgM,GAAyC,IAAvBkgM,IAAA1yN,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,KAAAA,UAAA,GACvCu0N,EAAW/hM,EAAM,GAAGsgM,uBACpBiC,EAAYtC,GAAajgM,GACzB+/L,EAASC,GAAuBuC,EAAW,UAACrC,GAAWlgM,GAC3D+/L,EAAOh8B,YAAcg+B,EACrB,IAAI1B,EAAWN,EAAOM,WAGlBH,IAAaG,IACfkC,EAAYtC,GAAajgM,GACzB+/L,EAASC,GAAuBuC,EAAW,CAACrC,UAAU,GAAQlgM,GAC9D+/L,EAAOh8B,YAAcg+B,EACrB1B,EAAWN,EAAOM,YAGpBE,GAAaF,EACf,CAyOO,SAASL,GAAuB/7L,EAAe9tB,EAA4B6pB,GAChF,IAAImuF,GAAW,OAAAh4G,QAAA,IAAAA,OAAA,EAAAA,EAAM+pN,UAAWoC,GAA4BD,GACxDtC,EAASzC,GAAiBr5L,GAAMu+L,iBAClCv+L,EACAw+L,WAAWC,aACX,CACEC,UAAAA,CAAWzlM,OAEL0lM,EAAJ,OAAI,OAAAzsN,QAAA,IAAAA,GAAU,QAAVysN,EAAAzsN,EAAMxC,YAAN,IAAAivN,OAAA,EAAAA,EAAYtmK,SAASp/B,IAChBulM,WAAWI,eAGhB3lM,EAAkB6Y,QAAQo4E,KACzByvG,GAAiB1gM,IACf8C,IAASy/L,GAAiBviM,EAAiB8C,KAC3C,OAAA7pB,QAAA,IAAAA,OAAA,EAAAA,EAAM2rN,UAAU3rN,EAAK2rN,OAAO5kM,GAK5BulM,WAAWK,YAHTL,WAAWM,aAItB,IAQJ,OAJI,OAAA5sN,QAAA,IAAAA,OAAA,EAAAA,EAAMxC,QACRosN,EAAOh8B,YAAc5tL,EAAKxC,MAGrBosN,CACT,CAsGA,MAAMiD,GASJ,QAAIt6J,GACF,OAAO16D,KAAKi1N,QAAQv6J,IACtB,CAEAw2J,WAAAA,CAAYrgN,GACV,OAAO7Q,KAAKi1N,QAAQpvN,IAAIgL,EAC1B,CAEAqkN,WAAAA,CAAYtE,EAAoBxjM,EAAkB0lM,GAChD,IAAIvoF,EAAavqI,KAAKi1N,QAAQpvN,IAAI,OAAAunB,QAAA,IAAAA,EAAAA,EAAU,MAC5C,IAAKm9G,EACH,OAEF,IAAIr7G,EAAO,IAAI6hM,GAAS,UAACH,IACzBrmF,EAAW8mF,SAASniM,GACpBA,EAAK9B,OAASm9G,EACdvqI,KAAKi1N,QAAQlvN,IAAI6qN,EAAU1hM,GACvB4jM,IACF5jM,EAAK4jM,cAAgBA,EAEzB,CAEAjoE,OAAAA,CAAQ37H,GACNlvB,KAAKi1N,QAAQlvN,IAAImpB,EAAK0hM,SAAU1hM,EAClC,CAEAykM,cAAAA,CAAe/C,GAEb,GAAiB,OAAbA,EACF,OAEF,IAAI1hM,EAAOlvB,KAAKi1N,QAAQpvN,IAAI+qN,GAC5B,IAAK1hM,EACH,OAEF,IAAIq7G,EAAar7G,EAAK9B,OAGtB,IAAK,IAAIo8B,KAAWxpD,KAAKq6B,WAErBmvB,IAAYt6B,GACZA,EAAK4jM,eACLtpK,EAAQspK,eACR5jM,EAAK0hM,UACL1hM,EAAK0hM,SAASpnK,SACdioK,GAAiBjoK,EAAQspK,cAAe5jM,EAAK0hM,SAASpnK,WAEtDA,EAAQspK,cAAgB5jM,EAAK4jM,eAGjC,IAAI1zG,EAAWlwF,EAAKkwF,SAChBmrB,IACFA,EAAWrqB,YAAYhxF,GACnBkwF,EAAS1kD,KAAO,GAClB0kD,EAASx3G,SAAQy3G,GAASkrB,GAAcA,EAAW8mF,SAAShyG,MAIhEr/G,KAAKi1N,QAAQh8M,OAAOiW,EAAK0hM,SAC3B,CAGCv2L,QAAAA,GAAA,IAAAigG,EAAA,SAASprG,EAAA1vB,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAiBQ,KAAKi2B,KAAI,mBAIlC,GAHqB,MAAjB/G,EAAK0hM,iBACD1hM,GAEJA,EAAKkwF,SAAS1kD,KAAO,EACvB,IAAK,IAAI2kD,KAASnwF,EAAKkwF,eACdkb,EAAKjgG,SAASglF,EAG3B,CAToC,EASpC,CAEA38D,KAAAA,OAGuCyyK,EAFrC,IAAIC,EAAU,IAAIJ,OAEmBK,EADrC,IAAK,IAAInmM,KAAQlvB,KAAKq6B,WACpB+6L,EAAQF,YAAYhmM,EAAK0hM,SAA+B,QAArByE,EAAW,QAAXF,EAAAjmM,EAAK9B,cAAL,IAAA+nM,OAAA,EAAAA,EAAavE,gBAAb,IAAAyE,EAAAA,EAAyB,KAAMnmM,EAAK4jM,eAEzE,OAAOsC,CACT,CApFAzpN,WAAAA,QAFQspN,QAAU,IAAIxxN,IAGpBzD,KAAKi2B,KAAO,IAAI86L,GAAS,CAACH,SAAU,OACpC5wN,KAAKi1N,QAAQlvN,IAAI,KAAM/F,KAAKi2B,KAC9B,EAoFF,MAAM86L,GAUJM,QAAAA,CAASniM,GACPlvB,KAAKo/G,SAASp5G,IAAIkpB,GAClBA,EAAK9B,OAASptB,IAChB,CACAkgH,WAAAA,CAAYhxF,GACVlvB,KAAKo/G,SAASnmG,OAAOiW,GACrBA,EAAK9B,YAAShrB,CAChB,CAVAuJ,WAAAA,CAAYrL,QAHL8+G,SAA0B,IAAIz7G,SAC9BsyL,SAAU,EAGfj2L,KAAK4wN,SAAWtwN,EAAMswN,QACxB,EAWK,IAAIK,GAAiB,IAAI+D,GC55BzB,SAASM,KAA2C,IAA9Bh1N,EAAAd,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA4B,CAAC,GACpD,UACF23I,GAAY,EAAAk1E,YACZA,EAAW9tB,OACXA,GACEj+L,EACAyI,GAAQ,EAAA2nN,EAAAA,QAAO,CACjBrH,WAAW,EACXkM,eAAgBp+E,GAAaq+E,QAE1BnM,EAAWoM,IAAc,EAAAC,EAAAA,WAAS,IAClCC,EAAqBC,IAAmB,EAAAF,EAAAA,WAAS,IAAM3sN,EAAMygD,QAAQ6/J,WAAatgN,EAAMygD,QAAQ+rK,iBAEjGM,GAAc,EAAAC,EAAAA,cAAY,IAAMF,EAAgB7sN,EAAMygD,QAAQ6/J,WAAatgN,EAAMygD,QAAQ+rK,iBAAiB,IAE1GjL,GAAgB,EAAAwL,EAAAA,cAAYzM,IAC9BtgN,EAAMygD,QAAQ6/J,UAAYA,EAC1BoM,EAAWpM,GACXwM,GAAA,GACC,CAACA,IAEJE,IAAyBR,IACvBxsN,EAAMygD,QAAQ+rK,eAAiBA,EAC/BM,GAAA,GACC,GAAI,aAACxJ,IAER,IAAI7B,WAACA,GAAcwL,GAAS,CAC1B5f,WAAY7X,gBACZ+rB,KAGE2C,iBAACA,GAAoBgJ,GAAe,CACtC7f,YAAa7X,EACbwuB,oBAAqBzC,IAGvB,MAAO,WACLjB,EACAkM,eAAgBI,EAChBnL,WAAYjsB,EAAS0uB,EAAmBzC,EAE5C,CC7CA,IAAI0L,GAAmB7F,EAAM7nC,cAA4C,MAwClE,SAAS2tC,GAAa71N,EAAyB81N,GACpD,IAAI5L,WAACA,GAAcwL,GAAS11N,IACxBouN,cAACA,GAAiB2H,GAAY/1N,GAC9Bg2N,EAAeC,GAAW/L,EAAYkE,GACtC9K,EA1CN,SAA6BzjN,GAC3B,IAAIyL,GAAU,EAAAilN,EAAAA,YAAWqF,KAAqB,CAAC,EAC/CM,GAAW5qN,EAASzL,GAGpB,IAAKA,IAAK0E,KAAM4xN,GAAc7qN,EAC9B,OAAO6qN,CACT,CAmCiBC,CAAoBN,GAC/BO,EAAmBr2N,EAAM81M,WAAa,CAAC,EAAIwN,EAC3CwP,GAAe,EAAA1C,EAAAA,QAAOpwN,EAAM62I,WAShC,OAPA,EAAAk8E,EAAAA,YAAU,KACJD,EAAa5pK,SAAW4sK,EAAO5sK,SACjC6lK,GAAY+G,EAAO5sK,SAErB4pK,EAAa5pK,SAAU,CAAK,GAC3B,CAAC4sK,IAEG,CACLQ,eAAgBL,GACd,IACKD,EACHr7E,SAAU36I,EAAMu2N,sBAAwBv2N,EAAM81M,YAAc,OAAIh0M,GAElEu0N,GAGN,CCvDO,SAASG,GAAQx2N,EAAwBH,GAC9C,IAAI,YACF+2H,EAAc,IAAAgsF,QACdA,EAAOE,aACPA,EAAYC,WACZA,EAEAxqE,QAASk+E,EAAiB3gB,WAC1BA,KACGqgB,GACDn2N,EAEA02N,EAA2B,CAAC,EACZ,MAAhB9/F,IACF8/F,EAAY,CACV96E,KAAM,OACNjB,SAAWm7D,OAAiBh0M,EAAJ,IAG5B,IAAIw0N,eAACA,GAAkBK,GAAa32N,EAAOH,IACvC+kN,WAACA,EAAU3B,UAAEA,GAAa2T,GAAS,SAAChU,eAASE,aAAcC,aAAYjN,MAAYj2M,IACnFyjN,EAAWuT,GAAeV,EAAY,CAAC3c,WAAW,EAAMC,OAAwB,MAAhB7iF,IAChEkgG,EAAsBC,GAAWT,EAAgB1R,GACjD7vC,EAASiiD,KAEb,MAAO,WACL/T,EACAyT,UAAWK,GAAWzT,EAAU,IAC3BwT,KACAJ,EACH,gBAAiB5gB,QAAch0M,EAC/B,eAAgB9B,EAAM,gBACtBu4I,QAAUj2I,QACR20N,EAAkB,QAAlBA,EAAArS,EAAWrsE,eAAX,IAAA0+E,GAAAA,EAAAz3N,KAAAolN,EAAqBtiN,GACjBm0N,IACFA,EAAkBn0N,GAClB6G,QAAQyC,KAAK,+CAKZmpK,EAAO5uF,UACR7jF,EAAE4pM,yBAAyB8P,mBAC3B15M,EAAE4pM,cAAc/kD,OAEf7kJ,EAAEkmN,sBACH0O,GAAqB50N,EAAE4pM,cAAe5pM,KAEtCA,EAAE88H,iBACF21C,EAAO9mD,KAAK3rH,EAAE4pM,cAAe5pM,GAC/B,IAIR,CC/CO,SAAS60N,GAAUn3N,EAAuCH,GAC/D,IAmBIu3N,GAnBA,YACFxgG,EAAc,SAAAk/E,WACdA,EAAU8M,QACVA,EAAOE,aACPA,EAAYC,WACZA,EAAUC,UACVA,EAASH,cACTA,EAAaM,oBAEbA,EAAmBkU,uBAEnBA,EAEA9+E,QAASk+E,EAAiBtvE,KAC1BA,EAAInoJ,OACJA,EAAMi9M,IACNA,EAAG,KACHz6M,EAAO,UACLxB,EAGFo3N,EADkB,WAAhBxgG,EACgB,MAChBp1H,EACA08I,SAAU43D,GAGM,CAChBl6D,KAAM,SACNjB,SAAUm7D,OAAah0M,EAAY,EACnCqlJ,KAAsB,MAAhBvwB,GAAuBk/E,OAAah0M,EAAYqlJ,EACtDnoJ,OAAwB,MAAhB43H,EAAsB53H,OAAS8C,EACvCN,KAAsB,UAAhBo1H,EAA0Bp1H,OAAOM,EACvCo8I,SAA0B,UAAhBtnB,EAA0Bk/E,OAAah0M,EACjD,gBAAkBg0M,GAA8B,UAAhBl/E,EAAsCk/E,OAAZh0M,EAC1Dm6M,IAAqB,MAAhBrlF,EAAsBqlF,OAAMn6M,GAIrC,IAAI8iN,WAACA,EAAU3B,UAAEA,GAAaqU,GAAS,cACrCxU,aACAC,gBACAF,UACAD,YACAI,aACAlN,sBACAqN,MACAtjN,KAGEy2N,eAACA,GAAkBiB,GAAav3N,EAAOH,GACvCw3N,IACFf,EAAe37E,SAAWm7D,GAAc,EAAIwgB,EAAe37E,UAE7D,IAAI68E,EAAcC,GAAWnB,EAAgB1R,EAAY8S,GAAe13N,EAAO,CAACw5M,WAAW,KAE3F,MAAO,WACLyJ,EACAuU,YAAaC,GAAWL,EAAiBI,EAAa,CACpD,gBAAiBx3N,EAAM,iBACvB,gBAAiBA,EAAM,iBACvB,gBAAiBA,EAAM,iBACvB,eAAgBA,EAAM,gBACtBu4I,QAAUj2I,IACJm0N,IACFA,EAAkBn0N,GAClB6G,QAAQyC,KAAK,6CACf,IAIR,CCpFO,SAAS+rN,GAAa33N,GAC3B,IACI43N,EADAtU,EAAWuU,GAAe73N,EAAO,CAACw5M,WAAW,IAQjD,MAJ0B,aAAtBx5M,EAAM83N,cACRF,EAAkB,YAGM,OAAtB53N,EAAM42H,YACD,CACLmhG,eAAgB,IACXzU,EACH1nE,KAAM,YACN,mBAAoBg8E,IAInB,CAACG,eAAgBzU,EAC1B,CCpCA,MAAM0U,GAAe/0N,OAAO8rB,IAAI,0BAC1BkpM,GAAgBh1N,OAAO8rB,IAAI,2BACjC,IAAImpM,GAMG,MAAMC,GAWXC,kBAAAA,CAAmB/4N,EAAQgtF,GACzB,IACIrwD,EADUt8B,KAAK24N,oBAAoBhsI,GAClBhtF,GACrB,IAAK28B,EACH,MAAM,IAAIluB,MAAO,+BAA8BzO,QAAUgtF,YAG3D,OAAOrwD,CACT,CAGAq8L,mBAAAA,CAAoBhsI,GAClB,IAAIisI,EAAU54N,KAAK44N,QAAQjsI,GAM3B,OALKisI,IACHA,EAkCN,SAA0EjsI,EAAgBisI,GAAwD,IAAvBC,EAAAr5N,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAgB,QAEzI,GAAIo5N,EAAQjsI,GACV,OAAOisI,EAAQjsI,GAQjB,IAAI62F,EAeN,SAAqB72F,GAEnB,OAAIw1F,KAAK5xF,OAEA,IAAI4xF,KAAK5xF,OAAO5D,GAAQ62F,SAG1B72F,EAAOhlF,MAAM,KAAK,EAC3B,CAvBiBmxN,CAAYnsI,GAC3B,GAAIisI,EAAQp1C,GACV,OAAOo1C,EAAQp1C,GAGjB,IAAK,IAAI7jL,KAAOi5N,EACd,GAAIj5N,EAAIsxC,WAAWuyI,EAAW,KAC5B,OAAOo1C,EAAQj5N,GAKnB,OAAOi5N,EAAQC,EACjB,CA1DgBE,CAAoBpsI,EAAQ3sF,KAAK44N,QAAS54N,KAAK64N,eACzD74N,KAAK44N,QAAQjsI,GAAUisI,GAGlBA,CACT,CAEA,oCAAOI,CAA6FC,GAClG,GAAsB,qBAAX91N,OACT,OAAO,KAGT,IAAIwpF,EAASxpF,OAAOm1N,IACpB,QAA4Bl2N,IAAxBo2N,GAAmC,CACrC,IAAIU,EAAgB/1N,OAAOo1N,IAC3B,IAAKW,EACH,OAAO,KAGTV,GAAsB,CAAC,EACvB,IAAK,IAAIW,KAAOD,EACdV,GAAoBW,GAAO,IAAIV,GAA0B,CAAC,CAAC9rI,GAASusI,EAAcC,IAAOxsI,EAE7F,CAEA,IAAIysI,EAAa,OAAAZ,SAAA,IAAAA,QAAA,EAAAA,GAAsBS,GACvC,IAAKG,EACH,MAAM,IAAIhrN,MAAO,wBAAuB6qN,yHAG1C,OAAOG,CACT,CApDAztN,WAAAA,CAAYypB,GAAmE,IAAjCyjM,EAAAr5N,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAwB,QAEpEQ,KAAK44N,QAAU,IAAIxjM,GACnBp1B,KAAK64N,cAAgBA,CACvB,EChBF,MAAMQ,GAAmB,IAAI51N,IACvB61N,GAAoB,IAAI71N,IAMvB,MAAM81N,GAUXzuL,MAAAA,CAAOnrC,EAAQ65N,GACb,IAAI9lM,EAAU1zB,KAAK44N,QAAQF,mBAAmB/4N,EAAKK,KAAK2sF,QACxD,MAA0B,oBAAZj5D,EAAyBA,EAAQ8lM,EAAWx5N,MAAQ0zB,CACpE,CAEU+lM,MAAAA,CAAO9+L,EAAe0W,GAAiF,IAAxCvvC,EAAAtC,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA4B,WAC/F8xC,EAAMD,EAAQ,IAAM1W,GACxB,GAAI2W,EACF,MAAsB,oBAARA,EAAqBA,IAAQA,EAG7C,IAAI3xC,EAAMK,KAAK2sF,OAAS,IAAM7qF,EAC1B43N,EAAcL,GAAiBxzN,IAAIlG,GAQvC,OAPK+5N,IACHA,EAAc,IAAIv3C,KAAKw3C,YAAY35N,KAAK2sF,OAAQ,MAAC7qF,IACjDu3N,GAAiBtzN,IAAIpG,EAAK+5N,IAI5BpoL,EAAMD,EADSqoL,EAAYE,OAAOj/L,KACP0W,EAAQg2B,MACb,oBAAR/1B,EAAqBA,IAAQA,CAC7C,CAEUlV,MAAAA,CAAOl1B,GACf,IAAI2yN,EAAeP,GAAkBzzN,IAAI7F,KAAK2sF,QAK9C,OAJKktI,IACHA,EAAe,IAAI13C,KAAKC,aAAapiL,KAAK2sF,QAC1C2sI,GAAkBvzN,IAAI/F,KAAK2sF,OAAQktI,IAE9BA,EAAa/uL,OAAO5jC,EAC7B,CAEU0yN,MAAAA,CAAOvoL,EAAyCnqC,GACxD,IAAIoqC,EAAMD,EAAQnqC,IAAUmqC,EAAQg2B,MACpC,MAAsB,oBAAR/1B,EAAqBA,IAAQA,CAC7C,CAzCA3lC,WAAAA,CAAYghF,EAAgBisI,GAC1B54N,KAAK2sF,OAASA,EACd3sF,KAAK44N,QAAUA,CACjB,ECnBF,MAAMkB,GAAc,IAAIn2N,IAAI,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,SAC/Fo2N,GAAY,IAAIp2N,IAAI,CAAC,KAAM,KAAM,MAAO,MAAO,MAAO,MAAO,KAAM,KAAM,MAAO,KAAM,KAAM,MAAO,MAAO,MAAO,KAAM,KAAM,KAAM,KAAM,OAKxI,SAASq2N,GAAMC,GAGpB,GAAI93C,KAAK5xF,OAAQ,CACf,IAAI5D,EAAS,IAAIw1F,KAAK5xF,OAAO0pI,GAAcC,WAKvCC,EAAyC,oBAAvBxtI,EAAOytI,YAA6BztI,EAAOytI,cAAgBztI,EAAOwtI,SACxF,GAAIA,EACF,MAA8B,QAAvBA,EAASnsH,UAKlB,GAAIrhB,EAAOs/E,OACT,OAAO6tD,GAAYh0N,IAAI6mF,EAAOs/E,OAElC,CAGA,IAAIh7D,EAAOgpH,EAAatyN,MAAM,KAAK,GACnC,OAAOoyN,GAAUj0N,IAAImrG,EACvB,CClBA,MAAMopH,GAAe92N,OAAO8rB,IAAI,0BAKzB,SAASirM,KACd,IAAI3tI,EAA2B,qBAAXxpF,QAA0BA,OAAOk3N,KAE1B,qBAAdp1N,YAA8BA,UAAUu+K,UAAYv+K,UAAUs1N,eACtE,QAEL,IAEEp4C,KAAKI,eAAei4C,mBAAmB,CAAC7tI,GAC1C,CAAE,MAAO8tI,GACP9tI,EAAS,OACX,CACA,MAAO,QACLA,EACAqhB,UAAWgsH,GAAMrtI,GAAU,MAAQ,MAEvC,CAEA,IAAI+tI,GAAgBJ,KAChBK,GAAY,IAAIh3N,IAEpB,SAASi3N,KACPF,GAAgBJ,KAChB,IAAK,IAAIxrD,KAAY6rD,GACnB7rD,EAAS4rD,GAEb,CAKO,SAASG,KACd,IAAIC,EAAQC,MACPlC,EAAemC,IAAoB,EAAAC,EAAAA,UAASP,IAmBjD,OAjBA,EAAAQ,EAAAA,YAAU,KACe,IAAnBP,GAAUjgK,MACZv3D,OAAO6P,iBAAiB,iBAAkB4nN,IAG5CD,GAAU30N,IAAIg1N,GAEP,KACLL,GAAU1hN,OAAO+hN,GACM,IAAnBL,GAAUjgK,MACZv3D,OAAOs7H,oBAAoB,iBAAkBm8F,GAAA,IAGhD,IAICE,EACK,CACLnuI,OAAQ,QACRqhB,UAAW,OAIR6qH,CACT,CCnEA,MAAMsC,GAAcC,EAAM5yC,cAA6B,MAwBhD,SAAS6yC,KACd,IAAIxC,EAAgBgC,KAEpB,OADc,EAAAS,EAAAA,YAAWH,KACPtC,CACpB,CCnCA,MAAM0C,GAAQ,IAAI13N,QAcX,SAAS23N,GAA4F5C,EAAiCK,GAC3I,OAAOA,GAAgBwC,GAA0BzC,8BAA8BC,IAdjF,SAA0EL,GACxE,IAAIQ,EAAamC,GAAM11N,IAAI+yN,GAM3B,OALKQ,IACHA,EAAa,IAAIqC,GAA0B7C,GAC3C2C,GAAMx1N,IAAI6yN,EAASQ,IAGdA,CACT,CAMkGsC,CAAoB9C,EACtH,CAOO,SAAS+C,GAA2F/C,EAAiCK,GAC1I,IAAItsI,OAACA,GAAU0uI,KACXjC,EAAaoC,GAA6B5C,EAASK,GACvD,OAAO,EAAA2C,EAAAA,UAAQ,IAAM,IAAIC,GAAyBlvI,EAAQysI,IAAa,CAACzsI,EAAQysI,GAClF,CC7BA,IAAI0C,GAAQ,IAAIr4N,IAOT,SAASs4N,GAAY1qL,GAC1B,IAAIs7C,OAACA,GAAU0uI,KAEXrrL,EAAW28C,GAAUt7C,EAAUlyC,OAAOmF,QAAQ+sC,GAAS+6B,MAAK,CAAC1oE,EAAGiB,IAAMjB,EAAE,GAAKiB,EAAE,IAAM,EAAI,IAAGmF,OAAS,IACzG,GAAIgyN,GAAMh2N,IAAIkqC,GACZ,OAAO8rL,GAAMj2N,IAAImqC,GAGnB,IAAIgsL,EAAY,IAAI75C,KAAK85C,SAAStvI,EAAQt7C,GAE1C,OADAyqL,GAAM/1N,IAAIiqC,EAAUgsL,GACbA,CACT,CCZO,SAASE,GAAiCt5N,GAG/C,OnDwBOm4M,MAAWG,KmDxBOt4M,EAAE+4K,OAAS/4K,EAAEg5K,OACxC,CAEO,SAASugD,GAAiBv5N,GAC/B,OAAIw5N,KACKx5N,EAAE84K,QAGJ94K,EAAEg5K,OACX,CCbA,MAAMygD,GAA6B,IA2B5B,SAASC,GAAcjrL,GAC5B,IAAIkrL,iBAACA,EAAgBC,iBAAEA,EAAgBC,aAAEA,GAAgBprL,EACrDtoC,GAAQ,EAAA2zN,EAAAA,QAAO,CACjB5+M,OAAQ,GACRwuJ,QAAS,OACR9iH,QA2CH,MAAO,CACLmzK,gBAAiB,CAGfC,iBAAkBL,EAAiBM,gBA7CtBj6N,IACf,IAAIk6N,EAiDR,SAAyBn9N,GAKvB,OAAmB,IAAfA,EAAIF,QAAiB,UAAUoK,KAAKlK,GAIjC,GAHEA,CAIX,CA3DoBo9N,CAAgBn6N,EAAEjD,KAClC,IAAKm9N,GAAal6N,EAAEg5K,SAAWh5K,EAAE84K,UAAY94K,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,QACtE,OAOgB,MAAdw9N,GAAqB/zN,EAAM+U,OAAOjW,OAAOpI,OAAS,IACpDmD,EAAE88H,iBACI,wBAAyB98H,GAC7BA,EAAE+iN,mBAIN58M,EAAM+U,QAAUg/M,EAIhB,IAAIn9N,EAAM48N,EAAiBM,gBAAgB9zN,EAAM+U,OAAQ0+M,EAAiBQ,YAG/D,MAAPr9N,IACFA,EAAM48N,EAAiBM,gBAAgB9zN,EAAM+U,SAGpC,MAAPne,IACF68N,EAAiBS,cAAct9N,GAC3B88N,GACFA,EAAa98N,IAIjBs9D,aAAal0D,EAAMujK,SACnBvjK,EAAMujK,QAAU35J,YAAW,KACzB5J,EAAM+U,OAAS,KACdu+M,GAAA,EAOgE,MAGvE,CCAO,SAASa,GAAwB7rL,GACtC,IACEmrL,iBAAkBW,EAClBZ,iBAAkBa,EAAQj9N,IAC1BA,EAAG,UACHg3I,GAAY,EAAK,gBACjBkmF,GAAkB,EAAK,uBACvBC,GAAyB,EAAK,kBAC9BC,GAAoB,EAAK,cACzBC,EAA8C,YAA9BL,EAAQM,kBAAsB,kBAC9CC,GAAoB,EAAAC,sBACpBA,EAAqB,oBACrBC,GAAsB,EAAAC,cACtBA,EAAa,UAEbC,EAAY39N,EAAA,aACZ49N,EAAe,UACb1sL,GACA28D,UAACA,GAAagwH,KACd3oD,EAAS4oD,KA6KTC,GAAY,EAAAxB,EAAAA,QAAO,CAAC9jG,IAAK,EAAGzJ,KAAM,IACtCgvG,GAASL,EAAW,SAAUD,EAAgB,KAAO,KACnDK,EAAU10K,QAAU,CAClBovE,IAAKklG,EAAUt0K,QAAQ6xE,UACvBlM,KAAM2uG,EAAUt0K,QAAQ4xE,WACzB,GAoEH,MAAMg4F,GAAe,EAAAsJ,EAAAA,QAAOvlF,IAC5B,EAAAinF,EAAAA,YAAU,KACR,GAAIhL,EAAa5pK,QAAS,CACxB,IAAIwzK,EAAa,KAGC,UAAd7lF,IACF6lF,EAAaI,EAASiB,eACJ,SAAdlnF,IACJ6lF,EAAaI,EAASkB,cAIxB,IAAIC,EAAepB,EAAQoB,aAC3B,GAAIA,EAAa7jK,KACf,IAAK,IAAI/6D,KAAO4+N,EACd,GAAIpB,EAAQqB,cAAc7+N,GAAM,CAC9Bq9N,EAAar9N,EACb,KACF,CAIJw9N,EAAQ1H,YAAW,GACnB0H,EAAQF,cAAcD,GAGJ,MAAdA,GAAuBW,GACzBc,GAAYt+N,EAAIqpD,QAEpB,IAEC,IAIH,IAAIk1K,GAAiB,EAAAhC,EAAAA,QAAOS,EAAQH,aACpC,EAAAoB,EAAAA,YAAU,KACR,IAAInT,EAAW0T,KACf,GAAIxB,EAAQ9T,WAAmC,MAAtB8T,EAAQH,aAAsB,OAAAc,QAAA,IAAAA,OAAA,EAAAA,EAAWt0K,SAAS,CACzE,IAAI5F,EAAUk6K,EAAUt0K,QAAQ24I,cAAe,cAAay8B,IAAIzxK,OAAOgwK,EAAQH,WAAWx3N,iBACtFo+C,IAAyB,aAAbqnK,GAA2BmI,EAAa5pK,WACjDq0K,GACHgB,GAAef,EAAUt0K,QAAS5F,GAGnB,YAAbqnK,GACF6T,GAAmBl7K,EAAS,CAAC08J,kBAAmBngN,EAAIqpD,UAG1D,CAGI2zK,EAAQ9T,WAAmC,MAAtB8T,EAAQH,YAAgD,MAA1B0B,EAAel1K,SACpEi1K,GAAYt+N,EAAIqpD,SAGlBk1K,EAAel1K,QAAU2zK,EAAQH,WACjC5J,EAAa5pK,SAAU,CAAK,GAC3B,CAACq0K,EAAeC,EAAWX,EAAQH,WAAYG,EAAQ9T,UAAWlpN,IAErE,IA0BI86I,EA1BAu4D,EAAW,WAjTE5wM,IAQf,GANIA,EAAE+4K,QAAoB,QAAV/4K,EAAEjD,KAChBiD,EAAE88H,kBAKCv/H,EAAIqpD,QAAQ8E,SAAS1rD,EAAEtD,QAC1B,OAGF,MAAMy/N,EAAgBA,CAACp/N,EAAsBq/N,KAC3C,GAAW,MAAPr/N,EAAa,CACf,GAAIw9N,EAAQpjB,OAAOp6M,IAAyB,cAAjBo+N,GAAgCP,IAAkBtB,GAAiCt5N,GAAI,EAEhH,EAAAq8N,EAAAA,YAAU,KACR9B,EAAQF,cAAct9N,EAAKq/N,EAAA,IAG7B,IAAIv4M,EAAOq3M,EAAUt0K,QAAQ24I,cAAe,cAAay8B,IAAIzxK,OAAOxtD,EAAI6F,iBAGxE,YAFA6vK,EAAO9mD,KAAK9nG,EAAM7jB,EAGpB,CAIA,GAFAu6N,EAAQF,cAAct9N,EAAKq/N,GAEvB7B,EAAQpjB,OAAOp6M,IAAyB,aAAjBo+N,EACzB,OAGEn7N,EAAEi5K,UAAsC,aAA1BshD,EAAQ+B,cACxB/B,EAAQgC,gBAAgBx/N,GACf69N,IAAkBtB,GAAiCt5N,IAC5Du6N,EAAQiC,iBAAiBz/N,EAE7B,GAGF,OAAQiD,EAAEjD,KACR,IAAK,YACH,GAAIy9N,EAASiC,YAAa,KAIlBC,EAEMC,EALZ38N,EAAE88H,iBACF,IAAI8/F,EAAgC,MAAtBrC,EAAQH,WAChBI,EAASiC,YAAYlC,EAAQH,YACT,QAApBsC,EAAAlC,EAASiB,mBAAT,IAAAiB,OAAA,EAAAA,EAAAx/N,KAAAs9N,GACS,MAAXoC,GAAmBnC,IACrBmC,EAA8B,QAApBD,EAAAnC,EAASiB,mBAAT,IAAAkB,OAAA,EAAAA,EAAAz/N,KAAAs9N,EAAuBD,EAAQH,aAE3C+B,EAAcS,EAChB,CACA,MAEF,IAAK,UACH,GAAIpC,EAASqC,YAAa,KAIlBC,EAEMC,EALZ/8N,EAAE88H,iBACF,IAAI8/F,EAAgC,MAAtBrC,EAAQH,WAChBI,EAASqC,YAAYtC,EAAQH,YACV,QAAnB0C,EAAAtC,EAASkB,kBAAT,IAAAoB,OAAA,EAAAA,EAAA5/N,KAAAs9N,GACS,MAAXoC,GAAmBnC,IACrBmC,EAA6B,QAAnBG,EAAAvC,EAASkB,kBAAT,IAAAqB,OAAA,EAAAA,EAAA7/N,KAAAs9N,EAAsBD,EAAQH,aAE1C+B,EAAcS,EAChB,CACA,MAEF,IAAK,YACH,GAAIpC,EAASwC,aAAc,KAISC,EAA6CC,EAH/El9N,EAAE88H,iBACF,IAAI8/F,EAAUpC,EAASwC,aAAazC,EAAQH,YAC7B,MAAXwC,GAAmBnC,IACrBmC,EAAwB,QAAdxxH,EAA0C,QAApB6xH,EAAAzC,EAASiB,mBAAT,IAAAwB,OAAA,EAAAA,EAAA//N,KAAAs9N,EAAuBD,EAAQH,YAAiC,QAAnB8C,EAAA1C,EAASkB,kBAAT,IAAAwB,OAAA,EAAAA,EAAAhgO,KAAAs9N,EAAsBD,EAAQH,aAE7G+B,EAAcS,EAAuB,QAAdxxH,EAAsB,QAAU,OACzD,CACA,MAEF,IAAK,aACH,GAAIovH,EAAS2C,cAAe,KAIQC,EAA4CC,EAH9Er9N,EAAE88H,iBACF,IAAI8/F,EAAUpC,EAAS2C,cAAc5C,EAAQH,YAC9B,MAAXwC,GAAmBnC,IACrBmC,EAAwB,QAAdxxH,EAAyC,QAAnBgyH,EAAA5C,EAASkB,kBAAT,IAAA0B,OAAA,EAAAA,EAAAlgO,KAAAs9N,EAAsBD,EAAQH,YAAkC,QAApBiD,EAAA7C,EAASiB,mBAAT,IAAA4B,OAAA,EAAAA,EAAAngO,KAAAs9N,EAAuBD,EAAQH,aAE7G+B,EAAcS,EAAuB,QAAdxxH,EAAsB,OAAS,QACxD,CACA,MAEF,IAAK,OACH,GAAIovH,EAASiB,YAAa,CACxBz7N,EAAE88H,iBACF,IAAIwgG,EAAW9C,EAASiB,YAAYlB,EAAQH,WAAYb,GAAiBv5N,IACzEu6N,EAAQF,cAAciD,GAClB/D,GAAiBv5N,IAAMA,EAAEi5K,UAAsC,aAA1BshD,EAAQ+B,cAC/C/B,EAAQgC,gBAAgBe,GACf1C,GACTL,EAAQiC,iBAAiBc,EAE7B,CACA,MACF,IAAK,MACH,GAAI9C,EAASkB,WAAY,CACvB17N,EAAE88H,iBACF,IAAIygG,EAAU/C,EAASkB,WAAWnB,EAAQH,WAAYb,GAAiBv5N,IACvEu6N,EAAQF,cAAckD,GAClBhE,GAAiBv5N,IAAMA,EAAEi5K,UAAsC,aAA1BshD,EAAQ+B,cAC/C/B,EAAQgC,gBAAgBgB,GACf3C,GACTL,EAAQiC,iBAAiBe,EAE7B,CACA,MACF,IAAK,WACH,GAAI/C,EAASgD,gBAAiB,CAC5Bx9N,EAAE88H,iBAEFq/F,EADc3B,EAASgD,gBAAgBjD,EAAQH,YAEjD,CACA,MACF,IAAK,SACH,GAAII,EAASiD,gBAAiB,CAC5Bz9N,EAAE88H,iBAEFq/F,EADc3B,EAASiD,gBAAgBlD,EAAQH,YAEjD,CACA,MACF,IAAK,IACCb,GAAiBv5N,IAAgC,aAA1Bu6N,EAAQ+B,gBAAsD,IAAtB3B,IACjE36N,EAAE88H,iBACFy9F,EAAQmD,aAEV,MACF,IAAK,SACH19N,EAAE88H,iBACG49F,GACHH,EAAQoD,iBAEV,MACF,IAAK,MACH,IAAK3C,EAAqB,CAOxB,GAAIh7N,EAAEi5K,SACJ17K,EAAIqpD,QAAQ4uF,YACP,CACL,IACI1pI,EACAq5D,EAFAgqJ,EAASyO,GAAuBrgO,EAAIqpD,QAAS,CAAC0oK,UAAU,IAG5D,GACEnqJ,EAAOgqJ,EAAO0O,YACV14J,IACFr5D,EAAOq5D,SAEFA,GAELr5D,IAASA,EAAK4/C,SAAStpD,SAASqwI,gBAClCqrF,GAAsBhyN,EAE1B,CACA,KACF,EAEJ,UAYa9L,IACb,GAAIu6N,EAAQ9T,UAELzmN,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,SAC9B69N,EAAQ1H,YAAW,QAOvB,GAAK7yN,EAAE4pM,cAAcl+I,SAAS1rD,EAAEtD,QAAhC,CAMA,GAFA69N,EAAQ1H,YAAW,GAEO,MAAtB0H,EAAQH,WAAoB,CAC9B,IAAI2D,EAAsBhhO,IACb,MAAPA,IACFw9N,EAAQF,cAAct9N,GAClB69N,GACFL,EAAQiC,iBAAiBz/N,GAE7B,EAKEqpN,EAAgBpmN,EAAEomN,kBAED4X,EAEAC,EAHjB7X,GAAkBpmN,EAAE4pM,cAAcp+C,wBAAwB46D,GAAiB9/L,KAAK43M,4BAClFH,EAA0C,QAAvBC,EAAAzD,EAAQ4D,uBAAR,IAAAH,EAAAA,EAA2BxD,EAASkB,cAEvDqC,EAA2C,QAAxBE,EAAA1D,EAAQ6D,wBAAR,IAAAH,EAAAA,EAA4BzD,EAASiB,cAE5D,MAAYR,IAEVC,EAAUt0K,QAAQ6xE,UAAY6iG,EAAU10K,QAAQovE,IAChDklG,EAAUt0K,QAAQ4xE,WAAa8iG,EAAU10K,QAAQ2lE,MAGnD,IAAK0uG,GAAuC,MAAtBV,EAAQH,WAAoB,CAEhD,IAAIp5K,EAAUk6K,EAAUt0K,QAAQ24I,cAAe,cAAay8B,IAAIzxK,OAAOgwK,EAAQH,WAAWx3N,iBAC1F,GAAIo+C,EAAS,CAENA,EAAQ0K,SAAStpD,SAASqwI,gBAC7BqrF,GAAsB98K,GAIP,aADF+6K,MAEbG,GAAmBl7K,EAAS,CAAC08J,kBAAmBngN,EAAIqpD,SAExD,CACF,CA3CQ,CA2CR,SAGY5mD,IAEPA,EAAE4pM,cAAcl+I,SAAS1rD,EAAEomN,gBAC9BmU,EAAQ1H,YAAW,EAAM,EAqE3BntF,WAAAA,CAAY1lI,GAENk7N,EAAUt0K,UAAY5mD,EAAEtD,QAE1BsD,EAAE88H,gBAEN,IAGEi9F,gBAACA,GAAmBL,GAAc,CACpCC,iBAAkBa,EAClBZ,iBAAkBW,IAgBpB,OAbKO,IACHlqB,EAAWytB,GAAWtE,EAAiBnpB,IAQpCmqB,IACH1iF,EAAiC,MAAtBkiF,EAAQH,WAAqB,GAAK,GAGxC,CACLkE,gBAAiB,IACZ1tB,WACHv4D,GAGN,CCpWO,SAASkmF,GAAkB9vL,GAChC,IACEmrL,iBAAkBW,EAAOx9N,IACzBA,EAAGQ,IACHA,EAAGihO,sBACHA,EAAqBzD,sBACrBA,EAAqBvlF,MACrBA,EAAKg+D,WACLA,EAAUirB,SACVA,EAAQC,2BACRA,EAA0B,aAC1BvD,EAAe,UACb1sL,EACAgkI,EAAS4oD,KAETsD,EAAY3+N,IACd,GAAsB,aAAlBA,EAAEylC,aAA8B6zL,GAAiCt5N,GACnEu6N,EAAQqE,gBAAgB7hO,OACnB,CACL,GAA8B,SAA1Bw9N,EAAQ+B,cACV,OAGF,GAAI/B,EAAQpjB,OAAOp6M,GAAM,CACvB,GAAqB,cAAjBo+N,EAIF,OAHA1oD,EAAO9mD,KAAKpuH,EAAIqpD,QAAS5mD,QAEzBu6N,EAAQsE,gBAAgBtE,EAAQoB,cAE3B,GAAqB,aAAjBR,GAAgD,SAAjBA,EACxC,MAEJ,CAE8B,WAA1BZ,EAAQ+B,cACN/B,EAAQ7kF,WAAW34I,KAASw9N,EAAQG,uBACtCH,EAAQqE,gBAAgB7hO,GAExBw9N,EAAQiC,iBAAiBz/N,GAElBiD,GAAKA,EAAEi5K,SAChBshD,EAAQgC,gBAAgBx/N,GACe,WAA9Bw9N,EAAQM,mBAAmC76N,IAAMu5N,GAAiBv5N,IAAwB,UAAlBA,EAAEylC,aAA6C,YAAlBzlC,EAAEylC,aAEhH80L,EAAQqE,gBAAgB7hO,GAExBw9N,EAAQiC,iBAAiBz/N,EAE7B,IAIF,EAAAy+N,EAAAA,YAAU,KACQz+N,IAAQw9N,EAAQH,YACfG,EAAQ9T,YAAcsU,IACjCvlF,EACFA,IACSpzI,SAASqwI,gBAAkBl1I,EAAIqpD,SACxCi1K,GAAYt+N,EAAIqpD,SAEpB,GAEC,CAACrpD,EAAKR,EAAKw9N,EAAQH,WAAYG,EAAQuE,mBAAoBvE,EAAQ9T,UAAWsU,IAEjFvnB,EAAaA,GAAc+mB,EAAQ/mB,WAAWz2M,GAI9C,IAAIgiO,EAA6C,CAAC,EAC7ChE,GAA0BvnB,EASpBA,IACTurB,EAAUr5F,YAAe1lI,IAEvBA,EAAE88H,gBAAgB,GAXpBiiG,EAAY,CACV1mF,SAAUt7I,IAAQw9N,EAAQH,WAAa,GAAK,EAC5C7S,OAAAA,CAAQvnN,GACFA,EAAEtD,SAAWa,EAAIqpD,SACnB2zK,EAAQF,cAAct9N,EAE1B,GAaJ,IAAIiiO,EAAiBzE,EAAQpjB,OAAOp6M,IAAyB,aAAjBo+N,EACxC8D,EAAgB1E,EAAQpjB,OAAOp6M,IAAyB,cAAjBo+N,GAAiD,SAAjBA,EACvE+D,GAAmB1rB,GAAc+mB,EAAQqB,cAAc7+N,KAASiiO,EAChEG,GAAiBV,GAAYQ,KAAmBzrB,EAChD4rB,EAAmBD,IACS,YAA9B5E,EAAQM,mBACHqE,GACAA,GAAmB3E,EAAQh3I,SAE9B87I,EAAqBF,GAAiBD,GAAiD,YAA9B3E,EAAQM,kBACjEyE,EAAYF,GAAoBC,EAChChX,GAAW,EAAAyR,EAAAA,QAAO,MAElByF,EAAmBD,GAAaJ,EAChCM,GAA+B,EAAA1F,EAAAA,SAAO,GACtC2F,GAA+B,EAAA3F,EAAAA,SAAO,GAEtC4F,EAAiB1/N,IACfy+N,GACFA,IAGEQ,GACFxsD,EAAO9mD,KAAKpuH,EAAIqpD,QAAS5mD,EAAA,EAWzB2/N,EAA6B,CAAC,EAC9BnB,GACFmB,EAAenf,aAAgBxgN,IAC7BqoN,EAASzhK,QAAU5mD,EAAEylC,YACrB+5L,EAA6B54K,QAAU24K,EACjB,aAAlBv/N,EAAEylC,aAAgC65L,IAAaM,MACjDjB,EAAS3+N,EAAA,EAMR0+N,GAaHiB,EAAejf,UAAY0e,EAAmB,KAAQp/N,IAC9B,aAAlBA,EAAEylC,aAA8By5L,GAClCP,EAAS3+N,EAAA,EAIb2/N,EAAerf,QAAU8e,EAAmBM,EAAgB,MAlB5DC,EAAerf,QAAWtgN,IACxB,GAAIo/N,GAAqBC,GAAwC,UAAlBr/N,EAAEylC,YAA0B,CACzE,GAAsB,aAAlBzlC,EAAEylC,cAA+Bo6L,KACnC,OAGFH,EAAc1/N,EAChB,KAA6B,aAAlBA,EAAEylC,aAA8By5L,GACzCP,EAAS3+N,EAAA,IAaf2/N,EAAenf,aAAgBxgN,IAC7BqoN,EAASzhK,QAAU5mD,EAAEylC,YACrB+5L,EAA6B54K,QAAU24K,EACvCE,EAA6B74K,QAAUw4K,EAMrCF,IACqB,UAAnBl/N,EAAGylC,cAA4B25L,GACZ,aAAlBp/N,EAAEylC,eAAgC05L,GAAiBS,QAGtDjB,EAAS3+N,EAAA,EAIb2/N,EAAerf,QAAWtgN,KAKJ,UAAlBA,EAAEylC,aACgB,QAAlBzlC,EAAEylC,aACgB,YAAlBzlC,EAAEylC,aACiB,aAAlBzlC,EAAEylC,aAA8B65L,GAAaO,MAC3B,UAAlB7/N,EAAEylC,aAA2Bg6L,EAA6B74K,WAEvD04K,EACFI,EAAc1/N,GACLk/N,GACTP,EAAS3+N,GAEb,GAIJ++N,EAAU,YAAchiO,EACxB4iO,EAAe9e,oBAAsBka,EACrC,IAAIzY,WAACA,EAAU3B,UAAEA,GAAamf,GAASH,GAGnCl4B,EAAgB43B,EAAsBr/N,IACf,UAArBqoN,EAASzhK,UACX5mD,EAAE+iN,kBACF/iN,EAAE88H,iBACF4iG,EAAc1/N,GAChB,OACER,GAKA+sN,eAACA,GAAkBwT,GAAa,CAClCvsB,YAAa+rB,EACbpT,WAAAA,CAAYnsN,GACY,UAAlBA,EAAEylC,cACJk5L,EAAS3+N,GACTu6N,EAAQyF,qBAAqB,UAEjC,IAeE/pF,EAAUskF,EAAQpjB,OAAOp6M,GAAOiD,IAC5BigO,GAAiBzmB,WACrBx5M,EAAE88H,gBAAgB,OAElBt9H,EAEJ,MAAO,CACLu/N,UAAWV,GACTU,EACAG,GAAmBE,EAAmB9c,EAAa,CAAC,EACpDid,EAAmBhT,EAAiB,CAAC,EACrC,eAAC9kB,qBAnBoBznM,IACE,UAArBqoN,EAASzhK,SAAuB44K,EAA6B54K,SAC/D5mD,EAAE88H,gBAAgB,UAiBkBmZ,cAEtC0qE,EACAjrE,WAAY6kF,EAAQ7kF,WAAW34I,GAC/B0pN,UAAW8T,EAAQ9T,WAAa8T,EAAQH,aAAer9N,aACvDy2M,kBACA0rB,YACAI,EAEJ,CAEA,SAASO,KACP,IAAIz6G,EAAQ7kH,OAAO6kH,MACnB,MAAsB,WAAf,OAAAA,QAAA,IAAAA,OAAA,EAAAA,EAAOroH,IAChB,CAEA,SAAS6iO,KACP,IAAIx6G,EAAQ7kH,OAAO6kH,MACnB,MAAsB,OAAf,OAAAA,QAAA,IAAAA,OAAA,EAAAA,EAAOroH,MAA+B,WAAhB,OAAAqoH,QAAA,IAAAA,OAAA,EAAAA,EAAOzhG,KACtC,CCzVO,MAAMu8M,GAsCXC,UAAAA,CAAWpjO,GAET,IADAA,EAAMK,KAAK+gD,WAAWiiL,YAAYrjO,GACpB,MAAPA,GAAa,CAElB,GAAkB,SADPK,KAAK+gD,WAAWt5C,QAAQ9H,GAC1BmC,OAAoB9B,KAAKijO,aAAan9N,IAAInG,GACjD,OAAOA,EAGTA,EAAMK,KAAK+gD,WAAWiiL,YAAYrjO,EACpC,CAEA,OAAO,IACT,CAEAujO,cAAAA,CAAevjO,GAEb,IADAA,EAAMK,KAAK+gD,WAAWoiL,aAAaxjO,GACrB,MAAPA,GAAa,CAElB,GAAkB,SADPK,KAAK+gD,WAAWt5C,QAAQ9H,GAC1BmC,OAAoB9B,KAAKijO,aAAan9N,IAAInG,GACjD,OAAOA,EAGTA,EAAMK,KAAK+gD,WAAWoiL,aAAaxjO,EACrC,CAEA,OAAO,IACT,CAEQ+lF,OAAAA,CACN/lF,EACA6/N,EACA4D,GAEA,IAAI38M,EAAOzmB,KAAKyH,QAAQ9H,GACxB,IAAK8mB,EACH,OAAO,KAIT,IAAI48M,EAAW58M,EAAKo5G,wBACpB,GACElgI,EAAM6/N,EAAQ7/N,GACd8mB,EAAOzmB,KAAKyH,QAAQ9H,SACb8mB,GAAQ28M,EAAWC,EAAU58M,EAAKo5G,0BAE3C,OAAOlgI,CACT,CAEQ2jO,SAAAA,CAAUD,EAAmBE,GACnC,OAAOF,EAASzqG,MAAQ2qG,EAAS3qG,KAAOyqG,EAASl0G,OAASo0G,EAASp0G,IACrE,CAEQq0G,YAAAA,CAAaH,EAAmBE,GACtC,OAAOF,EAASl0G,OAASo0G,EAASp0G,MAAQk0G,EAASzqG,MAAQ2qG,EAAS3qG,GACtE,CAEAymG,WAAAA,CAAY1/N,GACV,MAAoB,SAAhBK,KAAKyjO,QAA0C,aAArBzjO,KAAKo4N,YAC1Bp4N,KAAK0lF,QAAQ/lF,GAAMA,GAAQK,KAAK+iO,WAAWpjO,IAAMK,KAAKsjO,WAEtDtjO,KAAK+iO,WAAWpjO,EAE3B,CAEA8/N,WAAAA,CAAY9/N,GACV,MAAoB,SAAhBK,KAAKyjO,QAA0C,aAArBzjO,KAAKo4N,YAC1Bp4N,KAAK0lF,QAAQ/lF,GAAMA,GAAQK,KAAKkjO,eAAevjO,IAAMK,KAAKsjO,WAE1DtjO,KAAKkjO,eAAevjO,EAE/B,CAEQ+jO,aAAAA,CAAc/jO,EAAUyvH,GAC9B,OAAOA,EAAQpvH,KAAKkjO,eAAevjO,GAAOK,KAAK+iO,WAAWpjO,EAC5D,CAEAogO,aAAAA,CAAcpgO,GACZ,MAAoB,SAAhBK,KAAKyjO,OACkB,aAArBzjO,KAAKo4N,YACAp4N,KAAK0jO,cAAc/jO,EAAwB,QAAnBK,KAAKguG,WAE7BhuG,KAAK0lF,QAAQ/lF,GAAMA,GAAQK,KAAK0jO,cAAc/jO,EAAwB,QAAnBK,KAAKguG,YAAsBhuG,KAAKwjO,cAE9D,eAArBxjO,KAAKo4N,YACPp4N,KAAK0jO,cAAc/jO,EAAwB,QAAnBK,KAAKguG,WAG/B,IACT,CAEA4xH,YAAAA,CAAajgO,GACX,MAAoB,SAAhBK,KAAKyjO,OACkB,aAArBzjO,KAAKo4N,YACAp4N,KAAK0jO,cAAc/jO,EAAwB,QAAnBK,KAAKguG,WAE7BhuG,KAAK0lF,QAAQ/lF,GAAMA,GAAQK,KAAK0jO,cAAc/jO,EAAwB,QAAnBK,KAAKguG,YAAsBhuG,KAAKwjO,cAE9D,eAArBxjO,KAAKo4N,YACPp4N,KAAK0jO,cAAc/jO,EAAwB,QAAnBK,KAAKguG,WAG/B,IACT,CAEAqwH,WAAAA,GACE,IAAI1+N,EAAMK,KAAK+gD,WAAWs9K,cAC1B,KAAc,MAAP1+N,GAAa,CAClB,IAAI8mB,EAAOzmB,KAAK+gD,WAAWt5C,QAAQ9H,GACnC,GAAmB,UAAf,OAAA8mB,QAAA,IAAAA,OAAA,EAAAA,EAAM3kB,QAAoB9B,KAAKijO,aAAan9N,IAAInG,GAClD,OAAOA,EAGTA,EAAMK,KAAK+gD,WAAWiiL,YAAYrjO,EACpC,CAEA,OAAO,IACT,CAEA2+N,UAAAA,GACE,IAAI3+N,EAAMK,KAAK+gD,WAAWu9K,aAC1B,KAAc,MAAP3+N,GAAa,CAElB,GAAkB,SADPK,KAAK+gD,WAAWt5C,QAAQ9H,GAC1BmC,OAAoB9B,KAAKijO,aAAan9N,IAAInG,GACjD,OAAOA,EAGTA,EAAMK,KAAK+gD,WAAWoiL,aAAaxjO,EACrC,CAEA,OAAO,IACT,CAEQ8H,OAAAA,CAAQ9H,GACd,OAAOK,KAAKG,IAAIqpD,QAAQ24I,cAAe,cAAay8B,IAAIzxK,OAAOxtD,EAAI6F,gBACrE,CAEA66N,eAAAA,CAAgB1gO,GACd,IAAI6vL,EAAOxvL,KAAKG,IAAIqpD,QAChB/iC,EAAOzmB,KAAKyH,QAAQ9H,GACxB,IAAK8mB,EACH,OAAO,KAGT,IAAKk9M,GAAan0C,GAChB,OAAOxvL,KAAKq+N,cAGd,IAAIuF,EAAgBp0C,EAAK3vD,wBACrB0jG,EAAW98M,EAAKo5G,wBACpB,GAAyB,eAArB7/H,KAAKo4N,YAA8B,CACrC,IAAIyL,EAAaD,EAAcniO,EAAI+tL,EAAKp0D,WACpCiL,EAAQv4H,KAAKgwB,IAAI,EAAGylM,EAAU9hO,EAAIoiO,EAAcN,EAAShjO,MAAQqjO,EAAcrjO,OAEnF,KAAOkmB,GAAQ88M,EAAU9hO,EAAIoiO,EAAcx9F,GAEzC5/G,EAAc,OADd9mB,EAAMK,KAAKy/N,YAAY9/N,IACF,KAAOK,KAAKyH,QAAQ9H,GACzC4jO,EAAW,OAAA98M,QAAA,IAAAA,OAAA,EAAAA,EAAMo5G,uBAErB,KAAO,CACL,IAAIikG,EAAaF,EAAcliO,EAAI8tL,EAAKn0D,UACpCiL,EAAQx4H,KAAKgwB,IAAI,EAAGylM,EAAU7hO,EAAIoiO,EAAcP,EAAS/iO,OAASojO,EAAcpjO,QAEpF,KAAOimB,GAAQ88M,EAAU7hO,EAAIoiO,EAAcx9F,GAEzC7/G,EAAc,OADd9mB,EAAMK,KAAKy/N,YAAY9/N,IACF,KAAOK,KAAKyH,QAAQ9H,GACzC4jO,EAAW,OAAA98M,QAAA,IAAAA,OAAA,EAAAA,EAAMo5G,uBAErB,CAEA,OAAO,OAAAlgI,QAAA,IAAAA,EAAAA,EAAOK,KAAKq+N,aACrB,CAEA+B,eAAAA,CAAgBzgO,GACd,IAAI6vL,EAAOxvL,KAAKG,IAAIqpD,QAChB/iC,EAAOzmB,KAAKyH,QAAQ9H,GACxB,IAAK8mB,EACH,OAAO,KAGT,IAAKk9M,GAAan0C,GAChB,OAAOxvL,KAAKs+N,aAGd,IAAIsF,EAAgBp0C,EAAK3vD,wBACrB0jG,EAAW98M,EAAKo5G,wBACpB,GAAyB,eAArB7/H,KAAKo4N,YAA8B,CACrC,IAAIyL,EAAaD,EAAcniO,EAAI+tL,EAAKp0D,WACpCiL,EAAQv4H,KAAK2lC,IAAI+7I,EAAKvyD,YAAasmG,EAAU9hO,EAAIoiO,EAAcN,EAAShjO,MAAQqjO,EAAcrjO,OAElG,KAAOkmB,GAAQ88M,EAAU9hO,EAAIoiO,EAAcx9F,GAEzC5/G,EAAc,OADd9mB,EAAMK,KAAKq/N,YAAY1/N,IACF,KAAOK,KAAKyH,QAAQ9H,GACzC4jO,EAAW,OAAA98M,QAAA,IAAAA,OAAA,EAAAA,EAAMo5G,uBAErB,KAAO,CACL,IAAIikG,EAAaF,EAAcliO,EAAI8tL,EAAKn0D,UACpCiL,EAAQx4H,KAAK2lC,IAAI+7I,EAAKtyD,aAAcqmG,EAAU7hO,EAAIoiO,EAAcP,EAAS/iO,OAASojO,EAAcpjO,QAEpG,KAAOimB,GAAQ88M,EAAU7hO,EAAIoiO,EAAcx9F,GAEzC7/G,EAAc,OADd9mB,EAAMK,KAAKq/N,YAAY1/N,IACF,KAAOK,KAAKyH,QAAQ9H,GACzC4jO,EAAW,OAAA98M,QAAA,IAAAA,OAAA,EAAAA,EAAMo5G,uBAErB,CAEA,OAAO,OAAAlgI,QAAA,IAAAA,EAAAA,EAAOK,KAAKs+N,YACrB,CAEAzB,eAAAA,CAAgB/+M,EAAgBimN,GAC9B,IAAK/jO,KAAKgkO,SACR,OAAO,KAGT,IAAIjjL,EAAa/gD,KAAK+gD,WAClBphD,EAAMokO,GAAW/jO,KAAKq+N,cAC1B,KAAc,MAAP1+N,GAAa,CAClB,IAAI8mB,EAAOs6B,EAAWt5C,QAAQ9H,GAC1BqO,EAAYyY,EAAKw9M,UAAUx+N,MAAM,EAAGqY,EAAOre,QAC/C,GAAIgnB,EAAKw9M,WAA0D,IAA7CjkO,KAAKgkO,SAASE,QAAQl2N,EAAW8P,GACrD,OAAOne,EAGTA,EAAMK,KAAKq/N,YAAY1/N,EACzB,CAEA,OAAO,IACT,CA7PAgM,WAAAA,GACE,GAAoB,IAAhBnM,UAAKC,OAAc,CACrB,IAAI0I,EAAA3I,UAAAC,QAAA,OAAA2C,EAAA5C,UAAA,GACJQ,KAAK+gD,WAAa54C,EAAK44C,WACvB/gD,KAAKG,IAAMgI,EAAKhI,IAChBH,KAAKgkO,SAAW77N,EAAK67N,SACrBhkO,KAAKijO,aAAe96N,EAAK86N,cAAgB,IAAIt/N,IAC7C3D,KAAKo4N,YAAcjwN,EAAKiwN,YACxBp4N,KAAKguG,UAAY7lG,EAAK6lG,UACtBhuG,KAAKyjO,OAASt7N,EAAKs7N,QAAU,OAC/B,MACEzjO,KAAK+gD,WAAUvhD,UAAAC,QAAA,OAAA2C,EAAA5C,UAAA,GACfQ,KAAKijO,aAAYzjO,UAAAC,QAAA,OAAA2C,EAAA5C,UAAA,GACjBQ,KAAKG,IAAGX,UAAAC,QAAA,OAAA2C,EAAA5C,UAAA,GACRQ,KAAKgkO,SAAQxkO,UAAAC,QAAA,OAAA2C,EAAA5C,UAAA,GACbQ,KAAKyjO,OAAS,QACdzjO,KAAKo4N,YAAc,WAKD,UAAhBp4N,KAAKyjO,QAA2C,aAArBzjO,KAAKo4N,cAClCp4N,KAAK4/N,kBAAex9N,EACpBpC,KAAK+/N,mBAAgB39N,EAEzB,ECnBK,SAAS+hO,GAAkB7jO,GAChC,IAAIk8N,iBACFA,EAAgBz7K,WAChBA,EAAUkiL,aACVA,EAAY9iO,IACZA,EAAGo8N,iBACHA,GACEj8N,EAIA0jO,EAAWI,GAAY,CAACC,MAAO,SAAUC,YAAa,SACtDC,EAAmB/H,EAAiB+H,iBACpCnH,GAAW,EAAAoH,EAAAA,UAAQ,IACrBjI,GAAoB,IAAIuG,GAAqB/hL,EAAiC,cAArBwjL,EAAmC,IAAI5gO,IAAQs/N,EAAc9iO,EAAK6jO,IAC1H,CAACzH,EAAkBx7K,EAAYkiL,EAAc9iO,EAAK6jO,EAAUO,KAE3DrD,gBAACA,GAAmBhE,GAAwB,IAC3C58N,MACHH,mBACAq8N,EACAD,iBAAkBa,IAGpB,MAAO,CACLqH,UAAWvD,EAEf,CClCO,SAASwD,GAASpkO,GACvB,IAAIM,GACFA,EAAE0pB,MACFA,EACA,kBAAmBq6M,EACnB,aAAc7pF,EAAS,iBACvB8pF,EAAmB,SACjBtkO,EAEJM,EAAKikO,GAAMjkO,GACX,IAAIkkO,EAAUD,KACVE,EAAa,CAAC,EAiBlB,OAhBIz6M,GACFq6M,EAAiBA,EAAkB,GAAEG,KAAWH,IAAmBG,EACnEC,EAAa,CACXnkO,GAAIkkO,EACJE,QAA8B,UAArBJ,EAA+BhkO,OAAKwB,IAErCuiO,GAAmB7pF,GAC7BrxI,QAAQyC,KAAK,wHASR,YACL64N,aAPeE,GAAU,IACzBrkO,EACA,aAAck6I,EACd,kBAAmB6pF,IAOvB,CCtCO,SAASO,GAAS5kO,GACvB,IAAI8sJ,YAACA,EAAW+3E,aAAEA,EAAYC,UAAEA,EAASC,gBAAEA,GAAmB/kO,GAC1DykO,WAACA,EAAUO,WAAEA,GAAcZ,GAASpkO,GAEpCilO,EAAgBC,GAAU,CAACr/N,QAAQinJ,GAAcjnJ,QAAQg/N,GAAeC,EAAWC,IACnFI,EAAiBD,GAAU,CAACr/N,QAAQinJ,GAAcjnJ,QAAQg/N,GAAeC,EAAWC,IAWxF,OATAC,EAAaI,GAAWJ,EAAY,CAClC,mBAAoB,CAClBC,EAEAE,EACAnlO,EAAM,qBACNgJ,OAAOnD,SAAS2D,KAAK,WAAQ1H,IAG1B,YACL2iO,aACAO,EACAK,iBAAkB,CAChB/kO,GAAI2kO,GAENK,kBAAmB,CACjBhlO,GAAI6kO,GAGV,CCxCA,SAASI,GAAQvlO,GACf,OAAO,IACT,CA2CA,SAASwlO,GAAiBxlO,GACxB,OAA2B,MAAvBA,EAAMylO,cACDzlO,EAAMylO,gBAGXzlO,EAAM0lO,eAIN1lO,EAAMF,OAAS6lO,EAAMr1F,SAASj2G,MAAMr6B,EAAM8+G,UAAY,EAK5D,CAvDAymH,GAAKK,kBAAoB,UAA+B5lO,EAAqBsL,GAC3E,IAAIo6N,WAACA,EAAU5lO,MAAEA,EAAKg/G,SAAEA,GAAY9+G,EAEhC6lO,EAAW7lO,EAAMF,OAASE,EAAM8+G,SAChC6kH,EAAY3jO,EAAM2jO,YAAkC,kBAAbkC,EAAwBA,EAAW,KAAO7lO,EAAM,eAAiB,GAGvG2jO,IAAc,OAAAr4N,QAAA,IAAAA,OAAA,EAAAA,EAASw6N,2BAC1B38N,QAAQyC,KAAK,+HAGT,CACJpK,KAAM,OACNxB,MAAOA,WACP6lO,YACAlC,EACA,aAAc3jO,EAAM,cACpB+lO,cAAeP,GAAcxlO,GAC7B,WAACgsI,GACC,GAAI05F,EACF,IAAK,IAAI3mH,KAAS2mH,OACV,CACJlkO,KAAM,OACNoF,MAAOm4G,QAGN,GAAIj/G,EAAO,CAChB,IAAIwsB,EAA0B,GAC9Bq5M,EAAMr1F,SAAShpI,QAAQw3G,GAAUC,IAC/BzyF,EAAM/lB,KAAK,CACT/E,KAAM,OACN8hD,QAASy7D,GACT,UAGGzyF,CACT,CACF,EAEJ,EC3CA,SAAS05M,GAAWhmO,GAClB,OAAO,IACT,CAEAgmO,GAAQJ,kBAAoB,UAA+B5lO,GACzD,IAAI8+G,SAACA,EAAQh/G,MAAEA,EAAKwsB,MAAEA,GAAStsB,OACzB,CACJwB,KAAM,UACNxB,MAAOA,EACP+lO,eAAe,EACfF,SAAU/lO,EACV,aAAcE,EAAM,cACpB,WAACgsI,GACC,GAAwB,oBAAbltB,EAAyB,CAClC,IAAKxyF,EACH,MAAM,IAAIxe,MAAM,4DAGlB,IAAK,IAAIqY,KAAQmG,OACT,CACJ9qB,KAAM,OACNoF,MAAOuf,EACPtc,SAAUi1G,EAGhB,KAAO,CACL,IAAIxyF,EAA0B,GAC9Bq5M,EAAMr1F,SAAShpI,QAAQw3G,GAAUC,IAC/BzyF,EAAM/lB,KAAK,CACT/E,KAAM,OACN8hD,QAASy7D,GACT,UAGGzyF,CACT,CACF,EAEJ,EClCO,MAAM25M,GAIXC,KAAAA,CAAMlmO,EAA0BsL,GAE9B,OADA5L,KAAK4L,QAAUA,EACR66N,IAAS,IAAMzmO,KAAK0mO,kBAAkBpmO,IAC/C,CAEA,kBAASomO,CAAkBpmO,GACzB,IAAI8+G,SAACA,EAAQxyF,MAAEA,GAAStsB,EAExB,GAAwB,oBAAb8+G,EAAyB,CAClC,IAAKxyF,EACH,MAAM,IAAIxe,MAAM,4DAGlB,IAAK,IAAIqY,KAAQnmB,EAAMssB,YACd5sB,KAAK2mO,YAAY,CACtBz/N,MAAOuf,GACN,CAACtc,SAAUi1G,GAElB,KAAO,CACL,IAAIxyF,EAAgC,GACpCq5M,EAAMr1F,SAAShpI,QAAQw3G,GAAUC,IAC/BzyF,EAAM/lB,KAAKw4G,EAAA,IAGb,IAAI3tF,EAAQ,EACZ,IAAK,IAAIjL,KAAQmG,EAAO,CACtB,IAAI7B,EAAQ/qB,KAAK2mO,YAAY,CAC3B/iL,QAASn9B,EACTiL,MAAOA,GACN,CAAC,GAEJ,IAAK,IAAIxC,KAAQnE,EACf2G,UACMxC,CAEV,CACF,CACF,CAEQ03M,MAAAA,CAAOngN,EAA4BogN,EAA6B99N,EAA+B+9N,GACrG,GAAgB,MAAZrgN,EAAK9mB,IACP,OAAO8mB,EAAK9mB,IAGd,GAAyB,SAArBknO,EAAY/kO,MAAsC,MAAnB+kO,EAAYlnO,IAC7C,MAAQ,GAAEmnO,IAAYD,EAAYlnO,MAGpC,IAAI+G,EAAImgO,EAAY3/N,MACpB,GAAS,MAALR,EAAW,KACHqgO,EAAV,IAAIpnO,EAAW,QAALonO,EAAArgO,EAAE/G,WAAF,IAAAonO,EAAAA,EAASrgO,EAAE9F,GACrB,GAAW,MAAPjB,EACF,MAAM,IAAIyO,MAAM,yBAGlB,OAAOzO,CACT,CAEA,OAAOmnO,EAAa,GAAEA,KAAaD,EAAYn1M,QAAW,KAAIm1M,EAAYn1M,OAC5E,CAEQs1M,aAAAA,CAAcj+N,EAA+B89N,GACnD,MAAO,CACL18N,SAAU08N,EAAY18N,UAAYpB,EAAMoB,SAE5C,CAEA,YAASw8N,CAAYE,EAA6B99N,EAA+B+9N,EAAiBv8F,GAGhG,IAAI3mF,EAAUijL,EAAYjjL,QAC1B,IAAKA,GAAWijL,EAAY3/N,OAAS6B,GAASA,EAAMoB,SAAU,CAC5D,IAAIuhH,EAAS1rH,KAAKurC,MAAM1lC,IAAIghO,EAAY3/N,OACxC,GAAIwkH,KAAYA,EAAOu7G,mBAAqBv7G,EAAOu7G,iBAAiBjnO,KAAK4L,UAIvE,OAHA8/G,EAAOh6F,MAAQm1M,EAAYn1M,MAC3Bg6F,EAAOo7G,UAAYv8F,EAAaA,EAAW5qI,IAAM,gBAC3C+rH,GAIR9nE,EAAU76C,EAAMoB,SAAS08N,EAAY3/N,MACvC,CAIA,GAAI++N,EAAMiB,eAAetjL,GAAU,CACjC,IAAI9hD,EAAO8hD,EAAQ9hD,KACnB,GAAoB,oBAATA,GAAyD,oBAA3BA,EAAKokO,kBAAkC,CAC9E,IAAIx0N,EAA+B,oBAAjBkyC,EAAQ9hD,KAAsB8hD,EAAQ9hD,KAAK4P,KAAOkyC,EAAQ9hD,KAC5E,MAAM,IAAIsM,MAAO,oBAAmBsD,oBACtC,CAEA,IAAI46H,EAAaxqI,EAAKokO,kBAAkBtiL,EAAQtjD,MAAON,KAAK4L,SACxD8lB,EAAQm1M,EAAYn1M,MACpB6T,EAAS+mG,EAAW59H,OACxB,MAAQ62B,EAAO43C,MAAQ53C,EAAOr+B,OAAO,CACnC,IAAIigO,EAAY5hM,EAAOr+B,MAEvB2/N,EAAYn1M,MAAQA,EAEpB,IAAI01M,EAAUD,EAAUxnO,IACnBynO,IACHA,EAAUD,EAAUvjL,QAAU,KAAO5jD,KAAK4mO,OAAOhjL,EAAiCijL,EAAa99N,EAAO+9N,IAGxG,IAOI1nH,EAAW,IAPHp/G,KAAK2mO,YAAY,IACxBQ,EACHxnO,IAAKynO,QACL11M,EACAmhD,QAASw0J,GAAQR,EAAYh0J,QAASs0J,EAAUt0J,UAC/C7yE,KAAKgnO,cAAcj+N,EAAOo+N,GAAYL,EAAa,GAAEA,IAAYljL,EAAQjkD,MAAQikD,EAAQjkD,IAAK4qI,IAGjG,IAAK,IAAIr7G,KAAQkwF,EAAU,CASzB,GAPAlwF,EAAKhoB,MAAQigO,EAAUjgO,OAAS2/N,EAAY3/N,MACxCgoB,EAAKhoB,OACPlH,KAAKurC,MAAMxlC,IAAImpB,EAAKhoB,MAAOgoB,GAKzB23M,EAAY/kO,MAAQotB,EAAKptB,OAAS+kO,EAAY/kO,KAChD,MAAM,IAAIsM,MAAO,qBAAoBk5N,GAAWp4M,EAAKptB,cAAcwlO,GAAW/8F,EAAWzoI,iBAAiBwlO,GAAWT,EAAY/kO,wBAGnI4vB,UACMxC,CACR,CAEAqW,EAAS+mG,EAAW59H,KAAK0wG,EAC3B,CAEA,MACF,CAGA,GAAuB,MAAnBynH,EAAYlnO,IACd,OAIF,IAAIozH,EAAU/yH,KACVkvB,EAAgB,CAClBptB,KAAM+kO,EAAY/kO,KAClBxB,MAAOumO,EAAYvmO,MACnBX,IAAKknO,EAAYlnO,IACjBmnO,UAAWv8F,EAAaA,EAAW5qI,IAAM,KACzCuH,MAAO2/N,EAAY3/N,MACnB8C,MAAOugI,EAAaA,EAAWvgI,MAAQ,EAAI,EAC3C0nB,MAAOm1M,EAAYn1M,MACnBy0M,SAAUU,EAAYV,SACtBlC,UAAW4C,EAAY5C,UACvB,aAAc4C,EAAY,cAC1Bh0J,QAASg0J,EAAYh0J,QACrBo0J,iBAAkBJ,EAAYI,iBAC9BZ,cAAeQ,EAAYR,cAC3B/5F,WAAYm6F,IAAS,YACnB,IAAKI,EAAYR,cACf,OAGF,IAAI30M,EAAQ,EACZ,IAAK,IAAI2tF,KAASwnH,EAAYv6F,aAAc,CAEzB,MAAbjtB,EAAM1/G,MAKR0/G,EAAM1/G,IAAO,GAAEuvB,EAAKvvB,MAAM0/G,EAAM1/G,OAGlC0/G,EAAM3tF,MAAQA,EACd,IAAI3G,EAAQgoG,EAAQ4zG,YAAYtnH,EAAO0T,EAAQi0G,cAAcj+N,EAAOs2G,GAAQnwF,EAAKvvB,IAAKuvB,GACtF,IAAK,IAAIA,KAAQnE,EACf2G,UACMxC,CAEV,CACF,WAGIA,CACR,oBA1LQqc,MAA6B,IAAI1nC,SA8L3C,SAAS4iO,GAAYviO,GACnB,IAAIqnC,EAAQ,GACRpf,EAAW,KACf,MAAO,CACL,EAAE5oB,OAAOW,YACP,IAAK,IAAIuiB,KAAQ8kB,QACT9kB,EAGH0F,IACHA,EAAWjoB,KAGb,IAAK,IAAIuiB,KAAQ0F,EACfof,EAAM1kC,KAAK4f,SACLA,CAEV,EAEJ,CAGA,SAAS4gN,GAAQ3oL,EAAuBK,GACtC,OAAIL,GAASK,EACH6E,GAAYlF,EAAMK,EAAM6E,IAG9BlF,IAIAK,QAAJ,EAGF,CAEA,SAASuoL,GAAWzhN,GAClB,OAAOA,EAAI,GAAGs5D,cAAgBt5D,EAAIpgB,MAAM,EAC1C,CCpOO,SAAS8hO,GAAqFjnO,EAAgC0+C,EAAkCpzC,GACrK,IAAImnH,GAAU,EAAAy0G,EAAAA,UAAQ,IAAM,IAAIjB,IAAwB,KACpDnnH,SAACA,EAAQxyF,MAAEA,EAAKm0B,WAAEA,GAAczgD,EAQpC,OAPa,EAAAknO,EAAAA,UAAQ,KACnB,GAAIzmL,EACF,OAAOA,EAET,IAAIh2B,EAAQgoG,EAAQyzG,MAAM,UAACpnH,QAAUxyF,GAAQhhB,GAC7C,OAAOozC,EAAQj0B,EAAA,GACd,CAACgoG,EAAS3T,EAAUxyF,EAAOm0B,EAAYn1C,EAASozC,GAErD,CCnBO,SAASyoL,GAAiBv4M,EAAe6xB,GAE9C,MAAsC,oBAA3BA,EAAW2vG,YACb3vG,EAAW2vG,YAAYxhI,EAAKvvB,KAI9BuvB,EAAKo9G,UACd,CAEO,SAASo7F,GAAgBv7M,GAC9B,OAGK,SAAuBA,EAAuBuF,GACnD,GAAIA,EAAQ,EACV,OAGF,IAAInyB,EAAI,EACR,IAAK,IAAIknB,KAAQ0F,EAAU,CACzB,GAAI5sB,IAAMmyB,EACR,OAAOjL,EAGTlnB,GACF,CACF,CAhBSooO,CAAWx7M,EAAU,EAC9B,CA0BO,SAASy7M,GAAoB7mL,EAAiCr9C,EAAYiB,GAE/E,GAAIjB,EAAEojO,YAAcniO,EAAEmiO,UACpB,OAAOpjO,EAAEguB,MAAQ/sB,EAAE+sB,MAMrB,IAAIm2M,EAAa,IAAIC,GAAa/mL,EAAYr9C,GAAIA,GAC9CqkO,EAAa,IAAID,GAAa/mL,EAAYp8C,GAAIA,GAC9CqjO,EAA2BH,EAAWpiO,MAAM,EAAGsiO,EAAWtoO,QAAQ+wC,WAAU,CAAC9sC,EAAGnE,IAAMmE,IAAMqkO,EAAWxoO,KAC3G,OAAkC,IAA9ByoO,GAEFtkO,EAAImkO,EAAWG,GACfrjO,EAAIojO,EAAWC,GACRtkO,EAAEguB,MAAQ/sB,EAAE+sB,OAIjBm2M,EAAWr3L,WAAUthB,GAAQA,IAASvqB,KAAM,EACvC,GACEojO,EAAWv3L,WAAUthB,GAAQA,IAASxrB,KACvC,EAKZ,CAEA,SAASokO,GAAgB/mL,EAAiC7xB,GACxD,IAAI+4M,EAAU,GAEd,KAA0B,OAAnB,OAAA/4M,QAAA,IAAAA,OAAA,EAAAA,EAAM43M,YACX53M,EAAO6xB,EAAWt5C,QAAQynB,EAAK43M,WAC/BmB,EAAQznH,QAAQtxF,GAGlB,OAAO+4M,CACT,CC5EA,MAAMC,GAAQ,IAAIrkO,QAEX,SAASskO,GAAgBpnL,GAC9B,IAAIpmB,EAAQutM,GAAMriO,IAAIk7C,GACtB,GAAa,MAATpmB,EACF,OAAOA,EAGTA,EAAQ,EACR,IAAIytM,EAAcx7M,IAChB,IAAK,IAAInG,KAAQmG,EACG,YAAdnG,EAAK3kB,KACPsmO,EAAWX,GAAchhN,EAAMs6B,IAE/BpmB,GAAA,EAON,OAFAytM,EAAWrnL,GACXmnL,GAAMniO,IAAIg7C,EAAYpmB,GACfA,CACT,CCZO,MAAM0tM,GAAW,IAAIxkO,QAUrB,SAASykO,GAAav/N,EAAqBw/N,GAChD,IAAI13N,EAAOw3N,GAASxiO,IAAIkD,GAExB,IAAK8H,EACH,MAAM,IAAIzC,MAAM,gBAGlB,MAAQ,GAAEyC,EAAKjQ,aAfKjB,EAeqB4oO,EAdtB,kBAAR5oO,EACFA,EAAIyJ,QAAQ,OAAQ,IAGtB,GAAKzJ,IALd,IAAsBA,CAgBtB,CCuBO,SAAS6oO,GAAcloO,EAA8ByI,EAAqB5I,GAC/E,IAAIyjN,EAAW6kB,GAAenoO,EAAO,CAACw5M,WAAW,IAE7C2jB,EAAoBn9N,EAAMm9N,mBAAqB,SAC/CM,EAAez9N,EAAMy9N,eAAuC,YAAtBN,EAAkC,SAAW,YAC7D,WAAtBA,GAAmD,WAAjBM,IAIpCA,EAAe,YAGjB,IAAI0G,UAACA,GAAaiE,GAAkB,IAC/BpoO,MACHH,EACAq8N,iBAAkBzzN,EAAMyzN,iBACxBz7K,WAAYh4C,EAAMg4C,WAClBkiL,aAAcl6N,EAAMk6N,0BACpBlF,KAGE9Q,iBAACA,GAAoB0b,GAAe,CACtC7b,cAAexsN,EAAM6pN,QACrB0C,aAAcvsN,EAAM6oN,OACpB4D,oBAAqBzsN,EAAMgqN,gBAIzB1pN,EAAKgoO,GAAMtoO,EAAMM,IACrBynO,GAAStiO,IAAIgD,EAAO,IAClBnI,EACA+8N,sBAAuBr9N,EAAMq9N,sBAC7ByD,sBAAuB9gO,EAAM8gO,sBAC7ByH,mBAAoBvoO,EAAMuoO,mBAC1BhL,cAAev9N,EAAMu9N,cACrBwD,SAAU/gO,EAAM+gO,sBAChBtD,IAGF,IAAIgH,WAACA,EAAUO,WAAEA,GAAcwD,GAAS,IACnCxoO,KACHM,EAGAgkO,iBAAkB,SAGpB,MAAO,YACLG,EACAgE,aAAcC,GAAWplB,EAAUqJ,EAA2D,aAAzClkN,EAAMyzN,iBAAiB0C,cAA+B,CACzG,uBAAwB,QACtB,CAAC,EAAG,CACNhjF,KAAM,aACH8sF,GAAW1D,EAAYb,KAGhC,CClCO,SAASwE,GAAa3oO,EAAwByI,EAAqB5I,OA8DlB+oO,EA7DtD,IAAIvpO,IACFA,GACEW,EAEAuQ,EAAOw3N,GAASxiO,IAAIkD,OAEPogO,EAAjB,IAAI/yB,EAA6B,QAAhB+yB,EAAA7oO,EAAM81M,kBAAN,IAAA+yB,EAAAA,EAAoBpgO,EAAMk6N,aAAan9N,IAAInG,OAC3CypO,EAAjB,IAAI9wF,EAA6B,QAAhB8wF,EAAA9oO,EAAMg4I,kBAAN,IAAA8wF,EAAAA,EAAoBrgO,EAAMyzN,iBAAiBlkF,WAAW34I,OAC3C0pO,EAA5B,IAAIjI,EAAmD,QAA3BiI,EAAA/oO,EAAM8gO,6BAAN,IAAAiI,EAAAA,EAA+B,OAAAx4N,QAAA,IAAAA,OAAA,EAAAA,EAAMuwN,0BACxCkI,EAAzB,IAAIT,EAA6C,QAAxBS,EAAAhpO,EAAMuoO,0BAAN,IAAAS,EAAAA,EAA4B,OAAAz4N,QAAA,IAAAA,OAAA,EAAAA,EAAMg4N,uBAC/BU,EAA5B,IAAI5L,EAAmD,QAA3B4L,EAAAjpO,EAAMq9N,6BAAN,IAAA4L,EAAAA,EAA+B,OAAA14N,QAAA,IAAAA,OAAA,EAAAA,EAAM8sN,0BAC7C6L,EAApB,IAAI3L,EAAmC,QAAnB2L,EAAAlpO,EAAMu9N,qBAAN,IAAA2L,EAAAA,EAAuB,OAAA34N,QAAA,IAAAA,OAAA,EAAAA,EAAMgtN,cAE7CiH,EAAU2E,KACVlE,EAAgBkE,KAEhBC,EAAc,CAChBxtF,KAAM,SACN,gBAAiBk6D,QAAch0M,EAC/B,gBAA0D,SAAzC2G,EAAMyzN,iBAAiB0C,cAA2B5mF,OAAal2I,GAM5EunO,MAAWC,OACfF,EAAY,cAAgBppO,EAAM,cAClCopO,EAAY,mBAAqB5E,EACjC4E,EAAY,oBAAsBnE,GAGpC,IAAI9+M,EAAO1d,EAAMg4C,WAAWt5C,QAAQ9H,GACpC,GAAIk+N,EAAe,CACjB,IAAInsM,EAAQnrB,OAAO,OAAAkgB,QAAA,IAAAA,OAAA,EAAAA,EAAMiL,OACzBg4M,EAAY,iBAAmBnjO,OAAOigF,MAAM90D,QAAStvB,EAAYsvB,EAAQ,EACzEg4M,EAAY,gBAAkBG,GAAa9gO,EAAMg4C,WACnD,CAEA,IAAI4gL,UAACA,EAASpe,UAAEA,EAAS8F,UAAEA,EAAS6Y,UAAEA,EAASJ,gBAAEA,GAAmBgI,GAAkB,CACpFtN,iBAAkBzzN,EAAMyzN,qBACxB78N,MACAQ,wBACAihO,EACAE,2BAA4BF,GAAyByH,gBACrDhL,wBACAF,aACAvnB,EACAirB,UAAU,OAAAxwN,QAAA,IAAAA,OAAA,EAAAA,EAAMwwN,UAAW,SAAM0I,SAAA,OAAAl5N,QAAA,IAAAA,GAAc,QAAdk5N,EAAAl5N,EAAMwwN,gBAAN,IAAA0I,OAAA,EAAAA,EAAAjqO,KAAA+Q,EAAiBlR,EAAA,OAAOyC,EACzD27N,aAAc,OAAAltN,QAAA,IAAAA,OAAA,EAAAA,EAAMktN,gBAGlBlQ,WAACA,GAAcmc,GAAS,CAC1B5zB,WAAYA,IAAeyyB,EAC3Brb,YAAAA,GACOyc,OACHlhO,EAAMyzN,iBAAiB/G,YAAW,GAClC1sN,EAAMyzN,iBAAiBS,cAAct9N,GAEzC,IAGEikN,EAAW6kB,GAAe,OAAAhiN,QAAA,IAAAA,OAAA,EAAAA,EAAMnmB,MAAO,CAACy5M,UAAU,OAAAtzL,QAAA,IAAAA,GAAW,QAAXyiN,EAAAziN,EAAMnmB,aAAN,IAAA4oO,OAAA,EAAAA,EAAazhF,QAGnE,cAFOm8D,EAAShjN,GAET,CACL8oO,YAAa,IACRA,KACAV,GAAWplB,EAAU+d,EAAW9T,GACnCjtN,GAAI0nO,GAAUv/N,EAAOpJ,IAEvBolO,WAAY,CACVnkO,GAAIkkO,GAENa,iBAAkB,CAChB/kO,GAAI2kO,aAENlc,EACAkM,eAAgBlM,GAAa4gB,gBAC7B3xF,aACA89D,YACAmN,kBACAue,YACAI,EAEJ,CCtIO,SAASgI,GAAkB5pO,GAChC,IAAI6pO,QAACA,EAAS,aAAcrvF,GAAax6I,EACrC8pO,EAAYxB,KAEhB,MAAO,CACLjH,UAAW,CACTzlF,KAAM,gBAERmuF,aAAcF,EAAU,CAItBvpO,GAAIwpO,EACJluF,KAAM,gBACJ,CAAC,EACLouF,WAAY,CACVpuF,KAAM,QACN,aAAcpB,EACd,kBAAmBqvF,EAAUC,OAAYhoO,GAG/C,QC5DAmoO,GAAiB,CAAG,QAAY,yCCAhCC,GAAiB,CAAG,QAAY,uECAhCC,GAAiB,CAAG,QAAY,oBCAhCC,GAAiB,CAAG,QAAY,cCAhCC,GAAiB,CAAG,QAAY,uBCAhCC,GAAiB,CAAG,QAAY,2DCAhCC,GAAiB,CAAG,QAAY,kBCAhCC,GAAiB,CAAG,QAAY,oBCAhCC,GAAiB,CAAG,QAAY,oBCAhCC,GAAiB,CAAG,QAAY,uBCAhCC,GAAiB,CAAG,QAAY,kBCAhCC,GAAiB,CAAG,QAAY,yCCAhCC,GAAiB,CAAG,QAAY,iBCAhCC,GAAiB,CAAG,QAAY,2BCAhCC,GAAiB,CAAG,QAAY,iBCAhCC,GAAiB,CAAG,QAAY,6BCAhCC,GAAiB,CAAG,QAAY,uBCAhCC,GAAiB,CAAG,QAAY,kBCAhCC,GAAiB,CAAG,QAAY,4BCAhCC,GAAiB,CAAG,QAAY,eCAhCC,GAAiB,CAAG,QAAY,kBCAhCC,GAAiB,CAAG,QAAY,mBCAhCC,GAAiB,CAAG,QAAY,oBCAhCC,GAAiB,CAAG,QAAY,oBCAhCC,GAAiB,CAAG,QAAY,mBCAhCC,GAAiB,CAAG,QAAY,uECAhCC,GAAiB,CAAG,QAAY,2BCAhCC,GAAiB,CAAG,QAAY,iBCAhCC,GAAiB,CAAG,QAAY,iBCAhCC,GAAiB,CAAG,QAAY,iBCAhCC,GAAiB,CAAG,QAAY,gBCAhCC,GAAiB,CAAG,QAAY,iECAhCC,GAAiB,CAAG,QAAY,uBCgBzB,SAASC,GAA6BtlO,EAAUw6B,EAAiBq0G,GACtE,IAAK02F,EAAYC,IAAiB,EAAAC,EAAAA,UAASzlO,GAASw6B,GAEhDkrM,GAAkB,EAAAC,EAAAA,aAAiBzqO,IAAV8E,GACzB4lO,OAAyB1qO,IAAV8E,GACnB,EAAA6lO,EAAAA,YAAU,KACR,IAAIC,EAAgBJ,EAAgBpjL,QAChCwjL,IAAkBF,GACpBrjO,QAAQyC,KAAM,kCAAiC8gO,EAAgB,aAAe,qBAAqBF,EAAe,aAAe,mBAEnIF,EAAgBpjL,QAAUsjL,CAAA,GACzB,CAACA,IAEJ,IAAI7pE,EAAe6pE,EAAe5lO,EAAQulO,EACtC3gO,GAAW,EAAAmhO,EAAAA,cAAY,SAAC/lO,GAAU,QAAA4f,EAAAtnB,UAAAC,OAAAwK,EAAA,IAAAxF,MAAAqiB,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAA9c,EAAA8c,EAAA,GAAAvnB,UAAAunB,GACpC,IAAImmN,EAAiB,SAAChmO,GACpB,GAAI6uI,EACF,SAAA3uH,EAAA5nB,UAAAC,OAF4B0tO,EAAA,IAAA1oO,MAAA2iB,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAA8lN,EAAA9lN,EAAA,GAAA7nB,UAAA6nB,GAEvBloB,OAAOwrK,GAAG1H,EAAc/7J,IAC3B6uI,EAAS7uI,KAAUimO,EACrB,CAEGL,IAMH7pE,EAAe/7J,EAEnB,EAEA,GAAqB,oBAAVA,EAAsB,CAC/BuC,QAAQyC,KAAK,6HAMb,IAAIkhO,EAAiB,SAACC,GAAa,QAAAp8M,EAAAzxB,UAAAC,OAAA6tO,EAAA,IAAA7oO,MAAAwsB,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAAo8M,EAAAp8M,EAAA,GAAA1xB,UAAA0xB,GACjC,IAAIq8M,EAAmBrmO,EAAM4lO,EAAe7pE,EAAeoqE,KAAaC,GAExE,OADAJ,EAAeK,KAAqBtjO,GAC/B6iO,EAGEO,EAFEE,CAGX,EACAb,EAAcU,EAChB,MACON,GACHJ,EAAcxlO,GAEhBgmO,EAAehmO,KAAU+C,EAE7B,GAAG,CAAC6iO,EAAc7pE,EAAcltB,IAEhC,MAAO,CAACktB,EAAcn3J,EACxB,CCzDO,SAAS0hO,GAAMtmO,GAA8D,IAA/CusC,EAAAj0C,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,IAAeo7B,IAAUkD,EAAAt+B,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAco7B,IAE1E,OADe9sB,KAAK2lC,IAAI3lC,KAAKgwB,IAAI52B,EAAOusC,GAAM3V,EAEhD,CClBA2vM,GAAiB,CAAG,QAAY,gBC+BhC,MAAMC,GAAwB,CAC5BjiG,OAAQ,EACRkiG,KAAM,gBACNC,SAAU,aACVptO,OAAQ,MACRyiM,OAAQ,OACR/1G,SAAU,SACVyqF,QAAS,EACTnyF,SAAU,WACVjlF,MAAO,MACPstO,WAAY,UAWP,SAASC,KAAiD,IAA/BxtO,EAAAd,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA6B,CAAC,GAC1DmC,MACFA,EAAKosO,YACLA,GACEztO,GAEC+oN,EAAWoM,IAAc,EAAAuY,EAAAA,WAAS,IACnC/gB,iBAACA,GAAoBghB,GAAe,CACtC73B,YAAa23B,EACbhhB,oBAAsBrpK,GAAQ+xK,EAAW/xK,KAe3C,MAAO,CACLwqL,oBAAqB,IAChBjhB,EACHtrN,OAdiB,EAAAwsO,EAAAA,UAAQ,IACvB9kB,EACK1nN,EACEA,EACF,IAAI+rO,MAAW/rO,GAEf+rO,IAGR,CAACrkB,KAQN,CAMO,SAAS+kB,GAAe9tO,GAE7B,IAAI8+G,SAACA,EAAU8X,YAAayR,EAAU,MAAKolG,YAAEA,EAAWpsO,MAAEA,KAAU80N,GAAcn2N,GAC9E4tO,oBAACA,GAAuBJ,GAAkBxtO,GAE9C,OACE+tO,EAAAr4G,cAAC2S,EAAY2lG,GAAW7X,EAAYyX,GACjC9uH,EAGP,mDCzBA,MAAMmvH,GAAO,CACX31G,IAAK,MACLH,OAAQ,MACRtJ,KAAM,OACNC,MAAO,QAGHo/G,GAAoB,CACxB51G,IAAK,SACLH,OAAQ,MACRtJ,KAAM,QACNC,MAAO,QAGHq/G,GAAa,CACjB71G,IAAK,OACLzJ,KAAM,OAGFu/G,GAAY,CAChB91G,IAAK,SACLzJ,KAAM,SAGFw/G,GAAa,CACjBpuO,MAAO,aACPC,OAAQ,eAGJouO,GAAyB,CAAC,EAGhC,IAAIC,GAAqC,qBAAb7pO,UAA4B7B,OAAOwwL,eAE/D,SAASm7C,GAAuBC,GAC9B,IAAIxuO,EAAQ,EAAGC,EAAS,EAAGwuO,EAAa,EAAGC,EAAc,EAAGr2G,EAAM,EAAGzJ,EAAO,EACxE4lE,EAAmB,CAAC,EACpBm6C,GAAkB,OAAAL,SAAA,IAAAA,QAAA,EAAAA,GAAgBM,OAAQ,EAE9C,GAA8B,SAA1BJ,EAAc1pO,QAAoB,CACpC,IAAImF,EAAkBxF,SAASwF,oBAGvB4kO,EACCC,EAHTL,EAAaxkO,EAAgB2yH,YAC7B8xG,EAAczkO,EAAgB4yH,aAC9B78H,EAA6B,QAArB6uO,EAAA,OAAAP,SAAA,IAAAA,QAAA,EAAAA,GAAgBtuO,aAAhB,IAAA6uO,EAAAA,EAAyBJ,EACjCxuO,EAA+B,QAAtB6uO,EAAA,OAAAR,SAAA,IAAAA,QAAA,EAAAA,GAAgBruO,cAAhB,IAAA6uO,EAAAA,EAA0BJ,EACnCl6C,EAAOn8D,IAAMpuH,EAAgB6wH,WAAa0zG,EAAc1zG,UACxD05D,EAAO5lE,KAAO3kH,EAAgB4wH,YAAc2zG,EAAc3zG,WAKtDyzG,KACFj2G,EAAMi2G,GAAe5jG,UACrB9b,EAAO0/G,GAAeh7C,WAE1B,OACGtzL,MAACA,EAAKC,OAAEA,EAAMo4H,IAAEA,EAAGzJ,KAAEA,GAAQmgH,GAAUP,IACxCh6C,EAAOn8D,IAAMm2G,EAAc1zG,UAC3B05D,EAAO5lE,KAAO4/G,EAAc3zG,WAC5B4zG,EAAazuO,EACb0uO,EAAczuO,EAchB,OAXI+uO,OAAyC,SAA1BR,EAAc1pO,SAAgD,SAA1B0pO,EAAc1pO,UAAuB6pO,IAK1Fn6C,EAAOn8D,IAAM,EACbm8D,EAAO5lE,KAAO,EACdyJ,EAAMi2G,GAAeW,QACrBrgH,EAAO0/G,GAAeY,UAGjB,OAAClvO,SAAOC,aAAQwuO,cAAYC,SAAal6C,MAAQn8D,OAAKzJ,EAC/D,CAYA,SAASugH,GACPhgG,EACA9nF,EACA8S,EAGAi1K,EAMAC,EACAj4D,EACAk4D,GAEA,IAAIC,EAAkBF,EAAoB76C,OAAOrlD,GAE7CqgG,EAAeJ,EAAmBjB,GAAUh/F,IAG5CsgG,EAAoBL,EAAmB56C,OAAOw5C,GAAK7+F,IAASioC,EAC5Ds4D,EAAkBF,EAAeJ,EAAmB56C,OAAOw5C,GAAK7+F,IAASioC,EACzEu4D,EAAkBtoL,EAASkoL,EAAkBD,EAA4BngG,GAAQigG,EAAmBpB,GAAK7+F,IACzGygG,EAAgBvoL,EAASkoL,EAAkBp1K,EAAOm1K,EAA4BngG,GAAQigG,EAAmBpB,GAAK7+F,IAIlH,OAAIwgG,EAAkBF,EACbA,EAAoBE,EAClBC,EAAgBF,EAClBniO,KAAKgwB,IAAImyM,EAAkBE,EAAeH,EAAoBE,GAE9D,CAEX,CAYA,SAASE,GAAentK,GACtB,GAAI2rK,GAAuB3rK,GACzB,OAAO2rK,GAAuB3rK,GAGhC,IAAKyzH,EAAW25C,GAAkBptK,EAAMt7D,MAAM,KAC1C+nI,EAAa6+F,GAAK73C,IAAc,QAChC45C,EAAkB7B,GAAW/+F,GAE5B6+F,GAAK8B,KACRA,EAAiB,UAGnB,IAAI31K,EAAOg0K,GAAUh/F,GACjB6gG,EAAY7B,GAAU4B,GAE1B,OADA1B,GAAuB3rK,GAAS,WAACyzH,iBAAW25C,OAAgB3gG,YAAM4gG,OAAW51K,YAAM61K,GAC5E3B,GAAuB3rK,EAChC,CAEA,SAASutK,GACPC,EACAd,EACAe,EACAC,EACA/oL,EACAgpL,EACAf,EACAgB,EACAC,EACAC,GAEA,IAAIr6C,UAACA,EAAS25C,eAAEA,EAAc3gG,KAAEA,EAAI4gG,UAAEA,EAAS51K,KAAEA,EAAI61K,UAAEA,GAAaI,EAChEnrJ,EAAqB,CAAC,EAG1BA,EAAS8qJ,GAAaG,EAAYH,GACX,WAAnBD,EAGF7qJ,EAAS8qJ,KAAeG,EAAYF,GAAaG,EAAYH,IAAc,EAClEF,IAAmBC,IAG5B9qJ,EAAS8qJ,IAAeG,EAAYF,GAAaG,EAAYH,IAK/D/qJ,EAAS8qJ,IAAcM,EAGvB,MAAMI,EAAcP,EAAYH,GAAaI,EAAYH,GAAaO,EAAYC,EAE5EE,EAAcR,EAAYH,GAAaG,EAAYF,GAAaO,EAAYC,EAIlF,GAHAvrJ,EAAS8qJ,GAAaY,GAAM1rJ,EAAS8qJ,GAAYU,EAAaC,GAG1Dv6C,IAAchnD,EAAM,CAKtB,MAAMyhG,EAAmBN,EAAwBhB,EAA4Bn1K,GAAQi1K,EAAmBhB,GAAWj0K,IACnH8qB,EAASgpJ,GAAkB9+F,IAAS5hI,KAAK0vD,MAAM2zK,EAAkBV,EAAY/gG,GAAQ9nF,EACvF,MACE49B,EAASkqD,GAAQ5hI,KAAK0vD,MAAMizK,EAAY/gG,GAAQ+gG,EAAY/1K,GAAQ9S,GAEtE,OAAO49B,CACT,CAgCA,SAAS4rJ,GACPzB,EACAE,EACAY,EACAY,EACA15D,EACAg5D,GAEA,IAAIj6C,UAACA,EAAShnD,KAAEA,EAAIh1E,KAAEA,GAAQi2K,EAC9B,OAAIj6C,IAAchnD,EACT5hI,KAAKgwB,IAAI,EAAG2yM,EAAY/gG,GAAQigG,EAAmBjgG,GAAQigG,EAAmB56C,OAAOrlD,GAAQmgG,EAA4BngG,GAAQ2hG,EAAQ3hG,GAAQ2hG,EAAQ7C,GAAkB9+F,IAASioC,GAGtL7pK,KAAKgwB,IAAI,EAAG6xM,EAAmBj1K,GAAQi1K,EAAmBjgG,GAAQigG,EAAmB56C,OAAOrlD,GAAQmgG,EAA4BngG,GAAQ+gG,EAAY/gG,GAAQ+gG,EAAY/1K,GAAQ22K,EAAQ3hG,GAAQ2hG,EAAQ7C,GAAkB9+F,IAASioC,EAC5O,CAEO,SAAS25D,GACdC,EACAd,EACAC,EACAc,EACAH,EACA15D,EACAz1F,EACAytJ,EACAC,EACAC,EACAjoL,EACAgpL,EACAC,EACAY,EACAX,EACAC,GAEA,IAAIJ,EAAgBP,GAAemB,IAC/B72K,KAACA,EAAI41K,UAAEA,EAASC,UAAEA,EAAS75C,UAAEA,EAAS25C,eAAEA,GAAkBM,EAC1DnrJ,EAAWgrJ,GAAgBC,EAAad,EAAoBe,EAAaC,EAAe/oL,EAAQgpL,EAAaf,EAA6BgB,EAAuBC,EAAWC,GAC5KW,EAAmB9pL,EACnBwhE,EAAQgoH,GACVzB,EACAE,EACAY,EACAY,EACA15D,EAAU/vH,EACV+oL,GAIF,GAAIzuJ,GAAQsvJ,EAAW92K,GAAQ0uD,EAAO,CACpC,IAAIuoH,EAAuBvB,GAAgB,GAAE5B,GAAkB93C,MAAc25C,KACzEuB,EAAkBpB,GAAgBC,EAAad,EAAoBe,EAAaiB,EAAsB/pL,EAAQgpL,EAAaf,EAA6BgB,EAAuBC,EAAWC,GAC3KK,GACjBzB,EACAE,EACAY,EACAY,EACA15D,EAAU/vH,EACV+pL,GAIiBvoH,IACjBunH,EAAgBgB,EAChBnsJ,EAAWosJ,EACXF,EAAmB9pL,EAEvB,CAGA,IAAIiqL,EAA+C,SACxB,QAAvBlB,EAAcjhG,KACgB,QAA5BihG,EAAcj6C,UAChBm7C,EAAwB,MACa,WAA5BlB,EAAcj6C,YACvBm7C,EAAwB,UAEW,QAA5BlB,EAAcL,YACc,QAAjCK,EAAcN,eAChBwB,EAAwB,SACkB,WAAjClB,EAAcN,iBACvBwB,EAAwB,QAI5B,IAAI//F,EAAQ49F,GAASY,EAAW9qJ,EAAS8qJ,GAAYI,EAAYH,GAAYZ,EAAoBC,EAAqBj4D,EAASk4D,GAC/HrqJ,EAAS8qJ,IAAcx+F,EAEvB,IAAIrO,EArHN,SACEj+C,EACAmqJ,EACAE,EACAgB,EACAQ,EACA15D,EACAm6D,EACAD,GAEA,MAAMV,EAAmBN,EAAwBhB,EAA4BrvO,OAASmvO,EAAmBhB,GAAWnuO,QAGpH,IAAIuxO,EAA6B,MAAhBvsJ,EAASozC,IAAci3G,EAA4Bj3G,IAAMpzC,EAASozC,IAAMi3G,EAA4Bj3G,KAAOu4G,EAAkB3rJ,EAASizC,OAASq5G,GAC5JruG,EAAsC,QAA1BouG,EAEd/jO,KAAKgwB,IAAI,EACP6xM,EAAoBnvO,OAASmvO,EAAmB/2G,IAAM+2G,EAAmB56C,OAAOn8D,IAC9Em5G,GACCV,EAAQz4G,IAAMy4G,EAAQ54G,OAASk/C,IAGlC7pK,KAAKgwB,IAAI,EACTi0M,EAAcD,GACXnC,EAAmB/2G,IAAM+2G,EAAmB56C,OAAOn8D,MACnDy4G,EAAQz4G,IAAMy4G,EAAQ54G,OAASk/C,IAEtC,OAAO7pK,KAAK2lC,IAAIk8L,EAAmBnvO,OAAoB,EAAVm3K,EAAcl0C,EAC7D,CAyFkBuuG,CACdxsJ,EACAmqJ,EACAE,EACAgB,EACAQ,EACA15D,EACA+4D,EAAYlwO,OACZqxO,GAGEJ,GAAoBA,EAAmBhuG,IACzCA,EAAYguG,GAGdf,EAAYlwO,OAASsN,KAAK2lC,IAAIi9L,EAAYlwO,OAAQijI,GAElDj+C,EAAWgrJ,GAAgBC,EAAad,EAAoBe,EAAaC,EAAee,EAAkBd,EAAaf,EAA6BgB,EAAuBC,EAAWC,GACtLj/F,EAAQ49F,GAASY,EAAW9qJ,EAAS8qJ,GAAYI,EAAYH,GAAYZ,EAAoBC,EAAqBj4D,EAASk4D,GAC3HrqJ,EAAS8qJ,IAAcx+F,EAEvB,IAAImgG,EAA0B,CAAC,EAI3BC,EAAyBzB,EAAYH,GAAa,GAAKG,EAAYF,GAAaG,EAAYJ,GAGhG,MAAM6B,EAAmBrB,EAAY,EAAIC,EACnCqB,EAAmB1B,EAAYH,GAAcO,EAAY,EAAKC,EAO9DsB,EAAgCnB,GAAMgB,EAJPzB,EAAYH,GAAaI,EAAYJ,GAAcQ,EAAY,EAC/DL,EAAYH,GAAaG,EAAYF,GAAaG,EAAYJ,GAAcQ,EAAY,GAM7H,OAFAmB,EAAc3B,GAAaY,GAAMmB,EAA+BF,EAAkBC,GAE3E,UACL5sJ,EACAi+C,UAAWA,EACX6uG,gBAAiBL,EAAc9iH,KAC/BojH,eAAgBN,EAAcr5G,IAC9B89D,UAAWi6C,EAAcj6C,UAE7B,CAKO,SAAS87C,GAAkBrqO,GAChC,IAAIuuL,UACFA,EAAS+7C,WACTA,EAAUC,YACVA,EAAWC,WACXA,EAAUh7D,QACVA,EAAOi7D,WACPA,EAAUC,gBACVA,EAAejrL,OACfA,EAAMgpL,YACNA,EAAWntG,UACXA,EAAS,UACTqtG,EAAY,EAAC,oBACbC,EAAsB,GACpB5oO,EAEAk8H,EAAYquG,aAAuBttO,YAoFzC,SAA4B8pB,GAG1B,IAAI47G,EAAe57G,EAAK47G,aAMtBA,GACAA,IAAiB9lI,SAAS+H,MACyB,WAAnD5J,OAAO+hI,iBAAiB4F,GAActlD,WACrCstJ,GAAkBhoG,KAEnBA,EAAe9lI,SAASwF,iBAQ1B,GAAoB,MAAhBsgI,EAEF,IADAA,EAAe57G,EAAKu6G,cACbqB,IAAiBgoG,GAAkBhoG,IACxCA,EAAeA,EAAarB,cAKhC,OAAOqB,GAAgB9lI,SAASwF,eAClC,CAnHuDuoO,CAAmBL,GAAe1tO,SAASwF,gBAC5FwoO,EAAsB3uG,IAAcr/H,SAASwF,gBACjD,MAAMyoO,EAAyB9vO,OAAO+hI,iBAAiBb,GAAW7+C,SAClE,IAAIqrJ,IAA0BoC,GAAqD,WAA3BA,EACpDxC,EAAsBuC,EAAsB1D,GAAUmD,GAAcS,GAAYT,EAAYpuG,GAEhG,IAAK2uG,EAAqB,CACxB,IAAIG,UAACA,EAASz0F,WAAEA,GAAcv7I,OAAO+hI,iBAAiButG,GACtDhC,EAAY73G,KAAO13G,SAASiyN,EAAW,KAAO,EAC9C1C,EAAYthH,MAAQjuG,SAASw9H,EAAY,KAAO,CAClD,CAEA,IAAIgyF,EAAsBpB,GAAUoD,GAChCrB,EArRN,SAAoBniN,GAClB,IAAIvtB,EAAQwB,OAAO+hI,iBAAiBh2G,GACpC,MAAO,CACL0pG,IAAK13G,SAASvf,EAAMwxO,UAAW,KAAO,EACtC16G,OAAQv3G,SAASvf,EAAMkiI,aAAc,KAAO,EAC5C1U,KAAMjuG,SAASvf,EAAM+8I,WAAY,KAAO,EACxCtvB,MAAOluG,SAASvf,EAAMiiI,YAAa,KAAO,EAE9C,CA6QgBwvG,CAAWV,GACzBhC,EAAYnwO,OAAS8wO,EAAQliH,KAAOkiH,EAAQjiH,MAC5CshH,EAAYlwO,QAAU6wO,EAAQz4G,IAAMy4G,EAAQ54G,OAE5C,IAAI+4G,EAvUG,CACL54G,KAFe1pG,EAwUUyjN,GAtUft3G,UACVlM,KAAMjgG,EAAKksG,WACX76H,MAAO2uB,EAAK+tG,YACZz8H,OAAQ0uB,EAAKguG,cALjB,IAAmBhuG,EAyUjB,IAAIygN,EAAqBb,GAAuB+D,GAC5CjD,EAAsBd,GAAuBzqG,GAI7CwrG,EAAkE,SAA5BgD,EAAgBxtO,QAAqBiqO,GAAUjrG,GAAa6uG,GAAY7uG,EAAWwuG,GAM7H,MAL0B,SAAtBxuG,EAAUh/H,SAAkD,SAA5BwtO,EAAgBxtO,UAClDuqO,EAAoB76C,OAAOn8D,IAAM,EACjCg3G,EAAoB76C,OAAO5lE,KAAO,GAG7BmiH,GACL56C,EACA+5C,EACAC,EACAc,EACAH,EACA15D,EACAi7D,EACAjD,EACAC,EACAC,EACAjoL,EACAgpL,EACAC,EACAptG,EACAqtG,EACAC,EAEJ,CAEA,SAASzB,GAAUpgN,GACjB,IAAI0pG,IAACA,EAAGzJ,KAAEA,EAAI5uH,MAAEA,EAAKC,OAAEA,GAAU0uB,EAAK2wG,yBAClCxE,UAACA,EAASD,WAAEA,EAAU+5D,UAAEA,EAASD,WAAEA,GAAclwL,SAASwF,gBAC9D,MAAO,CACLouH,IAAKA,EAAMyC,EAAY85D,EACvBhmE,KAAMA,EAAOiM,EAAa85D,QAC1B30L,SACAC,EAEJ,CAEA,SAAS0yO,GAAYhkN,EAAe9B,GAClC,IACIw6B,EADAjmD,EAAQwB,OAAO+hI,iBAAiBh2G,GAEpC,GAAuB,UAAnBvtB,EAAM6jF,SAAsB,CAC9B,IAAIozC,IAACA,EAAGzJ,KAAEA,EAAI5uH,MAAEA,EAAKC,OAAEA,GAAU0uB,EAAK2wG,wBACtCj4E,EAAS,KAACgxE,OAAKzJ,QAAM5uH,SAAOC,EAC9B,KAAO,CACLonD,EAAS0nL,GAAUpgN,GACnB,IAAImkN,EAAe/D,GAAUliN,GACzBkmN,EAAcnwO,OAAO+hI,iBAAiB93G,GAC1CimN,EAAaz6G,MAAQ13G,SAASoyN,EAAYj0B,eAAgB,KAAO,GAAKjyL,EAAOiuG,UAC7Eg4G,EAAalkH,OAASjuG,SAASoyN,EAAYh0B,gBAAiB,KAAO,GAAKlyL,EAAOguG,WAC/ExzE,EAAOgxE,KAAOy6G,EAAaz6G,IAC3BhxE,EAAOunE,MAAQkkH,EAAalkH,IAC9B,CAIA,OAFAvnE,EAAOgxE,KAAO13G,SAASvf,EAAMwxO,UAAW,KAAO,EAC/CvrL,EAAOunE,MAAQjuG,SAASvf,EAAM+8I,WAAY,KAAO,EAC1C92F,CACT,CAuCA,SAASkrL,GAAkB5jN,GACzB,IAAIvtB,EAAQwB,OAAO+hI,iBAAiBh2G,GACpC,MACsB,SAApBvtB,EAAMT,WACN,wBAAwB2I,KAAKlI,EAAMu0L,aAClB,SAAjBv0L,EAAM2H,QACY,UAAlB3H,EAAMs0L,SAEL,mBAAoBt0L,GAAkC,SAAzBA,EAAM4xO,gBAEnC,yBAA0B5xO,GAAwC,SAA/BA,EAAM6xO,oBAE9C,CC5jBO,MAAMC,GAA2C,IAAI5vO,QASrD,SAAS6vO,GAAiBvrO,GAC/B,IAAIwrO,WAACA,EAAUzlD,OAAEA,EAAM0lD,QAAEA,GAAWzrO,GAEpC,EAAA0rO,EAAAA,YAAU,KACR,IAAK3lD,GAAsB,OAAZ0lD,EACb,OAGF,IAAI/0G,EAAYj8H,IAEd,IAAItD,EAASsD,EAAEtD,OAEf,IAAKq0O,EAAWnqL,SAAYlqD,aAAmB4pB,OAAU5pB,EAAOgvD,SAASqlL,EAAWnqL,SAClF,OAGF,IAAIsqL,EAAiBF,GAAWH,GAAW5tO,IAAI8tO,EAAWnqL,SACtDsqL,GACFA,GAAA,EAKJ,OADA3wO,OAAO6P,iBAAiB,SAAU6rH,GAAU,GACrC,KACL17H,OAAOs7H,oBAAoB,SAAUI,GAAU,EAAK,CACrD,GACA,CAACqvD,EAAQ0lD,EAASD,GACvB,CCoBA,IAAII,GAAqC,qBAAb/uO,UAA4B7B,OAAOwwL,eAMxD,SAASqgD,GAAmB1zO,GACjC,IAAI0tG,UAACA,GAAaimI,MACd,UACFnD,EAAY,EAAAoD,UACZA,EAASC,WACTA,EAAU,UACVrW,EAAYqW,EAAA,UACZz9C,EAAY,0BACZ09C,EAAmB,GAAE,WACrBxB,GAAa,EAAI,gBACjBC,GAAsC,qBAAb7tO,SAA2BA,SAAS+H,KAAO,MAAI,OACxE66C,EAAS,EAAC,YACVgpL,EAAc,EAAC,qBACfyD,GAAuB,EAAI,OAC3BnmD,GAAS,EAAA0lD,QACTA,EAAOnwG,UACPA,EAAS,oBACTstG,EAAsB,GACpBzwO,GACCklF,EAAUyrD,IAAe,EAAAqjG,EAAAA,UAAyB,CACrD9uJ,SAAU,CAAC,EACX8sJ,qBAAiBlwO,EACjBmwO,oBAAgBnwO,EAChBqhI,eAAWrhI,EACXs0L,eAAWt0L,IAGTunC,EAAO,CACT0qM,EACA39C,EACAy9C,EAAW3qL,QACX0qL,EAAU1qL,QACVs0K,EAAUt0K,QACV4qL,EACAxB,EACAC,EACAjrL,EACAgpL,EACA1iD,EACAlgF,EACAy1B,EACAstG,EACAD,GAMEyD,GAAY,EAAAC,EAAAA,QAAO,OAAAT,SAAA,IAAAA,QAAA,EAAAA,GAAgB5E,QACvC,EAAA0E,EAAAA,YAAU,KACJ3lD,IACFqmD,EAAU/qL,QAAU,OAAAuqL,SAAA,IAAAA,QAAA,EAAAA,GAAgB5E,MAAK,GAE1C,CAACjhD,IAEJ,IAAIumD,GAAiB,EAAAC,EAAAA,cAAY,KAC/B,IAA6B,IAAzBL,IAAmCnmD,IAAWimD,EAAW3qL,UAAY0qL,EAAU1qL,UAAYs0K,EAAUt0K,UAAYqpL,EACnH,OAGF,IAAI,OAAAkB,SAAA,IAAAA,QAAA,EAAAA,GAAgB5E,SAAUoF,EAAU/qL,QACtC,QAKGi6E,GAAa0wG,EAAW3qL,UAC3B2qL,EAAY3qL,QAAwB7nD,MAAM8hI,UAAY,QAGxD,IAAIj+C,EAAWgtJ,GAAkB,CAC/B97C,UAAWi+C,GAAaj+C,EAAW1oF,GACnC0kI,YAAayB,EAAW3qL,QACxBipL,WAAYyB,EAAU1qL,QACtBmpL,WAAY7U,EAAUt0K,QACtBmuH,QAASy8D,aACTxB,kBACAC,SACAjrL,cACAgpL,YACAntG,YACAqtG,sBACAC,IAKF5xO,OAAOyH,KAAK4+E,EAASA,UAAU59E,SAAQjI,GAAOw0O,EAAY3qL,QAAwB7nD,MAAMhC,GAAO6lF,EAASA,SAAS7lF,GAAO,OACvHw0O,EAAW3qL,QAAwB7nD,MAAM8hI,UAAkC,MAAtBj+C,EAASi+C,UAAqBj+C,EAASi+C,UAAY,UAAOrhI,EAGhH6uI,EAAYzrD,EAAA,GAEX77C,GAmFL,IAAmBikK,EA/EjBgnC,GAAgBH,EAAgB9qM,GAgFhCirM,IAAgB,KACdzxO,OAAO6P,iBAAiB,SAAU46L,GAAU,GACrC,KACLzqM,OAAOs7H,oBAAoB,SAAUmvE,GAAU,EAAM,IAEtD,CANcA,EA5EP6mC,IAGVI,GAAkB,CAChB10O,IAAKg0O,EACLvmC,SAAU6mC,IAKZ,IAAIK,GAAa,EAAAN,EAAAA,SAAO,GACxBI,IAAgB,KACd,IAAItoE,EACAshC,EAAWA,KACbknC,EAAWtrL,SAAU,EACrByT,aAAaqvG,GAEbA,EAAU35J,YAAW,KACnBmiO,EAAWtrL,SAAU,CAAK,GACzB,KAEHirL,GAAA,EAKE51G,EAAWA,KACTi2G,EAAWtrL,SACbokJ,GAAA,EAMJ,OAFA,OAAAmmC,SAAA,IAAAA,IAAAA,GAAgB/gO,iBAAiB,SAAU46L,GAC3C,OAAAmmC,SAAA,IAAAA,IAAAA,GAAgB/gO,iBAAiB,SAAU6rH,GACpC,KACL,OAAAk1G,SAAA,IAAAA,IAAAA,GAAgBt1G,oBAAoB,SAAUmvE,GAC9C,OAAAmmC,SAAA,IAAAA,IAAAA,GAAgBt1G,oBAAoB,SAAUI,EAAA,CAC/C,GACA,CAAC41G,IAEJ,IAAIziD,GAAQ,EAAA0iD,EAAAA,cAAY,KACjBI,EAAWtrL,SACdoqL,GAAA,GAED,CAACA,EAASkB,IAUb,OANApB,GAAiB,CACfC,WAAYO,SACZhmD,EACA0lD,QAASA,GAAW5hD,IAGf,CACL+iD,aAAc,CACZpzO,MAAO,CACL6jF,SAAU,WACVzhE,OAAQ,OACLyhE,EAASA,SACZi+C,UAAWj+C,EAASi+C,YAGxBizD,UAAWlxG,EAASkxG,UACpBkQ,WAAY,CACV,cAAe,OACf1qD,KAAM,eACNv6I,MAAO,CACLwtH,KAAM3pC,EAAS8sJ,gBACf15G,IAAKpzC,EAAS+sJ,gCAGlBkC,EAEJ,CAWA,SAASE,GAAanvJ,EAAUwoB,GAC9B,MAAkB,QAAdA,EACKxoB,EAASp8E,QAAQ,QAAS,SAASA,QAAQ,MAAO,QAEpDo8E,EAASp8E,QAAQ,QAAS,QAAQA,QAAQ,MAAO,QAC1D,CCxNA,MAAM4rO,GAAwC,GAOvC,SAASC,GAAW30O,EAAyBH,GAClD,IAAIyzO,QACFA,EAAOsB,kBACPA,EAAiBhnD,OACjBA,EAAM,cACNinD,GAAgB,EAAK,0BACrBC,GAA4B,EAAAC,6BAC5BA,GACE/0O,GAGJ,EAAAuzO,EAAAA,YAAU,KACJ3lD,GACF8mD,GAAgBnuO,KAAK1G,GAGhB,KACL,IAAIuxB,EAAQsjN,GAAgBzqO,QAAQpK,GAChCuxB,GAAS,GACXsjN,GAAgB3mO,OAAOqjB,EAAO,EAAE,IAGnC,CAACw8J,EAAQ/tL,IAGZ,IAAIm1O,EAASA,KACPN,GAAgBA,GAAgBv1O,OAAS,KAAOU,GAAOyzO,GACzDA,GAAA,EAiCJ2B,GAAmB,KAACp1O,EAAKguN,kBAAmBgnB,GAAiBjnD,EApBpCtrL,IAClByyO,IAAgCA,EAA6BzyO,EAAEtD,UAC9D01O,GAAgBA,GAAgBv1O,OAAS,KAAOU,IAClDyC,EAAE+iN,kBACF/iN,EAAE88H,kBAEJ41G,IACF,EAawF,4BA7B5D1yO,IACvByyO,IAAgCA,EAA6BzyO,EAAEtD,SAC9D01O,GAAgBA,GAAgBv1O,OAAS,KAAOU,IAClDyC,EAAE+iN,kBACF/iN,EAAE88H,iBACJ,IA0BJ,IAAIutF,iBAACA,GAAoBuoB,GAAe,CACtCp/B,YAAa8+B,EACbroB,aAAejqN,IAURA,EAAEomN,gBvE8SJwJ,GuE9SmD5vN,EAAEomN,cvE8StBsH,MuE1S7B+kB,IAAgCA,EAA6BzyO,EAAEomN,gBAClE4qB,IAAA,IAYN,MAAO,CACLmB,aAAc,WAzCCnyO,IACD,WAAVA,EAAEjD,KAAqBy1O,IACzBxyO,EAAE+iN,kBACF/iN,EAAE88H,iBACF41G,IACF,KAsCKroB,GAELwoB,cAAe,CACbjvB,cAbwB5jN,IAEtBA,EAAEtD,SAAWsD,EAAE4pM,eACjB5pM,EAAE88H,gBAAgB,GAaxB,CC9HO,SAASg2G,GAAkBp1O,EAA4ByI,EAA4B5I,GACxF,IAeIw1O,GAfA7zO,KAACA,GAAQxB,GACT4tL,OAACA,GAAUnlL,GAIf,EAAA8qO,EAAAA,YAAU,KACJ1zO,GAAOA,EAAIqpD,SACbiqL,GAAW1tO,IAAI5F,EAAIqpD,QAASzgD,EAAMipL,MAAM,IAS/B,SAATlwL,EACF6zO,GAAe,EACG,YAAT7zO,IACT6zO,EAAe,WAGjB,IAAIC,EAAYC,KAChB,MAAO,CACLC,aAAc,CACZ,gBAAiBH,EACjB,gBAAiBznD,EACjB,gBAAiBA,EAAS0nD,EAAY,KACtC1yB,QAASn6M,EAAMslL,QAEjB0mD,aAAc,CACZn0O,GAAIg1O,GAGV,CCnDA,MAAMG,GAAqC,qBAAb/wO,UAA4B7B,OAAOwwL,eAG3DqiD,GAAoB,IAAIryO,IAAI,CAChC,WACA,QACA,QACA,QACA,OACA,QACA,SACA,SACA,UAIF,IACIsyO,GADAC,GAAqB,EAQlB,SAASC,KAAmD,IAAlC9kM,EAAA7xC,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAgC,CAAC,GAC5D42M,WAACA,GAAc/kK,EAEnBujM,IAAgB,KACd,IAAIx+B,EAaJ,OATA8/B,KAC2B,IAAvBA,KAEAD,GADEG,KAoDV,WACE,IAAIC,EACAC,EAgBA/uB,EAAe3kN,IAEZyzO,GAAcA,IAAerxO,SAASwF,iBAAmB6rO,IAAerxO,SAAS+H,KAWlFspO,EAAWn5G,eAAiBm5G,EAAWj5G,cAAgBi5G,EAAWp5G,cAAgBo5G,EAAWl5G,aAC/Fv6H,EAAE88H,iBAXF98H,EAAE88H,gBAWgB,EAIlB8I,EAAc5lI,IAChB,IAAItD,EAASsD,EAAEtD,OAGXi3O,GAAiBj3O,IAAWA,IAAW0F,SAASqwI,gBAClDzyI,EAAE88H,iBACF82G,IAKAl3O,EAAOqC,MAAMT,UAAY,sBACzB5B,EAAO84I,QACPlgB,uBAAsB,KACpB54H,EAAOqC,MAAMT,UAAY,OAIzBo1O,GACFA,GAAA,EAIAnsB,EAAWvnN,IACb,IAAItD,EAASsD,EAAEtD,OACXi3O,GAAiBj3O,KACnBk3O,IAMAl3O,EAAOqC,MAAMT,UAAY,sBACzBg3H,uBAAsB,KACpB54H,EAAOqC,MAAMT,UAAY,GAIrB60O,KACEA,GAAev1O,OAAS2C,OAAO6nI,YAGjC9S,uBAAsB,KACpBu+G,GAAen3O,EAAA,IAKjBy2O,GAAe/iO,iBAAiB,UAAU,IAAMyjO,GAAen3O,IAAS,CAACsjF,MAAM,QAIvF,EAGE8zJ,EAAgB,KAChBF,EAAcA,KAChB,GAAIE,EACF,OAGF,IAAIC,EAAiBA,KAGnBxzO,OAAOyzO,SAAS,EAAG,EAAE,EAMnBC,EAAU1zO,OAAO6wL,YACjB8iD,EAAU3zO,OAAO0nI,YAErB6rG,EAAgBK,GACdC,GAAS7zO,OAAQ,SAAUwzO,GAC3BM,GAASjyO,SAASwF,gBAAiB,eAAmBrH,OAAOgoL,WAAanmL,SAASwF,gBAAgB2yH,YAA/C,MACpD85G,GAASjyO,SAASwF,gBAAiB,WAAY,UAC/CysO,GAASjyO,SAAS+H,KAAM,YAAc,IAAG+pO,QACzC,KACE3zO,OAAOyzO,SAASC,EAASC,EAAA,IAK7B3zO,OAAOyzO,SAAS,EAAG,EAAE,EAGnB7nD,EAAegoD,GACjBC,GAAShyO,SAAU,cAzHDpC,IAElByzO,EAAaa,GAAgBt0O,EAAEtD,QAAmB,GAC9C+2O,IAAerxO,SAASwF,iBAAmB6rO,IAAerxO,SAAS+H,MAOnEspO,aAAsBjxO,aAA0E,SAA3DjC,OAAO+hI,iBAAiBmxG,GAAYc,qBAC3Eb,EAA0BW,GAASZ,EAAY,qBAAsB,cA8GxB,CAACnvG,SAAS,EAAOhB,SAAS,IACzE8wG,GAAShyO,SAAU,YAAauiN,EAAa,CAACrgF,SAAS,EAAOhB,SAAS,IACvE8wG,GAAShyO,SAAU,WAAYwjI,EAAY,CAACtB,SAAS,EAAOhB,SAAS,IACrE8wG,GAAShyO,SAAU,QAASmlN,GAAS,IAGvC,MAAO,KAEL,OAAAmsB,QAAA,IAAAA,GAAAA,IACA,OAAAI,QAAA,IAAAA,GAAAA,IACA3nD,GAAA,CAEJ,CA3LkBqoD,GAkBTL,GACLE,GAASjyO,SAASwF,gBAAiB,eAAmBrH,OAAOgoL,WAAanmL,SAASwF,gBAAgB2yH,YAA/C,MACpD85G,GAASjyO,SAASwF,gBAAiB,WAAY,YAdxC,KACL0rO,KAC2B,IAAvBA,IACFD,IAAA,CAEH,GACA,CAAC7/B,GACN,CAiLA,SAAS6gC,GAASrzL,EAAsBjiD,EAAeuF,GACrD,IAAImwO,EAAMzzL,EAAQjiD,MAAMA,GAGxB,OAFAiiD,EAAQjiD,MAAMA,GAASuF,EAEhB,KACL08C,EAAQjiD,MAAMA,GAAS01O,CAAA,CAE3B,CAGA,SAASL,GACP13O,EACA0oH,EACA+0B,EACA1rG,GAGA,OADA/xC,EAAO0T,iBAAiBg1G,EAAO+0B,EAAS1rG,GACjC,KACL/xC,EAAOm/H,oBAAoBzW,EAAO+0B,EAAS1rG,EAAA,CAE/C,CAEA,SAASolM,GAAen3O,GACtB,IAAI22B,EAAOjxB,SAASw1M,kBAAoBx1M,SAASwF,gBACjD,KAAOlL,GAAUA,IAAW22B,GAAM,CAEhC,IAAIogN,EAAaa,GAAgB53O,GACjC,GAAI+2O,IAAerxO,SAASwF,iBAAmB6rO,IAAerxO,SAAS+H,MAAQspO,IAAe/2O,EAAQ,CACpG,IAAIg4O,EAAgBjB,EAAWx2G,wBAAwBjH,IACnDoH,EAAY1gI,EAAOugI,wBAAwBjH,IAC3CoH,EAAYs3G,EAAgBh4O,EAAO89H,eACrCi5G,EAAWh7G,WAAa2E,EAAYs3G,EAExC,CAEAh4O,EAAS+2O,EAAW5sG,aACtB,CACF,CAEA,SAAS8sG,GAAiBj3O,GACxB,OACEA,aAAmBsoN,mBAAqBouB,GAAkBlwO,IAAIxG,EAAOwC,OACrExC,aAAkBwoN,qBACjBxoN,aAAkB8F,aAAe9F,EAAOyoN,iBAE7C,WCpQO,SAASwvB,GAAcj3O,GAC5B,IAAIk3O,UAACA,KAAc/gB,GAAcn2N,EAG7B24I,EAASw+F,GAAUhhB,EAFDihB,GAA4BC,GAAAC,IAAc,wBAEb9sM,OAAO,YAQ1D,OACE+sM,EAAA7hH,cAAC8hH,GAAa,KACZD,EAAA7hH,cAAC,aACKijB,EACJgC,UAAW,EACXpC,QAXQA,KACR2+F,GACFA,GAAA,EAUE71O,MAAO,CAACpB,MAAO,EAAGC,OAAQ,KAGlC,CCjBAo3O,GAAiB,CACf,QAASrN,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASkB,ICtDX,IAAIsK,GAAc,IAAIl0O,QAClBm0O,GAAgB,GAUb,SAASC,GAAgBC,GAAwC,IAApBjiN,EAAAz2B,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAOwF,SAAS+H,KAC9DorO,EAAe,IAAIx0O,IAAau0O,GAChCE,EAAc,IAAIz0O,IAElBm9G,EAAQ7qF,IAEV,IAAK,IAAI2tB,KAAW3tB,EAAKy4G,iBAAiB,sDACxCypG,EAAanyO,IAAI49C,GAGnB,IAAI+wK,EAAczlM,IAKhB,GACEipN,EAAaryO,IAAIopB,IAChBkpN,EAAYtyO,IAAIopB,EAAKu6G,gBAA8D,QAA5Cv6G,EAAKu6G,cAAc2iC,aAAa,QAExE,OAAOqoD,WAAWI,cAIpB,IAAK,IAAIv1N,KAAU64O,EACjB,GAAIjpN,EAAKo/B,SAAShvD,GAChB,OAAOm1N,WAAWK,YAItB,OAAOL,WAAWM,aAAa,EAG7BhD,EAAS/sN,SAASwvN,iBACpBv+L,EACAw+L,WAAWC,aACX,YAACC,IAIC0jB,EAAa1jB,EAAW1+L,GAK5B,GAJIoiN,IAAe5jB,WAAWM,eAC5BpuB,EAAK1wK,GAGHoiN,IAAe5jB,WAAWI,cAAe,CAC3C,IAAI3lM,EAAO6iM,EAAOM,WAClB,KAAe,MAARnjM,GACLy3K,EAAKz3K,GACLA,EAAO6iM,EAAOM,UAElB,GAGE1rB,EAAQz3K,QACKopN,EAAf,IAAIv5B,EAA2B,QAAhBu5B,EAAAP,GAAYlyO,IAAIqpB,UAAhB,IAAAopN,EAAAA,EAAyB,EAIC,SAArCppN,EAAKk9I,aAAa,gBAA0C,IAAb2yC,IAIlC,IAAbA,GACF7vL,EAAKrc,aAAa,cAAe,QAGnCulO,EAAYpyO,IAAIkpB,GAChB6oN,GAAYhyO,IAAImpB,EAAM6vL,EAAW,GAAE,EAKjCi5B,GAAcv4O,QAChBu4O,GAAcA,GAAcv4O,OAAS,GAAG+pN,aAG1C1oG,EAAK7qF,GAEL,IAAIqzL,EAAW,IAAIO,kBAAiB0uB,IAClC,IAAK,IAAIC,KAAUD,EACjB,GAAoB,cAAhBC,EAAO12O,MAAqD,IAA7B02O,EAAOC,WAAWh5O,SAMhD,IAAI04O,KAAiBC,GAAa/uO,MAAK6lB,GAAQA,EAAKo/B,SAASkqL,EAAOl5O,UAAU,CACjF,IAAK,IAAI4vB,KAAQspN,EAAOE,aAClBxpN,aAAgBy5G,UAClBwvG,EAAal/N,OAAOiW,GACpBkpN,EAAYn/N,OAAOiW,IAIvB,IAAK,IAAIA,KAAQspN,EAAOC,aAEnBvpN,aAAgB9pB,aAAe8pB,aAAgBizL,aAChB,SAA/BjzL,EAAKypN,QAAQC,eAA+D,SAAnC1pN,EAAKypN,QAAQE,kBAG9C3pN,aAAgBy5G,SACzB7nB,EAAK5xF,GAFLipN,EAAanyO,IAAIkpB,EAKvB,CACF,IAGFo6L,EAASnL,QAAQloL,EAAM,CAAC6iN,WAAW,EAAMC,SAAS,IAElD,IAAIC,EAAkB,CACpB76B,OAAAA,GACEmL,EAASnL,QAAQloL,EAAM,CAAC6iN,WAAW,EAAMC,SAAS,GACpD,EACAvvB,UAAAA,GACEF,EAASE,YACX,GAKF,OAFAwuB,GAAcnxO,KAAKmyO,GAEZ,KACL1vB,EAASE,aAET,IAAK,IAAIt6L,KAAQkpN,EAAa,CAC5B,IAAIz9M,EAAQo9M,GAAYlyO,IAAIqpB,GACd,IAAVyL,GACFzL,EAAK6zK,gBAAgB,eACrBg1C,GAAY9+N,OAAOiW,IAEnB6oN,GAAYhyO,IAAImpB,EAAMyL,EAAQ,EAElC,CAGIq+M,IAAoBhB,GAAcA,GAAcv4O,OAAS,IAC3Du4O,GAAc1tO,MACV0tO,GAAcv4O,QAChBu4O,GAAcA,GAAcv4O,OAAS,GAAG0+M,WAG1C65B,GAAc3pO,OAAO2pO,GAAcztO,QAAQyuO,GAAkB,EAAE,CAGrE,CChGO,SAASC,GAAW34O,EAAyByI,GAClD,IAAI4qO,WACFA,EAAUuF,WACVA,EAAUC,WACVA,EAAU/D,0BACVA,EAAyBC,6BACzBA,KACG5e,GACDn2N,GAEAy0O,aAACA,EAAYU,cAAEA,GAAiBR,GAClC,CACE/mD,OAAQnlL,EAAMmlL,OACd0lD,QAAS7qO,EAAMipL,MACfkjD,mBAAmB,EACnBC,eAAgBgE,4BAChB/D,+BACAC,GAEF6D,IAGGnE,aAAcqE,EAAaxyC,WAAEA,EAAUlQ,UAAEA,GAAas9C,GAAmB,IACzEvd,EACHyd,UAAWP,EACXQ,WAAY+E,EACZhrD,OAAQnlL,EAAMmlL,OACd0lD,QAASuF,EAAapwO,EAAMipL,MAAQ,OAatC,OAVAmkD,GAAiB,CACf//B,WAAY+iC,IAAepwO,EAAMmlL,SAGnC0mD,IAAgB,KACd,GAAI7rO,EAAMmlL,SAAWirD,GAAcD,EAAW1vL,QAC5C,OAAOyuL,GAAgB,CAACiB,EAAW1vL,SAAS,GAE7C,CAAC2vL,EAAYpwO,EAAMmlL,OAAQgrD,IAEvB,CACLG,aAAcC,GAAWvE,EAAcqE,cACvCxyC,gBACA6uC,YACA/+C,EAEJ,CC/EO,MAAM6iD,GAAiB1B,EAAMrvD,cAAc,MAM3C,SAASgxD,GAAQl5O,GACtB,IAAIw6N,EAAQ2e,MACR,gBAACC,GAAkB5e,EAAQ,KAAO91N,SAAS+H,MAAI4sO,UAAEA,GAAar5O,GAC7D21L,EAAS2jD,IAAc,EAAAtF,EAAAA,WAAS,GACjCuF,GAAe,EAAAC,EAAAA,UAAQ,KAAM,SAAE7jD,aAAS2jD,KAAc,CAAC3jD,EAAS2jD,IAEpE,IAAKF,EACH,OAAO,KAGT,IAAIK,EAAWz5O,EAAM8+G,SAiBrB,OAhBK9+G,EAAM05O,yBACTD,EACElC,EAAA7hH,cAACikH,GAAS,CAAEzpB,cAAA,EAAav6B,QAASA,IAAY0jD,GAC3CI,IAKPA,EACElC,EAAA7hH,cAACujH,GAAetiE,SAAQ,CAAC/vK,MAAO2yO,GAC9BhC,EAAA7hH,cAACkkH,GAAkB,KAChBH,IAKAI,EAASC,aAAaL,EAAUL,EACzC,6DC3BO,SAASW,GAAkB/5O,EAA6ByI,EAAyB5I,GACtF,IAAI,KACF2B,EAAO,OAAAs0M,WACPA,EAAU,QACVzrB,EAAU,SACRrqL,EAEAg6O,EAAgBC,MAChBzE,aAACA,EAAYf,aAAEA,GAAgByF,GAAkB,MAAC14O,GAAOiH,EAAO5I,GA2ChEs6O,EAAkBC,GAA4B/C,GAAAgD,IAAc,qBAC5DxrB,eAACA,GAAkByrB,GAAa,CAClCxkC,WAAYA,GAA0B,cAAZzrB,EAC1BqkC,yBAA0ByrB,EAAgB3vM,OAAO,oBACjD+jL,gBAAAA,GACE9lN,EAAMipL,OACR,EACA+8B,WAAAA,GACEhmN,EAAMwlH,KAAK,QACb,IAGE22F,EAAc,CAChB9B,YAAAA,CAAaxgN,GAEW,UAAlBA,EAAEylC,aAA6C,aAAlBzlC,EAAEylC,aAA+B+tK,GAGhErtM,EAAMslL,OAAyB,YAAlBzrL,EAAEylC,YAA4B,QAAU,KAEzD,EACA66K,OAAAA,CAAQtgN,GACgB,UAAlBA,EAAEylC,aAA4B+tK,GAChCrtM,EAAMslL,QAEV,GAMF,cAFOynD,EAAa5yB,QAEb,CACL23B,iBAAkB,IACb/E,KACa,UAAZnrD,EAAsBu6B,EAAaiK,EACvCvuN,GAAI05O,YA5ES13O,IACf,IAAIwzM,IAIY,cAAZzrB,GAA4B/nL,EAAE+4K,SAI9Bx7K,GAAOA,EAAIqpD,QACb,OAAQ5mD,EAAEjD,KACR,IAAK,QACL,IAAK,IACH,GAAgB,cAAZgrL,EACF,OAGJ,IAAK,YAEG,wBAAyB/nL,GAC7BA,EAAE+iN,kBAEJ/iN,EAAE88H,iBACF32H,EAAMslL,OAAO,SACb,MACF,IAAK,UACG,wBAAyBzrL,GAC7BA,EAAE+iN,kBAEJ/iN,EAAE88H,iBACF32H,EAAMslL,OAAO,QACb,MACF,QAEM,wBAAyBzrL,GAC3BA,EAAE+/M,sBAER,GA0CFm4B,UAAW,IACN/F,EACH,kBAAmBuF,EACnBnjG,UAAWpuI,EAAMgyO,gBAAiB,EAClCnH,QAAS7qO,EAAMipL,OAGrB,CC7GA2oD,GAAiB,CACf,QCnCe,CAAG,iBAAqB,kQDoCvC,QEpCe,CAAG,iBAAqB,yZFqCvC,QGrCe,CAAG,iBAAqB,uGHsCvC,QItCe,CAAG,iBAAqB,mEJuCvC,QKvCe,CAAG,iBAAqB,0FLwCvC,QMxCe,CAAG,iBAAqB,8VNyCvC,QOzCe,CAAG,iBAAqB,oDP0CvC,QQ1Ce,CAAG,iBAAqB,qER2CvC,QS3Ce,CAAG,iBAAqB,+ET4CvC,QU5Ce,CAAG,iBAAqB,wFV6CvC,QW7Ce,CAAG,iBAAqB,4GX8CvC,QY9Ce,CAAG,iBAAqB,wOZ+CvC,Qa/Ce,CAAG,iBAAqB,oFbgDvC,QchDe,CAAG,iBAAqB,oGdiDvC,QejDe,CAAG,iBAAqB,qEfkDvC,QgBlDe,CAAG,iBAAqB,2HhBmDvC,QiBnDe,CAAG,iBAAqB,kIjBoDvC,QkBpDe,CAAG,iBAAqB,0GlBqDvC,QmBrDe,CAAG,iBAAqB,0InBsDvC,QoBtDe,CAAG,iBAAqB,gEpBuDvC,QqBvDe,CAAG,iBAAqB,uErBwDvC,QsBxDe,CAAG,iBAAqB,oHtByDvC,QuBzDe,CAAG,iBAAqB,2EvB0DvC,QwB1De,CAAG,iBAAqB,wExB2DvC,QyB3De,CAAG,iBAAqB,8GzB4DvC,Q0B5De,CAAG,iBAAqB,oW1B6DvC,Q2B7De,CAAG,iBAAqB,6H3B8DvC,Q4B9De,CAAG,iBAAqB,iG5B+DvC,Q6B/De,CAAG,iBAAqB,6E7BgEvC,Q8BhEe,CAAG,iBAAqB,oF9BiEvC,Q+BjEe,CAAG,iBAAqB,2G/BkEvC,QgClEe,CAAG,iBAAqB,4ahCmEvC,QiCnEe,CAAG,iBAAqB,+FjCoEvC,QkCpEe,CAAG,iBAAqB,wFCwCjB,IAAI92O,QCtBNiK,KAAKwjM,GCMpB,SAAS0pC,GAAqB16O,EAA+ByI,EAA4B5I,GAC9F,IAAI86O,mBAACA,EAAkB7iG,MAAEA,GAAS93I,EAGlC46O,IAAgB,KACd,GAA2B,WAAvBD,IAAmC,OAAA96O,QAAA,IAAAA,OAAA,EAAAA,EAAKqpD,SAAS,CACnD,IAAI27K,EAAep8N,EAAMoyO,mBAAmB/V,UAAYr8N,EAAMoyO,mBAAmBC,iBAAiBtxO,KAAK,MAAQ,iBAAmB,GAClI3J,EAAIqpD,QAAQ6xL,kBAAkBlW,GAIzBhlO,EAAIqpD,QAAQoyJ,aAAa,WAC5Bz7M,EAAIqpD,QAAQppD,MAAQ,IAGjB2I,EAAMoyO,mBAAmB/V,WAC5Br8N,EAAMuyO,iBA2EL,CACLlW,YAFuBniK,EA1EsB9iE,EAAIqpD,SA4E/B+xL,SAASr8M,MAC3Bs8M,kBAAmBC,GAAYx4K,GAC/Bm4K,iBAAkBn4K,EAAMy4K,kBAAoB,CAACz4K,EAAMy4K,mBAAqB,IA5ExE,CAwEJ,IAA2Bz4K,CAxEvB,IAGF,IAAI69I,EAAU66B,IAAe,KAC3B5yO,EAAM6yO,iBAAiB,IAGrBC,EAAYF,IAAgB/4O,QAQnBq+M,EALNl4M,EAAM+yO,kBAAkB1W,WAC3Br8N,EAAMgzO,mBAIR,IAAI76B,EAAO,OAAA/gN,QAAA,IAAAA,GAAY,QAAZ8gN,EAAA9gN,EAAKqpD,eAAL,IAAAy3J,OAAA,EAAAA,EAAcC,SAKrB86B,GAJCp5O,EAAEq5K,kBAAoB97K,GAAO+gN,GAgEtC,SAA8BA,GAC5B,IAAK,IAAI3hN,EAAI,EAAGA,EAAI2hN,EAAKnpB,SAASt4L,OAAQF,IAAK,CAC7C,IAAIqkD,EAAUs9J,EAAKnpB,SAASx4L,GAC5B,IAAKqkD,EAAQ23L,SAASr8M,MACpB,OAAO0kB,CAEX,CAEA,OAAO,IACT,CAzE8Cq4L,CAAqB/6B,KAAU/gN,EAAIqpD,UACvE4uF,EACFA,IAEW,QAAX4jG,EAAA77O,EAAIqpD,eAAJ,IAAAwyL,GAAAA,EAAa5jG,QAIf8jG,GAAuB,aAIzBt5O,EAAE88H,gBAAgB,IAGhBqW,EAAW4lG,IAAe,KAC5B5yO,EAAMgzO,kBAAkB,KAG1B,EAAAI,EAAAA,YAAU,KACR,IAAIl5K,EAAQ,OAAA9iE,QAAA,IAAAA,OAAA,EAAAA,EAAKqpD,QACjB,IAAKyZ,EACH,OAGF,IAAIi+I,EAAOj+I,EAAMi+I,KAIjB,OAHAj+I,EAAMjwD,iBAAiB,UAAW6oO,GAClC54K,EAAMjwD,iBAAiB,SAAU+iI,GACjC,OAAAmrE,QAAA,IAAAA,GAAAA,EAAMluM,iBAAiB,QAAS8tM,GACzB,KACL79I,EAAOw7D,oBAAoB,UAAWo9G,GACtC54K,EAAOw7D,oBAAoB,SAAUsX,GACrC,OAAAmrE,QAAA,IAAAA,GAAAA,EAAMziF,oBAAoB,QAASqiF,EAAA,CACpC,GACA,CAAC3gN,EAAK07O,EAAW9lG,EAAU+qE,EAASm6B,GACzC,CAEA,SAASQ,GAAYx4K,GAGnB,IAAIs4K,EAAWt4K,EAAMs4K,SACrB,MAAO,CACLa,SAAUb,EAASa,SACnBC,YAAad,EAASc,YACtBC,gBAAiBf,EAASe,gBAC1BC,cAAehB,EAASgB,cACxBC,eAAgBjB,EAASiB,eACzBC,aAAclB,EAASkB,aACvBC,QAASnB,EAASmB,QAClBC,SAAUpB,EAASoB,SACnBC,aAAcrB,EAASqB,aACvBC,aAActB,EAASsB,aACvB39M,MAAOq8M,EAASr8M,MAEpB,CCpDO,MAAM49M,GAAa,IAAIj5O,QAQvB,SAASk5O,GAAaz8O,EAA6ByI,EAAuB5I,GAC/E,IAAIo8N,iBACFA,EAAgBnmB,WAChBA,EAAUx/E,WACVA,EAAUllH,KACVA,EAAI,mBACJupO,EAAqB,QACnB36O,EAIA0jO,EAAWgZ,GAAY,CAAC3Y,MAAO,SAAUC,YAAa,SACtDlH,GAAW,EAAA6f,EAAAA,UAAQ,IAAM1gB,GAAoB,IAAI2gB,GAAqBn0O,EAAMg4C,WAAYh4C,EAAMk6N,aAAc,KAAMe,IAAW,CAACzH,EAAkBxzN,EAAMg4C,WAAYh4C,EAAMk6N,aAAce,KAEtL6W,iBAACA,EAAgBC,UAAEA,GAAaqC,GAClC,YACE/mC,EACAt0M,KAAM,WAERiH,EACA5I,IA4BEw8N,gBAACA,GAAmBygB,GAAc,CACpC7gB,iBAAkBa,EAClBZ,iBAAkBzzN,EAAMyzN,iBACxBC,YAAAA,CAAa98N,GACXoJ,EAAMs0O,eAAe19O,EACvB,KAGEylO,UAACA,EAASgW,iBAAEA,EAAgBI,kBAAEA,GAAqBzyO,EAAM+yO,mBACzD/W,WAACA,EAAUO,WAAEA,EAAUK,iBAAEA,EAAgBC,kBAAEA,GAAqB0X,GAAS,IACxEh9O,EACHskO,iBAAkB,iBAClBQ,EACAD,aAAc7kO,EAAM6kO,cAAgBiW,IAGtCze,EAAgB1gF,UAAY0gF,EAAgBC,wBACrCD,EAAgBC,iBAEvB,IAAIhZ,EAAW25B,GAAej9O,EAAO,CAACw5M,WAAW,IAC7Cg8B,EAAe0H,GAAW7gB,EAAiBke,EAAkBvV,GAE7DmY,EAAUC,KASd,OAPAZ,GAAW/2O,IAAIgD,EAAO,YACpBqtM,aACAx/E,OACAllH,qBACAupO,IAGK,CACLlW,WAAY,IACPA,EACHlsF,QAASA,KACFv4I,EAAM81M,aACTj2M,EAAIqpD,QAAQ4uF,QAGZulG,GAAuB,YACzB,GAGJ7H,aAAc0H,GAAW55B,EAAU,IAC9BkyB,aACH1/B,EACAn6D,UAAW2hG,GAAM9H,EAAa75F,WAvEjBr5I,IACf,OAAQA,EAAEjD,KACR,IAAK,YAAa,CAEhBiD,EAAE88H,iBAEF,IAAI//H,EAA2B,MAArBoJ,EAAM80O,YAAsBzgB,EAASqC,YAAY12N,EAAM80O,aAAezgB,EAASiB,cACrF1+N,GACFoJ,EAAMs0O,eAAe19O,GAEvB,KACF,CACA,IAAK,aAAc,CAEjBiD,EAAE88H,iBAEF,IAAI//H,EAA2B,MAArBoJ,EAAM80O,YAAsBzgB,EAASiC,YAAYt2N,EAAM80O,aAAezgB,EAASiB,cACrF1+N,GACFoJ,EAAMs0O,eAAe19O,GAEvB,KACF,EACF,GAiDsDW,EAAM27I,WAC1DypE,QAASplN,EAAMolN,QACf,kBAAmB,CACjB+3B,EACA3H,EAAa,mBACbA,EAAa,gBAAkBA,EAAa,mBAAqBA,EAAal1O,GAAK,MACnF0I,OAAOnD,SAAS2D,KAAK,KACvBqgN,OAAAA,CAAQvnN,GACFmG,EAAMsgN,YAIN/oN,EAAM6pN,SACR7pN,EAAM6pN,QAAQvnN,GAGZtC,EAAMgqN,eACRhqN,EAAMgqN,eAAc,GAGtBvhN,EAAM0sN,YAAW,GACnB,EACAtM,MAAAA,CAAOvmN,GACDmG,EAAMmlL,SAIN5tL,EAAM6oN,QACR7oN,EAAM6oN,OAAOvmN,GAGXtC,EAAMgqN,eACRhqN,EAAMgqN,eAAc,GAGtBvhN,EAAM0sN,YAAW,GACnB,IAEFqoB,WAAY,CACVl9O,GAAI68O,GAEN3C,UAAW,IACNA,EACH3jG,UAAWpuI,EAAMgyO,gBAAiB,EAClC3Z,uBAAuB,EACvByH,oBAAoB,EACpBvL,wBAAwB,EACxBS,aAAc,YACd5U,OAASvmN,IACHA,EAAE4pM,cAAcl+I,SAAS1rD,EAAEomN,iBAI3B1oN,EAAM6oN,QACR7oN,EAAM6oN,OAAOvmN,GAGXtC,EAAMgqN,eACRhqN,EAAMgqN,eAAc,GAGtBvhN,EAAM0sN,YAAW,GAAM,EAEzB,kBAAmB,CACjB6P,EAAW,mBACXwQ,EAAa,gBAAkBxQ,EAAW,mBAAqBwQ,EAAal1O,GAAK,MACjF0I,OAAOnD,SAAS2D,KAAK,uBAEzB67N,oBACAC,YACAR,mBACAgW,oBACAI,EAEJ,CCrLO,SAASuC,GAAmBz9O,EAAgCyI,EAAuB4qO,GACxF,IAAI9iO,EAAOisO,GAAWj3O,IAAIkD,IAAU,CAAC,GACjCi1O,aAACA,EAAY,KAAEtsO,EAAOb,EAAKa,KAAI,WAAE0kM,EAAavlM,EAAKulM,YAAc91M,GACjE26O,mBAACA,EAAkBrkH,WAAEA,GAAc/lH,EACnCo6M,EAAWgzB,MACX/P,oBAACA,GAAuBgQ,SA6CjBC,EAnBX,OAxBAC,GAAa99O,EAAM+9O,UAAWt1O,EAAM80O,YAAa90O,EAAMs0O,gBACvDiB,GAAkB,oBAChBrD,EACA7iG,MAAOA,IAAMu7F,EAAWnqL,QAAQ4uF,SAC/BrvI,EAAOzI,EAAM+9O,WAoBT,CACLE,eAAgB,IACXrQ,EACH,eAAe,EACf,mBAAsB,qBAExBsQ,WAAY,CACV18O,KAAM,OACNm5I,SAAsB,MAAZgwE,GAAoBliN,EAAMsgN,WAAatgN,EAAMmlL,QAAU,EAAI,EACrEvsL,MAAO,CAAC88O,SAAU,IAClBt0B,QAASA,IAAMwpB,EAAWnqL,QAAQ4uF,QAClCoG,SAAU43D,GAEZsoC,YAAa,CACXzjG,UAAW,eACX+iG,EACAx/F,SAAU43D,EACV97J,SAAiC,WAAvB2gM,GAAmCrkH,OAC7CllH,EACAxK,MAAwB,QAAjBi3O,EAAAp1O,EAAM80O,mBAAN,IAAAM,EAAAA,EAAqB,GAC5BpoG,SAAWnzI,GAA4CmG,EAAMs0O,eAAez6O,EAAEtD,OAAO4H,QAG3F,CAMO,SAASy3O,GAAgBr+O,GAC9B,IAAIyI,MAACA,EAAK4qO,WAAEA,EAAUrpN,MAAEA,EAAK5Y,KAAEA,EAAI0kM,WAAEA,GAAc91M,EAC/C+9O,GAAY,EAAAO,EAAAA,QAAO,OACnBL,eAACA,EAAcC,WAAEA,EAAUE,YAAEA,GAAeX,GAAgB,IAAIz9O,YAAO+9O,GAAYt1O,EAAO4qO,OAoCjFwK,EA/Bb,OAAIp1O,EAAMg4C,WAAW2Z,MAAQ,IAEzBmkL,EAAA7oH,cAAC,UAAQuoH,EAAgB,cAAY,2BACnCM,EAAA7oH,cAAC,QAAUwoH,GACXK,EAAA7oH,cAAC,aACE1rG,EACDu0N,EAAA7oH,cAAC,aAAW0oH,EAAav+O,IAAKk+O,GAC5BQ,EAAA7oH,cAAC,eACA,IAAIjtH,EAAMg4C,WAAW8C,WAAWpzC,KAAI9Q,IACnC,IAAI8mB,EAAO1d,EAAMg4C,WAAWt5C,QAAQ9H,GACpC,GAAkB,SAAd8mB,EAAK3kB,KACP,OACE+8O,EAAA7oH,cAAC,UACCr2H,IAAK8mB,EAAK9mB,IACVuH,MAAOuf,EAAK9mB,KACX8mB,EAAKw9M,UAAS,OAStBvyN,EAEPmtO,EAAA7oH,cAAC,SACCl0H,KAAK,SACLk8O,aAAcU,EAAYV,aAC1BtsO,KAAMA,EACN8sI,SAAU43D,EACVlvM,MAAwB,QAAjBi3O,EAAAp1O,EAAM80O,mBAAN,IAAAM,EAAAA,EAAqB,KAI3B,IACT,CC7IO,MAAMW,WAAkBn7O,IAI7BgI,WAAAA,CAAY/E,EAAkCm4O,EAAiBC,GAC7Dn6N,MAAMje,GACFA,aAAgBk4O,IAClB9+O,KAAK++O,UAAYA,GAAan4O,EAAKm4O,UACnC/+O,KAAKg/O,WAAaA,GAAcp4O,EAAKo4O,aAErCh/O,KAAK++O,UAAYA,EACjB/+O,KAAKg/O,WAAaA,EAEtB,ECaK,SAASC,GAA0B3+O,GACxC,IAAI,cACF4+N,EAAgB,OAAA5B,uBAChBA,EAAsB4hB,8BACtBA,EACAzhB,kBAAmB0hB,EAAwB,SAAQ,iBACnD5a,EAAmB,OACjBjkO,EAIA8+O,GAAe,EAAAC,EAAAA,SAAO,IACrB,CAAE5pB,IAAc,EAAA6pB,EAAAA,WAAS,GAC1BC,GAAgB,EAAAF,EAAAA,QAAO,MACvBG,GAAwB,EAAAH,EAAAA,QAAO,OAC9B,CAAEpiB,IAAiB,EAAAqiB,EAAAA,UAAS,MAC7BG,GAAmB,EAAAC,EAAAA,UAAQ,IAAMC,GAAiBr/O,EAAMi+N,eAAe,CAACj+N,EAAMi+N,eAC9EqhB,GAAsB,EAAAF,EAAAA,UAAQ,IAAMC,GAAiBr/O,EAAMs/O,oBAAqB,IAAId,KAAc,CAACx+O,EAAMs/O,uBACxGrhB,EAAckD,GAAmBoe,GACpCJ,EACAG,EACAt/O,EAAMw/O,mBAEJC,GAAmB,EAAAL,EAAAA,UAAQ,IAC7Bp/O,EAAM2iO,aAAe,IAAIt/N,IAAIrD,EAAM2iO,cAAgB,IAAIt/N,KACvD,CAACrD,EAAM2iO,gBACJxF,EAAmBmF,IAAwB,EAAA0c,EAAAA,UAASH,GAI3B,YAA1BA,GAA6D,WAAtB1hB,GAA0D,kBAAjBc,GAAmD,IAAtBA,EAAa7jK,MAC5HkoK,EAAqB,WAIvB,IAAIod,GAAwB,EAAAX,EAAAA,QAAOF,GAQnC,OAPA,EAAAc,EAAAA,YAAU,KACJd,IAA0Ba,EAAsBx2L,UAClDo5K,EAAqBuc,GACrBa,EAAsBx2L,QAAU21L,EAClC,GACC,CAACA,IAEG,eACLjgB,yBACA5B,oBACAG,uBACAmF,EACA,aAAIvZ,GACF,OAAO+1B,EAAa51L,OACtB,EACAisK,UAAAA,CAAWjxN,GACT46O,EAAa51L,QAAUhlD,EACvBixN,EAAWjxN,EACb,EACA,cAAIw4N,GACF,OAAOuiB,EAAc/1L,OACvB,EACA,sBAAIk4K,GACF,OAAO8d,EAAsBh2L,OAC/B,EACAyzK,aAAAA,CAAc1sN,GAA+B,IAA5BmxN,EAAAliO,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAqB,QACpC+/O,EAAc/1L,QAAUj5C,EACxBivO,EAAsBh2L,QAAUk4K,EAChCzE,EAAc1sN,EAChB,eACAguN,EACAkD,eAAAA,CAAgB76N,IACVs4O,GA9FV,SAAmBgB,EAAMC,GACvB,GAAID,EAAKxlL,OAASylL,EAAKzlL,KACrB,OAAO,EAGT,IAAK,IAAIj0C,KAAQy5N,EACf,IAAKC,EAAKr6O,IAAI2gB,GACZ,OAAO,EAIX,OAAO,CACT,CAkF4C25N,CAAUx5O,EAAM23N,IACpDkD,EAAgB76N,EAEpB,EACAq8N,aAAc8c,mBACdxb,EAEJ,CAEA,SAASob,GAAiBnzD,EAAkC9qJ,GAC1D,OAAK8qJ,EAIgB,QAAdA,EACH,MACA,IAAIsyD,GAAUtyD,GALT9qJ,CAMX,CC/FO,MAAM2+M,GAgBX,iBAAInhB,GACF,OAAOl/N,KAAK+I,MAAMm2N,aACpB,CAKA,0BAAI5B,GACF,OAAOt9N,KAAK+I,MAAMu0N,sBACpB,CAKA,qBAAIG,GACF,OAAOz9N,KAAK+I,MAAM00N,iBACpB,CAKAmF,oBAAAA,CAAqBnF,GACnBz9N,KAAK+I,MAAM65N,qBAAqBnF,EAClC,CAKA,aAAIpU,GACF,OAAOrpN,KAAK+I,MAAMsgN,SACpB,CAKAoM,UAAAA,CAAWpM,GACTrpN,KAAK+I,MAAM0sN,WAAWpM,EACxB,CAKA,cAAI2T,GACF,OAAOh9N,KAAK+I,MAAMi0N,UACpB,CAGA,sBAAI0E,GACF,OAAO1hO,KAAK+I,MAAM24N,kBACpB,CAKAzE,aAAAA,CAAct9N,EAAiB+hO,IAClB,MAAP/hO,GAAeK,KAAK+gD,WAAWt5C,QAAQ9H,KACzCK,KAAK+I,MAAMk0N,cAAct9N,EAAK+hO,EAElC,CAKA,gBAAInD,GACF,MAAmC,QAA5Bv+N,KAAK+I,MAAMw1N,aACd,IAAI56N,IAAI3D,KAAKsgP,oBACbtgP,KAAK+I,MAAMw1N,YACjB,CAMA,gBAAIgiB,GACF,OAAOvgP,KAAK+I,MAAMw1N,YACpB,CAKAjmF,UAAAA,CAAW34I,GACT,MAAiC,SAA7BK,KAAK+I,MAAMm2N,gBAIfv/N,EAAMK,KAAK4mO,OAAOjnO,GACiB,QAA5BK,KAAK+I,MAAMw1N,aACdv+N,KAAKw+N,cAAc7+N,GACnBK,KAAK+I,MAAMw1N,aAAaz4N,IAAInG,GAClC,CAKA,WAAIwmF,GACF,MAAmC,QAA5BnmF,KAAK+I,MAAMw1N,cAA2D,IAAjCv+N,KAAK+I,MAAMw1N,aAAa7jK,IACtE,CAKA,eAAI8lL,GACF,GAAIxgP,KAAKmmF,QACP,OAAO,EAGT,GAAgC,QAA5BnmF,KAAK+I,MAAMw1N,aACb,OAAO,EAGT,GAAyB,MAArBv+N,KAAKygP,aACP,OAAOzgP,KAAKygP,aAGd,IAAIrlN,EAAUp7B,KAAKsgP,mBACf/hB,EAAev+N,KAAK+I,MAAMw1N,aAE9B,OADAv+N,KAAKygP,aAAerlN,EAAQoE,OAAMjvB,GAAKguN,EAAaz4N,IAAIyK,KACjDvQ,KAAKygP,YACd,CAEA,oBAAIzf,GACF,IAAIv2I,EAA8B,KAClC,IAAK,IAAI9qF,KAAOK,KAAK+I,MAAMw1N,aAAc,CACvC,IAAI93M,EAAOzmB,KAAK+gD,WAAWt5C,QAAQ9H,KAC9B8qF,GAAUhkE,GAAQi6N,GAAiB1gP,KAAK+gD,WAAYt6B,EAAMgkE,GAAS,KACtEA,EAAQhkE,EAEZ,CAEA,OAAO,OAAAgkE,QAAA,IAAAA,OAAA,EAAAA,EAAO9qF,GAChB,CAEA,mBAAIohO,GACF,IAAIh5J,EAA6B,KACjC,IAAK,IAAIpoE,KAAOK,KAAK+I,MAAMw1N,aAAc,CACvC,IAAI93M,EAAOzmB,KAAK+gD,WAAWt5C,QAAQ9H,KAC9BooE,GAASthD,GAAQi6N,GAAiB1gP,KAAK+gD,WAAYt6B,EAAMshD,GAAQ,KACpEA,EAAOthD,EAEX,CAEA,OAAO,OAAAshD,QAAA,IAAAA,OAAA,EAAAA,EAAMpoE,GACf,CAEA,gBAAIsjO,GACF,OAAOjjO,KAAK+I,MAAMk6N,YACpB,CAEA,oBAAIsB,GACF,OAAOvkO,KAAK+I,MAAMw7N,gBACpB,CAKApF,eAAAA,CAAgBx4J,GACd,GAA2B,SAAvB3mE,KAAKk/N,cACP,OAGF,GAA2B,WAAvBl/N,KAAKk/N,cAEP,YADAl/N,KAAKo/N,iBAAiBz4J,GAMxB,IAAI6lH,EAGJ,GALA7lH,EAAQ3mE,KAAK4mO,OAAOjgK,GAKY,QAA5B3mE,KAAK+I,MAAMw1N,aACb/xC,EAAY,IAAIsyD,GAAU,CAACn4K,GAAQA,EAAOA,OACrC,CACL,IAAI43J,EAAev+N,KAAK+I,MAAMw1N,aAC1BwgB,EAAYxgB,EAAawgB,WAAap4K,EAC1C6lH,EAAY,IAAIsyD,GAAUvgB,EAAcwgB,EAAWp4K,GACnD,IAAK,IAAIhnE,KAAOK,KAAK2gP,YAAY5B,EAAWxgB,EAAaygB,YAAcr4K,GACrE6lH,EAAUvzK,OAAOtZ,GAGnB,IAAK,IAAIA,KAAOK,KAAK2gP,YAAYh6K,EAAOo4K,GAClC/+O,KAAKw+N,cAAc7+N,IACrB6sL,EAAUxmL,IAAIrG,EAGpB,CAEAK,KAAK+I,MAAM04N,gBAAgBj1C,EAC7B,CAEQm0D,WAAAA,CAAYh7O,EAAWqmB,GAC7B,IAAI40N,EAAW5gP,KAAK+gD,WAAWt5C,QAAQ9B,GACnCk7O,EAAS7gP,KAAK+gD,WAAWt5C,QAAQukB,GACrC,OAAI40N,GAAYC,EACVH,GAAiB1gP,KAAK+gD,WAAY6/L,EAAUC,IAAW,EAClD7gP,KAAK8gP,oBAAoBn7O,EAAMqmB,GAGjChsB,KAAK8gP,oBAAoB90N,EAAIrmB,GAG/B,EACT,CAEQm7O,mBAAAA,CAAoBn7O,EAAWqmB,GACrC,IAAIplB,EAAc,GACdjH,EAAMgG,EACV,KAAOhG,GAAK,CACV,IAAI8mB,EAAOzmB,KAAK+gD,WAAWt5C,QAAQ9H,GAKnC,IAJI8mB,GAAsB,SAAdA,EAAK3kB,MAAkC,SAAd2kB,EAAK3kB,MAAmB9B,KAAK+gP,sBAChEn6O,EAAKC,KAAKlH,GAGRA,IAAQqsB,EACV,OAAOplB,EAGTjH,EAAMK,KAAK+gD,WAAWiiL,YAAYrjO,EACpC,CAEA,MAAO,EACT,CAEQinO,MAAAA,CAAOjnO,GACb,IAAI8mB,EAAOzmB,KAAK+gD,WAAWt5C,QAAQ9H,GACnC,IAAK8mB,EAEH,OAAO9mB,EAIT,GAAkB,SAAd8mB,EAAK3kB,MAAmB9B,KAAK+gP,oBAC/B,OAAOphP,EAIT,KAAqB,SAAd8mB,EAAK3kB,MAAqC,MAAlB2kB,EAAKqgN,WAClCrgN,EAAOzmB,KAAK+gD,WAAWt5C,QAAQgf,EAAKqgN,WAGtC,OAAKrgN,GAAsB,SAAdA,EAAK3kB,KAIX2kB,EAAK9mB,IAHH,IAIX,CAKA6hO,eAAAA,CAAgB7hO,GACd,GAA2B,SAAvBK,KAAKk/N,cACP,OAGF,GAA2B,WAAvBl/N,KAAKk/N,gBAA+Bl/N,KAAKs4I,WAAW34I,GAEtD,YADAK,KAAKo/N,iBAAiBz/N,GAKxB,GAAW,OADXA,EAAMK,KAAK4mO,OAAOjnO,IAEhB,OAGF,IAAIiH,EAAO,IAAIk4O,GAAsC,QAA5B9+O,KAAK+I,MAAMw1N,aAAyBv+N,KAAKsgP,mBAAqBtgP,KAAK+I,MAAMw1N,cAC9F33N,EAAKd,IAAInG,GACXiH,EAAKqS,OAAOtZ,GAGHK,KAAKw+N,cAAc7+N,KAC5BiH,EAAKZ,IAAIrG,GACTiH,EAAKm4O,UAAYp/O,EACjBiH,EAAKo4O,WAAar/O,GAGhBK,KAAKs9N,wBAAwC,IAAd12N,EAAK8zD,MAIxC16D,KAAK+I,MAAM04N,gBAAgB76N,EAC7B,CAKAw4N,gBAAAA,CAAiBz/N,GACf,GAA2B,SAAvBK,KAAKk/N,cACP,OAIF,GAAW,OADXv/N,EAAMK,KAAK4mO,OAAOjnO,IAEhB,OAGF,IAAI6sL,EAAYxsL,KAAKw+N,cAAc7+N,GAC/B,IAAIm/O,GAAU,CAACn/O,GAAMA,EAAKA,GAC1B,IAAIm/O,GAER9+O,KAAK+I,MAAM04N,gBAAgBj1C,EAC7B,CAKAi1C,eAAAA,CAAgB76N,GACd,GAA2B,SAAvB5G,KAAKk/N,cACP,OAGF,IAAI1yC,EAAY,IAAIsyD,GACpB,IAAK,IAAIn/O,KAAOiH,EAEd,GADAjH,EAAMK,KAAK4mO,OAAOjnO,GACP,MAAPA,IACF6sL,EAAUxmL,IAAIrG,GACa,WAAvBK,KAAKk/N,eACP,MAKNl/N,KAAK+I,MAAM04N,gBAAgBj1C,EAC7B,CAEQ8zD,gBAAAA,GACN,IAAI15O,EAAc,GACdo6O,EAAWrhP,IACb,KAAOA,GAAK,CACV,GAAIK,KAAKw+N,cAAc7+N,GAAM,CAC3B,IAAI8mB,EAAOzmB,KAAK+gD,WAAWt5C,QAAQ9H,GACjB,SAAd8mB,EAAK3kB,MACP8E,EAAKC,KAAKlH,GAIR8mB,EAAK4/M,gBAAkBrmO,KAAK+gP,qBAAqC,SAAdt6N,EAAK3kB,OAC1Dk/O,EAAQC,GAAaC,GAAcz6N,EAAMzmB,KAAK+gD,aAAaphD,IAE/D,CAEAA,EAAMK,KAAK+gD,WAAWiiL,YAAYrjO,EACpC,GAIF,OADAqhP,EAAQhhP,KAAK+gD,WAAWs9K,eACjBz3N,CACT,CAKA05N,SAAAA,GACOtgO,KAAKwgP,aAAsC,aAAvBxgP,KAAKk/N,eAC5Bl/N,KAAK+I,MAAM04N,gBAAgB,MAE/B,CAKAlB,cAAAA,IACOvgO,KAAKs9N,yBAAuD,QAA5Bt9N,KAAK+I,MAAMw1N,cAA0Bv+N,KAAK+I,MAAMw1N,aAAa7jK,KAAO,IACvG16D,KAAK+I,MAAM04N,gBAAgB,IAAIqd,GAEnC,CAKAqC,eAAAA,GACMnhP,KAAKwgP,YACPxgP,KAAKugO,iBAELvgO,KAAKsgO,WAET,CAEA1G,MAAAA,CAAOj6N,EAAUiD,GACY,SAAvB5C,KAAKk/N,gBAIkB,WAAvBl/N,KAAKk/N,cACHl/N,KAAKs4I,WAAW34I,KAASK,KAAKs9N,uBAChCt9N,KAAKwhO,gBAAgB7hO,GAErBK,KAAKo/N,iBAAiBz/N,GAEY,WAA3BK,KAAKy9N,mBAAmC76N,IAAwB,UAAlBA,EAAEylC,aAA6C,YAAlBzlC,EAAEylC,aAEtFroC,KAAKwhO,gBAAgB7hO,GAErBK,KAAKo/N,iBAAiBz/N,GAE1B,CAKAyhP,gBAAAA,CAAiB50D,GACf,GAAIA,IAAcxsL,KAAK+I,MAAMw1N,aAC3B,OAAO,EAIT,IAAIA,EAAev+N,KAAKu+N,aACxB,GAAI/xC,EAAU9xH,OAAS6jK,EAAa7jK,KAClC,OAAO,EAGT,IAAK,IAAI/6D,KAAO6sL,EACd,IAAK+xC,EAAaz4N,IAAInG,GACpB,OAAO,EAIX,IAAK,IAAIA,KAAO4+N,EACd,IAAK/xC,EAAU1mL,IAAInG,GACjB,OAAO,EAIX,OAAO,CACT,CAEA6+N,aAAAA,CAAc7+N,GACZ,GAAiC,SAA7BK,KAAK+I,MAAMm2N,eAA4Bl/N,KAAK+I,MAAMk6N,aAAan9N,IAAInG,GACrE,OAAO,EAGT,IAAI8mB,EAAOzmB,KAAK+gD,WAAWt5C,QAAQ9H,GACnC,SAAK8mB,GAAuB,SAAdA,EAAK3kB,OAAoB9B,KAAK+gP,oBAK9C,CAEA3qC,UAAAA,CAAWz2M,GACT,OAAOK,KAAK+I,MAAMk6N,aAAan9N,IAAInG,IAAwC,QAAhCK,KAAK+I,MAAMw7N,gBACxD,CAEAxqB,MAAAA,CAAOp6M,OACI0hP,EAAAC,EAAT,SAAiC,QAAxBA,EAAAthP,KAAK+gD,WAAWt5C,QAAQ9H,UAAxB,IAAA2hP,GAAmC,QAAnCD,EAAAC,EAA8BhhP,aAA9B,IAAA+gP,OAAA,EAAAA,EAAqC55F,KAChD,CAvcA97I,WAAAA,CAAYo1C,EAAuCh4C,EAA+BsoC,OAGrDkwM,EAF3BvhP,KAAK+gD,WAAaA,EAClB/gD,KAAK+I,MAAQA,EACb/I,KAAK+gP,oBAAkD,QAA5BQ,EAAA,OAAAlwM,QAAA,IAAAA,OAAA,EAAAA,EAAS0vM,2BAAT,IAAAQ,GAAAA,EAC3BvhP,KAAKygP,aAAe,IACtB,EC/BK,MAAMe,GAgDX,EAAEj+O,OAAOW,kBACAlE,KAAKmsB,QACd,CAEA,QAAIuuC,GACF,OAAO16D,KAAKyhP,OAAO/mL,IACrB,CAEA7W,OAAAA,GACE,OAAO7jD,KAAKyhP,OAAO76O,MACrB,CAEAu8N,YAAAA,CAAaxjO,GACX,IAAIuvB,EAAOlvB,KAAKyhP,OAAO57O,IAAIlG,GAC3B,OAAOuvB,EAAOA,EAAKqmH,QAAU,IAC/B,CAEAytF,WAAAA,CAAYrjO,GACV,IAAIuvB,EAAOlvB,KAAKyhP,OAAO57O,IAAIlG,GAC3B,OAAOuvB,EAAOA,EAAKswM,QAAU,IAC/B,CAEAnB,WAAAA,GACE,OAAOr+N,KAAKkgO,QACd,CAEA5B,UAAAA,GACE,OAAOt+N,KAAKmgO,OACd,CAEA14N,OAAAA,CAAQ9H,GACN,OAAOK,KAAKyhP,OAAO57O,IAAIlG,EACzB,CAEAkiB,EAAAA,CAAG6sI,GACD,MAAM9nJ,EAAO,IAAI5G,KAAK6jD,WACtB,OAAO7jD,KAAKyH,QAAQb,EAAK8nJ,GAC3B,CAEAgC,WAAAA,CAAY/wJ,GACV,IAAIuvB,EAAOlvB,KAAKyhP,OAAO57O,IAAIlG,GAC3B,OAAO,OAAAuvB,QAAA,IAAAA,OAAA,EAAAA,EAAMo9G,aAAc,EAC7B,CApFA3gI,WAAAA,CAAYof,QALJ02N,OAA4B,IAAIh+O,IAMtCzD,KAAKmsB,SAAWpB,EAEhB,IAcIg9C,EAdA+gD,EAAS55F,IAGX,GAFAlvB,KAAKyhP,OAAO17O,IAAImpB,EAAKvvB,IAAKuvB,GAEtBA,EAAKo9G,YAA4B,YAAdp9G,EAAKptB,KAC1B,IAAK,IAAIu9G,KAASnwF,EAAKo9G,WACrBxjB,EAAMzJ,EAAA,EAKZ,IAAK,IAAInwF,KAAQnE,EACf+9F,EAAM55F,GAIR,IAAIwC,EAAQ,EACZ,IAAK,IAAK/xB,EAAKuvB,KAASlvB,KAAKyhP,OACvB15K,GACFA,EAAKy3J,QAAU7/N,EACfuvB,EAAKqmH,QAAUxtE,EAAKpoE,MAEpBK,KAAKkgO,SAAWvgO,EAChBuvB,EAAKqmH,aAAUnzI,GAGC,SAAd8sB,EAAKptB,OACPotB,EAAKwC,MAAQA,KAGfq2C,EAAO74C,EAIP64C,EAAKy3J,aAAUp9N,EAGjBpC,KAAKmgO,QAAU,OAAAp4J,QAAA,IAAAA,OAAA,EAAAA,EAAMpoE,GACvB,ECpBK,SAAS+hP,GAA+BphP,GAC7C,IAAIgJ,OAACA,GAAUhJ,EAEXqhP,EAAiBC,GAA0BthP,GAC3C2iO,GAAe,EAAA4e,EAAAA,UAAQ,IACzBvhP,EAAM2iO,aAAe,IAAIt/N,IAAIrD,EAAM2iO,cAAgB,IAAIt/N,KACvD,CAACrD,EAAM2iO,eAELjkL,GAAU,EAAA8iM,EAAAA,cAAY/2N,GAAkB,IAAIy2N,GAAbl4O,EAA4BA,EAAOyhB,GAA6BA,IAA6B,CAACzhB,IAC7HsC,GAAU,EAAAi2O,EAAAA,UAAQ,KAAM,CAAEzb,yBAA0B9lO,EAAM8lO,4BAA4B,CAAC9lO,EAAM8lO,2BAE7FrlL,EAAaghM,GAAczhP,EAAO0+C,EAASpzC,GAE3C4wN,GAAmB,EAAAqlB,EAAAA,UAAQ,IAC7B,IAAIG,GAAiBjhM,EAAY4gM,IAC/B,CAAC5gM,EAAY4gM,IAIjB,MAAMM,GAAmB,EAAAC,EAAAA,QAAO,MA8ChC,OA7CA,EAAAC,EAAAA,YAAU,KACR,GAAiC,MAA7BR,EAAe3kB,aAAuBj8K,EAAWt5C,QAAQk6O,EAAe3kB,YAAa,CACvF,MAAMolB,EAAYH,EAAiBz4L,QAAQ/hD,QAAQk6O,EAAe3kB,YAC5DqlB,EAAkB,IAAIJ,EAAiBz4L,QAAQ3F,WAAWpzC,KAC9D9Q,IACE,MAAM2iP,EAAWL,EAAiBz4L,QAAQ/hD,QAAQ9H,GAClD,MAAyB,SAAlB2iP,EAASxgP,KAAkBwgP,EAAW,IAAI,IAEnDh5O,QAAO4lB,GAAiB,OAATA,IACXqzN,EAAY,IAAIxhM,EAAW8C,WAAWpzC,KAC1C9Q,IACE,MAAM2iP,EAAWvhM,EAAWt5C,QAAQ9H,GACpC,MAAyB,SAAlB2iP,EAASxgP,KAAkBwgP,EAAW,IAAI,IAEnDh5O,QAAO4lB,GAAiB,OAATA,IACXklE,EAAOiuJ,EAAgB5iP,OAAS8iP,EAAU9iP,OAChD,IAOI+iP,EAPA9wN,EAAQ5jB,KAAK2lC,IAEb2gD,EAAO,EACPtmF,KAAKgwB,IAAIskN,EAAU1wN,MAAQ0iE,EAAO,EAAG,GACrCguJ,EAAU1wN,MAEZ6wN,EAAU9iP,OAAS,GAErB,KAAOiyB,GAAS,GAAG,CACjB,IAAK8qM,EAAiBpmB,WAAWmsC,EAAU7wN,GAAO/xB,KAAM,CACtD6iP,EAAUD,EAAU7wN,GACpB,KACF,CAEIA,EAAQ6wN,EAAU9iP,OAAS,EAC7BiyB,KAGIA,EAAQ0wN,EAAU1wN,QACpBA,EAAQ0wN,EAAU1wN,OAEpBA,IAEJ,CACAiwN,EAAe1kB,cAAculB,EAAUA,EAAQ7iP,IAAM,KACvD,CACAsiP,EAAiBz4L,QAAUzI,CAAA,GAC1B,CAACA,EAAYy7K,EAAkBmlB,EAAgBA,EAAe3kB,aAE1D,YACLj8K,eACAkiL,mBACAzG,EAEJ,CCvEO,SAASimB,GAA2CniP,OACiBoiP,EAA1E,IAAK7E,EAAaR,GAAkBsF,GAAmBriP,EAAMu9O,YAAqC,QAAxB6E,EAAApiP,EAAMsiP,0BAAN,IAAAF,EAAAA,EAA4B,KAAMpiP,EAAMw/O,mBAC9GvhB,GAAe,EAAAsjB,EAAAA,UAAQ,IAAqB,MAAfhE,EAAsB,CAACA,GAAe,IAAI,CAACA,KACxE98L,WAACA,EAAUkiL,aAAEA,EAAYzG,iBAAEA,GAAoBklB,GAAa,IAC3DphP,EACH4+N,cAAe,SACf5B,wBAAwB,EACxB4hB,+BAA+B,eAC/B3gB,EACAuhB,kBAAoBl5O,QACRi8O,EAAV,IAAIljP,EAAgC,QAA1BkjP,EAAAj8O,EAAKgM,SAASlE,OAAOxH,aAArB,IAAA27O,EAAAA,EAA8B,KAIpCljP,IAAQk+O,GAAev9O,EAAMw/O,mBAC/Bx/O,EAAMw/O,kBAAkBngP,GAG1B09O,EAAe19O,EAAA,IAIf8wI,EAA8B,MAAfotG,EACf98L,EAAWt5C,QAAQo2O,GACnB,KAEJ,MAAO,YACL98L,eACAkiL,mBACAzG,cACAqhB,iBACAR,eACA5sG,EAEJ,CCxCO,SAASqyG,GAAuBxiP,GACrC,IAAK4tL,EAAQ60D,GAAWC,GAAmB1iP,EAAM4tL,OAAQ5tL,EAAM2iP,cAAe,EAAO3iP,EAAM4iP,cAE3F,MAAM30H,GAAO,EAAA40H,EAAAA,cAAY,KACvBJ,GAAQ,EAAK,GACZ,CAACA,IAEE/wD,GAAQ,EAAAmxD,EAAAA,cAAY,KACxBJ,GAAQ,EAAM,GACb,CAACA,IAEE10D,GAAS,EAAA80D,EAAAA,cAAY,KACzBJ,GAAS70D,EAAA,GACR,CAAC60D,EAAS70D,IAEb,MAAO,QACLA,UACA60D,OACAx0H,QACAyjE,SACA3D,EAEJ,CCNO,SAAS+0D,GAAoB9iP,GAClC,IAAI+iP,EAAsBC,GAAuBhjP,IAC5Cy6O,EAAewI,IAAoB,EAAAC,EAAAA,UAAwB,OAC3DC,EAAmBC,IAAwB,EAAAF,EAAAA,UAAgB,IA4BhE,MAAO,eACLzI,KACGsI,EACH90H,IAAAA,GACEg1H,EADG/jP,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA+B,MAElC6jP,EAAoB90H,MACtB,EACA8/D,MAAAA,GACEk1D,EADK/jP,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA+B,MAEpC6jP,EAAoBh1D,QACtB,EACA2D,KAAAA,GApCA0xD,EAAqB,IACrBL,EAAoBrxD,OAqCpB,EACA2xD,2BAA4BF,EAC5BG,qBApCgBC,CAACC,EAAiB95O,KAClC05O,GAAqBK,GACf/5O,EAAQ+5O,EAAStkP,OACZskP,EAGF,IAAIA,EAASt+O,MAAM,EAAGuE,GAAQ85O,IACrC,EA8BFE,sBA3BiBC,CAACH,EAAiB95O,KACnC05O,GAAqBK,GACTA,EAAS/5O,KACP85O,EACHC,EAASt+O,MAAM,EAAGuE,GAElB+5O,GAET,EAqBN,CCnFO,MAAMG,GAAsC,CACjD9H,UAAU,EACVC,aAAa,EACbC,iBAAiB,EACjBC,eAAe,EACfC,gBAAgB,EAChBC,cAAc,EACdC,SAAS,EACTC,UAAU,EACVC,cAAc,EACdC,cAAc,EACd39M,OAAO,GAGHilN,GAAuC,IACxCD,GACH7H,aAAa,EACbn9M,OAAO,GAGIklN,GAA8C,CACzDhf,WAAW,EACXoW,kBAAmB0I,GACnB9I,iBAAkB,IAGPiJ,IAAwB,EAAAC,EAAAA,eAAgC,CAAC,GAEzDC,GAA6B,wBAA0Bh/O,KAAK43D,MAqBlE,SAASqnL,GAA0BlkP,GAExC,GAAIA,EAAMikP,IAA6B,CACrC,IAAIpJ,mBAACA,EAAkBW,kBAAEA,EAAiBR,iBAAEA,EAAgBM,gBAAEA,EAAeG,iBAAEA,GAAoBz7O,EAAMikP,IACzG,MAAO,oBAACpJ,oBAAoBW,mBAAmBR,kBAAkBM,mBAAiBG,EACpF,CAGA,OAGF,SAAuCz7O,GACrC,IAAI8kO,UAACA,EAASC,gBAAEA,EAAe3zN,KAAEA,EAAIxK,MAAEA,EAAKu9O,kBAAEA,EAAiB9sN,SAAEA,EAAQ,mBAAEsjN,EAAqB,QAAU36O,EAGtG+kO,IACFD,IAAAA,EAAkC,YAApBC,IAIhB,IAAIqf,EAA2Ctf,EAAY,CACzDA,WAAW,EACXgW,iBAAkB,GAClBI,kBAAmB2I,IACjB,KAGAQ,GAAuC,EAAAC,EAAAA,UAAQ,IAAMC,GAwG3D,SAAwBltN,EAAiCzwB,GACvD,GAAwB,oBAAbywB,EAAyB,CAClC,IAAI/0B,EAAI+0B,EAASzwB,GACjB,GAAItE,GAAkB,mBAANA,EACd,OAAOkiP,GAAQliP,EAEnB,CAEA,MAAO,EACT,CAjH+EmiP,CAAYptN,EAAUzwB,KAAS,CAACywB,EAAUzwB,KAEnH,OAAAu9O,QAAA,IAAAA,OAAA,EAAAA,EAAmBjJ,kBAAkBt8M,SACvCulN,EAAoB,MAItB,IAAIO,GAAe,EAAAC,EAAAA,YAAWZ,IAC1Ba,GAAsB,EAAAN,EAAAA,UAAQ,IAC5BlzO,EACKjN,MAAMK,QAAQ4M,GAAQA,EAAKmwE,SAAQnwE,GAAQozO,GAAQE,EAAatzO,MAAUozO,GAAQE,EAAatzO,IAEjG,IACN,CAACszO,EAActzO,KAGbyzO,EAAkBC,IAAuB,EAAAC,EAAAA,UAASL,IAClDM,EAAsBC,IAAyB,EAAAF,EAAAA,WAAS,GACzDL,IAAiBG,IACnBC,EAAoBJ,GACpBO,GAAsB,IAGxB,IAAIC,GAAuC,EAAAZ,EAAAA,UAAQ,IACjDC,GAAoBS,EAAuB,GAAKJ,IAChD,CAACI,EAAsBJ,IAIrBO,GAAiB,EAAAC,EAAAA,QAAOtB,KACvBuB,EAAiBC,IAAsB,EAAAP,EAAAA,UAASjB,IAEjDyB,GAAY,EAAAH,EAAAA,QAAOtB,IACnBrI,EAAmBA,KACrB,IAAK+J,EACH,OAGFC,GAAgB,GAChB,IAAI35O,EAAQu4O,GAAeF,GAAqBgB,EAAej8L,QAC1Dw8L,GAAkB55O,EAAOy5O,EAAUr8L,WACtCq8L,EAAUr8L,QAAUp9C,EACpBw5O,EAAmBx5O,GACrB,GAGG05O,EAAcC,IAAmB,EAAAV,EAAAA,WAAS,GAW/C,OAVA,EAAAY,EAAAA,WAAUlK,GAUH,oBALkB2I,GAAmBc,GAAeb,GAAeF,GAAqBL,qBAChD,WAAvBnJ,EACpByJ,GAAmBc,GAAeG,EAClCjB,GAAmBc,GAAeb,GAAeF,GAAqBkB,EAKxErK,gBAAAA,CAAiBp0O,GAEY,SAAvB+zO,GAAkC+K,GAAkBL,EAAiBz+O,GAGvEu+O,EAAej8L,QAAUtiD,EAFzB0+O,EAAmB1+O,EAIvB,EACA00O,eAAAA,GAGE,IAAIxvO,EAAQg4O,GACP4B,GAAkB55O,EAAOy5O,EAAUr8L,WACtCq8L,EAAUr8L,QAAUp9C,EACpBw5O,EAAmBx5O,IAKM,WAAvB6uO,GACF8K,GAAgB,GAGlBR,GAAsB,EACxB,EACAxJ,gBAAAA,GAG6B,WAAvBd,GACF8K,GAAgB,GAElBR,GAAsB,EACxB,EAEJ,CAjHSW,CAA2B5lP,EACpC,CAkHA,SAASwkP,GAAWp+O,GAClB,OAAKA,EAIEjC,MAAMK,QAAQ4B,GAAKA,EAAI,CAACA,GAHtB,EAIX,CAaA,SAASm+O,GAAoB1xN,GAC3B,OAAOA,EAAO1zB,OAAS,CACrB2lO,WAAW,EACXgW,iBAAkBjoN,EAClBqoN,kBAAmB2I,IACjB,IACN,CAEA,SAAS6B,GAAkBtiP,EAA4BiB,GACrD,OAAIjB,IAAMiB,GAIHjB,GAAKiB,GACPjB,EAAE0hO,YAAczgO,EAAEygO,WAClB1hO,EAAE03O,iBAAiB37O,SAAWkF,EAAEy2O,iBAAiB37O,QACjDiE,EAAE03O,iBAAiB57M,OAAM,CAAC97B,EAAGnE,IAAMmE,IAAMiB,EAAEy2O,iBAAiB77O,MAC5DJ,OAAOmF,QAAQZ,EAAE83O,mBAAmBh8M,OAAMt/B,IAAA,IAAEqQ,EAAG7J,GAAExG,EAAA,OAAKyE,EAAE62O,kBAAkBjrO,KAAO7J,CAAA,GACxF,CCrLO,SAASy/O,GAAiC7lP,GAC/C,IAAI8lP,EAAeC,GAAuB/lP,IACrCy6O,EAAewI,IAAoB,EAAA+C,EAAAA,UAAwB,MAC5DC,EAAYC,GAAyB,IACpClmP,EACHw/O,kBAAoBngP,IACa,MAA3BW,EAAMw/O,mBACRx/O,EAAMw/O,kBAAkBngP,GAG1BymP,EAAap0D,QACbqzC,EAAgB0W,kBAAkB,IAIlC1W,EAAkBohB,GAAuB,IACxCnmP,EACH4G,MAAOq/O,EAAU1I,eAGdx0B,EAAWoM,IAAc,EAAA6wB,EAAAA,WAAS,GAEvC,MAAO,IACFjhB,KACAkhB,KACAH,gBACHrL,EACAxsH,IAAAA,GAAwC,IAAnCwsH,EAAAv7O,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA+B,KAEA,IAA9B+mP,EAAUxlM,WAAW2Z,OACvB6oL,EAAiBxI,GACjBqL,EAAa73H,OAEjB,EACA8/D,MAAAA,GAA0C,IAAnC0sD,EAAAv7O,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA+B,KACF,IAA9B+mP,EAAUxlM,WAAW2Z,OACvB6oL,EAAiBxI,GACjBqL,EAAa/3D,SAEjB,YACAg7B,aACAoM,EAEJ,kCCjEO,MAAMixB,GAgGX,EAAEnjP,OAAOW,kBACA,IAAIlE,KAAK2mP,KAClB,CAEA,QAAIjsL,GACF,MAAO,IAAI16D,KAAK2mP,MAAMlnP,MACxB,CAEAokD,OAAAA,GACE,OAAO7jD,KAAKyhP,OAAO76O,MACrB,CAEAu8N,YAAAA,CAAaxjO,GACX,IAAIuvB,EAAOlvB,KAAKyhP,OAAO57O,IAAIlG,GAC3B,OAAOuvB,EAAOA,EAAKqmH,QAAU,IAC/B,CAEAytF,WAAAA,CAAYrjO,GACV,IAAIuvB,EAAOlvB,KAAKyhP,OAAO57O,IAAIlG,GAC3B,OAAOuvB,EAAOA,EAAKswM,QAAU,IAC/B,CAEAnB,WAAAA,OACSx5N,EAAP,OAAwB,QAAjBA,EAAA,IAAI7E,KAAK2mP,MAAM,UAAf,IAAA9hP,OAAA,EAAAA,EAAmBlF,GAC5B,CAEA2+N,UAAAA,OAESsoB,EADP,IAAID,EAAO,IAAI3mP,KAAK2mP,MACpB,OAA4B,QAArBC,EAAAD,EAAKA,EAAKlnP,OAAS,UAAnB,IAAAmnP,OAAA,EAAAA,EAAuBjnP,GAChC,CAEA8H,OAAAA,CAAQ9H,GACN,OAAOK,KAAKyhP,OAAO57O,IAAIlG,EACzB,CAEAkiB,EAAAA,CAAG6sI,GACD,MAAM9nJ,EAAO,IAAI5G,KAAK6jD,WACtB,OAAO7jD,KAAKyH,QAAQb,EAAK8nJ,GAC3B,CAEAgC,WAAAA,CAAY/wJ,GACV,IAAIuvB,EAAOlvB,KAAKyhP,OAAO57O,IAAIlG,GAC3B,OAAO,OAAAuvB,QAAA,IAAAA,OAAA,EAAAA,EAAMo9G,aAAc,EAC7B,CAtIA3gI,WAAAA,CAAYxD,QAJZs5O,OAAgC,IAAIh+O,IAKlCzD,KAAKyhP,OAAS,IAAIh+O,IAClBzD,KAAK+iB,YAAc,OAAA5a,QAAA,IAAAA,OAAA,EAAAA,EAAM4a,YACzB/iB,KAAK2mP,KAAO,GAEZ,IAsDI5+K,EAtDA+gD,EAAS55F,IAIX,IAAI23N,EAAW7mP,KAAKyhP,OAAO57O,IAAIqpB,EAAKvvB,KAChCwI,EAAK2+O,YACP53N,EAAO/mB,EAAK2+O,UAAU53N,IAGxBlvB,KAAKyhP,OAAO17O,IAAImpB,EAAKvvB,IAAKuvB,GAE1B,IACI64C,EADAg/K,EAAY,IAAIpjP,IAEpB,IAAK,IAAI07G,KAASnwF,EAAKo9G,WACF,SAAfjtB,EAAMv9G,MAAsC,MAAnBu9G,EAAMynH,YAEjCznH,EAAMynH,UAAY53M,EAAKvvB,KAEzBonP,EAAU/gP,IAAIq5G,EAAM1/G,KAEhBooE,GACFA,EAAKy3J,QAAUngH,EAAM1/G,IACrB0/G,EAAMk2B,QAAUxtE,EAAKpoE,KAErB0/G,EAAMk2B,QAAU,KAGlBzsB,EAAMzJ,GACNt3C,EAAOs3C,EAQT,GALIt3C,IACFA,EAAKy3J,QAAU,MAIbqnB,EACF,IAAK,IAAIxnI,KAASwnI,EAASv6G,WACpBy6G,EAAUjhP,IAAIu5G,EAAM1/G,MACvBujF,EAAOm8B,EAGb,EAGEn8B,EAAUh0D,IACZlvB,KAAKyhP,OAAOxoO,OAAOiW,EAAKvvB,KACxB,IAAK,IAAI0/G,KAASnwF,EAAKo9G,WACjBtsI,KAAKyhP,OAAO57O,IAAIw5G,EAAM1/G,OAAS0/G,GACjCn8B,EAAOm8B,EAAA,EAMbl3G,EAAKykB,MAAMhlB,SAAQ,CAACsnB,EAAM3vB,KACxB,IAAIynP,EAAU,CACZh9O,MAAO,EACPrK,IAAK,OAASJ,EACduC,KAAM,MACNoF,WAAO9E,EACPikO,eAAe,EACf/5F,WAAY,IAAIp9G,EAAKo9G,YACrB65F,cAAU/jO,EACV6hO,eAAW7hO,KACR8sB,GAGD64C,GACFA,EAAKy3J,QAAUwnB,EAAQrnP,IACvBqnP,EAAQzxG,QAAUxtE,EAAKpoE,KAEvBqnP,EAAQzxG,QAAU,KAGpBv1I,KAAK2mP,KAAK9/O,KAAKmgP,GACfl+H,EAAMk+H,GAENj/K,EAAOi/K,CAAA,IAGLj/K,IACFA,EAAKy3J,QAAU,KAEnB,EC5FF,MAAMynB,GAAwB,qBAAuBn5O,KAAKC,SAASvI,SAAS,IAAIC,MAAM,GACtF,IAAIyhP,GAA6B,qBAAuBp5O,KAAKC,SAASvI,SAAS,IAAIC,MAAM,GACzF,KAAOwhP,KAA0BC,IAC/BA,GAA6B,qBAAuBp5O,KAAKC,SAASvI,SAAS,IAAIC,MAAM,GA8PnFlC,OAAOW,SCvQX,SAASijP,GAAe7mP,GACtB,OAAO,IACT,CAEA6mP,GAAYjhB,kBAAoB,UAA+B5lO,EAA4BsL,GACzF,IAAIwzG,SAACA,EAAQgoI,QAAEA,GAAW9mP,EAK1B,GAFAsL,EAAQw7O,QAAU,GAEM,oBAAbhoI,EAAyB,CAClC,IAAKgoI,EACH,MAAM,IAAIh5O,MAAM,8DAGlB,IAAK,IAAIuzG,KAAUylI,OACX,CACJtlP,KAAM,SACNoF,MAAOy6G,EACPx3G,SAAUi1G,EAGhB,KAAO,CACL,IAAIgoI,EAA4B,GAChCC,EAAMz2G,SAAShpI,QAAQw3G,GAAUuC,IAC/BylI,EAAQvgP,KAAK,CACX/E,KAAM,SACN8hD,QAAS+9D,GACT,UAGGylI,CACT,CACF,EClCA,SAASE,GAAahnP,GACpB,OAAO,IACT,CAEAgnP,GAAUphB,kBAAoB,UAA+B5lO,GAC3D,IAAI8+G,SAACA,EAAQxyF,MAAEA,GAAStsB,OAClB,CACJwB,KAAM,OACNukO,eAAe,QACf/lO,EACA,WAACgsI,GACC,GAAwB,oBAAbltB,EAAyB,CAClC,IAAKxyF,EACH,MAAM,IAAIxe,MAAM,4DAGlB,IAAK,IAAIqY,KAAQmG,OACT,CACJ9qB,KAAM,OACNoF,MAAOuf,EACPtc,SAAUi1G,EAGhB,KAAO,CACL,IAAIxyF,EAA0B,GAC9By6N,EAAMz2G,SAAShpI,QAAQw3G,GAAU34F,IAC/BmG,EAAM/lB,KAAK,CACT/E,KAAM,OACN8hD,QAASn9B,GACT,UAGGmG,CACT,CACF,EAEJ,EClCA,SAAS26N,GAAUjnP,GACjB,OAAO,IACT,CAEAinP,GAAOrhB,kBAAoB,UAA+B5lO,EAAuBsL,GAC/E,IAAIxL,MAACA,EAAKg/G,SAAEA,EAAQooI,aAAEA,GAAgBlnP,EAElC6lO,EAAW/lO,GAASg/G,EACpB6kH,EAAY3jO,EAAM2jO,YAAkC,kBAAbkC,EAAwBA,EAAW,KAAO7lO,EAAM,cAEvFmnP,OAAkB,CACpB3lP,KAAM,SACNukO,gBAAiBmhB,GAAiBpnP,GAASinP,EAAMz2G,SAASj2G,MAAMykF,GAAY,WAC5E+mH,YACAlC,QACA3jO,EACA,WAACgsI,GACC,GAAIk7G,EACF,IAAK,IAAInoI,KAASmoI,OACV,CACJ1lP,KAAM,SACNoF,MAAOm4G,QAGN,GAAIj/G,EAAO,CAChB,IAAIonP,EAAiC,GACrCH,EAAMz2G,SAAShpI,QAAQw3G,GAAUC,IAC/BmoI,EAAa3gP,KAAK,CAChB/E,KAAM,SACN8hD,QAASy7D,GACT,UAGGmoI,CACT,CACF,EACAvgB,iBAAiBygB,IAIf3kN,EAAc2kN,IACP,IAIP3kN,EAAiBn3B,IAEnB,IAAK,IAAIsjB,KAAQu4N,EACVv4N,EAAKm3M,eACRz6N,EAAQw7O,QAAQvgP,KAAKqoB,EAAA,EAK3B6T,EAAcn3B,EAChB,ECxDA,SAAS+7O,GAAOrnP,GACd,OAAO,IACT,CAEAqnP,GAAIzhB,kBAAoB,UAA+B5lO,EAAoBsL,GACzE,IAAIwzG,SAACA,EAAQ6kH,UAAEA,EAAS2jB,oBAAEA,GAAuBtnP,OAE3C,CACJwB,KAAM,OACNxB,MAAOA,YACP2jO,EACA,aAAc3jO,EAAM,cACpB+lO,eAAe,EACf,WAAC/5F,GAsBC,GApBI1gI,EAAQi8O,uBACJ,CACJ/lP,KAAM,OACNnC,IAAK,cACLW,MAAO,CACLwnP,kBAAkB,KAKpBl8O,EAAQm8O,yBAAqD,SAA1Bn8O,EAAQszN,qBACvC,CACJp9N,KAAM,OACNnC,IAAK,SACLW,MAAO,CACL0nP,iBAAiB,KAKC,oBAAb5oI,EAAyB,CAClC,IAAK,IAAIuC,KAAU/1G,EAAQw7O,aACnB,CACJtlP,KAAM,OACN8hD,QAASw7D,EAASuC,EAAOhiH,KACzBA,IAAKgiH,EAAOhiH,KAIhB,GAAIioP,EACF,IAAK,IAAIvoI,KAASuoI,OAGV,CACJ9lP,KAAM,OACNoF,MAAOm4G,EAIf,KAAO,CACL,IAAI4oI,EAA0B,GAC1BC,EAA8B,GAmBlC,GAlBAb,EAAMz2G,SAAShpI,QAAQw3G,GAAUlwF,IAC/B,GAAIA,EAAKptB,OAAS6lP,GAAK,CACrB,GAAIM,EAAMxoP,OAASmM,EAAQw7O,QAAQ3nP,OACjC,MAAM,IAAI2O,MAAM,wEAGlB85O,EAAUrhP,KAAK,CACb/E,KAAM,OACN8hD,QAAS10B,GAEb,MACE+4N,EAAMphP,KAAK,CACT/E,KAAM,OACN8hD,QAAS10B,GACT,IAIF+4N,EAAMxoP,SAAWmM,EAAQw7O,QAAQ3nP,OACnC,MAAM,IAAI2O,MAAO,6CAA4C65O,EAAMxoP,oBAAoBmM,EAAQw7O,QAAQ3nP,yBAGlGwoP,QACAC,CACT,CACF,EACAjhB,iBAAiBygB,GAERA,EAAWN,QAAQ3nP,SAAWmM,EAAQw7O,QAAQ3nP,QACnDioP,EAAWN,QAAQ/9O,MAAK,CAACpF,EAAG1E,IAAM0E,EAAEtE,MAAQiM,EAAQw7O,QAAQ7nP,GAAGI,OAC/D+nP,EAAWK,0BAA4Bn8O,EAAQm8O,yBAC/CL,EAAWG,kBAAoBj8O,EAAQi8O,iBACvCH,EAAWxoB,gBAAkBtzN,EAAQszN,cAG7C,EC7FA,SAASipB,GAAK7nP,GACZ,OAAO,IACT,CAEA6nP,GAAKjiB,kBAAoB,UAA+B5lO,GACtD,IAAI8+G,SAACA,GAAY9+G,EAEb2jO,EAAY3jO,EAAM2jO,YAAkC,kBAAb7kH,EAAwBA,EAAW,KAAO9+G,EAAM,eAAiB,QACtG,CACJwB,KAAM,OACNxB,MAAOA,EACP6lO,SAAU/mH,YACV6kH,EACA,aAAc3jO,EAAM,cACpB+lO,eAAe,EAEnB,oDCMO,MAAM+hB,GAsBX,cAAI97G,GACF,MAAM,IAAIl+H,MAAM,8BAClB,CAEAs0C,KAAAA,GACE,IAAIxzB,EAA8B,IAAIk5N,GAAUpoP,KAAK8B,KAAM9B,KAAKL,KAchE,OAbAuvB,EAAKhoB,MAAQlH,KAAKkH,MAClBgoB,EAAKllB,MAAQhK,KAAKgK,MAClBklB,EAAKm3M,cAAgBrmO,KAAKqmO,cAC1Bn3M,EAAKi3M,SAAWnmO,KAAKmmO,SACrBj3M,EAAK+0M,UAAYjkO,KAAKikO,UACtB/0M,EAAK,cAAgBlvB,KAAK,cAC1BkvB,EAAKwC,MAAQ1xB,KAAK0xB,MAClBxC,EAAK43M,UAAY9mO,KAAK8mO,UACtB53M,EAAKqmH,QAAUv1I,KAAKu1I,QACpBrmH,EAAKswM,QAAUx/N,KAAKw/N,QACpBtwM,EAAKm5N,cAAgBroP,KAAKqoP,cAC1Bn5N,EAAKo5N,aAAetoP,KAAKsoP,aACzBp5N,EAAK5uB,MAAQN,KAAKM,MACX4uB,CACT,CAzBAvjB,WAAAA,CAAY7J,EAAcnC,QAdjBuH,MAAkB,UAClB8C,MAAgB,OAChBq8N,eAAyB,OACzBF,SAAsB,UACtBlC,UAAoB,QACpB,mBAAwB7hO,OACxBsvB,MAAgB,OAChBo1M,UAAwB,UACxBvxF,QAAsB,UACtBiqF,QAAsB,UACtB6oB,cAA4B,UAC5BC,aAA2B,UAC3BhoP,MAAa,CAAC,EAGrBN,KAAK8B,KAAOA,EACZ9B,KAAKL,IAAMA,CACb,EA6BF,MAAM4oP,GAYJ,EAAEhlP,OAAOW,YACP,IAAIgrB,EAAOlvB,KAAK+uM,WAChB,KAAO7/K,SACCA,EACNA,EAAOA,EAAKqiM,WAEhB,CAEA,cAAIxiB,GACF,OAAO/uM,KAAKwoP,WACd,CAEA,cAAIz5C,CAAWA,GACb/uM,KAAKwoP,YAAcz5C,EACnB/uM,KAAK4yL,cAAcrzE,UAAUv/G,KAC/B,CAEA,aAAIygO,GACF,OAAOzgO,KAAKyoP,UACd,CAEA,aAAIhoB,CAAUA,GACZzgO,KAAKyoP,WAAahoB,EAClBzgO,KAAK4yL,cAAcrzE,UAAUv/G,KAC/B,CAEA,mBAAIorJ,GACF,OAAOprJ,KAAK0oP,gBACd,CAEA,mBAAIt9F,CAAgBA,GAClBprJ,KAAK0oP,iBAAmBt9F,EACxBprJ,KAAK4yL,cAAcrzE,UAAUv/G,KAC/B,CAEA,eAAIuxN,GACF,OAAOvxN,KAAK2oP,YACd,CAEA,eAAIp3B,CAAYA,GACdvxN,KAAK2oP,aAAep3B,EACpBvxN,KAAK4yL,cAAcrzE,UAAUv/G,KAC/B,CAEA,cAAIuqI,GACF,OAAOvqI,KAAK4oP,WACd,CAEA,cAAIr+G,CAAWA,GACbvqI,KAAK4oP,YAAcr+G,EACnBvqI,KAAK4yL,cAAcrzE,UAAUv/G,KAC/B,CAEA,eAAI0vN,OACKm5B,EAAP,OAAsB,QAAfA,EAAA7oP,KAAKuqI,kBAAL,IAAAs+G,OAAA,EAAAA,EAAiBn5B,eAAe,CACzC,CAEAlqF,WAAAA,CAAYnmB,GACVr/G,KAAK4yL,cAAck2D,mBACfzpI,EAAMkrB,YACRlrB,EAAMkrB,WAAWrqB,YAAYb,GAGR,MAAnBr/G,KAAK+uM,aACP/uM,KAAK+uM,WAAa1vF,GAGhBr/G,KAAKygO,WACPzgO,KAAKygO,UAAUlP,YAAclyG,EAC7BA,EAAM3tF,MAAQ1xB,KAAKygO,UAAU/uM,MAAQ,EACrC2tF,EAAM+rC,gBAAkBprJ,KAAKygO,YAE7BphH,EAAM+rC,gBAAkB,KACxB/rC,EAAM3tF,MAAQ,GAGhB2tF,EAAMkrB,WAAavqI,KACnBq/G,EAAMkyG,YAAc,KACpBvxN,KAAKygO,UAAYphH,EAEjBr/G,KAAK4yL,cAAcrzE,UAAUv/G,MACzBq/G,EAAM0pI,aAGR/oP,KAAK4yL,cAAc/nC,QAAQxrC,GAG7Br/G,KAAK4yL,cAAco2D,iBACnBhpP,KAAK4yL,cAAcq2D,aACrB,CAEAhpI,YAAAA,CAAauiI,EAAyB70D,GACpC,GAAqB,MAAjBA,EACF,OAAO3tL,KAAKwlI,YAAYg9G,GAG1BxiP,KAAK4yL,cAAck2D,mBACftG,EAAQj4G,YACVi4G,EAAQj4G,WAAWrqB,YAAYsiI,GAGjCA,EAAQjxB,YAAc5jC,EACtB60D,EAAQp3F,gBAAkBuiC,EAAcviC,gBACxCo3F,EAAQ9wN,MAAQi8J,EAAcj8J,MAE1B1xB,KAAK+uM,aAAephB,EACtB3tL,KAAK+uM,WAAayzC,EACT70D,EAAcviC,kBACvBuiC,EAAcviC,gBAAgBmmE,YAAcixB,GAG9C70D,EAAcviC,gBAAkBo3F,EAChCA,EAAQj4G,WAAaojD,EAAcpjD,WAEnC,IAAIr7G,EAA8By+J,EAClC,KAAOz+J,GACLA,EAAKwC,QACLxC,EAAOA,EAAKqiM,YAGVixB,EAAQuG,aACV/oP,KAAK4yL,cAAc/nC,QAAQ23F,GAG7BxiP,KAAK4yL,cAAco2D,iBACnBhpP,KAAK4yL,cAAcq2D,aACrB,CAEA/oI,WAAAA,CAAYb,GACV,GAAIA,EAAMkrB,aAAevqI,KACvB,OAGFA,KAAK4yL,cAAck2D,mBACnB,IAAI55N,EAAOmwF,EAAMkyG,YACjB,KAAOriM,GACLA,EAAKwC,QACLxC,EAAOA,EAAKqiM,YAGVlyG,EAAMkyG,cACRlyG,EAAMkyG,YAAYnmE,gBAAkB/rC,EAAM+rC,iBAGxC/rC,EAAM+rC,kBACR/rC,EAAM+rC,gBAAgBmmE,YAAclyG,EAAMkyG,aAGxCvxN,KAAK+uM,aAAe1vF,IACtBr/G,KAAK+uM,WAAa1vF,EAAMkyG,aAGtBvxN,KAAKygO,YAAcphH,IACrBr/G,KAAKygO,UAAYphH,EAAM+rC,iBAGzB/rC,EAAMkrB,WAAa,KACnBlrB,EAAMkyG,YAAc,KACpBlyG,EAAM+rC,gBAAkB,KACxB/rC,EAAM3tF,MAAQ,EAEd1xB,KAAK4yL,cAAcs2D,WAAW7pI,GAC9Br/G,KAAK4yL,cAAco2D,iBACnBhpP,KAAK4yL,cAAcq2D,aACrB,CAEAj2O,gBAAAA,GAAoB,CACpByrH,mBAAAA,GAAuB,CA3KvB9yH,WAAAA,CAAYinL,QAPJ41D,YAAqC,UACrCC,WAAoC,UACpCC,iBAA0C,UAC1CC,aAAsC,UACtCC,YAAkC,KAIxC5oP,KAAK4yL,cAAgBA,CACvB,EAgLK,MAAMu2D,WAAuBZ,GAelC,SAAI72N,GACF,OAAO1xB,KAAKopP,MACd,CAEA,SAAI13N,CAAMA,GACR1xB,KAAKopP,OAAS13N,EACd1xB,KAAK4yL,cAAcrzE,UAAUv/G,KAC/B,CAEA,SAAIgK,GACF,OAAIhK,KAAKuqI,sBAAsB4+G,GACtBnpP,KAAKuqI,WAAWvgI,OAA4B,SAAnBhK,KAAKkvB,KAAKptB,KAAkB,EAAI,GAG3D,CACT,CAEAunP,UAAAA,OAKiBC,EACAC,EAEMC,EACDC,EARpB,IAAIv6N,EAAOlvB,KAAK4yL,cAAc82D,eAAe1pP,UAI9B2pP,EACAC,EAEMC,EACDC,EAPpB56N,EAAKwC,MAAQ1xB,KAAK0xB,MAClBxC,EAAKllB,MAAQhK,KAAKgK,MAClBklB,EAAK43M,UAAY9mO,KAAKuqI,sBAAsB4+G,GAAcnpP,KAAKuqI,WAAWr7G,KAAKvvB,IAAM,KACrFuvB,EAAKqmH,QAAwC,QAA9Bo0G,EAAoB,QAApBL,EAAAtpP,KAAKorJ,uBAAL,IAAAk+F,OAAA,EAAAA,EAAsBp6N,KAAKvvB,WAA3B,IAAAgqP,EAAAA,EAAkC,KACjDz6N,EAAKswM,QAAoC,QAA1BoqB,EAAgB,QAAhBL,EAAAvpP,KAAKuxN,mBAAL,IAAAg4B,OAAA,EAAAA,EAAkBr6N,KAAKvvB,WAAvB,IAAAiqP,EAAAA,EAA8B,KAC7C16N,EAAKm3M,gBAAkBrmO,KAAK+uM,WAC5B7/K,EAAKm5N,cAAyC,QAAzBwB,EAAe,QAAfL,EAAAxpP,KAAK+uM,kBAAL,IAAAy6C,OAAA,EAAAA,EAAiBt6N,KAAKvvB,WAAtB,IAAAkqP,EAAAA,EAA6B,KAClD36N,EAAKo5N,aAAuC,QAAxBwB,EAAc,QAAdL,EAAAzpP,KAAKygO,iBAAL,IAAAgpB,OAAA,EAAAA,EAAgBv6N,KAAKvvB,WAArB,IAAAmqP,EAAAA,EAA4B,IAClD,CAEAC,QAAAA,CAA4Br6N,EAAUvvB,EAAsBgmO,GAC1D,IAAIj3M,EAAOlvB,KAAK4yL,cAAc82D,eAAe1pP,OACzCkH,MAACA,EAAK+8N,UAAEA,EAASrjO,GAAEA,KAAON,GAASovB,EAMvC,GALApvB,EAAMH,IAAMA,EACZ+uB,EAAK5uB,MAAQA,EACb4uB,EAAKi3M,SAAWA,EAChBj3M,EAAKhoB,MAAQA,EACbgoB,EAAK+0M,UAAYA,IAAkC,kBAAbkC,EAAwBA,EAAW,KAAOz2M,EAAI,eAAiB,GAC3F,MAAN9uB,GAAcA,IAAOsuB,EAAKvvB,IAAK,CACjC,GAAIK,KAAK+oP,YACP,MAAM,IAAI36O,MAAM,mCAElB8gB,EAAKvvB,IAAMiB,CACb,CAIKZ,KAAK+oP,cACR/oP,KAAK4yL,cAAc/nC,QAAQ7qJ,MAC3BA,KAAK4yL,cAAco2D,iBACnBhpP,KAAK+oP,aAAc,GAGrB/oP,KAAK4yL,cAAcq2D,aACrB,CAEA,SAAItnP,GACF,MAAO,CAAC,CACV,CAEAi6M,YAAAA,GAAgB,CAChB/oM,YAAAA,GAAgB,CAChBm3O,cAAAA,GAAkB,CAClBjnD,eAAAA,GAAmB,CAvEnBp3L,WAAAA,CAAY7J,EAAc8wL,GACxB/tK,MAAM+tK,QANRt8H,SAAW,OAEH8yL,OAAiB,OACzBL,aAAc,EAIZ/oP,KAAKkvB,KAAO,IAAIk5N,GAAUtmP,EAAO,iBAAe8wL,EAAcq3D,QAI9DjqP,KAAK4yL,cAAck2D,kBACrB,EAuEK,MAAMoB,GAMX,QAAIxvL,GACF,OAAO16D,KAAKyhP,OAAO/mL,IACrB,CAEA7W,OAAAA,GACE,OAAO7jD,KAAKyhP,OAAO76O,MACrB,CAEA,EAAErD,OAAOW,YACP,IAAIgrB,EAA6C,MAAjBlvB,KAAKkgO,SAAmBlgO,KAAKyhP,OAAO57O,IAAI7F,KAAKkgO,eAAY99N,EACzF,KAAO8sB,SACCA,EACNA,EAAuB,MAAhBA,EAAKswM,QAAkBx/N,KAAKyhP,OAAO57O,IAAIqpB,EAAKswM,cAAWp9N,CAElE,CAEAsuJ,WAAAA,CAAY/wJ,GACV,IAAI8hP,EAASzhP,KAAKyhP,OAClB,MAAO,CACL,EAAEl+O,OAAOW,YACP,IAAIkpB,EAASq0N,EAAO57O,IAAIlG,GACpBuvB,EAAgC,OAAzB,OAAA9B,QAAA,IAAAA,OAAA,EAAAA,EAAQi7N,eAAwB5G,EAAO57O,IAAIunB,EAAOi7N,eAAiB,KAC9E,KAAOn5N,SACCA,EACNA,EAAuB,MAAhBA,EAAKswM,QAAkBiiB,EAAO57O,IAAIqpB,EAAKswM,cAAWp9N,CAE7D,EAEJ,CAEA+gO,YAAAA,CAAaxjO,GACX,IAAIuvB,EAAOlvB,KAAKyhP,OAAO57O,IAAIlG,GAC3B,IAAKuvB,EACH,OAAO,KAGT,GAAoB,MAAhBA,EAAKqmH,QAAiB,CAGxB,IAFArmH,EAAOlvB,KAAKyhP,OAAO57O,IAAIqpB,EAAKqmH,SAErBrmH,GAAsB,SAAdA,EAAKptB,MAAwC,MAArBotB,EAAKo5N,cAC1Cp5N,EAAOlvB,KAAKyhP,OAAO57O,IAAIqpB,EAAKo5N,kBAGvB6B,EAAP,OAAgB,QAATA,EAAA,OAAAj7N,QAAA,IAAAA,OAAA,EAAAA,EAAMvvB,WAAN,IAAAwqP,EAAAA,EAAa,IACtB,CAEA,OAAOj7N,EAAK43M,SACd,CAEA9D,WAAAA,CAAYrjO,GACV,IAAIuvB,EAAOlvB,KAAKyhP,OAAO57O,IAAIlG,GAC3B,IAAKuvB,EACH,OAAO,KAGT,GAAkB,SAAdA,EAAKptB,MAAyC,MAAtBotB,EAAKm5N,cAC/B,OAAOn5N,EAAKm5N,cAGd,KAAOn5N,GAAM,CACX,GAAoB,MAAhBA,EAAKswM,QACP,OAAOtwM,EAAKswM,QAGd,GAAsB,MAAlBtwM,EAAK43M,UAGP,OAAO,KAFP53M,EAAOlvB,KAAKyhP,OAAO57O,IAAIqpB,EAAK43M,UAIhC,CAEA,OAAO,IACT,CAEAzI,WAAAA,GACE,OAAOr+N,KAAKkgO,QACd,CAEA5B,UAAAA,GACE,IAAIpvM,EAAuB,MAAhBlvB,KAAKmgO,QAAkBngO,KAAKyhP,OAAO57O,IAAI7F,KAAKmgO,SAAW,KAClE,KAA6B,OAAtB,OAAAjxM,QAAA,IAAAA,OAAA,EAAAA,EAAMo5N,eACXp5N,EAAOlvB,KAAKyhP,OAAO57O,IAAIqpB,EAAKo5N,kBAGvB6B,EAAP,OAAgB,QAATA,EAAA,OAAAj7N,QAAA,IAAAA,OAAA,EAAAA,EAAMvvB,WAAN,IAAAwqP,EAAAA,EAAa,IACtB,CAEA1iP,OAAAA,CAAQ9H,OACCyqP,EAAP,OAAuB,QAAhBA,EAAApqP,KAAKyhP,OAAO57O,IAAIlG,UAAhB,IAAAyqP,EAAAA,EAAwB,IACjC,CAEAvoO,EAAAA,GACE,MAAM,IAAIzT,MAAM,kBAClB,CAEAs0C,KAAAA,GAIE,IACI3B,EAAmB,IAAIq4E,EADJp5H,KAAK2L,aAK5B,OAHAo1C,EAAW0gM,OAAS,IAAIh+O,IAAIzD,KAAKyhP,QACjC1gM,EAAWm/K,SAAWlgO,KAAKkgO,SAC3Bn/K,EAAWo/K,QAAUngO,KAAKmgO,QACnBp/K,CACT,CAEA8pG,OAAAA,CAAQ37H,GACN,GAAIlvB,KAAKqqP,OACP,MAAM,IAAIj8O,MAAM,4CAGlBpO,KAAKyhP,OAAO17O,IAAImpB,EAAKvvB,IAAKuvB,EAC5B,CAEAg6N,UAAAA,CAAWvpP,GACT,GAAIK,KAAKqqP,OACP,MAAM,IAAIj8O,MAAM,+CAGlBpO,KAAKyhP,OAAOxoO,OAAOtZ,EACrB,CAEAosF,MAAAA,CAAOm0I,EAAsBC,GAAoC,IAAfrF,EAAAt7N,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,IAAAA,UAAA,GAChD,GAAIQ,KAAKqqP,OACP,MAAM,IAAIj8O,MAAM,qCAGlBpO,KAAKkgO,SAAWA,EAChBlgO,KAAKmgO,QAAUA,EACfngO,KAAKqqP,QAAUvvB,CACjB,oBAxIQ2mB,OAAiC,IAAIh+O,SACrCy8N,SAAuB,UACvBC,QAAsB,UACtBkqB,QAAS,GA4IZ,MAAMC,WAAqE/B,GAoBhF,eAAI74B,GACF,OAAO,CACT,CAEA15F,aAAAA,CAAcl0H,GACZ,OAAO,IAAIqnP,GAAYrnP,EAAM9B,KAC/B,CAMA0pP,cAAAA,CAAe9lM,GACb,IAAI10B,EAAO00B,EAAQ10B,KAOnB,OANKlvB,KAAKuqP,aAAazkP,IAAI89C,KACzB10B,EAAO00B,EAAQ10B,KAAKwzB,QACpB1iD,KAAKuqP,aAAavkP,IAAI49C,GACtBA,EAAQ10B,KAAOA,GAEjBlvB,KAAKu/G,UAAU37D,GACR10B,CACT,CAEQs7N,oBAAAA,GAMN,OALKxqP,KAAK86N,OAAU96N,KAAKyqP,oBACvBzqP,KAAK+gD,WAAa/gD,KAAK+gD,WAAW2B,QAClC1iD,KAAKyqP,mBAAoB,GAGpBzqP,KAAK+gD,UACd,CAEAw+D,SAAAA,CAAUrwF,GACRlvB,KAAK0qP,WAAW1kP,IAAIkpB,EACtB,CAEA45N,gBAAAA,GACE9oP,KAAK2qP,kBACP,CAEA3B,cAAAA,GACEhpP,KAAK2qP,kBACP,CAEA9/F,OAAAA,CAAQjnG,GACN,IAAI7C,EAAa/gD,KAAKwqP,uBACtB,IAAKzpM,EAAWt5C,QAAQm8C,EAAQ10B,KAAKvvB,KAAM,CACzCohD,EAAW8pG,QAAQjnG,EAAQ10B,MAE3B,IAAK,IAAImwF,KAASz7D,EAChB5jD,KAAK6qJ,QAAQxrC,EAEjB,CAEAr/G,KAAKu/G,UAAU37D,EACjB,CAEAslM,UAAAA,CAAWh6N,GACT,IAAK,IAAImwF,KAASnwF,EAChBlvB,KAAKkpP,WAAW7pI,GAGDr/G,KAAKwqP,uBACXtB,WAAWh6N,EAAKA,KAAKvvB,KAChCK,KAAKu/G,UAAUrwF,EACjB,CAGA07N,aAAAA,GACE,OAAI5qP,KAAK2qP,iBAAmB,GAI5B3qP,KAAK6qP,mBAHI7qP,KAAK+gD,UAKhB,CAEA8pM,gBAAAA,GACE,IAAK,IAAIjnM,KAAW5jD,KAAK0qP,WACnB9mM,aAAmBulM,IAAevlM,EAAQ8rK,aAC5C9rK,EAAQylM,aAMZ,GAFArpP,KAAK0qP,WAAW3+O,QAEZ/L,KAAKuqP,aAAa7vL,MAAQ16D,KAAKyqP,kBAAmB,KAQlCjB,EAAmCC,EAPrD,IAAI1oM,EAAa/gD,KAAKwqP,uBACtB,IAAK,IAAI5mM,KAAW5jD,KAAKuqP,aACnB3mM,EAAQ8rK,aACV3uK,EAAW8pG,QAAQjnG,EAAQ10B,UAIb26N,EAAmCC,EAArD/oM,EAAWgrC,OAAgC,QAAzB89J,EAAe,QAAfL,EAAAxpP,KAAK+uM,kBAAL,IAAAy6C,OAAA,EAAAA,EAAiBt6N,KAAKvvB,WAAtB,IAAAkqP,EAAAA,EAA6B,KAA8B,QAAxBC,EAAc,QAAdL,EAAAzpP,KAAKygO,iBAAL,IAAAgpB,OAAA,EAAAA,EAAgBv6N,KAAKvvB,WAArB,IAAAmqP,EAAAA,EAA4B,KAAM9pP,KAAK86N,OAC5F96N,KAAKuqP,aAAax+O,OACpB,CAEA/L,KAAKyqP,mBAAoB,CAC3B,CAEAxB,WAAAA,GAGE,KAA6B,IAAzBjpP,KAAK0qP,WAAWhwL,MAAc16D,KAAK2qP,iBAAmB,GAI1D,IAAK,IAAI12K,KAAMj0E,KAAK8qP,cAClB72K,GAEJ,CAEA1lE,SAAAA,CAAU0lE,GAER,OADAj0E,KAAK8qP,cAAc9kP,IAAIiuE,GAChB,IAAMj0E,KAAK8qP,cAAc7xO,OAAOg7D,EACzC,CAEA82K,aAAAA,GACM/qP,KAAK86N,QACP96N,KAAK86N,OAAQ,EACb96N,KAAK+uM,WAAa,KAClB/uM,KAAKygO,UAAY,KACjBzgO,KAAKiqP,OAAS,EAElB,CApIAt+O,WAAAA,CAAYo1C,GAEVl8B,MAAM,WAdRyxC,SAAW,QACXs8H,cAAgB5yL,UAChB0qP,WAA+B,IAAI/mP,SACnCm3N,OAAQ,OACRmvB,OAAS,OACTe,aAAe,IAAInnP,aAGX0mP,aAAoC,IAAI5mP,SACxCmnP,cAAiC,IAAInnP,SACrCgnP,iBAAmB,EAKzB3qP,KAAK+gD,WAAaA,EAClB/gD,KAAKyqP,mBAAoB,CAC3B,EA+IK,SAASQ,GAAoC3qP,GAClD,IAAI8+G,SAACA,EAAQxyF,MAAEA,EAAKs+N,QAAEA,EAAOC,cAAEA,EAAa,aAAEvhN,EAAe,IAAMtpC,EAI/DirC,GAAQ,EAAA6/M,EAAAA,UAAQ,IAAM,IAAIvnP,SAAW+lC,GACzC,OAAO,EAAAwhN,EAAAA,UAAQ,KACb,GAAIx+N,GAA6B,oBAAbwyF,EAAyB,CAC3C,IAAI93F,EAAsB,GAC1B,IAAK,IAAIb,KAAQmG,EAAO,CACtB,IAAIu5M,EAAW56L,EAAM1lC,IAAI4gB,GACzB,IAAK0/M,EAAU,KAGHklB,EAAAnrP,EAFVimO,EAAW/mH,EAAS34F,GAEpB,IAAI9mB,EAAmC,QAA7BO,EAAiB,QAAjBmrP,EAAAllB,EAAS7lO,MAAMM,UAAf,IAAAyqP,EAAAA,EAAqB5kO,EAAK9mB,WAA1B,IAAAO,EAAAA,EAAiCumB,EAAK7lB,GAEhD,GAAW,MAAPjB,EACF,MAAM,IAAIyO,MAAM,oCAGd88O,IACFvrP,EAAMurP,EAAU,IAAMvrP,GAGxBwmO,GAAW,EAAAmlB,EAAAA,cACTnlB,EACAglB,EAAgB,KAACxrP,EAAKiB,GAAIjB,EAAKuH,MAAOuf,GAAQ,KAAC9mB,IAEjD4rC,EAAMxlC,IAAI0gB,EAAM0/M,EAClB,CACA7+M,EAAIzgB,KAAKs/N,EACX,CACA,OAAO7+M,CACT,CAAO,GAAwB,oBAAb83F,EAChB,OAAOA,CAAA,GAER,CAACA,EAAUxyF,EAAO2e,EAAO2/M,EAASC,GACvC,CAEO,SAASI,GAAwCjrP,GACtD,OAAO2qP,GAAkB,IAAI3qP,EAAO6qP,eAAe,GACrD,CAEA,MAAMK,IAAuB,EAAAC,EAAAA,gBAAc,GAOpC,SAASC,GAA6DprP,EAA2BqrP,GACtG,IAAI5qM,WAACA,EAAU/7C,SAAEA,GAAY4mP,GAA4BD,GAEzD,MAAO,QADME,GAA0BvrP,EAAO0E,cAC9B+7C,EAClB,CAwBA,MAAM+qM,GAAgE,oBAAlCC,EAAM,qBACtCA,EAAM,qBAhBV,SAAyCx9O,EAAsDy8J,EAAsBghF,GACnH,IAAIlxB,EAAQmxB,KACRC,GAAW,EAAAC,EAAAA,QAAOrxB,GAKtBoxB,EAAS1iM,QAAUsxK,EAEnB,IAAIsxB,GAAqB,EAAAC,EAAAA,cAAY,IAC5BH,EAAS1iM,QAAUwiM,IAAsBhhF,KAC/C,CAACA,EAAaghF,IACjB,OAAO,EAAAM,GAAAA,sBAAyB/9O,EAAW69O,EAC7C,EAMO,SAASR,GAAqED,GAGnF,IAAI3mP,GAAW,EAAAomP,EAAAA,UAAQ,IAAM,IAAId,GAAeqB,GAAqB,IAAIzB,KAAwB,CAACyB,IAC9Fp9O,GAAY,EAAA89O,EAAAA,cAAap4K,GAAmBjvE,EAASuJ,UAAU0lE,IAAK,CAACjvE,IACrEgmK,GAAc,EAAAqhF,EAAAA,cAAY,KAC5B,IAAItrM,EAAa/7C,EAAS4lP,gBAO1B,OANI5lP,EAAS81N,OAIX91N,EAAS+lP,gBAEJhqM,CAAA,GACN,CAAC/7C,IACAgnP,GAAoB,EAAAK,EAAAA,cAAY,KAClCrnP,EAAS81N,OAAQ,EACV91N,EAAS4lP,kBACf,CAAC5lP,IAEJ,MAAO,YADU8mP,GAAqBv9O,EAAWy8J,EAAaghF,YAC1ChnP,EACtB,CAEA,MAAMunP,IAAa,EAAAd,EAAAA,eAAoC,MAC1Ce,IAA4B,EAAAf,EAAAA,eAAyD,MAE3F,SAASI,GAAmEvrP,EAA2B0E,GAC5G,IAAI8zK,GAAM,EAAA2zE,EAAAA,YAAWD,IACjB5hH,EAAM,OAAA5lI,QAAA,IAAAA,EAAAA,EAAY8zK,EAClB15D,EAAWmsI,GAAsBjrP,GACjCosP,GAAkB,EAAAtB,EAAAA,UAAQ,IAC5BW,EAAA/1H,cAACw1H,GAAqBv0E,SAAQ,CAAC/vK,OAAA,GAC5Bk4G,IAEF,CAACA,IAGJ,OAAO6sI,KACHF,EAAA/1H,cAACu2H,GAAWt1E,SAAQ,CAAC/vK,MAAO0jI,GAAM8hH,IAClC,EAAAC,EAAAA,cAAaD,EAAiB9hH,EACpC,CAEO,SAASgiH,GAAmCtsP,GACjD,OAAOyrP,EAAA/1H,cAAA+1H,EAAA7sG,SAAA,KAAG2sG,GAAoBvrP,GAChC,CAGO,SAASusP,GAAsD/qP,EAAcxB,EAAUH,OAKnF2sP,EAHT,OADgB,EAAAL,EAAAA,YAAWjB,IAI4D,QAA9EsB,EAAAC,GAAqBjrP,EAAMxB,EAAOH,EAAK,aAAcG,EAAQA,EAAM8+G,SAAW,aAA9E,IAAA0tI,EAAAA,EAAuFf,EAAA/1H,cAAA+1H,EAAA7sG,SAAA,MAGzF,IACT,CAoEO,SAAS6tG,GAAwCt3N,EAAcn1B,EAAeH,EAAsBgmO,EAAgB/mH,GAMzH,IAAI4tI,EAbC,SAAiD1sP,EAAYH,EAAsBgmO,GAExF,OAAO,EAAAkmB,EAAAA,cAAazoM,IAClB,OAAAA,QAAA,IAAAA,GAAAA,EAASmmM,SAASzpP,EAAOH,EAAKgmO,EAAA,GAC7B,CAAC7lO,EAAOH,EAAKgmO,GAClB,CAQgB8mB,CAAqB3sP,EAAOH,EAAKgmO,GAC3C57F,GAAa,EAAAkiH,EAAAA,YAAWF,IAC5B,GAAIhiH,EAAY,CAEd,IAAI3mF,EAAU2mF,EAAWqoD,cAAco4D,aAAanlP,IAAIvF,GASxD,OARKsjD,IACHA,EAAU2mF,EAAWqoD,cAAc58D,cAAcvgG,GACjDmuB,EAAQmmM,SAASzpP,EAAOH,EAAKgmO,GAC7B57F,EAAW/E,YAAY5hF,GACvB2mF,EAAWqoD,cAAci4D,mBACzBtgH,EAAWqoD,cAAco4D,aAAajlP,IAAIzF,EAAOsjD,IAG5Cw7D,EACH2sI,EAAA/1H,cAACu2H,GAAWt1E,SAAQ,CAAC/vK,MAAO08C,GAAUw7D,GACtC,IACN,CAGA,OAAO2sI,EAAA/1H,cAACvgG,EAAA,CAAKt1B,IAAK6sP,GAAU5tI,EAC9B,CCr2BO,MAAM8tI,GAAqB3pP,OAAO,YAC5B4pP,GAAc5pP,OAAO,WA6B3B,SAAS6pP,GAAAn6O,GAA4G,IAAlEL,OAACA,EAAMwsG,SAAEA,GAAyDnsG,EAC1H,IAAK,IAAKo6O,EAASnmP,KAAU0L,EAE3BwsG,EAAW2sI,EAAA/1H,cAACq3H,EAAQp2E,SAAQ,CAAC/vK,MAAOA,GAAQk4G,GAG9C,OAAOA,CACT,CAqCO,SAASkuI,GAAkBhtP,GAChC,IAAIyB,UACFA,EAASJ,MACTA,EAAKy9G,SACLA,EAAQmuI,iBACRA,EAAgBC,gBAChBA,EAAe56O,OACfA,GACEtS,EAEJ,OAAO,EAAA8qP,EAAAA,UAAQ,KACb,IAAIqC,EACAC,EACAC,EAsBJ,OAnBEF,EADuB,oBAAd1rP,EACWA,EAAU6Q,GAEV7Q,EAIpB2rP,EADmB,oBAAV/rP,EACOA,EAAMiR,GAENjR,EAIhBgsP,EADsB,oBAAbvuI,EACUA,EAASxsG,GACP,MAAZwsG,EACUouI,EAEApuI,EAGd,CACLr9G,UAAW,OAAA0rP,QAAA,IAAAA,EAAAA,EAAqBF,EAChC5rP,MAAO+rP,EACPtuI,SAAUuuI,EACV,WAAY,GACb,GACA,CAAC5rP,EAAWJ,EAAOy9G,EAAUmuI,EAAkBC,EAAiB56O,GACrE,CAuBO,SAASg7O,GAAqBhiP,EAA0CiiP,GAC7E,IAAI/0E,GAAM,EAAA2zE,EAAAA,YAAW7gP,GACrB,GAAa,OAATiiP,EAEF,OAAO,KAET,GAAI/0E,GAAsB,kBAARA,GAAoB,UAAWA,GAAOA,EAAIg1E,MAAO,CACjE,IAAIC,GAAiB,IAAI5rE,KAAK6rE,YAAaljN,OAAO3rC,OAAOyH,KAAKkyK,EAAIg1E,OAAOr9O,KAAIpM,GAAM,IAAGA,QAEtF,IAAKwpP,IAAS/0E,EAAIg1E,MAAMX,IACtB,MAAM,IAAI/+O,MAAO,iDAAgD2/O,MAEnE,IAAIE,EAAUJ,GAAQV,GACtB,IAAKr0E,EAAIg1E,MAAMG,GAEb,MAAM,IAAI7/O,MAAO,iBAAgBy/O,4BAA+BE,MAElE,OAAOj1E,EAAIg1E,MAAMG,EACnB,CAEA,OAAOn1E,CACT,CAEO,SAASo1E,GAA2D5tP,EAAsBH,EAAsByL,GACrH,IAAIktK,EAAM80E,GAAkBhiP,EAAStL,EAAMutP,OAAS,CAAC,GAEhD1tP,IAAKguP,EAAY,CAACjB,IAAqBj7K,KAAapc,GAAgBijH,EACrEs1E,EAAYC,IAAa,EAAAjD,EAAAA,UAAQ,IAAMkD,GAAUnuP,EAAKguP,IAAa,CAAChuP,EAAKguP,KACzEI,EAAcC,GAAW34L,EAAcv1D,GAsB3C,MAlBE,UAAWu1D,GACXA,EAAal0D,OACiB,kBAAvBk0D,EAAal0D,OACpB,UAAWrB,GACXA,EAAMqB,OACiB,kBAAhBrB,EAAMqB,QAGb4sP,EAAY5sP,MAAQ,IAAIk0D,EAAal0D,SAAUrB,EAAMqB,SAIvD,EAAA8sP,EAAAA,YAAU,KACJx8K,GACFA,EAAS3xE,EAAA,GAEV,CAAC2xE,EAAU3xE,IAEP,CAACiuP,EAAaH,EACvB,CAEO,SAASM,KAEd,IAAKC,EAASC,IAAc,EAAAC,EAAAA,WAAS,GACjCC,GAAS,EAAA3C,EAAAA,SAAO,GAIhBhsP,GAAM,EAAAksP,EAAAA,cAAYrnH,IACpB8pH,EAAOtlM,SAAU,EACjBolM,IAAa5pH,EAAA,GACZ,IASH,OANA+pH,IAAgB,KACTD,EAAOtlM,SACVolM,GAAW,EAAM,GAElB,IAEI,CAACzuP,EAAKwuP,EACf,CAEO,SAASK,GAAkB7uP,GAAoD,IAAvB8uP,IAAAzvP,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,KAAAA,UAAA,IACxD0vP,EAAYC,IAAe,EAAAN,EAAAA,WAAS,GAEzC,OADAO,GAAajvP,EAAK+uP,GAAcD,GAAS,EAAA5C,EAAAA,cAAY,IAAM8C,GAAY,IAAQ,KACxED,GAAcD,CACvB,CAEO,SAASI,GAAiBlvP,EAA6B+tL,GAG5D,IAAKyrD,EAAW2V,IAAc,EAAAT,EAAAA,WAAS,IAClCU,EAAWC,IAAgB,EAAAX,EAAAA,UAAS,QAuBzC,OApBK3gE,GAAU/tL,EAAIqpD,SAAyB,SAAd+lM,IAC5B5V,GAAY,EACZ2V,GAAW,GACXE,EAAa,YAIVrvP,EAAIqpD,SAAyB,WAAd+lM,GAClBC,EAAa,QAGfJ,GACEjvP,EACAw5O,GACA,EAAA0S,EAAAA,cAAY,KACVmD,EAAa,UACbF,GAAW,EAAM,GAChB,KAGE3V,CACT,CAEA,SAASyV,GAAajvP,EAA6B+8K,EAAmBw1B,GACpE,IAAI+8C,GAAgB,EAAAtD,EAAAA,QAAsB,MACtCjvE,GAAY/8K,EAAIqpD,UAKlBimM,EAAcjmM,QAAUrmD,OAAO+hI,iBAAiB/kI,EAAIqpD,SAASkmM,WAG/DX,IAAgB,KACd,GAAI7xE,GAAY/8K,EAAIqpD,QAAS,CAE3B,IAAIkkM,EAAgBvqP,OAAO+hI,iBAAiB/kI,EAAIqpD,SAChD,GAAIkkM,EAAciC,eAAiD,SAAhCjC,EAAciC,eAA4BjC,EAAcgC,YAAcD,EAAcjmM,QAAS,CAC9H,IAAIomM,EAAkBhtP,IAChBA,EAAEtD,SAAWa,EAAIqpD,UACnB5F,EAAQ66E,oBAAoB,eAAgBmxH,GAC5CC,EAASC,WAAU,KAAOp9C,GAAA,IAC5B,EAGE9uJ,EAAUzjD,EAAIqpD,QAElB,OADA5F,EAAQ5wC,iBAAiB,eAAgB48O,GAClC,KACLhsM,EAAQ66E,oBAAoB,eAAgBmxH,EAAA,CAEhD,CACEl9C,GAEJ,IACC,CAACvyM,EAAK+8K,EAAUw1B,GACrB,CAOA,GAAmC,qBAAxBq9C,oBAAqC,CAC9C,MAAMC,EAAgB7wP,OAAOqO,yBAAyB0b,KAAKtpB,UAAW,cAAeiG,IACrF1G,OAAO6H,eAAe+oP,oBAAoBnwP,UAAW,aAAc,CACjE6N,cAAc,EACdxG,YAAY,EACZpB,IAAK,WACH,OAAI7F,KAAK24O,QAAQsX,gBACRjwP,KAAKgpH,QAAQ+lF,WAEbihD,EAAclwP,KAAKE,KAE9B,GAEJ,CAEO,MAAMkwP,IAAgB,EAAAzE,EAAAA,gBAAuB,GAG9C0E,GAA6C,qBAArBC,iBAAmC,IAAIA,iBAAqB,KAEnF,SAASC,GAAO/vP,GACrB,IAAIgwP,GAAW,EAAA7D,EAAAA,YAAWyD,IACtBp1B,EAAQmxB,KACZ,GAAIqE,EAEF,OAAOvE,EAAA/1H,cAAA+1H,EAAA7sG,SAAA,KAAG5+I,EAAM8+G,UAGlB,IAAIA,EACF2sI,EAAA/1H,cAACk6H,GAAcj5E,SAAQ,CAAC/vK,OAAA,GACrB5G,EAAM8+G,UAOX,OAAO07G,EACHixB,EAAA/1H,cAAC,YAAS,6BAAwB5W,GAClCywI,EAASzV,aAAah7H,EAAU+wI,GACtC,CAIO,SAASI,GAAmCt8K,GACjD,IAAIu8K,EAAUA,CAAClwP,EAAUH,KACR,EAAAssP,EAAAA,YAAWyD,IAEjB,KAGFj8K,EAAG3zE,EAAOH,GAInB,OADAqwP,EAAQ/nH,YAAcx0D,EAAGw0D,aAAex0D,EAAGviE,KACnCq6O,EAAM3qP,WAA8BovP,EAC9C,CAMO,SAASC,GAAwBnwP,GACtC,MAAM8H,EAAS,cACf,IAAI6xM,EAAgB,CAAC,EAErB,IAAK,MAAMx4K,KAAQnhC,EACZ8H,EAAOyB,KAAK43B,KACfw4K,EAAcx4K,GAAQnhC,EAAMmhC,IAIhC,OAAOw4K,CACT,CChVO,MAAMy2C,IAAc,EAAAjF,EAAAA,eAA0D,MAErF,SAASkF,GAAKrwP,EAAkBH,IAC7BG,EAAOH,GAAO+tP,GAAgB5tP,EAAOH,EAAKuwP,IAE3C,IAAIxrM,EAA2B5kD,EAAMmnJ,KAAO,IAAM,QAC9CuvE,UAACA,EAASzT,UAAEA,GAAaqtC,GAAQ,IAAItwP,EAAO42H,YAAahyE,GAAc/kD,IAEvE0tN,WAACA,EAAUF,UAAEA,GAAakjC,GAASvwP,IACnCkqN,WAACA,EAAUnB,UAAEA,EAASkM,eAAEA,GAAkBu7B,KAE1C5lH,EAAcoiH,GAAe,IAC5BhtP,EACHitP,iBAAkB,kBAClB36O,OAAQ,CACNm+O,YAAazwP,EAAM,gBACnB81M,WAAY91M,EAAM81M,aAAc,YAChCmN,YACAoK,YACAtE,iBACAkM,KAIJ,OACEw2B,EAAA/1H,cAAC9wE,EAAA,CACC/kD,IAAKA,EACL0tP,KAAMvtP,EAAMutP,WAAQzrP,KAChB4uP,GAAW9lH,EAAa8rF,EAAWnJ,EAAYrD,GACnD,eAAcnB,QAAajnN,EAC3B,eAAcurN,QAAavrN,EAC3B,eAAcmhN,QAAanhN,EAC3B,qBAAoBmzN,QAAkBnzN,EACtC,iBAAgB9B,EAAM,sBAAmB8B,EACzC,gBAAe9B,EAAM81M,iBAAeh0M,GACnC8oI,EAAY9rB,SAGnB,CAMA,MAAM6xI,IAAuB,EAAAC,EAAAA,YAA8BP,ICtB3D,MAAMQ,GAAiC,IAAIxtP,IAAI,CAAC,OAAQ,aAAc,cAAe,aAAc,iBAAkB,aAAc,OAAQ,UAE9HytP,IAAgB,EAAA3F,EAAAA,eAAmE,CAAC,GAEjG,SAAS4F,GAAO/wP,EAAoBH,IACjCG,EAAOH,GAAO+tP,GAAgB5tP,EAAOH,EAAKixP,IAC3C,IAAIt4E,EAAMx4K,GACNw3N,YAACA,EAAWvU,UAAEA,GAAa+tC,GAAUhxP,EAAOH,IAC5CqqN,WAACA,EAAUnB,UAAEA,EAASkM,eAAEA,GAAkBu7B,GAAaxwP,IACvDutN,WAACA,EAAUF,UAAEA,GAAakjC,GAASvwP,GACnC4qI,EAAcoiH,GAAe,IAC5BhtP,EACHsS,OAAQ,WAAC+6M,YAAWpK,YAAW8F,iBAAWkM,EAAgBnf,WAAY91M,EAAM81M,aAAc,GAC1Fm3C,iBAAkB,sBAGpB,OACExB,EAAA/1H,cAAC,aACKu7H,GAAejxP,EAAO,CAAC05M,UAAWm3C,QAClCH,GAAWl5B,EAAatN,EAAYqD,MACpC3iF,EACJ/qI,IAAKA,EACL0tP,KAAMvtP,EAAMutP,WAAQzrP,EACpB,gBAAe9B,EAAM81M,iBAAch0M,EACnC,eAAc02K,EAAIyqC,WAAaA,QAAanhN,EAC5C,eAAcurN,QAAavrN,EAC3B,eAAcinN,QAAajnN,EAC3B,qBAAoBmzN,QAAkBnzN,GAE5C,CAKA,MAAMovP,GAAwBjB,GAAwBc,IC1EtD,MCdaI,IAAc,EAAAhG,EAAAA,eAAoD,CAAC,GC8fhF,MChgBaiG,IAAoB,EAAAjG,EAAAA,eAAuC,MAiBxE,MCfakG,IAAe,EAAAlG,EAAAA,eAA0D,CAAC,GAEvF,SAASmG,GAAMtxP,EAAmBH,IAC/BG,EAAOH,GAAO+tP,GAAgB5tP,EAAOH,EAAKwxP,IAC3C,IAAKz6H,YAAahyE,EAAc,WAAY6/K,GAAczkO,EAE1D,OAAOyrP,EAAA/1H,cAAC9wE,EAAA,CAAYnjD,UAAU,sBAAuBgjO,EAAY5kO,IAAKA,GACxE,CAEA,MAAM0xP,GAAuBtB,GAAwBqB,ICuErD,MCrDaE,IAAe,EAAArG,EAAAA,eAA0D,CAAC,GAEvF,IAAIsG,GAAoBzxP,IAEtB,IAAIktN,aAACA,EAAYC,cAAEA,EAAaC,WAAEA,KAAe+I,GAAcn2N,EAC/D,OAAOm2N,CAAA,EAGT,SAASu7B,GAAM1xP,EAAmBH,IAC/BG,EAAOH,GAAO+tP,GAAgB5tP,EAAOH,EAAK2xP,IAE3C,IAAIjkC,WAACA,EAAUF,UAAEA,GAAakjC,GAASvwP,IACnC+oN,UAACA,EAASkM,eAAEA,EAAc/K,WAAEA,GAAcsmC,GAAa,CACzDzkC,aAAa,EACbl1E,UAAW72I,EAAM62I,YAGfiuF,IAAc9kO,EAAM,iBAA6C,UAA1BA,EAAM,gBAC7C4qI,EAAcoiH,GAAe,IAC5BhtP,EACHsS,OAAQ,WACN+6M,YACAtE,iBACAkM,EACAnf,WAAY91M,EAAMk+I,WAAY,YAC9B4mF,GAEFmoB,iBAAkB,qBAGpB,OACExB,EAAA/1H,cAAC,YACKg7H,GAAWe,GAAiBzxP,GAAQkqN,EAAYqD,MAChD3iF,EACJ/qI,IAAKA,EACL,eAAckpN,QAAajnN,EAC3B,gBAAe9B,EAAMk+I,eAAYp8I,EACjC,eAAcurN,QAAavrN,EAC3B,qBAAoBmzN,QAAkBnzN,EACtC,eAAcgjO,QAAahjO,GAEjC,CAKA,MAAM6vP,GAAuB1B,GAAwByB,ICsD9C,MAAME,IAAuB,EAAAzG,EAAAA,eAAgD,MAgBpF,SAAS0G,GAAc7xP,EAA2BH,GAChD,IAAIspB,OAACA,IAAU,EAAAgjO,EAAAA,YAAWyF,IAC1B,OAAOnG,EAAA/1H,cAAA+1H,EAAA7sG,SAAA,KAAGz1H,EAAOnpB,EAAOH,GAC1B,CAKA,MAAMiyP,IAAiB,EAAAlB,EAAAA,YAAWiB,IASrBE,IAAqB,EAAA5G,EAAAA,eAAuC,CAAC,GCnK7D6G,IAAgB,EAAA7G,EAAAA,eAAsE,CAAC,GAEpG,SAAS8G,GAAOC,EAA4CC,GAC1D,IAAKnyP,EAAOH,GAAO+tP,GAAgBsE,EAAeC,EAAaH,IAC3DI,EAAU7F,GAAiB,SAAU2F,EAAeC,GACxD,OAAIC,GAKF3G,EAAA/1H,cAAC,UAAOj0H,UAAU,uBAAwBzB,EAAOH,IAAKA,GACnDG,EAAM8+G,SAGb,CAEA,MAAMuzI,IAAU,EAAAzB,EAAAA,YAAWqB,ICZdK,IAAmB,EAAAnH,EAAAA,eAAyD,CAAC,GAE1F,SAASoH,GAAUL,EAA+BC,GAChD,IAAKnyP,EAAOH,GAAO+tP,GAAgBsE,EAAeC,EAAaG,KAC3D17H,YAACA,EAAWkhG,YAAEA,EAAWz2N,MAAEA,EAAKI,UAAEA,GAAazB,EAC/CqoI,EAAUzR,GAAgC,KAC9B,OAAZyR,GAAoC,aAAhByvF,IACtBzvF,EAAU,OAGZ,IAAI0vF,eAACA,GAAkBy6B,GAAa,aAClC57H,cACAkhG,IAGEs6B,EAAU7F,GAAiB,YAAa2F,EAAeC,GAC3D,OAAIC,GAKF3G,EAAA/1H,cAAC2S,EAAA,IACK4oH,GAAejxP,MACf+3N,EACJ12N,MAAOA,EACPI,UAAW,OAAAA,QAAA,IAAAA,EAAAA,EAAa,uBACxB5B,IAAKA,EACL0tP,KAAMvtP,EAAMutP,WAAQzrP,GAE1B,CAEA,MAAM2wP,IAAa,EAAA7B,EAAAA,YAAW2B,ICyBjBG,IAAiB,EAAAvH,EAAAA,eAA+D,MAChFwH,IAAmB,EAAAxH,EAAAA,eAAqC,MAErE,SAASyH,GAA0B5yP,EAAwBH,IACxDG,EAAOH,GAAO+tP,GAAgB5tP,EAAOH,EAAK6yP,IAC3C,IAAI1C,GAAW,EAAA7D,EAAAA,YAAWyD,IACtBnnP,GAAQ,EAAA0jP,EAAAA,YAAWwG,IASvB,OARe,EAAAxG,EAAAA,YAAWD,IASjBT,EAAA/1H,cAAC42H,GAAqBtsP,GAG3ByI,EACKunP,EAAW,KAAOvE,EAAA/1H,cAACm9H,GAAA,CAAapqP,MAAOA,EAAOzI,MAAOA,EAAO8yP,WAAYjzP,IAG1E4rP,EAAA/1H,cAACq9H,GAAA,CAAkB/yP,MAAOA,EAAO8yP,WAAYjzP,GACtD,CAEA,SAASkzP,GAAA1oO,GAAqC,IAAnBrqB,MAACA,EAAK8yP,WAAEA,GAAWzoO,GACxC2oO,OAACA,EAAMvyM,WAAEA,GAAc2qM,GAAcprP,GACzCA,EAAQ,IAAIA,aAAOygD,EAAYq+D,SAAU,KAAMxyF,MAAO,MACtD,IAAI7jB,EAAQwqP,GAAajzP,GACzB,OACEyrP,EAAA/1H,cAAA+1H,EAAA7sG,SAAA,KACGo0G,EACDvH,EAAA/1H,cAACm9H,GAAA,CAAapqP,MAAOA,EAAOzI,MAAOA,EAAO8yP,WAAYA,IAG5D,CAKA,MAAMI,IAA0B,EAAAtC,EAAAA,YAA8BgC,IAS9D,SAASC,GAAAtoO,GAAgE,IAqDnE4oO,EACAC,EACAC,GAvDmB5qP,MAACA,EAAKzI,MAAEA,EAAK8yP,WAAEA,GAAiCvoO,GACnE+oO,iBAACA,EAAgB,OAAEnwB,EAAS,oBAASrL,EAAc,YAAc93N,GACjEygD,WAACA,EAAUy7K,iBAAEA,GAAoBzzN,EACjC8qP,KAAoB,OAAAD,QAAA,IAAAA,OAAA,EAAAA,EAAkBE,6BACtCC,KAAoB,OAAAH,QAAA,IAAAA,OAAA,EAAAA,EAAkBI,8BACtChmJ,UAACA,GAAaimJ,MACd1vB,iBAACA,EAAgBtB,aAAEA,GAAgBzG,EACnCwH,EAAWkwB,GAAY,CAAC7vB,MAAO,SAAUC,YAAa,SACtD/H,GAAmB,EAAA6uB,EAAAA,UAAQ,IAC7B9qP,EAAMi8N,kBAAoB,IAAI43B,GAAqB,YACjDpzM,WACAijL,EACA7jO,IAAKizP,EACLnwB,aAAmC,cAArBsB,EAAmC,IAAI5gO,IAAas/N,SAClEQ,cACArL,YACApqH,KAED,CAACjtD,EAAYijL,EAAUovB,EAAY7uB,EAAkBtB,EAAc7K,EAAapqH,EAAW1tG,EAAMi8N,iBAAkBkH,KAElHsF,aAACA,GAAgBqrB,GAAW,IAC3B9zP,EACH8gO,sBAAuByyB,GAAmBvzP,EAAM8gO,uCAChD7E,GACCxzN,EAAOqqP,GAENh0I,EAAW6rI,GAAkB,CAC/Br+N,MAAOm0B,EACPq+D,SAAW34F,IACT,OAAQA,EAAK3kB,MACX,IAAK,UACH,OAAOiqP,EAAA/1H,cAACq+H,GAAA,CAAeC,QAAS7tO,IAClC,IAAK,YACH,OAAOslO,EAAA/1H,cAAC+8H,GAActsO,EAAKnmB,OAC7B,IAAK,OACH,OAAOyrP,EAAA/1H,cAACu+H,GAAA,CAAO9tO,KAAMA,IACvB,QACE,MAAM,IAAIrY,MAAM,kCAAoCqY,EAAK3kB,MAC7D,IAIA0yP,GAAoB,EAAArI,EAAAA,QAAO0H,GAC3BY,GAAoB,EAAAtI,EAAAA,QAAO4H,IAC/B,EAAAtF,EAAAA,YAAU,KACJ+F,EAAkBhrM,UAAYqqM,GAChCpqP,QAAQyC,KAAK,8HAEXuoP,EAAkBjrM,UAAYuqM,GAChCtqP,QAAQyC,KAAK,gIAEd,CAAC2nP,EAAiBE,IAKrB,IAAIW,GAAmB,EACnBC,EAAkC,KAClCC,GAAU,EAAAzI,EAAAA,QAA4B,MAE1C,GAAI0H,GAAmBD,EAAkB,CACvCH,EAAYG,EAAiBE,4BAA6B,YACxD/yM,mBACAy7K,EACAo4B,QAAShB,EAAiBiB,kBAAoBD,OAAUxyP,IAE1DwxP,EAAiBkB,uBAAwB,CAAC,EAAGrB,EAAWL,GAExD,IAAI2B,EAAcnB,EAAiBmB,YACnCJ,EAAcf,EAAiBiB,kBAC3B9I,EAAA/1H,cAAC++H,EAAA,CAAY50P,IAAKy0P,GAAUhB,EAAiBiB,mBAC7C,IACN,CAEA,GAAId,GAAmBH,EAAkB,CACvCF,EAAYE,EAAiBI,4BAA6B,YACxDjzM,mBACAy7K,IAGF,IAAIw4B,EAAqBpB,EAAiBoB,oBAAsB,IAAIpB,EAAiBqB,uBAAuBl0M,EAAYqyM,EAAY,aAACh7B,SAAaqL,YAAQz1H,IAC1J2lJ,EAAsBC,EAAiBsB,uBAAwB,kBAC7D34B,qBACAy4B,GACCtB,EAAWN,GAEdsB,EAAmBhB,EAAUyB,aAAa,CAACrzP,KAAM,QACnD,CAEA,IAAI0oN,WAACA,EAAUnB,UAAEA,EAASkM,eAAEA,GAAkBu7B,KAC1CsE,EAAe,CACjBD,aAAcT,EACdvuK,QAAmC,IAA1Bp9E,EAAMg4C,WAAW2Z,eAC1B2uJ,iBACAkM,EACAkO,OAAQnjO,EAAMmjO,QAAU,cACxB16N,GAEEmiI,EAAcoiH,GAAe,CAC/BvrP,UAAWzB,EAAMyB,UACjBJ,MAAOrB,EAAMqB,MACb4rP,iBAAkB,qBAClB36O,OAAQwiP,IAGNC,EAAiC,KAYrC,OAX8B,IAA1BtsP,EAAMg4C,WAAW2Z,MAAcp6D,EAAMg1P,mBACvCD,EACEtJ,EAAA/1H,cAAC,OAECkmB,KAAK,SACLv6I,MAAO,CAACwiI,QAAS,aAChB7jI,EAAMg1P,iBAAiBF,KAM5BrJ,EAAA/1H,cAACu/H,GAAS,KACRxJ,EAAA/1H,cAAC,UACKu7H,GAAejxP,MACf0wP,GAAWjoB,EAAcve,EAAY,OAAAmpC,QAAA,IAAAA,OAAA,EAAAA,EAAqBzyB,oBAC1Dh2F,EACJ/qI,IAAKizP,EACLvF,KAAMvtP,EAAMutP,WAAQzrP,EACpBy8H,SAAUv+H,EAAMu+H,SAChB,mBAAkB61H,QAAoBtyP,EACtC,aAAsC,IAA1B2G,EAAMg4C,WAAW2Z,WAAct4D,EAC3C,eAAcinN,QAAajnN,EAC3B,qBAAoBmzN,QAAkBnzN,EACtC,cAAa9B,EAAMmjO,QAAU,QAC7B,mBAAkBnjO,EAAM83N,aAAe,YACvC2zB,EAAA/1H,cAACo3H,GAAO,CACNx6O,OAAQ,CACN,CAACogP,GAAgB1yP,GACjB,CAAC2yP,GAAkBlqP,GACnB,CAACspP,GAAoB,kBAACuB,YAAkBH,YAAWC,IACnD,CAACd,GAAkB,CAAC17H,YAAa,QACjC,CAACg7H,GAAsB,CAACzoO,OAAQ+rO,OAEjCp2I,GAEFi2I,EACAV,GAIT,CAMA,SAASN,GAAAn/N,GAAqE,IAAnDo/N,QAACA,EAAOvyP,UAAEA,EAASJ,MAAEA,GAA8BuzB,MAgChDugO,EACRC,EAhCpB,IAAI3sP,GAAQ,EAAA0jP,EAAAA,YAAWwG,KAClB0C,EAAYxrB,GAAWukB,SAGZkH,EAFhB,IAAIvrB,aAACA,EAAYC,WAAEA,GAAcurB,GAAkB,SACjD1rB,EACA,aAAyC,QAA3ByrB,EAAAtB,EAAQh0P,MAAM,qBAAd,IAAAs1P,EAAAA,OAA+BxzP,IAG3Cg9G,EAAW6rI,GAAkB,CAC/Br+N,MAAO7jB,EAAMg4C,WAAW2vG,YAAa4jG,EAAQ30P,KAC7Cy/G,SAAU34F,IACR,OAAQA,EAAK3kB,MACX,IAAK,SACH,OACEiqP,EAAA/1H,cAAC8/H,GAAA,CACCrvO,KAAMA,EACN4jN,aAAcA,EACdsrB,WAAYA,IAGlB,IAAK,OACH,OAAO5J,EAAA/1H,cAACu+H,GAAA,CAAO9tO,KAAMA,IACvB,QACE,MAAM,IAAIrY,MAAM,wCAA0CqY,EAAK3kB,MACnE,IAIJ,OACEiqP,EAAA/1H,cAAC,cACKu7H,GAAe+C,EAAQh0P,UACvBgqO,EACJvoO,UAAWA,IAA0B,QAAb0zP,EAAAnB,EAAQh0P,aAAR,IAAAm1P,OAAA,EAAAA,EAAe1zP,YAAa,qBACpDJ,MAAOA,IAAsB,QAAb+zP,EAAApB,EAAQh0P,aAAR,IAAAo1P,OAAA,EAAAA,EAAe/zP,OAC/BxB,IAAKm0P,EAAQh0P,MAAMH,KAClBi/G,EAGP,CAGA,SAAS02I,GAAAC,GAA8C,IAAhCtvO,KAACA,EAAI4jN,aAAEA,EAAYsrB,WAAEA,GAAWI,GACjD51P,IAACA,KAAQs2N,GAAchwM,EAAKnmB,MAChC,OACEyrP,EAAA/1H,cAAC28H,GAAK,IACAtoB,KACA5T,EACJt2N,IAAKmuP,GAAUqH,EAAYx1P,IAC1BsmB,EAAK0/M,SAGZ,CAeA,SAAS6vB,GAA8B11P,EAA4BH,GACjE,OAAO4sP,GAAqB,OAAQzsP,EAAOH,EAAKG,EAAM8+G,SACxD,CAKA,MAAM62I,IAA8B,EAAA/E,EAAAA,YAA8B8E,IAOlE,SAASzB,GAAA2B,GAAgC,IAAtBzvO,KAACA,GAAqByvO,MAKPhtB,EAJhC,IAAI/oO,EAAMkuP,GAAkB5nO,EAAKnmB,MAAMH,KACnC4I,GAAQ,EAAA0jP,EAAAA,YAAWwG,KACnBW,iBAACA,EAAgBH,UAAEA,EAASC,UAAEA,IAAa,EAAAjH,EAAAA,YAAW4F,KACtD3oB,YAACA,EAAW3E,WAAEA,EAAUY,iBAAEA,KAAqBwwB,GAAUC,GAC3D,CAACz2P,IAAK8mB,EAAK9mB,IAAK,aAAwB,QAAVupO,EAAAziN,EAAKnmB,aAAL,IAAA4oO,OAAA,EAAAA,EAAa,eAC3CngO,EACA5I,IAGE0tN,WAACA,EAAUF,UAAEA,GAAakjC,GAAS,CACrCz6C,YAAa+/C,EAAOr0B,kBAAoBq0B,EAAOj0B,YAG7Cm0B,EAA4C,KAC5C5C,GAAaG,IACfyC,EAAgBzC,EAAiB0C,iBAAkB,CAAC32P,IAAK8mB,EAAK9mB,KAAM8zP,IAGtE,IAAI8C,EAA4C,KAC5C7C,GAAaE,IACf2C,EAAgB3C,EAAiB4C,iBAAkB,CACjDl3P,OAAQ,CAACwC,KAAM,OAAQnC,IAAK8mB,EAAK9mB,IAAK82P,aAAc,OACnD/C,EAAWvzP,IAGhB,IAAIG,EAA6BmmB,EAAKnmB,MAClCo2P,EAAajD,GAAaA,EAAUiD,WAAWjwO,EAAK9mB,KACpDurI,EAAcoiH,GAAe,IAC5BhtP,EACHM,QAAIwB,EACJg9G,SAAU34F,EAAK0/M,SACfonB,iBAAkB,yBAClB36O,OAAQ,IACHujP,YACHxoC,EACAuR,cAAen2N,EAAMyzN,iBAAiB0C,cACtCzB,kBAAmB10N,EAAMyzN,iBAAiBiB,kBAC1Ck5B,iBAAkBlD,aAClBiD,EACAvB,aAAc,OAAAoB,QAAA,IAAAA,OAAA,EAAAA,EAAepB,gBAI7ByB,GAAsB,OAAAhD,QAAA,IAAAA,OAAA,EAAAA,EAAkBgD,sBAAmB,CAAKt3P,GAAUysP,EAAA/1H,cAACo8H,GAAY,CAAE9yP,OAAQA,MAErG,EAAAmvP,EAAAA,YAAU,KACHhoO,EAAKw9M,WACRx6N,QAAQyC,KAAK,+JAEd,CAACua,EAAKw9M,YAET,IAAI/+K,EAAiC5kD,EAAMmnJ,KAAO,IAAM,MAExD,OACEskG,EAAA/1H,cAAA+1H,EAAA7sG,SAAA,MACG,OAAA00G,QAAA,IAAAA,OAAA,EAAAA,EAAkBiD,mBACjBD,EAAoB,CAAC90P,KAAM,OAAQnC,IAAK8mB,EAAK9mB,IAAK82P,aAAc,WAElE1K,EAAA/1H,cAAC9wE,EAAA,IACK8rM,GAAWtnB,EAAa7b,EAAY,OAAAwoC,QAAA,IAAAA,OAAA,EAAAA,EAAeS,UAAW,OAAAP,QAAA,IAAAA,OAAA,EAAAA,EAAeQ,cAC7E7rH,EACJ/qI,IAAKA,EACL,yBAAwBszP,QAAarxP,EACrC,gBAAe+zP,EAAO79G,iBAAcl2I,EACpC,gBAAe+zP,EAAO//C,iBAAch0M,EACpC,eAAcurN,QAAavrN,EAC3B,eAAc+zP,EAAO9sC,gBAAajnN,EAClC,qBAAoB+zP,EAAO5gC,qBAAkBnzN,EAC7C,eAAc+zP,EAAO5yC,gBAAanhN,EAClC,gBAAes0P,QAAct0P,EAC7B,oBAAkB,OAAAm0P,QAAA,IAAAA,OAAA,EAAAA,EAAepB,oBAAgB/yP,EACjD,sBAA8D,SAAzC2G,EAAMyzN,iBAAiB0C,mBAA2B98N,EAAY2G,EAAMyzN,iBAAiB0C,eAC1G6sB,EAAA/1H,cAACo3H,GAAO,CACNx6O,OAAQ,CACN,CAAC6+O,GAAa,CACZ3D,MAAO,CACLxjO,MAAOy6M,EACP33E,YAAau4E,OAIlBz6F,EAAY9rB,YAGhB,OAAAw0I,QAAA,IAAAA,OAAA,EAAAA,EAAkBiD,mBAA8D,MAA1C9tP,EAAMg4C,WAAWiiL,YAAYv8M,EAAK9mB,MACvEi3P,EAAoB,CAAC90P,KAAM,OAAQnC,IAAK8mB,EAAK9mB,IAAK82P,aAAc,UAIxE,CAEA,SAASjB,GAA4Bl1P,EAA2BH,GAC9DA,EAAMkuP,GAAaluP,GACnB,IAAIyzP,iBAACA,EAAgBF,UAAEA,IAAa,EAAAjH,EAAAA,YAAW4F,KAC3C2E,mBAACA,EAAkB1G,SAAEA,EAAQ6E,aAAEA,GAAgBvB,EAAkBiD,iBACnEv2P,EACAozP,EACAvzP,GAGF,OAAImwP,EACK,KAIPvE,EAAA/1H,cAACihI,GAAA,IAAoC32P,EAAO02P,mBAAoBA,EAAoB7B,aAAcA,EAAch1P,IAAKA,GAEzH,CAOA,SAAS+2P,GAAsB52P,EAAkCH,GAC/D,IAAI62P,mBACFA,EAAkB7B,aAClBA,KACG1+B,GACDn2N,EAEA4qI,EAAcoiH,GAAe,IAC5B72B,EACH82B,iBAAkB,2BAClB36O,OAAQ,cACNuiP,KAIJ,OACEpJ,EAAA/1H,cAAC,UACKghI,KACA9rH,EAEJgR,KAAK,SACL/7I,IAAKA,EACL,mBAAkBg1P,QAAgB/yP,GAExC,CAEA,MAAM60P,IAAkC,EAAA/F,EAAAA,YAAWgG,IChetCC,IAAsB,EAAA1L,EAAAA,eAAsE,CACvG/0D,UAAW,WAoDb,MCKa0gE,IAAiB,EAAA3L,EAAAA,eAAuD,MAErF,SAAS4L,GAAQ/2P,EAAqBH,IACnCG,EAAOH,GAAO+tP,GAAgB5tP,EAAOH,EAAKi3P,IAC3C,IAAIE,GAAe,EAAA7K,EAAAA,YAAW8K,IAC1BC,EAAaC,GAAuBn3P,GACpCyI,EAAwB,MAAhBzI,EAAM4tL,QAAuC,MAArB5tL,EAAM2iP,aAAwBqU,EAA4BA,EAAbE,EAC7E7d,EAAY0V,GAAiBlvP,EAAK4I,EAAMmlL,SAAW5tL,EAAMq5O,YAAa,EAI1E,IAHe,EAAA8S,EAAAA,YAAWyD,IAGZ,CACZ,IAAI9wI,EAAW9+G,EAAM8+G,SAUrB,MATwB,oBAAbA,IACTA,EAAWA,EAAS,CAClBurE,QAASrqL,EAAMqqL,SAAW,KAC1B+L,UAAW,SACXw4D,YAAY,EACZvV,WAAW,KAIRoS,EAAA/1H,cAAA+1H,EAAA7sG,SAAA,KAAG9/B,EACZ,CAEA,OAAIr2G,GAAUA,EAAMmlL,QAAWyrD,EAK7BoS,EAAA/1H,cAAC0hI,GAAA,IACKp3P,EACJqzO,WAAYrzO,EAAMqzO,WAClB5qO,MAAOA,EACPmwO,WAAY/4O,EACZw5O,UAAWA,IATN,IAWX,CAKA,MAAMge,IAA0B,EAAAzG,EAAAA,YAA8BmG,IAW9D,SAASK,GAAAE,GAAsF,IAAzE7uP,MAACA,EAAK4wO,UAAEA,EAASke,yBAAEA,KAA6Bv3P,GAAyBs3P,MAGnFE,EAFV,IAAIze,aAACA,EAAY5D,cAAEA,EAAa7uC,WAAEA,EAAUlQ,UAAEA,GAAaqhE,GAAW,IACjEz3P,EACHsnD,OAAoB,QAAZkwM,EAAAx3P,EAAMsnD,cAAN,IAAAkwM,EAAAA,EAAgB,GACvB/uP,GAEC5I,EAAMG,EAAM44O,WACZgW,EAAaF,GAAkB7uP,IAAOu2L,IAAcp2L,EAAM4uP,aAAc,EACxEhkH,EAAcoiH,GAAe,IAC5BhtP,EACHitP,iBAAkB,qBAClB36O,OAAQ,CACN+3K,QAASrqL,EAAMqqL,SAAW,eAC1B+L,aACAw4D,YACAvV,KAIAh4O,EAAQ,IAAI03O,EAAa13O,SAAUupI,EAAYvpI,OAEnD,OACEoqP,EAAA/1H,cAACgiI,GAAM,CAAEre,UAAWA,EAAWD,gBAAiBme,IAC5Cv3P,EAAM64O,YAAcpwO,EAAMmlL,QAAU69D,EAAA/1H,cAAC,OAAI,cAAY,cAAey/G,EAAe9zO,MAAO,CAAC6jF,SAAU,QAASyyK,MAAO,KACvHlM,EAAA/1H,cAAC,UACKw4H,GAAW+C,GAAejxP,GAAe+4O,MACzCnuG,EACJ/qI,IAAKA,EACL0tP,KAAMvtP,EAAMutP,WAAQzrP,EACpBT,MAAOA,EACP,eAAcrB,EAAMqqL,QACpB,iBAAgB+L,EAChB,gBAAew4D,QAAc9sP,EAC7B,eAAcu3O,QAAav3O,IACzB9B,EAAM64O,YAAc4S,EAAA/1H,cAACkiI,GAAY,CAAE1gB,UAAWzuO,EAAMipL,QACtD+5D,EAAA/1H,cAACmhI,GAAoBlgF,SAAQ,CAAC/vK,MAAO,IAAI0/L,YAAYlQ,IAClDxrD,EAAY9rB,UAEf2sI,EAAA/1H,cAACkiI,GAAY,CAAE1gB,UAAWzuO,EAAMipL,SAIxC,CC5IO,MACMulE,IAA6B,EAAA9L,EAAAA,eAA0C,aCApF0M,GAAiB,CACf,QAASxkD,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,GACT,QAASC,IC9CX,MCQawiD,IAAc,EAAA3M,EAAAA,eAA4D,MAE1E4M,IAA8B,EAAA5M,EAAAA,eAA2C,MAM/E,SAAS6M,GAAYh4P,GAC1B,IAAIyI,EAAQwvP,GAAoBj4P,GAE5BH,GAAM,EAAAgsP,EAAAA,QAA0B,OAChCtR,iBAACA,EAAgBC,UAAEA,GAAa0d,GAAe,IAC9Cl4P,EACHwB,KAAM,QACLiH,EAAO5I,IAELs4P,EAAaC,IAAkB,EAAA7J,EAAAA,UAAwB,MACxDjhD,GAAW,EAAAy+C,EAAAA,cAAY,KACrBlsP,EAAIqpD,SACNkvM,EAAev4P,EAAIqpD,QAAQ22E,YAAc,QAE1C,CAAChgI,IAOJ,OALAw4P,GAAkB,CAChBx4P,IAAKA,EACLytM,SAAUA,IAIVm+C,EAAA/1H,cAACo3H,GAAO,CACNx6O,OAAQ,CACN,CAACwlP,GAAatd,GACd,CAACyc,GAA4BxuP,GAC7B,CAACsvP,GAA6BtvP,GAC9B,CAACquP,GAAgB,CACfzsE,QAAS,cACTgpD,WAAYxzO,EACZu2L,UAAW,eACX/0L,MAAO,CAAC,kBAAmB82P,OAG/B1M,EAAA/1H,cAAC4iI,GAAa,IAAM/d,EAAkB16O,IAAKA,EAAKojN,UAAWx6M,EAAMmlL,QAC9D5tL,EAAM8+G,UAIf,CCkCA,MChDay5I,IAAgB,EAAApN,EAAAA,eAA8D,MAC9EqN,IAAqB,EAAArN,EAAAA,eAA2C,MAE7E,SAASsN,GAAyBz4P,EAAuBH,IACtDG,EAAOH,GAAO+tP,GAAgB5tP,EAAOH,EAAK04P,IAC3C,IAAI93M,WAACA,EAAU/7C,SAAEA,GAAY4mP,SAKPoN,EAJtB,IAAIjwP,EAAQkwP,GAAe,IACtB34P,aACHygD,EACAq+D,cAAUh9G,EACV64O,mBAA4C,QAAxB+d,EAAA14P,EAAM26O,0BAAN,IAAA+d,EAAAA,EAA4B,YAG9CzjC,eAACA,EAAc/K,WAAEA,GAAcsmC,GAAa,CAACvyD,QAAQ,IAGrD26D,GAAY,EAAA/M,EAAAA,QAA0B,OACrCgN,EAAU7uO,GAASokO,SAYF0K,EAXtB,IAAIr0B,WACFA,EAAU+Q,aACVA,EAAYgI,WACZA,EAAUhD,UACVA,EAASnV,iBACTA,EAAgBC,kBAChBA,KACGtzL,GACD+mN,GAAU,IACT5I,GAAqBnwP,SACxBgqB,EACA2wN,mBAA4C,QAAxBme,EAAA94P,EAAM26O,0BAAN,IAAAme,EAAAA,EAA4B,UAC/CrwP,EAAOmwP,IAGLT,EAAaC,IAAkB,EAAA7J,EAAAA,UAAwB,MACxDjhD,GAAW,EAAAy+C,EAAAA,cAAY,KACrB6M,EAAU1vM,SACZkvM,EAAeQ,EAAU1vM,QAAQ22E,YAAc,QAEhD,CAAC+4H,IAEJP,GAAkB,CAChBx4P,IAAK+4P,EACLtrD,SAAUA,IAIZ,IAAI0rD,GAAmB,EAAAlO,EAAAA,UAAQ,KAAM,CACnCl9D,OAAQnlL,EAAMmlL,OACdm7B,UAAWtgN,EAAMsgN,yBACjBkM,EACAnf,WAAY91M,EAAM81M,aAAc,EAChCgvB,UAAW9yL,EAAW8yL,YAAa,EACnCxuG,WAAYt2H,EAAMs2H,aAAc,KAC9B,CAAC7tH,EAAMmlL,OAAQnlL,EAAMsgN,UAAWkM,EAAgBj1N,EAAM81M,WAAY9jK,EAAW8yL,UAAW9kO,EAAMs2H,aAE9FsU,EAAcoiH,GAAe,IAC5BhtP,EACHsS,OAAQ0mP,EACR/L,iBAAkB,sBAGhBgM,EAAWhI,GAAejxP,GAG9B,cAFOi5P,EAAS34P,GAGdmrP,EAAA/1H,cAAA+1H,EAAA7sG,SAAA,KAGE6sG,EAAA/1H,cAACq6H,GAAK,KACJtE,EAAA/1H,cAACo3H,GAAO,CACNx6O,OAAQ,CACN,CAACimP,GAAev4P,GAChB,CAACw4P,GAAoB/vP,GACrB,CAACyjP,GAA2BxnP,KAE7BkmI,EAAY9rB,WAGjB2sI,EAAA/1H,cAACo3H,GAAO,CACNx6O,OAAQ,CACN,CAACimP,GAAev4P,GAChB,CAACw4P,GAAoB/vP,GACrB,CAACywP,GAAoB1b,GACrB,CAAC6T,GAAc,IAAI5sB,EAAY5kO,IAAKg5P,EAAUjiI,YAAa,SAC3D,CAACk6H,GAAe,IAAItb,EAAc31O,IAAK+4P,EAAW31C,UAAWx6M,EAAMmlL,SACnE,CAACqpE,GAA4BxuP,GAC7B,CAACquP,GAAgB,CACfzsE,QAAS,SACTgpD,WAAYulB,EACZxiE,UAAW,eACX/0L,MAAO,CAAC,kBAAmB82P,KAE7B,CAACzF,GAAgBlY,GACjB,CAACmY,GAAkBlqP,GACnB,CAAC0oP,GAAa,CACZ3D,MAAO,CACL1gG,YAAau4E,EACbR,aAAcS,KAGlB,CAAC8rB,GAAmBp/M,KAEtBy5M,EAAA/1H,cAAC,UACKujI,KACAruH,KACAs/E,EACJrqN,IAAKA,EACL0tP,KAAMvtP,EAAMutP,WAAQzrP,EACpB,eAAc2G,EAAMsgN,gBAAajnN,EACjC,qBAAoBmzN,QAAkBnzN,EACtC,YAAW2G,EAAMmlL,aAAU9rL,EAC3B,gBAAe9B,EAAM81M,iBAAch0M,EACnC,eAAckwC,EAAW8yL,gBAAahjO,EACtC,gBAAe9B,EAAMs2H,iBAAcx0H,IACrC2pP,EAAA/1H,cAACyjI,GAAW,CACV1wP,MAAOA,EACP4qO,WAAYulB,EACZ5uO,MAAOA,EACP5Y,KAAMpR,EAAMoR,KACZ0kM,WAAY91M,EAAM81M,cAI5B,CAKA,MAAMsjD,IAAyB,EAAAxI,EAAAA,YAA8B6H,IAiBhDS,IAAqB,EAAA/N,EAAAA,eAAoE,MAEtG,SAASkO,GAA8Br5P,EAA4BH,OA8B/Cy5P,EACAC,GA9BjBv5P,EAAOH,GAAO+tP,GAAgB5tP,EAAOH,EAAKq5P,IAC3C,IAAIzwP,GAAQ,EAAA0jP,EAAAA,YAAWqM,KACnBj+L,YAACA,GAAe+yL,GAAkBiL,IAClCpoH,EAAoC,MAArB1nI,EAAM80O,YACrB90O,EAAMg4C,WAAWt5C,QAAQsB,EAAM80O,aAC/B,KACA1X,EAAW,OAAA11F,QAAA,IAAAA,OAAA,EAAAA,EAAc01F,SAC7B,GAAwB,oBAAbA,EAAyB,CAGlCA,EADSA,EACK,CACZxY,WAAW,EACXpK,WAAW,EACXjrE,YAAY,EACZ+wE,WAAW,EACXkM,gBAAgB,EAChBnf,YAAY,EACZ8oB,cAAe,SACfzB,kBAAmB,UAEvB,CAEA,IAAIgd,EAAkBqf,GAA4BniB,GAAAwgB,IAAc,6BAO9C4B,EACAC,EANlB,IAAI9uH,EAAcoiH,GAAe,IAC5BhtP,EACHktP,gBAAiBrnB,GAAYtrK,GAAe4/K,EAAgB3vM,OAAO,qBACnEyiN,iBAAkB,yBAClB36O,OAAQ,CACN69H,aAAuC,QAAzBspH,EAAkB,QAAlBH,EAAA7wP,EAAM0nI,oBAAN,IAAAmpH,OAAA,EAAAA,EAAoB1yP,aAApB,IAAA6yP,EAAAA,EAAkC,KAChDE,aAA2C,QAA7BD,EAAkB,QAAlBH,EAAA9wP,EAAM0nI,oBAAN,IAAAopH,OAAA,EAAAA,EAAoB51B,iBAApB,IAAA+1B,EAAAA,EAAiC,KAC/CE,eAAgBzpH,KAIhB8oH,EAAWhI,GAAejxP,GAE9B,OACEyrP,EAAA/1H,cAAC,QAAK71H,IAAKA,KAASo5P,KAAcruH,EAAa,oBAAmBuF,QAAgBruI,GAEhF2pP,EAAA/1H,cAACy7H,GAAYx6E,SAAQ,CAAC/vK,WAAO9E,GAC1B8oI,EAAY9rB,UAIrB,CAMA,MAAM+6I,IAA8B,EAAAjJ,EAAAA,YAA8ByI,IC5K9Dp2P,OAAOW,SCxFX,MAgBA,GAhBwBk2P,CAACj6P,EAAK8xE,MAC5B44F,EAAAA,EAAAA,YAAU,KAER,SAAS6f,EAAoB1iE,GACvB7nH,EAAIqpD,UAAYrpD,EAAIqpD,QAAQ8E,SAAS05D,EAAM1oH,SAC7C2yE,GAEJ,CAGA,OADAjtE,SAASgO,iBAAiB,YAAa03K,GAChC,KACL1lL,SAASy5H,oBAAoB,YAAaisD,EAAmB,CAC9D,GACA,CAACvqL,EAAK8xE,GAAU,EC0CrB,GAlDkB3xE,IAChB,MAAM,UAAEyB,EAAS,MAAE6qB,EAAK,MAAEtC,EAAK,SAAE+zH,EAAQ,WAAEg8G,EAAU,gBAAEC,EAAe,WAAEvhH,GAAez4I,GAChF4tL,EAAQqsE,IAAa3vF,EAAAA,EAAAA,WAAS,GAC/BsuE,GAAa1uC,EAAAA,EAAAA,QAAO,MAY1B,GAVAgwD,GAAgBthB,GAAY,IAAMqhB,GAAU,MAE5C1vF,EAAAA,EAAAA,YAAU,KACJqjB,IACFgrD,EAAW1vL,QAAQ7nD,MAAM6jF,SAAW,QACpCxgF,SAASwF,gBAAgB7I,MAAMurF,SAAW,GAC1CloF,SAASwF,gBAAgB7I,MAAM2jI,aAAe,GAChD,GACC,CAAC4oD,KAECthK,EACH,OAAOw9J,EAAAA,GAAAA,KAAA,UAYT,OACED,EAAAA,GAAAA,MAACswE,GAAM,CAAC14P,UAAY,YAAWA,IAAa87O,YAAax/F,EAASn3I,MAC1D44O,kBAAoBl5O,GAASyzP,EAAWzzP,GACxCsnL,OAAQA,EAAQg1D,aAAcqX,EAC9BpxC,OAbYvmN,IACkB,WAAlCA,EAAEtD,OAAO8sK,aAAa,SACxBjpK,OAAOu3P,gBAAe,KACpB93P,EAAEtD,OAAOuT,aAAa,WAAY,GAClCjQ,EAAEtD,OAAO84I,OAAO,GAEpB,EAO6Bh5B,SAAA,EAC3BgrE,EAAAA,GAAAA,KAAC//J,GAAK,CAAA+0F,SAAE90F,KACR8/J,EAAAA,GAAAA,KAAC8H,GAAM,CAAA9yE,UACLgrE,EAAAA,GAAAA,KAACuwE,GAAW,CAAAv7I,SACTk7I,GAAmBA,EAAgBj8G,QAGxC+rC,EAAAA,GAAAA,KAACwwE,GAAO,CAAC74P,UAAY,kBAAiBA,IAAaszO,6BAA8BA,KAAM,EAAOl1O,IAAK+4O,EAAW95H,UAC5GgrE,EAAAA,GAAAA,KAACywE,GAAO,CAACjuO,MAAOA,EAAOsyM,cAAc,SAASzB,kBAAkB,SAAQr+G,SACpE34F,IAAS2jK,EAAAA,GAAAA,KAAC0wE,GAAW,CAAe5zP,MAAOuf,EAAKvf,MAAMk4G,SACrD25B,GAAcA,EAAWtyH,IADCA,EAAK7lB,UAK/B,ECjDN,IAAIm6P,GAAc,SAAU/6G,EAAKg7G,GACpC,OAAOz0P,OAAOy5I,EAAI7lC,QAAQ6gJ,GAC9B,ECNWrwG,GAAiB,SAAU/+I,EAASo8G,EAAO/1C,GAC9CA,GAAgC,oBAAbA,GACnBA,EAASrmE,EAASo8G,EAE1B,ECyDWizI,GAAa,CACpBC,QAxDU,SAAUr4P,GACpB,OAAQiL,KAAKyjM,IAAI1uM,EAAIiL,KAAKwjM,IAAM,EAAI,EACxC,EAuDI6pD,OArDS,SAAUt4P,GACnB,OAAOA,CACX,EAoDIu4P,WAlDa,SAAUv4P,GACvB,OAAOA,EAAIA,CACf,EAiDIw4P,YA/Cc,SAAUx4P,GACxB,OAAOA,GAAK,EAAIA,EACpB,EA8CIy4P,cA5CgB,SAAUz4P,GAC1B,OAAOA,EAAI,GAAM,EAAIA,EAAIA,GAAU,EAAI,EAAIA,GAAKA,EAAlB,CAClC,EA2CI04P,YAzCc,SAAU14P,GACxB,OAAOA,EAAIA,EAAIA,CACnB,EAwCI24P,aAtCe,SAAU34P,GACzB,QAASA,EAAIA,EAAIA,EAAI,CACzB,EAqCI44P,eAnCiB,SAAU54P,GAC3B,OAAOA,EAAI,GAAM,EAAIA,EAAIA,EAAIA,GAAKA,EAAI,IAAM,EAAIA,EAAI,IAAM,EAAIA,EAAI,GAAK,CAC3E,EAkCI64P,YAhCc,SAAU74P,GACxB,OAAOA,EAAIA,EAAIA,EAAIA,CACvB,EA+BI84P,aA7Be,SAAU94P,GACzB,OAAO,KAAMA,EAAIA,EAAIA,EAAIA,CAC7B,EA4BI+4P,eA1BiB,SAAU/4P,GAC3B,OAAOA,EAAI,GAAM,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,EAAI,IAAMA,EAAIA,EAAIA,EAAIA,CAC/D,EAyBIg5P,YAvBc,SAAUh5P,GACxB,OAAOA,EAAIA,EAAIA,EAAIA,EAAIA,CAC3B,EAsBIi5P,aApBe,SAAUj5P,GACzB,OAAO,IAAMA,EAAIA,EAAIA,EAAIA,EAAIA,CACjC,EAmBIk5P,eAjBiB,SAAUl5P,GAC3B,OAAOA,EAAI,GAAM,GAAKA,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,EAAI,KAAOA,EAAIA,EAAIA,EAAIA,EAAIA,CACzE,GC1DIm5P,GAA6B,SAAUtM,GACd,kBAAdA,GACPv3H,qBAAqBu3H,EAE7B,EACWuM,GAAwB,SAAUC,GACpCA,EAAgBC,UAErBH,GAA2BE,EAAgBxM,WAE3CwM,EAAgBE,SAAU,EAC1BF,EAAgBxM,UAAY,KAC5BwM,EAAgB/pD,SAAW,KAC/B,EACO,SAASkqD,GAAqBH,EAAiBvM,EAAe2M,EAAerqL,GAChF,GAAKiqL,EAAgBC,QAArB,CAEA,IAAII,GAAY,IAAIh3P,MAAOe,UAG3B21P,GAAsBC,GAEtBA,EAAgBxM,UAAY,WACxB,IAAKwM,EAAgBC,QACjB,OAAOH,GAA2BE,EAAgBxM,WAEtD,IAAI8M,GAAY,IAAIj3P,MAAOe,UAAYi2P,EACnCE,EAAoBD,EAAYF,EAEhCvnL,GAAO2nL,EADSzB,GAAWtL,IACN8M,GACrBD,GAAaF,GACbrqL,EAbO,GAcPiqL,EAAgBxM,UAAY,MAEvBwM,EAAgBxM,YACrBz9K,EAAS8C,GACTmjD,sBAAsBgkI,EAAgBxM,WAElD,EACIx3H,sBAAsBgkI,EAAgBxM,UAvB5B,CAwBd,CAUO,SAAS0M,GAAQF,EAAiBS,EAAaL,EAAe3M,GACjE,IAAI1hK,EAVR,SAA4B0uK,GACxB,IAAIxtB,EAAQwtB,EAAYxtB,MAAOytB,EAAYD,EAAYC,UAAWC,EAAYF,EAAYE,UAC1F,QAAIt2P,OAAOigF,MAAM2oJ,IACb5oO,OAAOigF,MAAMo2K,IACbr2P,OAAOigF,MAAMq2K,GAIrB,CAEkBC,CAAmBH,GACjC,GAAKT,EAAgBC,SAAYluK,EAAjC,CAEA,IAAI8uK,EAAoBb,EAAgBa,kBACpCr2O,EAAKw1O,EAAgBc,eAAgB7tB,EAAQzoN,EAAGyoN,MAAOytB,EAAYl2O,EAAGk2O,UAAWC,EAAYn2O,EAAGm2O,UAChGI,EAAYN,EAAYxtB,MAAQA,EAChC+tB,EAAgBP,EAAYC,UAAYA,EACxCO,EAAgBR,EAAYE,UAAYA,EACtB,IAAlBP,EACAS,EAAkBJ,EAAYxtB,MAAOwtB,EAAYC,UAAWD,EAAYE,WAIxER,GAAqBH,EAAiBvM,EAAe2M,GAAe,SAAUvnL,GAI1EgoL,EAHe5tB,EAAQ8tB,EAAYloL,EAChB6nL,EAAYM,EAAgBnoL,EAC5B8nL,EAAYM,EAAgBpoL,EAE3D,GAhBc,CAkBd,CCrDO,IAaIqoL,GAAkB,SAAUlB,EAAiBmB,GACpD,IAAIC,EAAmBpB,EAAgBoB,iBAAkBC,EAAmBrB,EAAgBqB,iBACxFC,EAAkBtB,EAAgBuB,MAAMD,gBAC5C,IAAKF,IAAqBC,EACtB,MAAM,IAAInvP,MAAM,8BAEpB,IAAIsY,EArCD,SAA4B42O,EAAkBC,EAAkBF,GACnE,IAAIK,EAAeJ,EAAiBn9H,YAChCw9H,EAAgBL,EAAiBj9H,aAGjCu9H,EAFeL,EAAiBp9H,YAECk9H,EACjCQ,EAFgBN,EAAiBl9H,aAEEg9H,EAGvC,MAAO,CACHK,aAAcA,EACdC,cAAeA,EACfC,gBAAiBA,EACjBE,aANeJ,EAAeE,EAO9BC,iBAAkBA,EAClBE,cAPgBJ,EAAgBE,EASxC,CAoBaG,CAAmBV,EAAkBC,EAAkBF,GAAWK,EAAeh3O,EAAGg3O,aAAcC,EAAgBj3O,EAAGi3O,cAC1HM,EApBe,SAAUP,EAAcE,EAAiBM,EAAWP,EAAeE,EAAkBM,EAAYX,GACpH,IAAIY,EAAmBV,EAAeE,EAChCM,GAAaV,EAAkB,EAAI,IACnC,EACFa,EAAoBV,EAAgBE,EAClCM,GAAcX,EAAkB,EAAI,IACpC,EAKN,MAAO,CAAEc,aAJUZ,EAAeE,EAAkBQ,EAIfG,aAHlBH,EAG8CI,aAF9Cb,EAAgBE,EAAmBQ,EAEuCI,aAD1EJ,EAEvB,CAQiBK,CAAUhB,EADwIh3O,EAAGk3O,gBAAgCl3O,EAAGo3O,aACjIH,EADkKj3O,EAAGm3O,iBAAkCn3O,EAAGq3O,cAC1J53P,QAAQq3P,IAC5H,OAAOS,CACX,EA8BWU,GAAe,SAAUz3P,EAAO03P,EAAUC,EAAU3hF,GAC3D,OAGW69E,GAHN79E,EAEDh2K,EAAQ03P,EACWA,EACnB13P,EAAQ23P,EACWA,EACJ33P,EALIA,EAEU,EAIrC,EACW43P,GAAwB,SAAU5C,EAAiBmB,GAC1D,IAAIY,EAASb,GAAgBlB,EAAiBmB,GAG9C,OADAnB,EAAgB+B,OAASA,EAClBA,CACX,EACO,SAASc,GAAwBnC,EAAWC,EAAWoB,EAAQe,EAAeC,EAAeC,EAAe5B,GAC/G,IAAIgB,EAAeL,EAAOK,aAAcE,EAAeP,EAAOO,aAAcD,EAAeN,EAAOM,aAAcE,EAAeR,EAAOQ,aAClIU,EAAW,EACXC,EAAW,EAOf,OANI9B,IACA6B,EAAWF,EACXG,EAAWF,GAIR,CAAEz9P,EAFDk9P,GAAa/B,EAAW0B,EAAea,EAAUZ,EAAeY,EAAUH,GAEnEt9P,EADPi9P,GAAa9B,EAAW2B,EAAeY,EAAUX,EAAeW,EAAUJ,GAEtF,CCjGO,SAASK,GAA6BnD,EAAiBoD,EAAQC,EAAQlC,EAAUY,EAAQe,GAC5F,IAAIt4O,EAAKw1O,EAAgBc,eAAgB7tB,EAAQzoN,EAAGyoN,MAAOytB,EAAYl2O,EAAGk2O,UAAWC,EAAYn2O,EAAGm2O,UAChG2C,EAAkBnC,EAAWluB,EACjC,MAAsB,kBAAXmwB,GAAyC,kBAAXC,GACrC91P,QAAQ2C,MAAM,6CACP,CAAE3K,EAAGm7P,EAAWl7P,EAAGm7P,IAMXkC,GAJOnC,EAAY0C,EAASE,EACrB3C,EAAY0C,EAASC,EAGsCvB,EAAQe,EAAe,EAAG,EAAG,KAEtH,CACO,SAASS,GAAgBz7O,EAAM07O,EAAUC,EAAUC,EAAaC,GACnE,IACIC,EAAsBJ,GADPG,EAAgBD,EAAc,GAEjD,OAAKr5P,OAAOigF,MAAMm5K,IAAa37O,GAAQ27O,EAC5BA,GACNp5P,OAAOigF,MAAMk5K,IAAa17O,GAAQ87O,EAC5BA,EACJ97O,CACX,CCpBO,IAAI+7O,GAAwB,SAAU7D,EAAiBl0I,GAC1D,IAAImnB,EAAW+sH,EAAgBuB,MAAMuC,QAAQ7wH,SACzC8wH,EAAgB/D,EAAgB+D,cAAe3C,EAAmBpB,EAAgBoB,iBAClFh+P,EAAS0oH,EAAM1oH,OAEf4gQ,EADoB,eAAgB5gQ,GAAU,iBAAkB0oH,EAE9DA,EAAMm4I,eAAe92P,MAAK,SAAU27H,GAClC,OAAMA,aAAc2D,UAGQ,OAArB20H,QAAkD,IAArBA,OAA8B,EAASA,EAAiBhvM,SAAS02E,GACjH,IAC+B,OAArBs4H,QAAkD,IAArBA,OAA8B,EAASA,EAAiBhvM,SAAShvD,GAEpG,SADgB2gQ,GAAiB3gQ,GAAU4gQ,KAG1BE,GAAe9gQ,EAAQ6vI,EAI5C,EACWkxH,GAAmB,SAAUnE,GACpC,IAAI+D,EAAgB/D,EAAgB+D,cAAeK,EAAYpE,EAAgBoE,UAC3E9hH,EAD8F09G,EAAgBuB,MAC7FuC,QAAQxhH,SAE7B,SADgByhH,IAAiBK,GAAc9hH,EAInD,EAkDO,SAAS+hH,GAAkBrE,EAAiBsE,EAAcC,EAAcxB,EAAeC,GAC1F,IAAIF,EAAgB9C,EAAgBuB,MAAMuB,cACtC1B,EAAmBpB,EAAgBoB,iBAAkBW,EAAS/B,EAAgB+B,OAC9Ev3O,EAAKw1O,EAAgBc,eAAgB7tB,EAAQzoN,EAAGyoN,MAAOytB,EAAYl2O,EAAGk2O,UAAWC,EAAYn2O,EAAGm2O,UACpG,GAAyB,OAArBS,GACW,OAAXW,IACCuC,IAAiB5D,GAAa6D,IAAiB5D,GAFpD,CAKA,IAAIrwO,EAAKuyO,GAAwByB,EAAcC,EAAcxC,EAAQe,EAAeC,EAAeC,EAAe5B,GAAmB77P,EAAI+qB,EAAG/qB,EAAGC,EAAI8qB,EAAG9qB,EACtJw6P,EAAgBa,kBAAkB5tB,EAAO1tO,EAAGC,EAFhD,CAGA,CACO,IAcIg/P,GAAkB,SAAUxE,EAAiBxhM,GACpD,IAAI+iM,EAAQvB,EAAgBuB,MACxBtuB,EADgD+sB,EAAgBc,eACzC7tB,MACvBuwB,EAAWjC,EAAMiC,SAAUiB,EAAiBlD,EAAMkD,eACtD,OAAIjmM,EAAO,GAAKy0K,GAASuwB,IAAaiB,EAC3BjmM,EAEJ,CACX,EClHWkmM,GAA+B,SAAU1E,GAChD,IAAIC,EAAUD,EAAgBC,QAC1Bz1O,EAAKw1O,EAAgBuB,MAAOj/G,EAAW93H,EAAG83H,SAAUqiH,EAAoBn6O,EAAGm6O,kBAC3E1xB,EAAQ+sB,EAAgBc,eAAe7tB,MAG3C,QAFuB0xB,EAAkBriH,YACJ2wF,EAAQ,IAAM3wF,IAAY29G,EAInE,EACW2E,GAAoB,SAAU5E,GACrC,IAAIC,EAAUD,EAAgBC,QAAShqD,EAAW+pD,EAAgB/pD,SAAU8rD,EAAS/B,EAAgB+B,OACjGv3O,EAAKw1O,EAAgBuB,MAAOj/G,EAAW93H,EAAG83H,SAAUqiH,EAAoBn6O,EAAGm6O,kBAC3E1xB,EAAQ+sB,EAAgBc,eAAe7tB,MAG3C,QAFuB0xB,EAAkBriH,YACJ2wF,EAAQ,IAAM3wF,IAAY29G,OAG1DhqD,IAAa8rD,EAGtB,EASO,SAAS8C,GAAoBC,EAAaC,EAAe/vH,EAAiBgwH,EAAUlC,EAAehuB,EAAaC,EAAakwB,EAAWC,EAAWrsL,GACtJ,GAAIiqL,EAAe,CAEX,IAQIqC,EATR,GAAIJ,EAAgBhwB,GAAe//F,EAAkB+/F,EAEjD,OADIowB,EAAqBpwB,GAAe+vB,EAAc/vB,GAAel8J,GAC5CqsL,EACdA,EACPC,EAAqBpwB,EACdA,EACJowB,EAEX,GAAIJ,EAAgBjwB,GAAe9/F,EAAkB8/F,EAEjD,OADIqwB,EAAqBrwB,GAAegwB,EAAchwB,GAAej8J,GAC5CosL,EACdA,EACPE,EAAqBrwB,EACdA,EACJqwB,CAEnB,CACI,OAAIH,EACOD,EACJtC,GAAaqC,EAAahwB,EAAaC,EAAa+tB,EAC/D,CC1CO,SAASsC,GAAwBpF,EAAiB12K,GAErD,GADgBo7K,GAA6B1E,GAC7C,CAGA,IAAIqF,EAAoBrF,EAAgBqF,kBAAmBC,EAAetF,EAAgBsF,aAAc/D,EAAQvB,EAAgBuB,MAC5HH,EAAmBpB,EAAgBoB,iBACnCmE,EAAchE,EAAMoD,kBAAkBY,YACtCtkM,EAAM53D,KAAK43D,MACf,GAAIokM,GAAqBC,GAAgBlE,EAAkB,CACvD,IAAIoE,EAjBL,SAA2BpE,EAAkBmE,GAEhD,OAAIA,EACO3zP,KAAK2lC,IAFQ,EAEe6pN,EAAiBn9H,YAAch9H,OAAOgoL,YAFrD,CAK5B,CAW6Bw2E,CAAkBrE,EAAkBmE,GACrDG,EAAYp8K,EAAS/jF,EAAI8/P,EAAkB9/P,EAC3CogQ,EAAYr8K,EAAS9jF,EAAI6/P,EAAkB7/P,EAC3CogQ,EAAYF,EAAYF,EACxBK,EAAYF,EAAYH,EACxBvsH,EAAWh4E,EAAMqkM,EACjBQ,EAAQJ,EAAYA,EAAYC,EAAYA,EAC5C1vD,EAAWrkM,KAAKskM,KAAK4vD,GAAS7sH,EAClC+mH,EAAgB/pD,SAAW,CAAE2vD,UAAWA,EAAWC,UAAWA,EAAW7nJ,MAAOi4F,EACxF,CACI+pD,EAAgBqF,kBAAoB/7K,EACpC02K,EAAgBsF,aAAerkM,CAjBnC,CAkBA,CC7BO,SAAS8kM,GAAmB/F,EAAiBl0I,GAChD,IAAImnH,EAAQ+sB,EAAgBc,eAAe7tB,MAC3C8sB,GAAsBC,GACtB4C,GAAsB5C,EAAiB/sB,QACb/sO,IAAtBe,OAAO++P,YAA4Bl6I,aAAiBk6I,WHgCvB,SAAUhG,EAAiBl0I,GAC5D,IAAIoe,EAAUpe,EAAMoe,QAChB1/G,EAAKw1O,EAAgBc,eAAgBJ,EAAYl2O,EAAGk2O,UAAWC,EAAYn2O,EAAGm2O,UAIlF,GAHAX,EAAgBoE,WAAY,EAEY,IAAnBl6H,EAAQ3mI,OACT,CAChB,IAAIgC,EAAI2kI,EAAQ,GAAGzG,QACfj+H,EAAI0kI,EAAQ,GAAGrG,QACnBm8H,EAAgBiG,YAAc,CAAE1gQ,EAAGA,EAAIm7P,EAAWl7P,EAAGA,EAAIm7P,EACjE,CACA,CG1CQuF,CAAwBlG,EAAiBl0I,GHuBjB,SAAUk0I,EAAiBl0I,GACvD,IAAIthG,EAAKw1O,EAAgBc,eAAgBJ,EAAYl2O,EAAGk2O,UAAWC,EAAYn2O,EAAGm2O,UAClFX,EAAgBoE,WAAY,EAE5B,IAAI7+P,EAAIumH,EAAM2X,QACVj+H,EAAIsmH,EAAM+X,QACdm8H,EAAgBiG,YAAc,CAAE1gQ,EAAGA,EAAIm7P,EAAWl7P,EAAGA,EAAIm7P,EAC7D,CG3BQwF,CAAmBnG,EAAiBl0I,EAE5C,CACO,SAASs6I,GAAoBpG,GAChC,IAAI/sB,EAAQ+sB,EAAgBc,eAAe7tB,MACvCzoN,EAAKw1O,EAAgBuB,MAAOiC,EAAWh5O,EAAGg5O,SAAU6C,EAAqB77O,EAAG67O,mBAC5E/jH,EAAW+jH,EAAmB/jH,SAAUgkH,EAAQD,EAAmBC,MAAOC,EAAQF,EAAmBE,MAAOnG,EAAgBiG,EAAmBjG,cAAeI,EAAgB6F,EAAmB7F,cAErM,KADiBl+G,GAAY2wF,EAAQuwB,IAAc8C,IAAUC,GAC7D,CAEA,IAAI9F,EH8BD,SAA2BT,GAC9B,IAAIx1O,EAAKw1O,EAAgBc,eAAgBJ,EAAYl2O,EAAGk2O,UAAWC,EAAYn2O,EAAGm2O,UAAW1tB,EAAQzoN,EAAGyoN,MACpG3iN,EAAK0vO,EAAgBuB,MAAOj/G,EAAWhyH,EAAGgyH,SAAUwgH,EAAgBxyO,EAAGwyO,cAAexB,EAAkBhxO,EAAGgxO,gBAC3GF,EAAmBpB,EAAgBoB,iBACvC,IAAI9+G,GAAa8+G,GAAqBpB,EAAgB+B,OAAtD,CAEA,IAAInyN,EAAKowN,EAAgB+B,OAAQM,EAAezyN,EAAGyyN,aAAcD,EAAexyN,EAAGwyN,aAAcG,EAAe3yN,EAAG2yN,aAAcD,EAAe1yN,EAAG0yN,aAC/IkE,EAAW9F,EAAY2B,GAAgB3B,EAAY0B,EACnDqE,EAAW9F,EAAY4B,GAAgB5B,EAAY2B,EAOnDzyN,EAAKszN,GAA6BnD,EANtBU,EAAY2B,EACtBjB,EAAiBn9H,YACjB+7H,EAAgBuB,MAAMa,cAAgB,EAC5BzB,EAAY4B,EACtBnB,EAAiBj9H,aACjB67H,EAAgBuB,MAAMe,cAAgB,EACiCrvB,EAAO+sB,EAAgB+B,OAAQe,GAAiBxB,GAAkB/7P,EAAIsqC,EAAGtqC,EAAGC,EAAIqqC,EAAGrqC,EAChK,MAAO,CACHytO,MAAOA,EACPytB,UAAW8F,EAAWjhQ,EAAIm7P,EAC1BC,UAAW8F,EAAWjhQ,EAAIm7P,EAdpB,CAgBd,CGnDsB+F,CAAkB1G,GAChCS,GACAP,GAAQF,EAAiBS,EAAaL,EAAeI,EAH/C,CAKd,CACO,SAASmG,GAAc3G,EAAiBv8H,EAASI,GACpD,IAAIoiI,EAAcjG,EAAgBiG,YAC9Bz7O,EADmDw1O,EAAgBuB,MACxD8E,mBAAoBC,EAAQ97O,EAAG87O,MAAOC,EAAQ/7O,EAAG+7O,MAChE,GAAKN,EAAL,CAEA,IAAI31O,EH6D8B,SAAU0vO,EAAiBv8H,EAASI,GACtE,IAAIoiI,EAAcjG,EAAgBiG,YAAanF,EAAiBd,EAAgBc,eAC5EgD,EAAU9D,EAAgBuB,MAAMuC,QAChC8C,EAAY9C,EAAQ8C,UAAWC,EAAY/C,EAAQ+C,UACnDnG,EAAYI,EAAeJ,UAAWC,EAAYG,EAAeH,UACrE,IAAKsF,EACD,MAAO,CAAE1gQ,EAAGm7P,EAAWl7P,EAAGm7P,GAE9B,IAAIyC,EAAS3/H,EAAUwiI,EAAY1gQ,EAC/B89P,EAASx/H,EAAUoiI,EAAYzgQ,EAGnC,MAAO,CAAED,EAFUqhQ,EAAYlG,EAAY0C,EAEjB59P,EADPqhQ,EAAYlG,EAAY0C,EAE/C,CG1EayD,CAAyB9G,EAAiBv8H,EAASI,GAAUt+H,EAAI+qB,EAAG/qB,EAAGC,EAAI8qB,EAAG9qB,EACnFu9P,EAAgByB,GAAgBxE,EAAiBsG,GACjDtD,EAAgBwB,GAAgBxE,EAAiBuG,GACrDnB,GAAwBpF,EAAiB,CAAEz6P,EAAGA,EAAGC,EAAGA,IACpD6+P,GAAkBrE,EAAiBz6P,EAAGC,EAAGu9P,EAAeC,EAL9C,CAMd,CACO,SAAS+D,GAAiB/G,GAC7B,GAAIA,EAAgBoE,UAAW,CAC3B,IAAI4C,EAAmBhH,EAAgBuB,MAAMuC,QAAQkD,iBACjD/wD,EAAW+pD,EAAgB/pD,SAAUmrD,EAAmBpB,EAAgBoB,iBAAkBC,EAAmBrB,EAAgBqB,iBACjIrB,EAAgBoE,WAAY,EAC5BpE,EAAgBE,SAAU,EAC1BF,EAAgBxM,UAAY,KAC5B,IAAIyT,EAAmC,OAArB7F,QAAkD,IAArBA,OAA8B,EAASA,EAAiBz9H,wBACnGujI,EAAmC,OAArB7F,QAAkD,IAArBA,OAA8B,EAASA,EAAiB19H,wBACnG69H,GAAgC,OAAhByF,QAAwC,IAAhBA,OAAyB,EAASA,EAAY5iQ,QAAU,EAChGo9P,GAAiC,OAAhBwF,QAAwC,IAAhBA,OAAyB,EAASA,EAAY3iQ,SAAW,EAClG6iQ,GAAgC,OAAhBD,QAAwC,IAAhBA,OAAyB,EAASA,EAAY7iQ,QAAU,EAChG+iQ,GAAiC,OAAhBF,QAAwC,IAAhBA,OAAyB,EAASA,EAAY5iQ,SAAW,EAClG+iQ,EAAW7F,EAAe2F,GAAgB1F,EAAgB2F,GACzCJ,GAAoB/wD,IAA0B,OAAbA,QAAkC,IAAbA,OAAsB,EAASA,EAASj4F,OAAS,IAAOqpJ,EDlBpI,SAA+BrH,GAClC,IAAI/pD,EAAW+pD,EAAgB/pD,SAAU8rD,EAAS/B,EAAgB+B,OAAQR,EAAQvB,EAAgBuB,MAAOH,EAAmBpB,EAAgBoB,iBAE5I,GADgBwD,GAAkB5E,IACf/pD,GAAa8rD,GAAWX,EAA3C,CAGA,IAAIwE,EAAY3vD,EAAS2vD,UAAWC,EAAY5vD,EAAS4vD,UAAW7nJ,EAAQi4F,EAASj4F,MACjFqkJ,EAAeN,EAAOM,aAAcD,EAAeL,EAAOK,aAAcG,EAAeR,EAAOQ,aAAcD,EAAeP,EAAOO,aAClIQ,EAAgBvB,EAAMuB,cAAeuD,EAAqB9E,EAAM8E,mBAChEiB,EAAgB/F,EAAM+F,cAAexD,EAAUvC,EAAMuC,QACrD+C,EAAY/C,EAAQ+C,UAAWD,EAAY9C,EAAQ8C,UACnDpG,EAAgB8G,EAAc9G,cAC9B8F,EAAQD,EAAmBC,MAAOC,EAAQF,EAAmBE,MAC7DgB,EAD4FlB,EAAmBmB,sBAE/GC,EDzBD,SAA6BzH,EAAiB/pD,GACjD,IAAI0uD,EAAoB3E,EAAgBuB,MAAMoD,kBAC1CY,EAAcZ,EAAkBY,YAAanF,EAAgBuE,EAAkBvE,cAAeh4B,EAAcu8B,EAAkBv8B,YAClI,OAAIm9B,EACOnF,EAAgBnqD,EAAWmyB,EAE/Bg4B,CACX,CCkB4BsH,CAAoB1H,EAAiBhiJ,GACzD2pJ,EAAqB/1P,KAAKgwB,IAAI6lO,EAAmBF,GACjDxE,EAAgByB,GAAgBxE,EAAiBsG,GACjDtD,EAAgBwB,GAAgBxE,EAAiBuG,GACjDtD,EAAYF,EAAgB3B,EAAiBn9H,YAAe,IAC5Di/H,EAAYF,EAAgB5B,EAAiBj9H,aAAgB,IAC7DyjI,EAAavF,EAAeY,EAC5B4E,EAAazF,EAAea,EAC5B6E,EAAavF,EAAeW,EAC5B6E,EAAazF,EAAeY,EAC5B8E,EAAahI,EAAgBc,eAC7BT,GAAY,IAAIh3P,MAAOe,UAC3B+1P,GAAqBH,EAAiBQ,EAAemH,GAAoB,SAAU9uL,GAC/E,IAAIruD,EAAKw1O,EAAgBc,eAAgB7tB,EAAQzoN,EAAGyoN,MAAOytB,EAAYl2O,EAAGk2O,UAAWC,EAAYn2O,EAAGm2O,UAEhGJ,IADY,IAAIl3P,MAAOe,UAAYi2P,GACHkH,EAEhCU,EAAY,GAAIC,EADCnJ,GAAWsH,EAAmB7F,gBAChB5uP,KAAK2lC,IAAI,EAAGgpN,IAC3C4H,EAAa,EAAItvL,EACjByrL,EAAe5D,EAAYkF,EAAYuC,EACvC5D,EAAe5D,EAAYkF,EAAYsC,EACvCC,EAAmBvD,GAAoBP,EAAc0D,EAAWtH,UAAWA,EAAWkG,EAAW9D,EAAeV,EAAcC,EAAcwF,EAAYD,EAAYK,GACpKI,EAAmBxD,GAAoBN,EAAcyD,EAAWrH,UAAWA,EAAWkG,EAAW/D,EAAeR,EAAcC,EAAcwF,EAAYD,EAAYG,GACpKvH,IAAc4D,GAAgB3D,IAAc4D,GAC5CvE,EAAgBa,kBAAkB5tB,EAAOm1B,EAAkBC,EAEvE,GAnCA,CAoCA,CCrBYC,CAAsBtI,GAGtBoG,GAAoBpG,EAEhC,CACA,CCvDO,SAASuI,GAAkBvI,EAAiB/sB,EAAOmwB,EAAQC,GAC9D,IAAI74O,EAAKw1O,EAAgBuB,MAAOiC,EAAWh5O,EAAGg5O,SAAUC,EAAWj5O,EAAGi5O,SAAUX,EAAgBt4O,EAAGs4O,cAC/F3B,EAAWoC,GAAgB1E,GAAY5rB,EAAO,GAAIuwB,EAAUC,EAAU,GAAG,GAEzEnzO,EAAK6yO,GAA6BnD,EAAiBoD,EAAQC,EAAQlC,EAD1DyB,GAAsB5C,EAAiBmB,GACqC2B,GACzF,MAAO,CAAE7vB,MAAOkuB,EAAUT,UADmFpwO,EAAG/qB,EACxEo7P,UAD+ErwO,EAAG9qB,EAE9H,CACO,SAASgjQ,GAAyBxI,EAAiByI,EAAgBC,GACtE,IAAIz1B,EAAQ+sB,EAAgBc,eAAe7tB,MACvCmuB,EAAmBpB,EAAgBoB,iBACnC52O,EAAKw1O,EAAgBuB,MAAOiC,EAAWh5O,EAAGg5O,SAAUV,EAAgBt4O,EAAGs4O,cAAewE,EAAgB98O,EAAG88O,cACzGhlH,EAAWglH,EAAchlH,SAAU89G,EAAgBkH,EAAclH,cAAeI,EAAgB8G,EAAc9G,cAC9GtmD,EAAa53D,GAAY2wF,GAASuwB,EAKtC,IAJIvwB,GAAS,GAAK6vB,IAEdsD,GAAoBpG,IAEpB9lD,GAAeknD,GAAqBpB,EAAgBC,QAAxD,CAEA,IAEIQ,EAAc8H,GAAkBvI,EAAiBwD,EAFxCiF,GAAkBrH,EAAiBn9H,YAAc,EACjDykI,GAAkBtH,EAAiBj9H,aAAe,GAE3Ds8H,GACAP,GAAQF,EAAiBS,EAAaL,EAAeI,EAL/C,CAOd,CCCO,IAAIn0G,GAAW,WAQlB,OAPAA,GAAWppJ,OAAOC,QAAU,SAAkByD,GAC1C,IAAK,IAAIe,EAAGrE,EAAI,EAAG+D,EAAI9D,UAAUC,OAAQF,EAAI+D,EAAG/D,IAE5C,IAAK,IAAI8E,KADTT,EAAIpE,UAAUD,GACOJ,OAAOS,UAAUC,eAAeC,KAAK8D,EAAGS,KAAIxB,EAAEwB,GAAKT,EAAES,IAE9E,OAAOxB,CACf,EACW0lJ,GAASxoJ,MAAMC,KAAMR,UAChC,EA6KO,SAASqlQ,GAAc74O,EAAIrmB,EAAMm/P,GACpC,GAAIA,GAA6B,IAArBtlQ,UAAUC,OAAc,IAAK,IAA4BslQ,EAAxBxlQ,EAAI,EAAG4E,EAAIwB,EAAKlG,OAAYF,EAAI4E,EAAG5E,KACxEwlQ,GAAQxlQ,KAAKoG,IACRo/P,IAAIA,EAAKtgQ,MAAM7E,UAAU6F,MAAM3F,KAAK6F,EAAM,EAAGpG,IAClDwlQ,EAAGxlQ,GAAKoG,EAAKpG,IAGrB,OAAOysB,EAAGtjB,OAAOq8P,GAAMtgQ,MAAM7E,UAAU6F,MAAM3F,KAAK6F,GACtD,CC7NO,IAAI0c,GAEA,EAFAA,GAGI,EAHJA,GAII,EAEJ2iP,GAAe,CACtBxmH,UAAU,EACV8/G,aAAc,KACdC,aAAc,KACdC,aAAc,KACdC,aAAc,KACdiB,SAAU,EACVC,SAAU,EACVX,eAAe,EACfxB,iBAAiB,EACjByH,cAAc,EACdtE,gBAAgB,EAChBuE,QAAQ,EACRC,MAAO,CACHpwL,KAAM,GACNypE,UAAU,EACV4mH,WAAY,KACZC,eAAe,EACfC,kBAAkB,EAClBC,eAAgB,GAChBp2H,SAAU,IAEd6wH,QAAS,CACLxhH,UAAU,EACV0kH,kBAAkB,EAClBJ,WAAW,EACXC,WAAW,EACXyC,mBAAmB,EACnBC,qBAAqB,EACrBC,oBAAoB,EACpBC,cAAc,EACdJ,eAAgB,GAChBp2H,SAAU,IAEdy2H,MAAO,CACH7wL,KAAM,EACNypE,UAAU,EACVrP,SAAU,IAEd02H,YAAa,CACTrnH,UAAU,EACVzpE,KAAM,GACN/2C,KAAM,SACN0+N,cAAe,UACfJ,cAAe,IACfntH,SAAU,IAEdq0H,cAAe,CACXhlH,UAAU,EACV9jF,KAAM,GACN4hM,cAAe,IACfI,cAAe,WAEnB6F,mBAAoB,CAChB/jH,UAAU,EACVgkH,MAAO,IACPC,MAAO,IACPnG,cAAe,IACfoH,sBAAuB,IACvBhH,cAAe,WAEnBmE,kBAAmB,CACfriH,UAAU,EACV8lF,YAAa,EACbg4B,cAAe,IACfI,cAAe,UACf+E,aAAa,ICtEVqE,GAAc,SAAUxlQ,GAC/B,IAAIomB,EAAI8F,EAAIsf,EAAIC,EAChB,MAAO,CACHg6N,cAA6C,QAA7Br/O,EAAKpmB,EAAM0lQ,oBAAiC,IAAPt/O,EAAgBA,EAAKrE,GAC1E8sN,MAAqC,QAA7B3iN,EAAKlsB,EAAM0lQ,oBAAiC,IAAPx5O,EAAgBA,EAAKnK,GAClEu6O,UAA6C,QAAjC9wN,EAAKxrC,EAAM2lQ,wBAAqC,IAAPn6N,EAAgBA,EAAKzpB,GAC1Ew6O,UAA6C,QAAjC9wN,EAAKzrC,EAAM4lQ,wBAAqC,IAAPn6N,EAAgBA,EAAK1pB,GAElF,EACW8jP,GAAc,SAAU7lQ,GAC/B,IAAI8lQ,EAAW79G,GAAS,CAAC,EAAGy8G,IAmB5B,OAlBA7lQ,OAAOyH,KAAKtG,GAAOsH,SAAQ,SAAUjI,GACjC,IAAI0mQ,EAAmC,qBAAf/lQ,EAAMX,GAE9B,GADkD,qBAAtBqlQ,GAAarlQ,IACnB0mQ,EAAY,CAC9B,IAAI/lO,EAAWnhC,OAAOS,UAAU4F,SAAS1F,KAAKklQ,GAAarlQ,IACvD6tD,EAAwB,oBAAbltB,EACXx7B,EAAuB,mBAAbw7B,EAEV8lO,EAASzmQ,GADT6tD,EACgB+6F,GAASA,GAAS,CAAC,EAAGy8G,GAAarlQ,IAAOW,EAAMX,IAE3DmF,EACW+/P,GAAcA,GAAc,GAAIG,GAAarlQ,IAAM,GAAOW,EAAMX,IAAM,GAGtEW,EAAMX,EAEtC,CACA,IACWymQ,CACX,EC1BWE,GAA4B,SAAUpK,EAAiBpqH,EAAO/8D,GACrE,IAAIo6J,EAAQ+sB,EAAgBc,eAAe7tB,MACvCmuB,EAAmBpB,EAAgBoB,iBAAkBG,EAAQvB,EAAgBuB,MAC7EkC,EAAWlC,EAAMkC,SAAUD,EAAWjC,EAAMiC,SAAU8D,EAAgB/F,EAAM+F,cAAe0B,EAASzH,EAAMyH,OAC1GxqM,EAAO8oM,EAAc9oM,KACzB,IAAK4iM,EACD,MAAM,IAAIlvP,MAAM,0BAEpB,IAAIm4P,EAAcrB,EACZ/1B,EAAQrhO,KAAK04P,IAAI10H,EAAQ/8D,GACzBo6J,EAAQr9F,EAAQ/8D,EAEtB,OADe0qL,GAAgB1E,GAAYwL,EAAa,GAAI7G,EAAUC,EAAUjlM,GAAM,EAE1F,EACO,SAAS+rM,GAAuBvK,EAAiBpqH,EAAO/8D,EAAMunL,EAAeI,GAChF,IAAIY,EAAmBpB,EAAgBoB,iBACnC52O,EAAKw1O,EAAgBc,eAAgB7tB,EAAQzoN,EAAGyoN,MAAOytB,EAAYl2O,EAAGk2O,UAAWC,EAAYn2O,EAAGm2O,UACpG,IAAKS,EACD,OAAO7zP,QAAQ2C,MAAM,6BACzB,IAEIkzP,GAFehC,EAAiBn9H,YAEP,EAAIy8H,GAAaztB,EAC1CowB,GAFgBjC,EAAiBj9H,aAEP,EAAIw8H,GAAa1tB,EAE3CwtB,EAAc8H,GAAkBvI,EADrBoK,GAA0BpK,EAAiBpqH,EAAO/8D,GACFuqL,EAAQC,GACvE,IAAK5C,EACD,OAAOlzP,QAAQ2C,MAAM,yEAEzBgwP,GAAQF,EAAiBS,EAAaL,EAAeI,EACzD,CACO,SAASgK,GAAqBxK,EAAiBI,EAAeI,EAAeiK,GAChF,IAAIlJ,EAAQvB,EAAgBuB,MAAOH,EAAmBpB,EAAgBoB,iBAClE0B,EAAgBvB,EAAMuB,cACtB4H,EAAwBd,GAAY5J,EAAgB57P,OACpDomB,EAAKw1O,EAAgBc,eAAgB7tB,EAAQzoN,EAAGyoN,MAAOytB,EAAYl2O,EAAGk2O,UAAWC,EAAYn2O,EAAGm2O,UACpG,GAAKS,EAAL,CAEA,IAAIuJ,EAAYzJ,GAAgBlB,EAAiB0K,EAAsBz3B,OACnE23B,EAAmB/H,GAAwB6H,EAAsBhK,UAAWgK,EAAsB/J,UAAWgK,EAAW7H,EAAe,EAAG,EAAG1B,GAC7I/uH,EAAW,CACX4gG,MAAOy3B,EAAsBz3B,MAC7BytB,UAAWkK,EAAiBrlQ,EAC5Bo7P,UAAWiK,EAAiBplQ,GAE5BytO,IAAUy3B,EAAsBz3B,OAChCytB,IAAcgK,EAAsBhK,WACpCC,IAAc+J,EAAsB/J,YAGd,OAA1B8J,QAA4D,IAA1BA,GAA4CA,IAC9EvK,GAAQF,EAAiB3tH,EAAU+tH,EAAeI,GAdxC,CAed,CCtDO,IAAIqK,GAAS,SAAU7K,GAC1B,OAAO,SAAUnnL,EAAMunL,EAAeI,QACrB,IAAT3nL,IAAmBA,EAAO,SACR,IAAlBunL,IAA4BA,EAAgB,UAC1B,IAAlBI,IAA4BA,EAAgB,WAChD+J,GAAuBvK,EAAiB,EAAGnnL,EAAMunL,EAAeI,EACxE,CACA,EACWsK,GAAU,SAAU9K,GAC3B,OAAO,SAAUnnL,EAAMunL,EAAeI,QACrB,IAAT3nL,IAAmBA,EAAO,SACR,IAAlBunL,IAA4BA,EAAgB,UAC1B,IAAlBI,IAA4BA,EAAgB,WAChD+J,GAAuBvK,GAAkB,EAAGnnL,EAAMunL,EAAeI,EACzE,CACA,EACWuK,GAAe,SAAU/K,GAChC,OAAO,SAAUsE,EAAcC,EAAcpD,EAAUf,EAAeI,QAC5C,IAAlBJ,IAA4BA,EAAgB,UAC1B,IAAlBI,IAA4BA,EAAgB,WAChD,IAAIh2O,EAAKw1O,EAAgBc,eAAgBJ,EAAYl2O,EAAGk2O,UAAWC,EAAYn2O,EAAGm2O,UAAW1tB,EAAQzoN,EAAGyoN,MACpGmuB,EAAmBpB,EAAgBoB,iBAAkBC,EAAmBrB,EAAgBqB,iBAE5F,IADerB,EAAgBuB,MAAMj/G,UACpB8+G,GAAqBC,EAAtC,CAEA,IAAIZ,EAAc,CACdC,UAAWr2P,OAAOigF,MAAMg6K,GAAgB5D,EAAY4D,EACpD3D,UAAWt2P,OAAOigF,MAAMi6K,GAAgB5D,EAAY4D,EACpDtxB,MAAO5oO,OAAOigF,MAAM62K,GAAYluB,EAAQkuB,GAE5CjB,GAAQF,EAAiBS,EAAaL,EAAeI,EAN3C,CAOlB,CACA,EACWwK,GAAiB,SAAUhL,GAClC,OAAO,SAAUI,EAAeI,QACN,IAAlBJ,IAA4BA,EAAgB,UAC1B,IAAlBI,IAA4BA,EAAgB,WAChDgK,GAAqBxK,EAAiBI,EAAeI,EAC7D,CACA,EACWyK,GAAa,SAAUjL,GAC9B,OAAO,SAAU/sB,EAAOmtB,EAAeI,QACb,IAAlBJ,IAA4BA,EAAgB,UAC1B,IAAlBI,IAA4BA,EAAgB,WAChD,IAAIM,EAAiBd,EAAgBc,eAAgBM,EAAmBpB,EAAgBoB,iBAAkBC,EAAmBrB,EAAgBqB,iBAC7I,GAAID,GAAoBC,EAAkB,CACtC,IAAIZ,EAAcyK,GAAkBj4B,GAAS6tB,EAAe7tB,MAAOmuB,EAAkBC,GACrFnB,GAAQF,EAAiBS,EAAaL,EAAeI,EACjE,CACA,CACA,EACW2K,GAAgB,SAAUnL,GACjC,OAAO,SAAUhtO,EAAMigN,EAAOmtB,EAAeI,QACnB,IAAlBJ,IAA4BA,EAAgB,UAC1B,IAAlBI,IAA4BA,EAAgB,WAChDT,GAAsBC,GACtB,IAAIoB,EAAmBpB,EAAgBoB,iBACnCh+P,EAAyB,kBAAT4vB,EAAoBlqB,SAASg0M,eAAe9pL,GAAQA,EACxE,GAAIouO,GAAoBh+P,GAAUg+P,EAAiBhvM,SAAShvD,GAAS,CACjE,IAAIq9P,EDOT,SAA6BT,EAAiBhtO,EAAMo4O,GACvD,IAAIhK,EAAmBpB,EAAgBoB,iBAAkBC,EAAmBrB,EAAgBqB,iBAAkBP,EAAiBd,EAAgBc,eAC3It2O,EAAKw1O,EAAgBuB,MAAOuB,EAAgBt4O,EAAGs4O,cAAeU,EAAWh5O,EAAGg5O,SAAUC,EAAWj5O,EAAGi5O,SACxG,IAAKrC,IAAqBC,EACtB,OAAOP,EACX,IAAImG,EAAc7F,EAAiBz9H,wBAC/B0nI,EAAWr4O,EAAK2wG,wBAChB2nI,EAlBD,SAAmB5jN,EAASivB,EAASm2C,EAASjgH,GACjD,IAAI6+C,EAAShE,EAAQi8E,wBACjB4nI,EAAgB50L,EAAQgtD,wBACxB6nI,EAAgB1+I,EAAQ6W,wBACxB8nI,EAAOF,EAAchmQ,EAAIsH,EAAMomO,MAC/By4B,EAAOH,EAAc/lQ,EAAIqH,EAAMomO,MACnC,MAAO,CACH1tO,GAAImmD,EAAOnmD,EAAIimQ,EAAcjmQ,EAAIkmQ,GAAQ5+P,EAAMomO,MAC/CztO,GAAIkmD,EAAOlmD,EAAIgmQ,EAAchmQ,EAAIkmQ,GAAQ7+P,EAAMomO,MAEvD,CAQqB04B,CAAU34O,EAAMouO,EAAkBC,EAAkBP,GACjE8K,EAAWN,EAAW/lQ,EACtBsmQ,EAAUP,EAAW9lQ,EACrBsmQ,EAAYT,EAAShnQ,MAAQy8P,EAAe7tB,MAC5C84B,EAAaV,EAAS/mQ,OAASw8P,EAAe7tB,MAC9C17C,EAAS6pE,EAAiBn9H,YAAc6nI,EACxCt0E,EAAS4pE,EAAiBj9H,aAAe4nI,EACzC5K,EAAWoC,GAAgB6H,GAAcx5P,KAAK2lC,IAAIggJ,EAAQC,GAASgsE,EAAUC,EAAU,GAAG,GAC1FlzD,GAAW02D,EAAY5iQ,MAAQynQ,EAAY3K,GAAY,EACvD3wD,GAAWy2D,EAAY3iQ,OAASynQ,EAAa5K,GAAY,EAIzD7wO,EAAKuyO,IAHWoE,EAAYh0I,KAAO24I,GAAYzK,EAAW5wD,GAC1C02D,EAAYvqI,IAAMmvI,GAAW1K,EAAW3wD,EAC/C0wD,GAAgBlB,EAAiBmB,GACuB2B,EAAe,EAAG,EAAG1B,GAC1F,MAAO,CAAEV,UADwGpwO,EAAG/qB,EAC7Fo7P,UADoGrwO,EAAG9qB,EACzFytO,MAAOkuB,EAChD,CC7B8B6K,CAAoBhM,EAAiB58P,EAAQ6vO,GAC/DitB,GAAQF,EAAiBS,EAAaL,EAAeI,EACjE,CACA,CACA,ECjEWyL,GAAc,SAAUjM,GAC/B,MAAO,CACHnyP,SAAUmyP,EACV6K,OAAQA,GAAO7K,GACf8K,QAASA,GAAQ9K,GACjB+K,aAAcA,GAAa/K,GAC3BgL,eAAgBA,GAAehL,GAC/BiL,WAAYA,GAAWjL,GACvBmL,cAAeA,GAAcnL,GAErC,EACW1tP,GAAW,SAAU0tP,GAC5B,MAAO,CACHnyP,SAAUmyP,EACVnzP,MAAOmzP,EAAgBc,eAE/B,EACWoL,GAAa,SAAUlM,GAC9B,IAAI/7P,EAAM,CAAC,EAGX,OAFAhB,OAAOC,OAAOe,EAAKqO,GAAS0tP,IAC5B/8P,OAAOC,OAAOe,EAAKgoQ,GAAYjM,IACxB/7P,CACX,ECnBO,SAASkoQ,KACZ,IASI,MARc,CACV,WAAInhI,GAIA,OADmB,GACZ,CACvB,EAGA,CACI,MAAOj0G,GAEH,OADmB,CAE3B,CACA,CCpBO,IAAImtO,GAAiB,SAAUlxO,EAAMigH,GACxC,OAAOA,EAAS9lI,MAAK,SAAUi/P,GAC3B,OAAOp5O,EAAK6Y,QAAQ,GAAGr/B,OAAO4/P,EAAS,OAAO5/P,OAAO4/P,EAAS,MAAM5/P,OAAO4/P,EAAS,SAAS5/P,OAAO4/P,EAAS,MACrH,GACA,EACWC,GAAgB,SAAUj8F,GAC7BA,GACArvG,aAAaqvG,EAErB,ECMW86F,GAAoB,SAAUj4B,EAAOmuB,EAAkBC,GAC9D,IAAI8F,EAAe9F,EAAiBp9H,YAAcgvG,EAC9Cm0B,EAAgB/F,EAAiBl9H,aAAe8uG,EAGpD,MAAO,CACHA,MAAOA,EACPytB,WAJmBU,EAAiBn9H,YAAckjI,GAAgB,EAKlExG,WAJmBS,EAAiBj9H,aAAeijI,GAAiB,EAM5E,ECKO,SAASkF,GAAiBxgJ,EAAOu1I,EAAkBpuB,GACtD,IAAIi0B,EAAc7F,EAAiB19H,wBAC/By/H,EAAS,EACTC,EAAS,EACb,GAAI,YAAav3I,EAEbs3I,GAAUt3I,EAAM2X,QAAUyjI,EAAYj0I,MAAQggH,EAC9CowB,GAAUv3I,EAAM+X,QAAUqjI,EAAYxqI,KAAOu2G,MAE5C,CACD,IAAIjoB,EAAQl/F,EAAMoe,QAAQ,GAC1Bk5H,GAAUp4C,EAAMvnF,QAAUyjI,EAAYj0I,MAAQggH,EAC9CowB,GAAUr4C,EAAMnnF,QAAUqjI,EAAYxqI,KAAOu2G,CACrD,CAGI,OAFI5oO,OAAOigF,MAAM84K,IAAW/4P,OAAOigF,MAAM+4K,KACrC91P,QAAQ2C,MAAM,kCACX,CACH3K,EAAG69P,EACH59P,EAAG69P,EAEX,CACO,ICjBIkJ,GAAmB,SAAUzgJ,GACpC,OAAOl6G,KAAKskM,KAAKtkM,KAAK86C,IAAKo/D,EAAMoe,QAAQ,GAAGC,MAAQre,EAAMoe,QAAQ,GAAGC,MAAQ,GACzEv4H,KAAK86C,IAAKo/D,EAAMoe,QAAQ,GAAGE,MAAQte,EAAMoe,QAAQ,GAAGE,MAAQ,GACpE,ECnBWoiI,GAAkB,SAAUxM,EAAiBl0I,GACpD,IAAIthG,EAAKw1O,EAAgB57P,MAAOqoQ,EAAUjiP,EAAGiiP,QAASC,EAASliP,EAAGkiP,OAC9DrL,EAAmBrB,EAAgBqB,iBAAkBE,EAAQvB,EAAgBuB,MAC7EtuB,EADqG+sB,EAAgBc,eAC9F7tB,MACvB6vB,EAAgBvB,EAAMuB,cAAexB,EAAkBC,EAAMD,gBAAiBgG,EAAgB/F,EAAM+F,cAAe2B,EAAQ1H,EAAM0H,MAAOxE,EAAiBlD,EAAMkD,eAAgBuE,EAASzH,EAAMyH,OAC9LxqM,EAAO8oM,EAAc9oM,KAAM8jF,EAAWglH,EAAchlH,SACpDzpE,EAAOowL,EAAMpwL,KAAMqwL,EAAaD,EAAMC,WAC1C,IAAK7H,EACD,MAAM,IAAInvP,MAAM,yBAEpB45G,EAAM0X,iBACN1X,EAAM29F,kBACN,IAAI7zE,EFLD,SAAkB9pB,EAAO6gJ,GAC5B,IpBdiC7oH,EAAKt+G,EoBclCgmG,EAPe,SAAU1f,GAC7B,OAAIA,EACOA,EAAM0f,OAAS,EAAI,GAAK,EAE5B,CACX,CAEiBohI,CAAU9gJ,GAEvB,OpBhBsCtmF,EoBeCgmG,EpBdjB,kBADWsY,EoBeP6oH,GpBdO7oH,EAAMt+G,CoBgB3C,CECgBqnO,CAAS/gJ,EAAO,MAExBq1I,EFmB8B,SAAUnB,EAAiBpqH,EAAO/8D,EAAMi0L,EAASr8E,GACnF,IAAIwiD,EAAQ+sB,EAAgBc,eAAe7tB,MACvCmuB,EAAmBpB,EAAgBoB,iBAAkBG,EAAQvB,EAAgBuB,MAC7EkC,EAAWlC,EAAMkC,SAAUD,EAAWjC,EAAMiC,SAAU8D,EAAgB/F,EAAM+F,cAAe7C,EAAiBlD,EAAMkD,eAClHjmM,EAAO8oM,EAAc9oM,KAAM8jF,EAAWglH,EAAchlH,SACxD,IAAK8+G,EACD,MAAM,IAAIlvP,MAAM,0BAEpB,IAAIm4P,EAAcp3B,EAAQr9F,EAAQ/8D,EAClC,GAAI43G,EACA,OAAO45E,EACX,IAAI0C,GAAiBD,IAAmBxqH,EAExC,OADeihH,GAAgB1E,GAAYwL,EAAa,GAAI7G,EAAUC,EAAUjlM,EAAMuuM,IAAmBtI,EAE7G,CEjCmBuI,CAAyBhN,EAAiBpqH,EAD1CozH,EAASE,EAAat3P,KAAKwjF,IAAI02B,EAAM0f,QAAU3yD,GACaizC,EAAM4zD,SAEjF,GAAIuzD,IAAUkuB,EAAd,CAEA,IAAIY,EAASa,GAAsB5C,EAAiBmB,GAChD8L,EAAgBX,GAAiBxgJ,EAAOu1I,EAAkBpuB,GAE1Di6B,EAAoBpK,IADAxgH,GAAqB,IAAT9jF,GAAc8iM,GAAmBmD,GAEjEn0O,EAAK6yO,GAA6BnD,EAAiBiN,EAAc1nQ,EAAG0nQ,EAAcznQ,EAAG27P,EAAUY,EAAQmL,GAAoB3nQ,EAAI+qB,EAAG/qB,EAAGC,EAAI8qB,EAAG9qB,EAChJw6P,EAAgBmN,mBAAqBrhJ,EACrCk0I,EAAgBa,kBAAkBM,EAAU57P,EAAGC,GAC/CipJ,GAAey9G,GAAWlM,GAAkBl0I,EAAO2gJ,GACnDh+G,GAAey9G,GAAWlM,GAAkBl0I,EAAO4gJ,EATzC,CAUd,EACWU,GAAkB,SAAUpN,EAAiBl0I,GACpD,IAAIthG,EAAKw1O,EAAgB57P,MAAOipQ,EAAc7iP,EAAG6iP,YAAaC,EAAa9iP,EAAG8iP,WAE9EjB,GAAcrM,EAAgBuN,qBAC9BvN,EAAgBuN,oBAAsB92P,YAAW,WACxCupP,EAAgBC,UAErBuI,GAAyBxI,EAAiBl0I,EAAMvmH,EAAGumH,EAAMtmH,GACzDw6P,EAAgBuN,oBAAsB,KAC9C,GA9CyB,KAgDrB,IAAIC,EFSyB,SAAUxN,EAAiBl0I,GACxD,IAAIqhJ,EAAqBnN,EAAgBmN,mBACrCl6B,EAAQ+sB,EAAgBc,eAAe7tB,MACvCzoN,EAAKw1O,EAAgBuB,MAAOkC,EAAWj5O,EAAGi5O,SAAUD,EAAWh5O,EAAGg5O,SACtE,QAAK2J,IAEDl6B,EAAQwwB,GAAYxwB,EAAQuwB,GAE5B5xP,KAAK29F,KAAK49J,EAAmB3hI,UAAY55H,KAAK29F,KAAKuc,EAAM0f,SAEzD2hI,EAAmB3hI,OAAS,GAAK2hI,EAAmB3hI,OAAS1f,EAAM0f,QAEnE2hI,EAAmB3hI,OAAS,GAAK2hI,EAAmB3hI,OAAS1f,EAAM0f,QAEnE55H,KAAK29F,KAAK49J,EAAmB3hI,UAAY55H,KAAK29F,KAAKuc,EAAM0f,QAGjE,CE1B4BiiI,CAAoBzN,EAAiBl0I,GACzD0hJ,IACAnB,GAAcrM,EAAgB0N,qBAC9B1N,EAAgB0N,oBAAsBj3P,YAAW,WACxCupP,EAAgBC,UAErBD,EAAgB0N,oBAAsB,KACtCj/G,GAAey9G,GAAWlM,GAAkBl0I,EAAOuhJ,GACnD5+G,GAAey9G,GAAWlM,GAAkBl0I,EAAOwhJ,GAC/D,GA1DyB,KA4DzB,ECvDWK,GAAkB,SAAU3N,EAAiBl0I,GACpD,IAAIu1I,EAAmBrB,EAAgBqB,iBAAkBuM,EAAqB5N,EAAgB4N,mBAC1F36B,EAAQ+sB,EAAgBc,eAAe7tB,MACvCzoN,EAAKw1O,EAAgBuB,MAAOuB,EAAgBt4O,EAAGs4O,cAAexB,EAAkB92O,EAAG82O,gBAAiBgG,EAAgB98O,EAAG88O,cACvHhlH,EAAWglH,EAAchlH,SAAU9jF,EAAO8oM,EAAc9oM,KAE5D,GAA2B,OAAvBovM,GAAgCvM,EAApC,CAEA,IAAIwM,EFC4B,SAAU/hJ,EAAOmnH,EAAOouB,GACxD,IAAI6F,EAAc7F,EAAiB19H,wBAC/BuG,EAAUpe,EAAMoe,QAChB4jI,EAAcjP,GAAY30H,EAAQ,GAAGzG,QAAUyjI,EAAYj0I,KAAM,GACjE86I,EAAclP,GAAY30H,EAAQ,GAAGrG,QAAUqjI,EAAYxqI,IAAK,GAGpE,MAAO,CACHn3H,GAAIuoQ,EAHWjP,GAAY30H,EAAQ,GAAGzG,QAAUyjI,EAAYj0I,KAAM,IAGhC,EAAIggH,EACtCztO,GAAIuoQ,EAHWlP,GAAY30H,EAAQ,GAAGrG,QAAUqjI,EAAYxqI,IAAK,IAG/B,EAAIu2G,EAE9C,CEZmB+6B,CAAuBliJ,EAAOmnH,EAAOouB,GAEpD,GAAKh3P,OAAOq3D,SAASmsM,EAAStoQ,IAAO8E,OAAOq3D,SAASmsM,EAASroQ,GAA9D,CAEA,IAAIyoQ,EAAkB1B,GAAiBzgJ,GACnCq1I,EFYwB,SAAUnB,EAAiBiO,GACvD,IAAIC,EAAkBlO,EAAgBkO,gBAAiBN,EAAqB5N,EAAgB4N,mBAAoBrM,EAAQvB,EAAgBuB,MACpIkC,EAAWlC,EAAMkC,SAAUD,EAAWjC,EAAMiC,SAAU8D,EAAgB/F,EAAM+F,cAAe7C,EAAiBlD,EAAMkD,eAClHjmM,EAAO8oM,EAAc9oM,KAAM8jF,EAAWglH,EAAchlH,SACxD,IAAK4rH,GAA0C,OAAvBN,IAAgCK,EACpD,MAAM,IAAI/7P,MAAM,2CAEpB,OAAI+7P,EAAkB,EACXjO,EAAgBc,eAAe7tB,MAInCswB,GAAgB1E,GAFDoP,EAAkBL,EACAM,EACY,GAAI1K,EAAUC,EAAUjlM,GAAO8jF,IAAamiH,EACpG,CEzBmB0J,CAAmBnO,EAAiBiO,GACnD,GAAI9M,IAAaluB,EAAjB,CAEA,IAAI8uB,EAASa,GAAsB5C,EAAiBmB,GAEhD+L,EAAoBpK,IADAxgH,GAAqB,IAAT9jF,GAAc8iM,GAE9ChxO,EAAK6yO,GAA6BnD,EAAiB6N,EAAStoQ,EAAGsoQ,EAASroQ,EAAG27P,EAAUY,EAAQmL,GAAoB3nQ,EAAI+qB,EAAG/qB,EAAGC,EAAI8qB,EAAG9qB,EACtIw6P,EAAgBoO,cAAgBP,EAChC7N,EAAgBqO,aAAeJ,EAC/BjO,EAAgBa,kBAAkBM,EAAU57P,EAAGC,EAPrC,CAJA,CAJA,CAgBd,EC/BW8oQ,GAAwB,SAAUtO,EAAiBl0I,GAC1D,IAAIwhJ,EAAatN,EAAgB57P,MAAMkpQ,WACnClN,EAAgBJ,EAAgBuB,MAAMoI,YAAYvJ,cACtDiM,GAAcrM,EAAgBuO,2BAC9BvO,EAAgBuO,0BAA4B93P,YAAW,WACnDupP,EAAgBuO,0BAA4B,KAC5C9/G,GAAey9G,GAAWlM,GAAkBl0I,EAAOwhJ,EAC3D,GAAOlN,EACP,EAgBO,SAASoO,GAAkBxO,EAAiBl0I,GAC/C,IAAIy1I,EAAQvB,EAAgBuB,MAAOgN,EAA4BvO,EAAgBuO,0BAA2BzN,EAAiBd,EAAgBc,eAAgBO,EAAmBrB,EAAgBqB,iBAC1LpuB,EAAQ6tB,EAAe7tB,MACvBzoN,EAAKw1O,EAAgB57P,MAAOqqQ,EAAcjkP,EAAGikP,YAAa/B,EAASliP,EAAGkiP,OACtEp8O,EAAKixO,EAAMoI,YAAarnH,EAAWhyH,EAAGgyH,SAAUxgH,EAAOxR,EAAGwR,KAAM+2C,EAAOvoD,EAAGuoD,KAAMunL,EAAgB9vO,EAAG8vO,cAAeI,EAAgBlwO,EAAGkwO,cACzI,IAAIl+G,IAEAisH,EAAJ,CAEA,GAAa,UAATzsO,EACA,OAzBgC,SAAUk+N,EAAiBl0I,GAC/D,IAAIthG,EAAKw1O,EAAgB57P,MAAOqqQ,EAAcjkP,EAAGikP,YAAa/B,EAASliP,EAAGkiP,OACtEp8O,EAAK0vO,EAAgBuB,MAAMoI,YAAavJ,EAAgB9vO,EAAG8vO,cAAeI,EAAgBlwO,EAAGkwO,cACjG/xG,GAAey9G,GAAWlM,GAAkBl0I,EAAO2iJ,GACnDjE,GAAqBxK,EAAiBI,EAAeI,GAAe,WAChE,OAAO/xG,GAAey9G,GAAWlM,GAAkBl0I,EAAO4gJ,EAClE,IACI4B,GAAsBtO,EAAiBl0I,EAC3C,CAiBe4iJ,CAA2B1O,EAAiBl0I,GAEvD,IAAKu1I,EACD,OAAO9zP,QAAQ2C,MAAM,6BACzB,IAAI0lI,EApBR,SAA6B9zG,EAAMmxM,GAC/B,MAAa,WAATnxM,EACiB,IAAVmxM,EAAc,GAAK,EAEd,YAATnxM,GAAsB,EAAI,CACrC,CAegB6sO,CAAoB7sO,EAAMk+N,EAAgBc,eAAe7tB,OACjEkuB,EAAWiJ,GAA0BpK,EAAiBpqH,EAAO/8D,GAEjE,GAAIo6J,IAAUkuB,EAAd,CAEA1yG,GAAey9G,GAAWlM,GAAkBl0I,EAAO2iJ,GACnD,IAAIxB,EAAgBX,GAAiBxgJ,EAAOu1I,EAAkBpuB,GAC1DwtB,EAAc8H,GAAkBvI,EAAiBmB,EAAU8L,EAAc1nQ,EAAG0nQ,EAAcznQ,GAC9F,IAAKi7P,EACD,OAAOlzP,QAAQ2C,MAAM,yEAEzBu+I,GAAey9G,GAAWlM,GAAkBl0I,EAAO4gJ,GACnDxM,GAAQF,EAAiBS,EAAaL,EAAeI,GACrD8N,GAAsBtO,EAAiBl0I,EAT7B,CAVA,CAoBd,CACO,IChDH8iJ,GACA,SAAsBxqQ,GAClB,IAAIg6H,EAAQt6H,KACZA,KAAKm8P,SAAU,EACfn8P,KAAK+qQ,kBAAoB,IAAIpnQ,IAC7B3D,KAAKgrQ,gBAAkB,IAAIrnQ,IAE3B3D,KAAKs9P,iBAAmB,KACxBt9P,KAAKu9P,iBAAmB,KAExBv9P,KAAKigQ,eAAgB,EACrBjgQ,KAAKi+P,OAAS,KAEdj+P,KAAKqpQ,mBAAqB,KAC1BrpQ,KAAK4pQ,oBAAsB,KAC3B5pQ,KAAKypQ,oBAAsB,KAE3BzpQ,KAAKsgQ,WAAY,EACjBtgQ,KAAKirQ,gBAAiB,EACtBjrQ,KAAKmiQ,YAAc,KACnBniQ,KAAKkrQ,UAAY,KAEjBlrQ,KAAKw7L,SAAW,KAChBx7L,KAAKuqQ,aAAe,KACpBvqQ,KAAK8pQ,mBAAqB,KAC1B9pQ,KAAKoqQ,gBAAkB,KACvBpqQ,KAAKsqQ,cAAgB,KAErBtqQ,KAAKyqQ,0BAA4B,KAEjCzqQ,KAAKmyM,SAAW,KAChBnyM,KAAKwhQ,aAAe,KACpBxhQ,KAAKuhQ,kBAAoB,KAEzBvhQ,KAAKo8P,SAAU,EACfp8P,KAAK0vP,UAAY,KACjB1vP,KAAKmrQ,UAAY,KAEjBnrQ,KAAKorQ,YAAc,CAAC,EACpBprQ,KAAKqrQ,MAAQ,WACT/wI,EAAMgxI,wBAClB,EACQtrQ,KAAKurQ,QAAU,WACXjxI,EAAMkxI,qBAClB,EACQxrQ,KAAKwkF,OAAS,SAAUinL,GACpBnxI,EAAMh6H,MAAQmrQ,EACd3M,GAAsBxkI,EAAOA,EAAM0iI,eAAe7tB,OAClD70G,EAAMmjI,MAAQ0I,GAAYsF,EACtC,EACQzrQ,KAAKsrQ,uBAAyB,WAC1B,IAAI5kP,EAAI8F,EACJ06G,EAAUmhI,KACVqD,EAAoD,QAAjChlP,EAAK4zG,EAAMgjI,wBAAqC,IAAP52O,OAAgB,EAASA,EAAGksK,cACxF+4E,EAAoC,OAApBD,QAAgD,IAApBA,OAA6B,EAASA,EAAgBj9F,YACpE,QAAjCjiJ,EAAK8tG,EAAMgjI,wBAAqC,IAAP9wO,GAAyBA,EAAGxZ,iBAAiB,QAASsnH,EAAMsxI,eAAgB1kI,GAEpG,OAAlBykI,QAA4C,IAAlBA,GAAoCA,EAAc34P,iBAAiB,YAAasnH,EAAMuxI,eAAgB3kI,GAC9G,OAAlBykI,QAA4C,IAAlBA,GAAoCA,EAAc34P,iBAAiB,YAAasnH,EAAMwxI,UAAW5kI,GACzG,OAAlBykI,QAA4C,IAAlBA,GAAoCA,EAAc34P,iBAAiB,UAAWsnH,EAAMyxI,cAAe7kI,GACzG,OAApBwkI,QAAgD,IAApBA,GAAsCA,EAAgB14P,iBAAiB,aAAcsnH,EAAM0xI,aAAc9kI,GACnH,OAAlBykI,QAA4C,IAAlBA,GAAoCA,EAAc34P,iBAAiB,QAASsnH,EAAM2xI,gBAAiB/kI,GAC3G,OAAlBykI,QAA4C,IAAlBA,GAAoCA,EAAc34P,iBAAiB,UAAWsnH,EAAM4xI,cAAehlI,EACzI,EACQlnI,KAAKwrQ,oBAAsB,WACvB,IAAI9kP,EAAI8F,EACJ06G,EAAUmhI,KACVqD,EAAoD,QAAjChlP,EAAK4zG,EAAMgjI,wBAAqC,IAAP52O,OAAgB,EAASA,EAAGksK,cACxF+4E,EAAoC,OAApBD,QAAgD,IAApBA,OAA6B,EAASA,EAAgBj9F,YACpF,OAAlBk9F,QAA4C,IAAlBA,GAAoCA,EAAcltI,oBAAoB,YAAanE,EAAMuxI,eAAgB3kI,GACjH,OAAlBykI,QAA4C,IAAlBA,GAAoCA,EAAcltI,oBAAoB,YAAanE,EAAMwxI,UAAW5kI,GAC5G,OAAlBykI,QAA4C,IAAlBA,GAAoCA,EAAcltI,oBAAoB,UAAWnE,EAAMyxI,cAAe7kI,GAC5G,OAApBwkI,QAAgD,IAApBA,GAAsCA,EAAgBjtI,oBAAoB,aAAcnE,EAAM0xI,aAAc9kI,GACtH,OAAlBykI,QAA4C,IAAlBA,GAAoCA,EAAcltI,oBAAoB,QAASnE,EAAM2xI,gBAAiB/kI,GAC9G,OAAlBykI,QAA4C,IAAlBA,GAAoCA,EAAcltI,oBAAoB,UAAWnE,EAAM4xI,cAAehlI,GAChIliI,SAASy5H,oBAAoB,aAAcnE,EAAM0xI,aAAc9kI,GAC/D+0H,GAAsB3hI,GACI,QAAzB9tG,EAAK8tG,EAAMgvF,gBAA6B,IAAP98L,GAAyBA,EAAGg9L,YAC1E,EACQxpN,KAAKmsQ,8BAAgC,SAAUt5L,GAE3C,IAAIq0D,EAAUmhI,KACdx1L,EAAQ7/D,iBAAiB,QAASsnH,EAAM8xI,YAAallI,GACrDr0D,EAAQ7/D,iBAAiB,WAAYsnH,EAAM+vE,cAAenjE,GAC1Dr0D,EAAQ7/D,iBAAiB,aAAcsnH,EAAM+xI,oBAAqBnlI,GAClEr0D,EAAQ7/D,iBAAiB,YAAasnH,EAAMgyI,eAAgBplI,GAC5Dr0D,EAAQ7/D,iBAAiB,WAAYsnH,EAAMiyI,mBAAoBrlI,EAC3E,EACQlnI,KAAKwsQ,iBAAmB,SAAUjP,GAC9B,IAAI0H,EAAe3qI,EAAMmjI,MAAMwH,aAC/B3qI,EAAMmyI,sBACNnyI,EAAM0wI,gBAAgBpjQ,SAAQ,SAAUqqE,GAAY,OAAOA,EAASm2L,GAAW9tI,GAAQ,IACnF2qI,IACA3qI,EAAMoyI,YACNpyI,EAAMgvF,SAAW,IAAIrL,gBAAe,WAChC,IAAIv3L,EACJ4zG,EAAM0wI,gBAAgBpjQ,SAAQ,SAAUqqE,GAAY,OAAOA,EAASm2L,GAAW9tI,GAAQ,IACvFA,EAAMoyI,YACoB,QAAzBhmP,EAAK4zG,EAAMgvF,gBAA6B,IAAP5iM,GAAyBA,EAAG8iM,YAClF,IAEgBlvF,EAAMgvF,SAASnL,QAAQo/C,GAEvC,EAIQv9P,KAAKosQ,YAAc,SAAUpkJ,GAEzB,IADesS,EAAMmjI,MAAMj/G,SAC3B,CAEA,IAAImuH,ELvHY,SAAUzQ,EAAiBl0I,GACnD,IAAIthG,EAAKw1O,EAAgBuB,MAAM0H,MAAO3mH,EAAW93H,EAAG83H,SAAU6mH,EAAgB3+O,EAAG2+O,cAAeC,EAAmB5+O,EAAG4+O,iBAAkBn2H,EAAWzoH,EAAGyoH,SAClJ8wH,EAAgB/D,EAAgB+D,cAAeK,EAAYpE,EAAgBoE,UAC3EhhQ,EAAS0oH,EAAM1oH,OAEnB,SADgB2gQ,GAAkBK,GAAc9hH,IAAYl/I,MAIxD+lQ,IAAkBr9I,EAAM4zD,YAExB0pF,IAAoBt9I,EAAM4zD,WAEbwkF,GAAe9gQ,EAAQ6vI,EAI5C,CKuG4By9H,CAAetyI,EAAOtS,GACjC2kJ,GAEaryI,EAAMuyI,eAAevyI,EAAMmjI,MAAM0H,MAAMI,kBHlHvC,SAAUrJ,EAAiBl0I,GACrD,IAAIthG,EAAKw1O,EAAgB57P,MAAOwsQ,EAAepmP,EAAGomP,aAAcnC,EAAcjkP,EAAGikP,YAC5EzO,EAAgB0N,sBACjB3N,GAAsBC,GACtBvxG,GAAey9G,GAAWlM,GAAkBl0I,EAAO8kJ,GACnDniH,GAAey9G,GAAWlM,GAAkBl0I,EAAO2iJ,GAE3D,CG8GYoC,CAAiBzyI,EAAOtS,GACxB0gJ,GAAgBpuI,EAAOtS,GACvBshJ,GAAgBhvI,EAAOtS,GATb,CAUtB,EAIQhoH,KAAK4rQ,eAAiB,SAAU5jJ,GAC5B,IAAIthG,EAAK4zG,EAAMmjI,MAAOj/G,EAAW93H,EAAG83H,SAAU2mH,EAAQz+O,EAAGy+O,MAAOnF,EAAUt5O,EAAGs5O,QAC7E,GAAK1lI,EAAMgjI,kBACNhjI,EAAMijI,mBACP/+G,GACC2mH,EAAME,gBACPrF,EAAQxhH,UACPwhH,EAAQ2F,eACT39I,EAAM4zD,QANV,CASA5zD,EAAM0X,iBACN1X,EAAM29F,kBACN,IAAIn5L,EAAK8tG,EAAM0iI,eAAgBJ,EAAYpwO,EAAGowO,UAAWC,EAAYrwO,EAAGqwO,UACpEyC,EAAS1C,EAAY50I,EAAMyf,OAC3B83H,EAAS1C,EAAY70I,EAAM0f,OAC3B84H,EAAeR,EAAQ8C,UAAYlG,EAAY0C,EAC/CmB,EAAeT,EAAQ+C,UAAYlG,EAAY0C,EAC/CzzN,EAAKwuF,EAAMmjI,MAAM8E,mBAAoBC,EAAQ12N,EAAG02N,MAAOC,EAAQ32N,EAAG22N,MAClExD,EAAgByB,GAAgBpmI,EAAOkoI,GACvCtD,EAAgBwB,GAAgBpmI,EAAOmoI,GACvCjC,IAAiB5D,GAAa6D,IAAiB5D,GAEnD0D,GAAkBjmI,EAAOkmI,EAAcC,EAAcxB,EAAeC,EAbhF,CAcA,EACQl/P,KAAK6rQ,eAAiB,SAAU7jJ,GAC5B,IAAIw2B,EAAWlkB,EAAMmjI,MAAMj/G,SACvBqtH,EAAiBvxI,EAAMh6H,MAAMurQ,eAC7BrtH,GAEYuhH,GAAsBzlI,EAAOtS,IAG3BsS,EAAMuyI,eAAevyI,EAAMmjI,MAAMuC,QAAQuF,kBAGtC,IAAjBv9I,EAAMyzD,QAAiBnhD,EAAMmjI,MAAMuC,QAAQwF,qBAE1B,IAAjBx9I,EAAMyzD,QAAiBnhD,EAAMmjI,MAAMuC,QAAQyF,uBAE1B,IAAjBz9I,EAAMyzD,QAAiBnhD,EAAMmjI,MAAMuC,QAAQ0F,sBAE/C19I,EAAM0X,iBACN1X,EAAM29F,kBACNs2C,GAAsB3hI,GACtB2nI,GAAmB3nI,EAAOtS,GAC1B2iC,GAAey9G,GAAW9tI,GAAQtS,EAAO6jJ,GACrD,EACQ7rQ,KAAK8rQ,UAAY,SAAU9jJ,GACvB,IAAIw2B,EAAWlkB,EAAMmjI,MAAMj/G,SACvBstH,EAAYxxI,EAAMh6H,MAAMwrQ,UACxBttH,GAEY6hH,GAAiB/lI,IAGfA,EAAMuyI,eAAevyI,EAAMmjI,MAAMuC,QAAQuF,kBAG3Dv9I,EAAM0X,iBACN1X,EAAM29F,kBACNk9C,GAAcvoI,EAAOtS,EAAM2X,QAAS3X,EAAM+X,SAC1C4qB,GAAey9G,GAAW9tI,GAAQtS,EAAO8jJ,GACrD,EACQ9rQ,KAAK+rQ,cAAgB,SAAU/jJ,GAC3B,IAAI+jJ,EAAgBzxI,EAAMh6H,MAAMyrQ,cAC5BzxI,EAAMgmI,YACN2C,GAAiB3oI,GACjBqwB,GAAey9G,GAAW9tI,GAAQtS,EAAO+jJ,GAEzD,EAIQ/rQ,KAAKgtQ,aAAe,SAAUhlJ,GAC1B,IAAIw2B,EAAWlkB,EAAMmjI,MAAMj/G,SACvB93H,EAAK4zG,EAAMh6H,MAAO2sQ,EAAkBvmP,EAAGumP,gBAAiBtC,EAAcjkP,EAAGikP,YAC7E,IAAInsH,EAAJ,CAEA,IAAImuH,EJnNiB,SAAUzQ,EAAiBl0I,GACxD,IAAIthG,EAAKw1O,EAAgBuB,MAAMmI,MAAOpnH,EAAW93H,EAAG83H,SAAUrP,EAAWzoH,EAAGyoH,SACxE8wH,EAAgB/D,EAAgB+D,cAChC3gQ,EAAS0oH,EAAM1oH,OAEnB,SADgB2gQ,GAAkBzhH,IAAYl/I,KAG7B8gQ,GAAe9gQ,EAAQ6vI,EAI5C,CIwM4B+9H,CAAoB5yI,EAAOtS,GACtC2kJ,IFjNa,SAAUzQ,EAAiBl0I,GACrD,IAAIwzE,EAAWitE,GAAiBzgJ,GAChCk0I,EAAgB4N,mBAAqBtuE,EACrC0gE,EAAgBqO,aAAe/uE,EAC/B0gE,EAAgBkO,gBAAkBlO,EAAgBc,eAAe7tB,MACjE+sB,EAAgBoE,WAAY,EAC5BrE,GAAsBC,EAC1B,CE4MYiR,CAAiB7yI,EAAOtS,GACxBi0I,GAAsB3hI,GACtBqwB,GAAey9G,GAAW9tI,GAAQtS,EAAOilJ,GACzCtiH,GAAey9G,GAAW9tI,GAAQtS,EAAO2iJ,GAP/B,CAQtB,EACQ3qQ,KAAKotQ,QAAU,SAAUplJ,GACrB,IAAIw2B,EAAWlkB,EAAMmjI,MAAMj/G,SACvB93H,EAAK4zG,EAAMh6H,MAAO+sQ,EAAa3mP,EAAG2mP,WAAYzE,EAASliP,EAAGkiP,OAC9D,IAAIpqH,EAAJ,CAEA,IAAImuH,EJpNY,SAAUzQ,GAClC,IAAI19G,EAAW09G,EAAgBuB,MAAMmI,MAAMpnH,SACvCyhH,EAAgB/D,EAAgB+D,cAAe6J,EAAqB5N,EAAgB4N,mBAExF,SADgB7J,GAAkBzhH,IAAYsrH,EAIlD,CI6M4BwD,CAAehzI,GAC1BqyI,IAEL3kJ,EAAM0X,iBACN1X,EAAM29F,kBACNkkD,GAAgBvvI,EAAOtS,GACvB2iC,GAAey9G,GAAW9tI,GAAQtS,EAAOqlJ,GACzC1iH,GAAey9G,GAAW9tI,GAAQtS,EAAO4gJ,GAR/B,CAStB,EACQ5oQ,KAAKutQ,YAAc,SAAUvlJ,GACzB,IAAIthG,EAAK4zG,EAAMh6H,MAAOktQ,EAAiB9mP,EAAG8mP,eAAgBhE,EAAa9iP,EAAG8iP,WACtElvI,EAAM8vI,kBFxMO,SAAUlO,GACnC,IAAIoO,EAAgBpO,EAAgBoO,cACpCpO,EAAgB/pD,SAAW,KAC3B+pD,EAAgBqO,aAAe,KAC/BrO,EAAgBoO,cAAgB,KAChCpO,EAAgBkO,gBAAkB,KAClClO,EAAgB4N,mBAAqB,KACrCpF,GAAyBxI,EAAmC,OAAlBoO,QAA4C,IAAlBA,OAA2B,EAASA,EAAc7oQ,EAAqB,OAAlB6oQ,QAA4C,IAAlBA,OAA2B,EAASA,EAAc5oQ,EACzM,CEiMgB+rQ,CAAgBnzI,GAChBqwB,GAAey9G,GAAW9tI,GAAQtS,EAAOwlJ,GACzC7iH,GAAey9G,GAAW9tI,GAAQtS,EAAOwhJ,GAEzD,EAIQxpQ,KAAKqsQ,oBAAsB,SAAUrkJ,GACjC,IAAIw2B,EAAWlkB,EAAMmjI,MAAMj/G,SACvBqtH,EAAiBvxI,EAAMh6H,MAAMurQ,eACjC,IAAIrtH,GAEYuhH,GAAsBzlI,EAAOtS,GAI7C,GADkBsS,EAAM4wI,YAAc,IAAI3lQ,KAAS+0H,EAAM4wI,UAAY,KACzB,IAAzBljJ,EAAMoe,QAAQ3mI,OAC7B66H,EAAM+vE,cAAcriF,OAEnB,CACDsS,EAAM4wI,WAAa,IAAI3lQ,KACvB02P,GAAsB3hI,GACtB,IAAI8L,EAAUpe,EAAMoe,QAChBsnI,EAAqC,IAAnBtnI,EAAQ3mI,OAC1BkuQ,EAAmC,IAAnBvnI,EAAQ3mI,OACxBiuQ,IACAzR,GAAsB3hI,GACtB2nI,GAAmB3nI,EAAOtS,GAC1B2iC,GAAey9G,GAAW9tI,GAAQtS,EAAO6jJ,IAEzC8B,GACArzI,EAAM0yI,aAAahlJ,EAEvC,CACA,EACQhoH,KAAKssQ,eAAiB,SAAUtkJ,GAC5B,IAAIw2B,EAAWlkB,EAAMmjI,MAAMj/G,SACvBstH,EAAYxxI,EAAMh6H,MAAMwrQ,UAC5B,GAAIxxI,EAAMgmI,WAAsC,IAAzBt4I,EAAMoe,QAAQ3mI,OAAc,CAC/C,GAAI++I,EACA,OAEJ,IADgB6hH,GAAiB/lI,GAE7B,OACJtS,EAAM0X,iBACN1X,EAAM29F,kBACN,IAAIuB,EAAQl/F,EAAMoe,QAAQ,GAC1By8H,GAAcvoI,EAAO4sF,EAAMvnF,QAASunF,EAAMnnF,SAC1C4qB,GAAey9G,GAAW9tI,GAAQtS,EAAO8jJ,EACzD,MACqB9jJ,EAAMoe,QAAQ3mI,OAAS,GAC5B66H,EAAM8yI,QAAQplJ,EAE9B,EACQhoH,KAAKusQ,mBAAqB,SAAUvkJ,GAChCsS,EAAMyxI,cAAc/jJ,GACpBsS,EAAMizI,YAAYvlJ,EAC9B,EAIQhoH,KAAKqqM,cAAgB,SAAUriF,GAE3B,IADesS,EAAMmjI,MAAMj/G,SAC3B,CAEA,IAAImuH,EDtPkB,SAAUzQ,EAAiBl0I,GACzD,IAAIi4I,EAAgB/D,EAAgB+D,cAAexC,EAAQvB,EAAgBuB,MAAOH,EAAmBpB,EAAgBoB,iBACjH52O,EAAK+2O,EAAMoI,YAAarnH,EAAW93H,EAAG83H,SAAUrP,EAAWzoH,EAAGyoH,SAC9D7vI,EAAS0oH,EAAM1oH,OACf4gQ,EAAsC,OAArB5C,QAAkD,IAArBA,OAA8B,EAASA,EAAiBhvM,SAAShvD,GAEnH,UADgB2gQ,GAAiB3gQ,GAAU4gQ,IAAmB1hH,KAG7C4hH,GAAe9gQ,EAAQ6vI,EAI5C,CC0O4By+H,CAAqBtzI,EAAOtS,GACvC2kJ,GAELjC,GAAkBpwI,EAAOtS,EAJf,CAKtB,EAIQhoH,KAAKgsQ,aAAe,SAAUhkJ,GACtBsS,EAAMgmI,WACNhmI,EAAMyxI,cAAc/jJ,EAEpC,EACQhoH,KAAKksQ,cAAgB,SAAUtpQ,GAC3B03H,EAAM8wI,YAAYxoQ,EAAEjD,MAAO,CACvC,EACQK,KAAKisQ,gBAAkB,SAAUrpQ,GAC7B03H,EAAM8wI,YAAYxoQ,EAAEjD,MAAO,CACvC,EACQK,KAAK6sQ,eAAiB,SAAUjmQ,GAC5B,OAAKA,EAAKnH,QAGH0G,QAAQS,EAAKma,MAAK,SAAUphB,GAAO,OAAO26H,EAAM8wI,YAAYzrQ,EAAK,IACpF,EACQK,KAAK+8P,kBAAoB,SAAU5tB,EAAOytB,EAAWC,GACjD,IAAIgR,EAAgBvzI,EAAMh6H,MAAMutQ,cAChC,GAAKtnQ,OAAOigF,MAAM2oJ,IACb5oO,OAAOigF,MAAMo2K,IACbr2P,OAAOigF,MAAMq2K,GAadpzP,QAAQ2C,MAAM,qCAbY,CACtB+iO,IAAU70G,EAAM0iI,eAAe7tB,QAC/B70G,EAAM0iI,eAAe+I,cAAgBzrI,EAAM0iI,eAAe7tB,MAC1D70G,EAAM0iI,eAAe7tB,MAAQA,GAEjC70G,EAAM0iI,eAAeJ,UAAYA,EACjCtiI,EAAM0iI,eAAeH,UAAYA,EACjCviI,EAAMmyI,sBACN,IAAIqB,EAAQ1F,GAAW9tI,GACvBA,EAAMywI,kBAAkBnjQ,SAAQ,SAAUqqE,GAAY,OAAOA,EAAS67L,EAAO,IAC7EnjH,GAAemjH,EAAO,CAAE3+B,MAAOA,EAAOytB,UAAWA,EAAWC,UAAWA,GAAagR,EACpG,CAIA,EACQ7tQ,KAAK0sQ,UAAY,WACb,GAAIpyI,EAAMgjI,kBAAoBhjI,EAAMijI,iBAAkB,CAClD,IAAIZ,EAAcyK,GAAkB9sI,EAAM0iI,eAAe7tB,MAAO70G,EAAMgjI,iBAAkBhjI,EAAMijI,kBAC9FjjI,EAAMyiI,kBAAkBJ,EAAYxtB,MAAOwtB,EAAYC,UAAWD,EAAYE,UAC9F,CACA,EACQ78P,KAAK+tQ,sBAAwB,SAAUtsQ,EAAGC,EAAGytO,GACzC,OAAI70G,EAAMh6H,MAAM0tQ,gBACL1zI,EAAMh6H,MAAM0tQ,gBAAgBvsQ,EAAGC,EAAGytO,GNrWzB,SAAU1tO,EAAGC,EAAGytO,GAE5C,MAAO,aAAazmO,OAAOjH,EAAG,QAAQiH,OAAOhH,EAAG,cAAcgH,OAAOymO,EAAO,IAChF,CMoWmB8+B,CAAmBxsQ,EAAGC,EAAGytO,EAC5C,EACQnvO,KAAKysQ,oBAAsB,WACvB,GAAKnyI,EAAM6hI,SAAY7hI,EAAMijI,iBAA7B,CAEA,IAAI72O,EAAK4zG,EAAM0iI,eAAgB7tB,EAAQzoN,EAAGyoN,MAAOytB,EAAYl2O,EAAGk2O,UAAWC,EAAYn2O,EAAGm2O,UACtF37P,EAAYo5H,EAAMyzI,sBAAsBnR,EAAWC,EAAW1tB,GAClE70G,EAAMijI,iBAAiB57P,MAAMT,UAAYA,CAH/B,CAItB,EACQlB,KAAKooQ,WAAa,WACd,OAAOA,GAAW9tI,EAC9B,EAIQt6H,KAAK+1I,SAAW,SAAU9jE,GAItB,OAHKqoD,EAAMywI,kBAAkBjlQ,IAAImsE,IAC7BqoD,EAAMywI,kBAAkB/kQ,IAAIisE,GAEzB,WACHqoD,EAAMywI,kBAAkB9xP,OAAOg5D,EAC/C,CACA,EACQjyE,KAAKkuQ,OAAS,SAAUj8L,GAIpB,OAHKqoD,EAAM0wI,gBAAgBllQ,IAAImsE,IAC3BqoD,EAAM0wI,gBAAgBhlQ,IAAIisE,GAEvB,WACHqoD,EAAM0wI,gBAAgB/xP,OAAOg5D,EAC7C,CACA,EAIQjyE,KAAKwiB,KAAO,SAAU86O,EAAkBC,GACpCjjI,EAAMkxI,sBACNlxI,EAAMgjI,iBAAmBA,EACzBhjI,EAAMijI,iBAAmBA,EACzBuB,GAAsBxkI,EAAOA,EAAM0iI,eAAe7tB,OAClD70G,EAAM6xI,8BAA8B7O,GACpChjI,EAAMkyI,iBAAiBjP,GACvBjjI,EAAMgxI,yBACNhxI,EAAM2lI,eAAgB,EACtB,IAAInnF,EAAMsvF,GAAW9tI,GACrBqwB,GAAemuB,OAAK12K,EAAWk4H,EAAMh6H,MAAM4tQ,OACvD,EACQluQ,KAAKM,MAAQA,EACbN,KAAKy9P,MAAQ0I,GAAYnmQ,KAAKM,OAC9BN,KAAKg9P,eAAiB8I,GAAY9lQ,KAAKM,MAC/C,ECrZW+sP,GAAU/hF,IAAAA,cAAoB,MAO9B6iG,GAAmB7iG,IAAAA,YAAiB,SAAUhrK,EAAOH,GAC5D,IAPuBi/G,EAAU05D,EAO7B/uK,GAAWygM,EAAAA,EAAAA,QAAO,IAAIsgE,GAAaxqQ,IAAQkpD,QAC3Cw/D,GARmB5J,EAQE9+G,EAAM8+G,SARE05D,EAQQqvF,GAAYp+P,GAP7B,oBAAbq1G,EACAA,EAAS05D,GAEb15D,GASP,OAJAgvJ,EAAAA,EAAAA,qBAAoBjuQ,GAAK,WAAc,OAAOgoQ,GAAYp+P,EAAU,GAAI,CAACA,KACzE8gK,EAAAA,EAAAA,YAAU,WACN9gK,EAASy6E,OAAOlkF,EACxB,GAAO,CAACyJ,EAAUzJ,IACPgrK,IAAAA,cAAoB+hF,GAAQp2E,SAAU,CAAE/vK,MAAO6C,GAAYi/G,EACtE,ICduBsiD,IAAAA,YAAiB,SAAUhrK,EAAOH,GACrD,ICLsBolB,EDKlB8oP,GAAW7jE,EAAAA,EAAAA,QAAO,MAClBzgM,GAAWukQ,EAAAA,EAAAA,YAAWjhB,IAU1B,OATAxiF,EAAAA,EAAAA,YAAU,WACN,OAAO9gK,EAASgsI,UAAS,SAAU+iC,GAC/B,GAAIu1F,EAAS7kN,QAAS,CAGlB6kN,EAAS7kN,QAAQ7nD,MAAMT,UAAY6I,EAASgkQ,sBAF5B,EACA,EACwE,EAAIj1F,EAAI/uK,SAASizP,eAAe7tB,MACxI,CACA,GACA,GAAO,CAACplO,IACGuhK,IAAAA,cAAoB,MAAO/iB,GAAS,CAAC,EAAGjoJ,EAAO,CAAEH,KChBlColB,EDgBiD,CAAC8oP,EAAUluQ,GCf3E,SAAU+G,GACbqe,EAAK3d,SAAQ,SAAUzH,GACA,oBAARA,EACPA,EAAI+G,GAEQ,MAAP/G,IACLA,EAAIqpD,QAAUtiD,EAE9B,GACA,KDOA,uGEjBA,SAAqBm7G,EAAKliH,QACX,IAARA,IAAiBA,EAAM,CAAC,GAC7B,IAAIouQ,EAAWpuQ,EAAIouQ,SAEnB,GAAKlsJ,GAA2B,qBAAbr9G,SAAnB,CAEA,IAAI0zE,EAAO1zE,SAAS0zE,MAAQ1zE,SAAS4xI,qBAAqB,QAAQ,GAC9Dj1I,EAAQqD,SAASgxH,cAAc,SACnCr0H,EAAMG,KAAO,WAEI,QAAbysQ,GACE71L,EAAKq2H,WACPr2H,EAAKunC,aAAat+G,EAAO+2E,EAAKq2H,YAKhCr2H,EAAK8sD,YAAY7jI,GAGfA,EAAM6sQ,WACR7sQ,EAAM6sQ,WAAWxpN,QAAUq9D,EAE3B1gH,EAAM6jI,YAAYxgI,SAASwnI,eAAenqB,GAnBU,CAqBxD,kzBCpBU,IAACosJ,GAAqB,SAAU/nP,GACtC,IAAI04F,EAAW14F,EAAG04F,SAAU5yF,EAAK9F,EAAGgoP,aAAcA,OAAsB,IAAPliP,EAAgB,GAAKA,EAAIsf,EAAKplB,EAAGioP,aAAcA,OAAsB,IAAP7iO,EAAgB,GAAKA,EAAI8iO,EAAeloP,EAAGkoP,aAAcC,EAAenoP,EAAGmoP,aAAc9iO,EAAKrlB,EAAGooP,aAAcA,OAAsB,IAAP/iO,EAAgB,CAAC,EAAIA,EAAIt1B,EAAKiQ,EAAGqoP,aAAcA,OAAsB,IAAPt4P,EAAgB,CAAC,EAAIA,EAC5Uu1B,GAAKsiO,EAAAA,EAAAA,YAAWjhB,IAAU7qO,EAAOwpB,EAAGxpB,KAAMgpP,EAAsBx/N,EAAGw/N,oBACnEhhF,GAAaggB,EAAAA,EAAAA,QAAO,MACpBwkE,GAAaxkE,EAAAA,EAAAA,QAAO,MAYxB,OAXA3/B,EAAAA,EAAAA,YAAU,WACN,IAAIh4F,EAAU23G,EAAWhhI,QACrBw/D,EAAUgmJ,EAAWxlN,QAKzB,OAJgB,OAAZqpB,GAAgC,OAAZm2C,GAAoBxmG,IAC/B,OAATA,QAA0B,IAATA,GAA2BA,EAAKqwD,EAASm2C,IAGvD,WACqB,OAAxBwiJ,QAAwD,IAAxBA,GAA0CA,GACtF,CACA,GAAO,IACKlgG,IAAAA,cAAoB,MAAO/iB,GAAS,CAAC,EAAGumH,EAAc,CAAE3uQ,IAAKqqL,EAAYzoL,UAAW,2BAA2B2G,OAAOC,GAAgB,KAAKD,OAAOgmQ,GAAe/sQ,MAAOitQ,IAC5KtjG,IAAAA,cAAoB,MAAO/iB,GAAS,CAAC,EAAGwmH,EAAc,CAAE5uQ,IAAK6uQ,EAAYjtQ,UAAW,6BAA6B2G,OAAOC,GAAgB,KAAKD,OAAOimQ,GAAehtQ,MAAOktQ,IAAiBzvJ,GACnM,ECrBW6vJ,GAAsB,WAC7B,IAAIC,GAAiBZ,EAAAA,EAAAA,YAAWjhB,IAChC,IAAK6hB,EACD,MAAM,IAAI9gQ,MAAM,4DAEpB,OAAO8gQ,CACX,ECLWC,GAAqB,SAAUl9L,GACtC,IAAIi9L,EAAiBD,MACrBpkG,EAAAA,EAAAA,YAAU,WACN,IAAIukG,EACA7D,EAAU2D,EAAen5H,UAAS,SAAU51I,GAC5CivQ,EAAkBn9L,EAASzjE,GAASrO,EAAI4J,UACpD,IACQ,OAAO,WACHwhQ,IACoB,OAApB6D,QAAgD,IAApBA,GAAsCA,GAC9E,CACA,GAAO,CAACn9L,EAAUi9L,GAClB,ECVA,MAmFA,GAnFahvQ,IAON,IAPO,UACZ6B,EAAS,IACTyqK,EAAG,eACH29B,EAAc,YACdklE,EAAW,MACX39O,EAAK,iBACL49O,GACDpvQ,EACC,MAAOivO,EAAOogC,IAAY3kG,EAAAA,EAAAA,UAAS,IAC5B01F,EAAWkP,IAAgB5kG,EAAAA,EAAAA,YAC5B6kG,GAAuBjlE,EAAAA,EAAAA,QAAO,OAC7BklE,EAAcC,IAAmB/kG,EAAAA,EAAAA,WAAS,IAC3C,eAAEs8F,EAAc,OAAEH,EAAM,QAAEC,GCfT,WACrB,IAAIkI,EAAiBD,KACrB,OAAO9G,GAAY+G,EACvB,CDY8CU,GACtChkQ,EAAUqjQ,MAEhBpkG,EAAAA,EAAAA,YAAU,KACJskE,EAAQ,GAAKz9M,IAAU29O,GACzBnI,IAEK,IAAMA,MAEZ,CAACmI,IAEJF,IAAmBl8P,IAA0B,IAAzB,MAAElK,EAAK,SAAEgB,GAAUkJ,EACrCq8P,EAAiBvmQ,EAAMomO,MAAQ,GAC/BogC,EAASxmQ,EAAMomO,OACfqgC,EAAazlQ,EAASu2P,UAAU,IA4ClC,OACEl2E,EAAAA,GAAAA,KAAC2iB,GAAW,CACV3C,aAZiBA,KACnBulE,GAAgB,GAChBzI,GAAgB,EAWdruH,QA5Caj2I,IACf,GAAI09P,EAAW,OACfmP,EAAqBjmN,QAAU,CAC7B/nD,EAAGmB,EAAEyjI,MACL3kI,EAAGkB,EAAE0jI,OAEP,MAAM,eAAE02H,GAAmBpxP,EACE,IAAzBoxP,EAAe7tB,MACjB43B,IAEAC,IAEF2I,GAAiBD,EAAa,EAiC5BnlE,YA9BiB3nM,IACnB,GAAI8sQ,EAAc,CAChB,MAAMG,EAAqB,CACzBpuQ,EAAGmB,EAAEyjI,MACL3kI,EAAGkB,EAAE0jI,OAEDmB,EAASgoI,EAAqBjmN,QAAQ/nD,EAAIouQ,EAAmBpuQ,EAC7DimI,EAAS+nI,EAAqBjmN,QAAQ9nD,EAAImuQ,EAAmBnuQ,EACnE+tQ,EAAqBjmN,QAAUqmN,EAE/B,MAAMC,EAAiBlkQ,EAAQoxP,eAAeJ,UAAYn1H,EACpDsoI,EAAiBnkQ,EAAQoxP,eAAeH,UAAYn1H,EAC1D97H,EAAQmxP,kBAAkBnxP,EAAQoxP,eAAe7tB,MAAO2gC,EAAgBC,EAC1E,GAkBEhuQ,UAAY,GAAEA,GAAa,MATzBu+P,EAAkB,UACfnxB,EAAQ,EAAI,UAAY,WAS7BhlC,eAAgBA,EAChB39B,IAAKA,EACL6iG,YAAaA,GACb,EEpDN,GA1BkBnvQ,IAAiG,IAAhG,YAACgqM,GAAc,EAAK,UAAEnoM,EAAS,IAAEyqK,EAAG,YAAE6iG,EAAW,MAAE39O,EAAK,cAAEs+O,EAAa,iBAAEV,GAAiBpvQ,EACzG,MAAO+vQ,EAAa9lE,IAAkBv/B,EAAAA,EAAAA,WAAS,GAC/C,OACIs/B,GAAc/f,EAAAA,GAAAA,MAAA,OAAKpoL,UAAY,gBAAeA,GAAwB,KAAKq9G,SAAA,CAClE6wJ,IAAe7lF,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBAC/BqoL,EAAAA,GAAAA,KAAC+jF,GAAgB,CAACnO,QAAS,CAACxhH,UAAWwxH,GAAgBhK,aAAc,EAAGb,MAAO,CAACC,WAAY,KAAMhmJ,UAC1FgrE,EAAAA,GAAAA,KAACqkF,GAAkB,CAAArvJ,UACfgrE,EAAAA,GAAAA,KAAC8lF,GAAI,CACDnuQ,UAAWA,EACXooM,eAAgBA,EAChB39B,IAAKA,EACL6iG,YAAaA,EACb39O,MAAOA,EACP49O,iBAAkBA,YAKtCllF,EAAAA,GAAAA,KAAC2iB,GAAW,CACRhrM,UAAWA,EACXooM,eAAgBA,EAChB39B,IAAKA,EACL6iG,YAAaA,GACf,ECUd,MAAMc,GAAe,IApCrB,MAEExkQ,WAAAA,GACE3L,KAAK6vK,OAASA,GAAOvmK,QAAO7G,GAC1BA,EAAE8H,QAAQ,kBAAoB,GAC9B9H,EAAE8H,QAAQ,UAAY,GAE1B,CAEA1E,GAAAA,CAAI8uB,GACF,MAAM,aAAEmzJ,EAAY,QAAE1E,EAAO,gBAAEyE,GAAoBhC,GAAahgL,MAChE8uB,EAAOmzJ,aAAenzJ,EAAOmzJ,cAAgBA,EAC7CnzJ,EAAOyuJ,QAAUA,EACjBzuJ,EAAOkzJ,gBAAkBA,EACzB,MAAMvjL,EAAUnF,OAAOmF,QAAQqwB,GAkB/B,OAhBU30B,KAAK6vK,OAAOp/J,KAAIhO,IACxB,IAAI8iC,EAAS9iC,EAWb,OAVA6B,EAAQsD,SAAQ1H,IAAmB,IAAjBP,EAAKuH,GAAMhH,EAC3B,MAAMkwQ,EAAgC,kBAAVlpQ,GAAsC,WAAhBytB,EAAOg0J,KACrDzhL,EACCkC,QAAQ,aAAc,IACtBA,QAAQ,6CAAyC,KACjDA,QAAQ,MAAO,KAChBlC,EAEJq+B,EAASA,EAAOn8B,QAAS,IAAGzJ,IAAOywQ,EAAa,IAE3C7qO,CAAM,IACZj8B,QAAO7G,IAAyB,IAApBA,EAAE8H,QAAQ,OACtBkC,QAAO,CAAC6a,EAAK7kB,IAAM6kB,EAAI7nB,OAASgD,EAAEhD,OAASgD,EAAI6kB,GAAK,GAGzD,GAIF,MCjCM+oP,GAAQ/vQ,IACV,MAAM,KAAEoR,EAAI,KAAEb,GAASvQ,EACjBs1K,EAAWR,KACX,KAAEuT,GAASxS,IAEjB,OAAOhzK,OAAOmtQ,qBAAqBC,UAChCjnQ,QAAOknQ,GAAUA,EAAOzrQ,WAAa2M,IACrCjB,KAAI,CAAC+/P,EAAQ9+O,KAAW,IAAD++O,EACtB,MAAM7kQ,EAAU,CACd+8K,OACAklE,KAAM2iB,EAAO9+P,KACbg/P,MAAOh/O,EACP7gB,OACA+kK,WACAu6F,aAAY,GACZttQ,EACF,IACQ8tQ,EAAqC,QAAtBF,EAAGttQ,OAAOqtQ,EAAO9+P,aAAK,IAAA++P,OAAA,EAAnBA,EAAqBppQ,QACvCupQ,EAAezxQ,OAAOyH,KAAKzD,OAAO0tQ,4BAA4BpxQ,QAAU0D,OAAO0tQ,2BAA2BL,EAAO5vQ,IACnH0wH,KAAKnuH,OAAO0tQ,2BAA2BL,EAAO5vQ,KAAK4E,WACnD,KAEJ,OAAO8lK,IAAAA,cAAoBqlG,EAAiB,CAAEhxQ,IAAK6wQ,EAAO9+P,KAAMo/P,eAAgBtlQ,GAAAA,eAAgB6G,OAAQu+P,EAAchlQ,aAAYtL,GAAQ,GAC5I,EAGR+vQ,GAAK1rI,aAAe,CAClB9zH,KAAM,CAAC,GAGT,YC1BMkgQ,GAASA,CAAClgQ,EAAM2qD,KACpB,MAAM,MAAEp7D,EAAK,YAAEgtJ,GAAgB5xF,EAE/B,OAAK3qD,EAIE,CAAEzQ,MAAOyQ,EAAKmgQ,MAAO5jH,YAAav8I,EAAKogQ,aAHrC,CAAE7wQ,QAAOgtJ,cAGyC,EAgBvD8jH,GAAc,SAACC,EAAWC,GAC9B,GAAKD,GAAcC,EAInB,OAL8C5xQ,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GA/BjC,GAqCX,KAtCW,EAuCT,OAAO2xQ,EACT,KAtCW,EAuCT,MAAQ,GAAEC,KAAcD,IAC1B,KAzCW,EA0CT,MAAQ,GAAEA,KAAaC,IACzB,QACE,MAAO,GAEb,EAyEA,GAvEgBlxQ,IAAoC,IAAnC,aAAE6O,EAAY,YAAEG,GAAahP,EAC5C,IAAK6O,IAAiBG,EACpB,OAAO,KAGT,MAAQ2M,KAAMu1P,EAAYH,YAAaI,EAAgB,iBAAEC,GAAqBviQ,GACxE,KAAE45K,GAAS9C,GAAahgL,MAE9B,IAAI0rQ,EAxDS,EAyDTC,EAAoBJ,EACpBE,IACFC,EAAsBD,EAAiBG,aACvCD,EAAoBF,EAAiBI,UAGvC,IAEI7gQ,EAFAzQ,EAAQgxQ,EACRhkH,EAAc,GAGlB,OAAQu7B,GACN,IA9DS,OA+DP93K,EAAOkgQ,GACLO,EACA,CAAElxQ,MAAOgxQ,EAAYhkH,YAAaikH,IAGpCjxQ,EAAQyQ,EAAKzQ,MACbgtJ,EAAcv8I,EAAKu8I,YACnB,MACF,IAxEa,WAyEX,MAAM,gBAAE57I,GAAoBtC,EAExBsC,IACFX,EAAOkgQ,GACLv/P,EAAgB8/P,iBAChB,CAAElxQ,MAAOoR,EAAgBqK,KAAMuxI,YAAa57I,EAAgBy/P,cAG9D7wQ,EAAQ8wQ,GAAYrgQ,EAAKzQ,MAAOoxQ,EAAmBD,GACnDnkH,EAAcv8I,EAAKu8I,aAGrB,MAEF,IAxFa,WAyFb,IA1FY,UA2FV,MAAM,eAAEukH,GAAmBziQ,EAEvByiQ,IACF9gQ,EAAOkgQ,GACLY,EAAeL,iBACf,CAAElxQ,MAAOuxQ,EAAe91P,KAAMuxI,YAAaukH,EAAeV,cAG5D7wQ,EAAQ8wQ,GAAYrgQ,EAAKzQ,MAAOoxQ,EAAmBD,GACnDnkH,EAAcv8I,EAAKu8I,aAGrB,MACF,QACEhtJ,EAAQ8wQ,IAvFM50O,EAuFiBqsJ,GAtFnBrsJ,EAAO++B,OAAO,GAAG8jB,cAAgB7iD,EAAO72B,MAAM,GAAK,GAsFzB+rQ,EAAmBD,GAvF3Cj1O,MA2FlB,GADAt3B,SAAS5E,MAAQA,EAAMgJ,QAAQ,aAAc,KAAO,GAChDgkJ,EAAa,CACf,MAAMwkH,EAAU5sQ,SAAS0zE,KAAKypH,cAAe,wBACzCyvE,GAASA,EAAQ/+P,aAAa,UAAWu6I,EAC/C,CACA,OAAO,IAAI,ECjHAykH,GAAmBA,CAACC,EAASpwO,EAAcqwO,EAAYC,KAiClE,IAAIC,EADU9uQ,OAAO+hI,iBAAiBlgI,SAAS+H,MAC1B0iM,iBAAiBqiE,GAEtC,OADAG,EAjCqB/qQ,KAKnB,KAJAA,EAAQA,EAAMW,QACJopC,WAAW,MAAS/pC,EAAM+pC,WAAW,QAC7C/pC,EAAQA,EAAM8G,UAAU,EAAG9G,EAAMzH,OAAS,IAExCsyQ,IAAe7qQ,EAAM+pC,WAAW,WAAa/pC,EAAM+pC,WAAW,WAAY,CAC5E,MAAM,iBAAE2yI,EAAgB,QAAER,GAAYyC,GAAahgL,OAC7C,sBAAE+8K,GAA0BJ,KAElCt7K,EAAS,GADY,GAAE07K,KAAyBQ,KAAgC,SAArBQ,EAA8B,QAAU,iBACzE18K,GAC5B,CACA,GAAI8qQ,GAAS9qQ,EAAM+pC,WAAW,KAAM,CAClC,IAAIihO,EAAK,KAELhrQ,EAAMqD,QAAQ,MAAQ,IACxB2nQ,EAAKhrQ,EAAMS,MAAM,KAAK,GACtBT,EAAQA,EAAM8G,UAAU,EAAG9G,EAAMqD,QAAQ,OAG3C,MAAMoqB,EAASztB,EAAMS,MAAM,KACrBwqQ,EAAY,CAAExpF,KAAMh0J,EAAO,IAC7BA,EAAOl1B,OAAS,IAClB0yQ,EAAUvxQ,GAAK+zB,EAAO,IAGxBztB,EAAS,GAAEipQ,GAAatqQ,IAAIssQ,KAAaD,EAAM,IAAGA,IAAO,IAC3D,CACA,OAAOhrQ,CAAK,EAMHkrQ,CAAYH,GACfA,GAAYA,EAASxyQ,OAAUwyQ,EAAWvwO,CAAY,ECVhE,GAnBcphC,IACZ,MAAMm/K,EAAeoG,IAAgBA,GAAahgL,MAAMhG,eAAe,eAAkBgmL,GAAahgL,MAAM45K,YAAcn/K,EAAMm/K,aAC1H,KAAE/tK,GAASpR,EAEjB,IAAKoR,EACH,OAAO,KAGT,MAAM86J,EAAQ,GAAEiT,kCAA4C/tK,EAAKgtE,gBACjE,OACE0rG,EAAAA,GAAAA,KAAA,UACM9pL,EACJgrM,IAAI,GACJ9+B,IAAKA,EACL7qK,MAAO,CAAEwiI,QAAS,iBAClB,EC1BN,IAAgB,GAAK,QAAQ,GAAK,QAAQ,GAAK,QAAQ,GAAK,SAAS,GAAK,UCOpEkuI,GAAwB,CAC5B,CACEC,IAAK,oCACLC,YAAaA,IAAO,UAEtB,CACED,IAAK,sBACLC,YAAaA,CAAC1qF,EAAiBjnL,IAAQ,GAAEinL,wBAAsCjnL,MAGjF,CACE0xQ,IAAK,uBACLC,YAAaA,IAAO,uBAEtB,CACED,IAAK,kCACLC,YAAaA,IAAO,QAEtB,CAEED,IAAK,4CACLC,YAAaA,IAAO,QAEtB,CACED,IAAK,uCACLC,YAAaA,IAAO,YAEtB,CACED,IAAK,wBACLC,YAAaA,IAAO,yBAEtB,CACED,IAAK,qBACLC,YAAaA,IAAO,sBAEtB,CACED,IAAK,kCACLC,YAAaA,IAAO,kCAEtB,CACED,IAAK,6BACLC,YAAaA,IAAO,8BAEtB,CACED,IAAK,oBACLC,YAAaA,IAAO,sBAEtB,CACED,IAAK,kBACLC,YAAaA,IAAO,mBAEtB,CACED,IAAK,iBACLC,YAAaA,IAAO,kBAEtB,CACED,IAAK,iBACLC,YAAaA,IAAO,kBAEtB,CACED,IAAK,sBACLC,YAAaA,IAAO,sCAEtB,CACED,IAAK,yBACLC,YAAaA,IAAO,oBAEtB,CACED,IAAK,0BACLC,YAAaA,IAAO,0BAEtB,CACED,IAAK,oBACLC,YAAaA,IAAO,qBAEtB,CACED,IAAK,oBACLC,YAAaA,IAAO,gBAEtB,CACED,IAAK,2BACLC,YAAaA,IAAO,uBAEtB,CACED,IAAK,sBACLC,YAAaA,IAAO,kBAEtB,CACED,IAAK,0BACLC,YAAaA,IAAO,2BAEtB,CACED,IAAK,uCACLC,YAAaA,IAAO,kBAMtB,CACED,IAAK,+BACLC,YAAaA,IAAO,gCAEtB,CACED,IAAK,2BACLC,YAAaA,IAAO,4BAEtB,CACED,IAAK,0BACLC,YAAaA,IAAO,4BAIlBC,GAAwB,CAC5B,CACEF,IAAK,2BACL3pF,KAAM,UACNh0J,OAASwmF,IACP,MAAM7zF,EAAM6zF,EAAI/wG,MAAM,0BAEtB,MAAO,CACLxJ,GAAI0mB,EAAI,GACR5V,KAAM4V,EAAI,GACX,GAGL,CACEgrP,IAAK,2BACL3pF,KAAM,oBAER,CACE2pF,IAAK,2BACL3pF,KAAM,mBAER,CACE2pF,IAAK,gEACL3pF,KAAM,QAER,CACE2pF,IAAK,0BACL3pF,KAAM,kBAER,CACE2pF,IAAK,sCACL3pF,KAAM,+BAER,CACE2pF,IAAK,6BACL3pF,KAAM,qBAER,CACE2pF,IAAK,qCACL3pF,KAAM,iBAER,CACE2pF,IAAK,kDACL3pF,KAAM,wBAER,CACE2pF,IAAK,uCACL3pF,KAAM,aAER,CACE2pF,IAAK,iCACL3pF,KAAM,aAER,CACE2pF,IAAK,gDACL3pF,KAAM,sBAER,CACE2pF,IAAK,2CACL3pF,KAAM,mBAER,CACE2pF,IAAK,0BACL3pF,KAAM,iBAER,CACE2pF,IAAK,+BACL3pF,KAAM,uBAER,CACE2pF,IAAK,qCACL3pF,KAAM,4BAER,CACE2pF,IAAK,iCACL3pF,KAAM,wBAER,CACE2pF,IAAK,yBACL3pF,KAAM,iBAER,CACE2pF,IAAK,gCACL3pF,KAAM,iBAER,CACE2pF,IAAK,mBACL3pF,KAAM,UAER,CACE2pF,IAAK,sBACL3pF,KAAM,cAER,CACE2pF,IAAK,sBACL3pF,KAAM,cAOR,CACE2pF,IAAK,8BACL3pF,KAAM,uBAER,CACE2pF,IAAK,uBACL3pF,KAAM,eAER,CACE2pF,IAAK,mCACL3pF,KAAM,0BAER,CACE2pF,IAAK,qCACL3pF,KAAM,QAER,CACE2pF,IAAK,oBACL3pF,KAAM,SA0UV,MAAM8pF,GAAsB,IAtU5B,MACE9mQ,WAAAA,GAAe,KA+Ef+mQ,YAAev3J,IAAS,IAADw3J,EACrB,IAAK3yQ,KAAK4yQ,UACR,OAGF5yQ,KAAK4yQ,UAAU//P,aAAa,YAAa,MAGzC1P,OAAOiqB,OAAOylP,YAAY,CACxB/wQ,KAAM,mBACN+O,KAAMsqG,GACL,KAEH,MAAM,gBAAE0sE,GAAoBhC,GAAahgL,OAKnC,eAAEuJ,EAAc,gBAAEE,GAAoB9D,GAAAA,eAAezC,MAAMlD,MACjE,IAAKgiL,IAAoBv4K,IAAoBF,EAE3C,YADAuD,YAAW,IAAM3S,KAAK0yQ,YAAYv3J,IAAM,KAO1C,MAAMyqE,EAAY5lL,KAAK8yQ,yBAAyB9yQ,KAAK+yQ,aAAa53J,IAC5D63J,EAAc,mCAAmCnpQ,KAAK+7K,IACtD,aAAC72K,GAAgB5L,OAAOqI,eAAezC,MAAMlD,MAC7CotQ,EAA0B,OAAZlkQ,QAAY,IAAZA,GAAwB,QAAZ4jQ,EAAZ5jQ,EAAc+R,kBAAU,IAAA6xP,OAAZ,EAAZA,EAA0B5xP,MAAMmyP,GAAuB,kBAAdA,EAAKr3P,MAA2C,UAAfq3P,EAAKlyP,QAE/FgyP,GAAcC,EAChBjzQ,KAAKmzQ,aAGHvtF,GAAaA,EAAUnmL,OAAS,GAClCO,KAAKozQ,iBAAkB,EACvBpzQ,KAAKqzQ,aAAaztF,IAElB5lL,KAAKmzQ,YACP,EACD,KAmLDG,qBAAuB,KACrBtzQ,KAAKuzQ,iBAAmBvzQ,KAAKuzQ,gBAAgBjjF,OAAO,EACrD,KAEDkjF,aAAe94L,GAAS,KAAK,KAC3B,MAAM+4L,EAAYzzQ,KAAK0zQ,eAEjBC,EAAqB3zQ,KAAK8yQ,yBAAyBW,GACrDE,IAAuBF,GACzBzzQ,KAAKqzQ,aAAarzQ,KAAK4zQ,sBAAsBD,IAAqB,GAEpE3zQ,KAAK6zQ,wBAAwB,IAtT7B7zQ,KAAK8zQ,gBAAkB,KACvB9zQ,KAAK+zQ,WAAa,KAClB/zQ,KAAKg0Q,SAAW,gBAChBh0Q,KAAKi0Q,gBAAkB,cACvBj0Q,KAAKuzQ,gBAAkB,KACvBvzQ,KAAKozQ,iBAAkB,EACvBpzQ,KAAKk0Q,UAAY1xF,KAAgB0xF,UACjCl0Q,KAAKq1K,OAAS,IAGhB,CAEA,aAAIu9F,GAIF,OAHK5yQ,KAAK+zQ,aACR/zQ,KAAK+zQ,WAAa/uQ,SAASg0M,eAAeh5M,KAAKg0Q,WAE1Ch0Q,KAAK+zQ,UACd,CAEA,eAAII,CAAYC,GACdp0Q,KAAKq1K,OAAS++F,CAChB,CAEAvB,WAAAA,CAAYn/O,GACVlqB,GAAO2C,KAAK,oBAAqBunB,GAE5B1zB,KAAK4yQ,WAGV5yQ,KAAK4yQ,UAAUyB,cAAcxB,YAAYn/O,EAAS,IACpD,CAEA4gP,sBAAAA,CAAuBh4O,GACrB,IAAKA,EACH,OAAOA,EAGT,MAAMi4O,EAAYj4O,EAAO/xB,QAAQ,QACjC,IAAmB,IAAfgqQ,EACF,OAAOj4O,EAGT,MAAMk4O,EAAiBl4O,EAAO/xB,QAAQ,IAAKgqQ,GAC3C,OAAOj4O,EAAOlzB,SACQ,IAApBorQ,EAAwBl4O,EAAOtuB,UAAUumQ,EAAY,GAAKj4O,EAAOtuB,UAAUumQ,EAAWC,EAAiB,GACvG,GAEJ,CAEAnB,YAAAA,CAAal4J,GAAiC,IAA5Bs5J,EAAiBj1Q,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,IAAAA,UAAA,GACjC,IAAI2D,OAAOuxQ,aAAaC,sBAAsBj1O,SAAS,YAGvD,IACE,MAAM,SAAEquI,EAAQ,OAAEjwJ,GAAW9d,KAAK4yQ,UAAUyB,cAActvQ,SAEpD6vQ,EAA2B7mG,EAC9B3kK,QAAQ,8BAA+B,wBACvCA,QAAQ,qCAAsC,MAE3BpJ,KAAKs0Q,uBAAuBn5J,GAC/Cz8B,cACAztC,WAAY,GAAE2jO,IAA2B50Q,KAAKs0Q,uBAAuBx2P,KAAU4gE,iBAE5D+1L,GACpBz0Q,KAAK4yQ,UAAUyB,cAActvQ,SAASqE,QAAQ+xG,EAElD,CAAE,MAAOv4G,GACP,MAAMiyQ,EAAQ70Q,KAAK80Q,qBAAqB35J,GACxCh4G,OAAO4B,SAAS0iJ,KAAOotH,CACzB,CACF,CAEAnB,YAAAA,GACE,MAAM,SAAE3lG,EAAQ,OAAEjwJ,EAAM,KAAE6f,GAAS39B,KAAK4yQ,UAAUyB,cAActvQ,SAChE,MAAQ,GAAEgpK,IAAWjwJ,IAAS6f,GAChC,CA8CAm1O,wBAAAA,CAAyB33J,GACvB,IAAKA,GAAsB,IAAfA,EAAI17G,QAAgB07G,IAAQn7G,KAAKi0Q,gBAC3C,OAAO94J,EAGT,MAIM45J,EAAoB7zP,SAASs4M,GAAUw7C,GAAG5rQ,QAAQ,KAAM,KACxD6rQ,EAAgBjwQ,SAAS+H,KAAKowH,YAAc43I,EAAoB,mBAAqB,kBAC3F,OAAK/0Q,KAAK8zQ,iBAAmBmB,IAAkBj1Q,KAAK8zQ,gBAI7C34J,GAHLn7G,KAAK8zQ,gBAAkBmB,EAPHC,EAACnxQ,EAAG2/C,IAAQy3D,EAAIz7E,SAAS,cAC7C37B,EAAEqF,QAAQ,qCAAsCs6C,GAChD3/C,EAAE27B,SAAS,KAAOy7E,EAAIzyG,OAAQ,IAAGg7C,KAASy3D,EAAIzyG,OAAQ,IAAGg7C,KAMlDwxN,CAAc/5J,EAAK85J,GAG9B,CAEAlC,YAAAA,CAAa53J,GACX,IAAIg6J,EAAYn1Q,KAAKo1Q,qBAAqBj6J,GAC1C,IAAKg6J,GAAkC,IAArBA,EAAU11Q,OAC1B,OAAO01Q,EAET,MAAME,EAAcr1Q,KAAKs1Q,uBAAuBn6J,GAEhD,OADAg6J,GAAc,GAAEE,EAAY51Q,OAAS,EAAI,IAAM,KAAK41Q,IAC7Cr1Q,KAAK4zQ,sBAAsBuB,EACpC,CAEAvB,qBAAAA,CAAsBz4J,GACpB,MAAM,iBAAEyoE,EAAgB,QAAER,EAAO,cAAEwE,GAAkB/B,GAAahgL,MAC5D0vQ,EAAU3xF,GAAuD,SAAnCA,EAAiBllG,eAC/C,eAAEtvE,EAAc,gBAAEE,EAAe,YAAEN,GAAgBxD,GAAAA,eAAezC,MAAMlD,MAU9E,OATAs1G,GAAOA,EAAIz7E,SAAS,oBAAsB,GAAO,GAAEy7E,EAAIz7E,SAAS,KAAO,IAAM,uBAAuB61O,qBACpGp6J,GAAOA,EAAIz7E,SAAS,4BAA8B,GAAM,6BAA4BtwB,EAAiBA,EAAe6R,WAAa,KACjIk6F,GAAOA,EAAIz7E,SAAS,6BAA+B,GAAM,8BAA6BpwB,EAAkBA,EAAgB2R,WAAa,KACrIk6F,GAAOA,EAAIz7E,SAAS,QAAU,GAAM,SAAQ5xB,KAAKC,WACjDotG,GAAOA,EAAIz7E,SAAS,gBAAkB,GAAM,iBAAgB1wB,EAAcA,EAAYsC,GAAK,KAC3F6pG,GAAOA,EAAIz7E,SAAS,aAAe,GAAM,cAAahvB,mBAAmBvN,OAAO4B,SAAS0iJ,QACzFtsC,GAAOA,EAAIz7E,SAAS,aAAe,GAAM,cAAa0jJ,GAAoB,KAC1EjoE,GAAOA,EAAIz7E,SAAS,iBAAmB,GAAM,kBAAiBkoJ,GAAgC,IAGhG,CAEAktF,oBAAAA,CAAqBK,GACnB,MAAMh6J,EAAMg6J,EAAUz2L,cAChB82L,EAAQhD,GAAsB/lQ,QAAO,CAAC6a,EAAGpnB,KAA6B,IAA3B,IAAEoyQ,EAAG,KAAE3pF,EAAI,OAAEh0J,GAAQz0B,EACpE,GAAIoyQ,EAAIzoQ,KAAKsxG,GAAM,CACjB,MAAM92G,EAAIswB,EAASA,EAAOwmF,GAAO,CAAC,EAClC,OAAOg1J,GAAatqQ,IAAI,CAAE8iL,UAAStkL,GACrC,CACA,OAAOijB,CAAG,GACT,IAEG+tP,EAAcr1Q,KAAKs1Q,uBAAuBH,GAChD,MAAQ,GAAEK,IAAQH,EAAY51Q,OAAS,EAAI,IAAM,KAAK41Q,GACxD,CAEAD,oBAAAA,CAAqBj6J,GACnB,MAAM,gBAAE0sE,EAAe,GAAEjnL,EAAE,WAAE+hL,GAAekD,GAAahgL,MACnD+/K,EAAYysF,GAAsB5lQ,QAAO,CAAC6a,EAAGrU,KAA4B,IAA1B,IAAEq/P,EAAG,YAAEC,GAAat/P,EACvE,OAAIq/P,EAAIzoQ,KAAKsxG,GACJo3J,EAAY1qF,EAAiBjnL,EAAI+hL,GAEnCr7J,CAAG,GACT,IACH,OAAOs+J,GAAaA,EAAUnmL,OAAS,EAAK,GAAEkjL,KAAciD,IAAc,EAC5E,CAEA0vF,sBAAAA,GACE,MAAMG,EAAkB/zF,IADAliL,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,IACuBmI,MAAM,KAAK,IAE7D,OAAOxI,OAAOmF,QAAQmxQ,GACnBnsQ,QAAO0W,IAAA,IAAErgB,EAAKuH,GAAM8Y,EAAA,MAAa,gBAARrgB,GAAiC,qBAARA,GAAsC,8BAARA,GAA+C,6BAARA,GAA8C,SAARA,CAAc,IAC3K8Q,KAAI8Z,IAAA,IAAE5qB,EAAKuH,GAAMqjB,EAAA,MAAM,GAAE5qB,KAAOuH,GAAO,IACvC4C,KAAK,IACV,CAEAqpQ,UAAAA,GACMnzQ,KAAK4yQ,YACP5yQ,KAAKozQ,iBAAkB,EACvBpzQ,KAAKqzQ,aAAarzQ,KAAKi0Q,iBACvBj0Q,KAAK4yQ,UAAUjxQ,MAAMwiI,QAAU,OAEnC,CAEA0vI,sBAAAA,GACM7zQ,KAAK4yQ,WAAa5yQ,KAAKuzQ,kBACzBvzQ,KAAK4yQ,UAAUjxQ,MAAMi3H,IAAO,GAAE54H,KAAKuzQ,gBAAgBtoI,cACnDjrI,KAAK4yQ,UAAUpyQ,OAASR,KAAKuzQ,gBAAgB5xQ,MAAMnB,OACnDR,KAAK4yQ,UAAUryQ,MAAQP,KAAKuzQ,gBAAgBp2I,YAC5Cn9H,KAAK4yQ,UAAUjxQ,MAAMwiI,QAAU,QAC/BnkI,KAAK4yQ,UAAUjxQ,MAAM6jF,SAAW,WAEpC,CAEAkwL,sBAAAA,GACM11Q,KAAKuzQ,kBACPvzQ,KAAKuzQ,gBAAgB5xQ,MAAMnB,OAASR,KAAK4yQ,UAAUpyQ,OAEvD,CAEAm1Q,mBAAAA,CAAoBzrQ,EAAK0rQ,GACvB,IAAK1rQ,IAAQA,EAAI2G,OAAS3G,EAAI2G,KAAKsqG,IAAK,OACxC,MAAMA,EAAMjxG,EAAI2G,KAAKsqG,IAEjBA,EAAIlqE,WAAW,QACjB9tC,OAAO4B,SAAS0iJ,KAAOtsC,EAGvBn7G,KAAKq1K,OAAOl6D,EAAK,CAAEpyG,MAAO,CAAE6sQ,iBAEhC,CAEAC,uBAAAA,CAAwB3rQ,GACtB,GAAKA,EAEL,GAAiB,2BAAbA,EAAIpI,KAAmC,CAEzC,IAAIL,EAAI0B,OAAO0zO,QACXn1O,EAAIyB,OAAO2zO,QACf3zO,OAAO2yQ,SAAW,WAAc3yQ,OAAOyzO,SAASn1O,EAAGC,EAAI,CAEzD,KACsB,0BAAbwI,EAAIpI,OACXqB,OAAO2yQ,SAAW,WAAc,EAEpC,CAEAC,uBAAAA,CAAwB7rQ,GACtB,GAAIlK,KAAK4yQ,WAAa5yQ,KAAKuzQ,gBAAiB,CAC1C,MAAMyC,EAAW,CACfl0Q,KAAM,oBACN+O,KAAM,CACJkkL,OAAQ/vL,SAASm9L,cAAc,QAAQ9mE,YAI3Cr7H,KAAK6yQ,YAAYmD,EACnB,CACF,CAEAC,uBAAAA,CAAwB/rQ,EAAK63K,GAC3Bv4K,GAAO2C,KAAK,sBAAuBjC,EAAK63K,GAExC,MAAMm0F,EAAoB,CACxBC,qBAAqB,EACrBC,eAA6B,uBAAblsQ,EAAIpI,MAA8C,yBAAboI,EAAIpI,MAE3D,GAAiB,yBAAboI,EAAIpI,KAAiC,CAIvC,GAAI,eAAe+H,KAAKK,EAAI2G,OAAS,qBAAqBhH,KAAKK,EAAI2G,MAGjE,OAFA7Q,KAAKmzQ,aACLhwQ,OAAO4B,SAAS0iJ,KAAOv9I,EAAI2G,KACpBqlQ,EAGT/yQ,QAAUA,OAAOyzO,SAAS,EAAG,GAC7B,MAAMy/B,EAAUnsQ,EAAI2G,KAAO7Q,KAAK80Q,qBAAqB5qQ,EAAI2G,MAAQ,KAC7DwlQ,GACEA,IAAYt0F,IACdm0F,EAAkBC,qBAAsB,EACxCn2Q,KAAKq1K,OAAOghG,EAAS,CAAEjtQ,SAAS,IAChCpJ,KAAK6zQ,yBAGX,KAAwB,uBAAb3pQ,EAAIpI,MACT9B,KAAKuzQ,iBAAmBrpQ,EAAI2G,MAAQ3G,EAAI2G,KAAKrQ,QAAUR,KAAKozQ,kBAC9DpzQ,KAAKuzQ,gBAAgB5xQ,MAAMnB,OAAU,GAAE0J,EAAI2G,KAAKrQ,WAChDR,KAAK6zQ,0BAGT,OAAOqC,CACT,CAgBAI,eAAAA,CAAe7rP,GAAkB,IAAjB,KAAE3oB,EAAI,KAAE+O,GAAM4Z,EAO5B,MANa,eAAT3oB,GACF9B,KAAK4yQ,UAAU//P,aAAa,YAAa,OAE9B,eAAT/Q,GACFqB,OAAOyzO,SAAS/lO,EAAKpP,EAAGoP,EAAKnP,GAEf,eAATI,CACT,GAIF,MCtjBay0Q,GAAiBC,IAC5BhrQ,GAAAA,eAAezC,MAAMiZ,QAAQ7B,mBAAmBq2P,GAChD3wF,GAAa9/K,IAAI,qBAAsBywQ,EAAiBv1P,YACxD4iK,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBM,WAAYv8K,MAAOsvQ,EAAiBv1P,WAAYypF,KAAM,KACxGm5E,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBO,aAAcx8K,MAAOsvQ,EAAiBllQ,GAAIo5F,KAAM,KAClG+nK,GAAoBI,YAAY,CAC9B/wQ,KAAM,mBACN+O,KAAM2lQ,EAAiBv1P,YACvB,EAISw1P,GAAgBA,CAACC,EAAiB/hP,KAC3CkvJ,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBK,SAAUt8K,MAAOwvQ,EAAgBrlQ,aAAcq5F,KAAM,KACvG,MAAMq7E,EAASoqF,GAAatqQ,IAAI,IAC3B8uB,EACHmzJ,aAAc4uF,EAAgBrlQ,eAC3BlO,OAAO4B,SAAS+Y,OAAS3a,OAAO4B,SAAS44B,KAC9Cx6B,OAAO4B,SAASqE,QAAQ28K,EAAO,EAItB4wF,GAAqBA,CAACzlQ,EAAgB/B,EAAUE,EAAYC,EAAiBF,KAExF,MAAMwnQ,EAAoBA,CAAC5lQ,EAAYoc,EAAQ44C,IACtCh1D,EAAWP,KAAKomQ,IACrB,MAAMj2Q,EAAM,GAAGolE,EAAc,GAAN,SAAc6wM,EAAS5lQ,SAASgQ,aACjDwF,EAAO,CACX7lB,KACAsG,MAAOtG,EACP8Q,KAAMmlQ,EAAS5lQ,SAAS4K,KACxBuR,SACA44C,QACA8wM,YAAaD,EAAS5lQ,SAAS8lQ,aAGjC,OADAtwP,EAAK24F,SAAWy3J,EAAWD,EAAkBC,EAASG,cAAevwP,EAAMu/C,EAAQ,GAAK,GACjFv/C,CAAI,IAITwwP,EAAW,GA8CjB,OA7CI5nQ,GACF4nQ,EAASpwQ,KAAK,CACZjG,GAAK,OAAM0O,EAAgBgC,KAC3BI,KAAMpC,EAAgB4nQ,KACtBhwQ,MAAQ,OAAMoI,EAAgBgC,KAC9B8b,OAAQ,KACR44C,MAAO,EACPylC,KAAMn8F,EAAgB/L,OACtB67G,SAAoB,OAAV/vG,QAAU,IAAVA,OAAU,EAAVA,EAAYoB,KAAKs7F,IACzB,MAAM,GAAEz6F,EAAE,OAAE/N,EAAM,KAAE2zQ,GAASnrK,EAC7B,MAAQ,CACNnrG,GAAK,MAAK0Q,IAAMm6F,KAAMloG,EAAQmO,KAAMwlQ,EAAMhwQ,MAAQ,MAAKoK,IAAM8b,OAAQ6pP,EAAU73J,SAAU,GAAIp5C,MAAO,EAAG+lC,QACxG,MAKH58F,GACF8nQ,EAASpwQ,KAAK,CACZjG,GAAK,OAAMwO,EAAekC,KAC1BI,KAAMtC,EAAeyM,KACrB3U,MAAQ,OAAMkI,EAAekC,KAC7Bs4L,KAAO,GAAEx6L,EAAe+nQ,kBACxB/pP,OAAQ,KACR44C,MAAO,EACPo5C,SAAkB,OAARjwG,QAAQ,IAARA,OAAQ,EAARA,EAAUsB,KAAKs7F,IACvB,MAAM,aAAE16F,EAAY,YAAE8lQ,EAAW,KAAEt7P,GAASkwF,EAC5C,MAAQ,CACNnrG,GAAK,MAAKyQ,IACVu4L,KAAO,GAAEutE,QACTzlQ,KAAMmK,EACN3U,MAAQ,MAAKmK,IACb+b,OAAQ6pP,EACR73J,SAAU,GACVp5C,MAAO,EACP+lC,QACD,MAKH76F,GACF+lQ,EAASpwQ,QAAQ+vQ,EAAkB1lQ,EAAgB+lQ,EAAU,IAGxD,CAAC,CACNr2Q,GAAI,OACJsG,MAAO,OACPk4G,SAAU63J,GACV,ECzFSG,GAAkBl3Q,IAAiC,IAAhC,eAACkP,EAAc,SAACD,GAAUjP,EACxD,MAAMy0B,EAASwhJ,KACR45C,EAAWsnD,IAAgBzsG,EAAAA,EAAAA,WAAS,IAE3CC,EAAAA,EAAAA,YAAU,KACR,MAAM+iC,EAAYA,KAChB,MAAM0pE,EAAkBtyQ,SAASm9L,cAAc,qBAC3Cm1E,GAAwE,SAArDn0Q,OAAO+hI,iBAAiBoyI,GAAiBnzI,QAC9DkzI,GAAa,GAEbA,GAAa,EACf,EAIF,OAFAl0Q,OAAO6P,iBAAiB,SAAS46L,GACjCA,IACO,KACLzqM,OAAOs7H,oBAAoB,SAASmvE,EAAS,CAC9C,GACA,IAEH,MAAM2pE,GAA4B,OAARpoQ,QAAQ,IAARA,OAAQ,EAARA,EAAUsB,KAAIwC,IAAA,IAAC,GAAE3B,EAAE,YAAE6lQ,EAAW,KAAEt7P,GAAM5I,EAAA,MAAM,CACtErS,GAAI0Q,EAAIs4L,KAAO,GAAEutE,QAAmBzlQ,KAAMmK,EAAM3U,MAAO2U,EACxD,MAAM,GAOP,OAAKk0M,GAIE3lC,EAAAA,GAAAA,KAACotF,GAAQ,CACdz1Q,UAAU,UACV6qB,MAAO2qP,EACPl5H,SAAUjvI,GAAkBmoQ,EAAkBx2P,MAAM6iC,GAAqBx0C,EAAekC,KAAOsyC,EAAQhjD,KACvG0pB,MAAOznB,GAAE,mBACTw3P,WAduBh8G,IACvB,MAAMq4H,EAAkBvnQ,EAAS4R,MAAKxhB,GAAKA,EAAE+R,KAAO+sI,IACpDo4H,GAAcC,EAAiB/hP,EAAO,EAatC2lO,gBAAkBj8G,IAAa8rC,EAAAA,GAAAA,MAAAstF,GAAAA,SAAA,CAAAr4J,SAAA,EAC7BgrE,EAAAA,GAAAA,KAACstF,GAAI,CAAChmQ,KAAM2sI,EAASurD,KAAMrpM,MAAM,KAAKC,OAAO,KAAKuB,UAAU,UAC5DqoL,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,oBAAmBq9G,SAAEi/B,EAASn3I,WAEhD6xI,WAAatyH,IAAS0jK,EAAAA,GAAAA,MAAAstF,GAAAA,SAAA,CAAAr4J,SAAA,EACpBgrE,EAAAA,GAAAA,KAACstF,GAAI,CAAChmQ,KAAM+U,EAAKmjL,KAAMrpM,MAAM,KAAKC,OAAO,KAAKuB,UAAU,UACxDqoL,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,OAAMq9G,SAAE34F,EAAKvf,aAfxB,IAiBP,ECjDSywQ,GAAmBz3Q,IAAsC,IAArC,gBAAEoP,EAAe,WAAED,GAAYnP,EAC9D,MAAO6vN,EAAWsnD,IAAgBzsG,EAAAA,EAAAA,WAAS,IAE3CC,EAAAA,EAAAA,YAAU,KACR,MAAM+iC,EAAYA,KAChB,MAAMgqE,EAAmB5yQ,SAASm9L,cAAc,sBAC5Cy1E,GAA0E,SAAtDz0Q,OAAO+hI,iBAAiB0yI,GAAkBzzI,QAChEkzI,GAAa,GAEbA,GAAa,EACf,EAIF,OAFAl0Q,OAAO6P,iBAAiB,SAAS46L,GACjCA,IACO,KACLzqM,OAAOs7H,oBAAoB,SAASmvE,EAAS,CAC9C,GACA,IAGH,MAAMiqE,GAAgC,OAAVxoQ,QAAU,IAAVA,OAAU,EAAVA,EAAYoB,KAAIwC,IAAA,IAAC,GAAE3B,EAAE,OAAE/N,EAAM,KAAE2zQ,GAAMjkQ,EAAA,MAAM,CACrErS,GAAI0Q,EAAIm6F,KAAMloG,EAAQmO,KAAMwlQ,EAAMhwQ,MAAOgwQ,EAC1C,MAAM,GAOP,OAAKnnD,GAIE3lC,EAAAA,GAAAA,KAACotF,GAAQ,CACdz1Q,UAAU,WACV6qB,MAAOirP,EACPx5H,SAAU/uI,GAAmBuoQ,EAAoB92P,MAAM6iC,GAAqBt0C,EAAgBgC,KAAOsyC,EAAQhjD,KAC3G0pB,MAAOznB,GAAE,mBACTw3P,WAdwBh8G,IACxB,MAAMm4H,EAAmBnnQ,EAAW0R,MAAKxhB,GAAKA,EAAE+R,KAAO+sI,IACvDk4H,GAAeC,EAAiB,EAahClc,gBAAkBj8G,IAAa+rC,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,OAAMq9G,SAAEi/B,EAASn3I,QAChE6xI,WAAatyH,IAAS0jK,EAAAA,GAAAA,MAAAstF,GAAAA,SAAA,CAAAr4J,SAAA,EACpBgrE,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,OAAMq9G,SAAE34F,EAAKglF,QAC7B2+E,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,OAAMq9G,SAAE34F,EAAKvf,aAZxB,IAcP,EC9CS4wQ,GAAiB,CAC5BC,SAAU,EACVC,QAAS,EACTC,OAAQ,EACRC,gBAAiB,GAGNC,GAAe,CAC1BC,qBAAsB,EACtBC,wBAAyB,EACzBC,oBAAqB,EACrBC,oBAAqB,EACrBC,uBAAwB,EACxBC,gBAAiB,GA2EnB,MACA,GADwB,IAxExB,MAEE9sQ,WAAAA,GACE3L,KAAK04Q,YAAc,CAAC,EACpB14Q,KAAK24Q,cAAgB,EACvB,CAEAC,QAAAA,CAAU7sK,GACR/rG,KAAK64Q,OAAS9sK,CAChB,CAEAx9F,SAAAA,CAAW0jE,GACTjyE,KAAK24Q,cAAc9xQ,KAAKorE,EAC1B,CAEAtjE,WAAAA,CAAasjE,GACXjyE,KAAK24Q,cAAgB34Q,KAAK24Q,cAAcrvQ,QAAOwvQ,GAAcA,IAAe7mM,GAC9E,CAEA,qBAAM8mM,GACJ,IACE,MAAMC,EAAc75Q,OAAOmF,QAAQtE,KAAK04Q,aACrCpvQ,QAAOpJ,IAAA,IAAE+4Q,EAAYC,GAASh5Q,EAAA,YAA2BkC,IAAtB82Q,EAASA,UAA0BA,EAASC,SAAWrB,GAAeC,QAAQ,IACjHtnQ,KAAIwC,IAAA,IAAEgmQ,EAAYC,GAASjmQ,EAAA,OAAKgmQ,CAAU,IAE7C,GAA2B,IAAvBD,EAAYv5Q,OACd,OAGF,MAAM25Q,QAAyB5tQ,GAAAA,eAAeiX,IAAIrJ,WAAWC,cAAc2/P,IACxDv0Q,MAAMK,QAAQs0Q,GAAoBA,EAAmB,CAACA,IAC9DxxQ,SAAQsxQ,GAAYl5Q,KAAK04Q,YAAYQ,EAASG,YAAYH,SAAWA,IAEhFl5Q,KAAK24Q,cAAc/wQ,SAAQqqE,GAAYA,EAASjyE,KAAK04Q,eACjD14Q,KAAK64Q,QACP74Q,KAAK64Q,OAAOS,cAAct5Q,KAAK04Q,aAG7Bv5Q,OAAOyT,OAAO5S,KAAK04Q,aAAarvQ,MAAK6vQ,IAAQ,IAAAK,EAAA,OAAqB,QAAjBA,EAAAL,EAASA,gBAAQ,IAAAK,OAAA,EAAjBA,EAAmBJ,UAAWrB,GAAeC,QAAQ,KACxGplQ,YAAW,IAAM3S,KAAK+4Q,mBAxDE,IA0D5B,CAAE,MAAOn2Q,GACP6G,QAAQ2C,MAAMxJ,GACd+P,YAAW,IAAM3S,KAAK+4Q,mBA5DI,IA6D5B,CACF,CAEAS,WAAAA,CAAaP,EAAYQ,GACvBz5Q,KAAK04Q,YAAYO,GAAc,CAAEQ,YACjCz5Q,KAAK+4Q,iBACP,CAEAW,eAAAA,CAAgBtgQ,GACd,GAAI3U,MAAMK,QAAQsU,GAOhB,OANAA,EAAWxR,SAAQsxQ,IACZl5Q,KAAK04Q,YAAYQ,KACpBl5Q,KAAK04Q,YAAYQ,GAAY,CAAEO,SAAU,MAC3C,SAEFz5Q,KAAK+4Q,kBAGPtvQ,QAAQ2C,MAAM,8CAEhB,CAEAutQ,eAAAA,GACE35Q,KAAK04Q,YAAc,CAAC,CACtB,GClFI7zM,GAAQ82B,GAAO,IAAIt4F,SAAQm1B,GAAW7lB,WAAW6lB,EAASmjE,KA0FhE,MACA,GADqB,IAnFrB,MAEEhwF,WAAAA,GAAgB,KAQhBiuQ,YAAejlP,IACT30B,KAAK65Q,OACF75Q,KAAKwpD,UACRxpD,KAAKwpD,QAAU70B,GAEjB30B,KAAK85Q,SAEL95Q,KAAK45Q,YAAYjlP,EACnB,EACD,KAEDolP,iBAAmB,KACjB/5Q,KAAKwpD,QAAUxpD,KAAK0O,KACpB1O,KAAK0O,KAAO,KACZ1O,KAAK65Q,OAAQ,EACb75Q,KAAK45Q,YAAY55Q,KAAKwpD,QAAQ,EAtB9BxpD,KAAKwpD,QAAU,KACfxpD,KAAK0O,KAAO,KACZ1O,KAAK65Q,OAAQ,EACb75Q,KAAKg6Q,QAAU,KACfh6Q,KAAKurM,QAAU,IACjB,CAoBA,WAAMuuE,GACJ,IACE,GAAI95Q,KAAKwpD,QAAS,CAChBxpD,KAAK65Q,OAAQ,EACb,IAAIt0O,QAAe/5B,GAAAA,eAAeiX,IAAIhR,SAASsM,sBAAsB/d,KAAKwpD,SAE1E,KAAOjkB,GAA4B,IAAlBA,EAAO4zO,QAItB,SAHMt0M,GA7CiB,KA8CvBt/B,QAAe/5B,GAAAA,eAAeiX,IAAIhR,SAASyM,gBAAgBle,KAAKwpD,QAAQ,GAAIjkB,EAAO00O,WAE/Ej6Q,KAAK0O,KAEP,YADA1O,KAAK+5Q,mBAUT,GAJA/5Q,KAAKwpD,QAAUxpD,KAAK0O,KACpB1O,KAAK0O,KAAO,KAEZ1O,KAAK65Q,OAAQ,EACT75Q,KAAKwpD,QAEP,YADAxpD,KAAK45Q,YAAY55Q,KAAKwpD,SAIxBxpD,KAAKg6Q,SAAWh6Q,KAAKg6Q,QAAQz0O,EAC/B,CACF,CAAE,MAAO3iC,GAAI,IAADs3Q,EACV,GAAiC,wBAApB,QAATA,EAAAt3Q,EAAEu3Q,eAAO,IAAAD,OAAA,EAATA,EAAWx7L,eAMb,aALM7Z,GAnEmB,KAoEzB7kE,KAAKwpD,QAAUxpD,KAAK0O,MAAQ1O,KAAKwpD,QACjCxpD,KAAK0O,KAAO,KACZ1O,KAAK65Q,OAAQ,OACb75Q,KAAK45Q,YAAY55Q,KAAKwpD,SAGxBxpD,KAAKwpD,QAAU,KACfxpD,KAAK0O,KAAO,KACZ1O,KAAK65Q,OAAQ,EACb75Q,KAAKurM,SAAWvrM,KAAKurM,QAAQ3oM,EAC/B,CACF,CAEAiE,IAAAA,CAAM8tB,GACC30B,KAAK65Q,MAGR75Q,KAAK45Q,YAAYjlP,GAFjB30B,KAAK0O,KAAOimB,CAKhB,GCzFIylP,GACM,EAmDZ,MACA,GAD8B,IA7C9B,MAEEzuQ,WAAAA,GACE3L,KAAKq6Q,UAAY,KACjBr6Q,KAAKssK,QAAU,IACjB,CAEA9pJ,IAAAA,CAAK63P,GACHr6Q,KAAKq6Q,UAAYA,EACjB,MAAMztP,EAAQ5sB,KAAKq6Q,UAChBztP,MAAMtjB,QAAOmd,IAAI,IAAA6zP,EAAA,OAAc,QAAVA,EAAA7zP,EAAKqzP,aAAK,IAAAQ,OAAA,EAAVA,EAAYnB,UAAWiB,EAAqB,IACjE3pQ,KAAIgW,GAAQA,EAAK8zP,cAEhB3tP,EAAMntB,SACRO,KAAKssK,QAAU35J,YAAW,KACxB3S,KAAKw6Q,IAAI5tP,EAAM,GAjBM,KAqB3B,CAEA6tP,IAAAA,GACEz6Q,KAAKssK,SAAWrvG,aAAaj9D,KAAKssK,QACpC,CAEA,SAAMkuG,CAAI5tP,GACR,MAAM8tP,QAAiBlvQ,GAAAA,eAAeiX,IAAIhR,SAAS4M,iBAAiBuO,GACpE8tP,EAAS9yQ,SAAQ0F,IAAW,IAADqtQ,EAAAC,EACzB,MAAMn0P,EAAqB,QAAjBk0P,EAAG36Q,KAAKq6Q,iBAAS,IAAAM,GAAO,QAAPC,EAAdD,EAAgB/tP,aAAK,IAAAguP,OAAP,EAAdA,EAAuB75P,MAAK0F,GAAQA,EAAK8zP,cAAgBjtQ,EAAOutQ,cACzEp0P,GACFA,EAAKq0P,eAAextQ,EACtB,IAEF,MAAMytQ,EAAeL,EAASpxQ,QAAOgE,GAAUA,EAAO6rQ,SAAWiB,KAAuB3pQ,KAAInD,GAAUA,EAAOutQ,cACzGE,EAAat7Q,SACfO,KAAKssK,QAAU35J,YAAW,KACxB3S,KAAKw6Q,IAAIO,EAAa,GAtCD,KAyC3B,gMC7CWC,GAEF,EAFEA,GAGH,EAHGA,GAKN,GAGMC,GAAkBC,IAC7B,MAAM,KAAEzlP,EAAI,WAAE3U,GAAeo6P,EAE7B,OAAQzlP,GACN,KAAKulP,GACH,OAAO,EACT,KAAKA,GACL,KAAKA,GACH,MAAMG,EAAer6P,EAAWC,MAAKmiL,GAAgC,iBAAnBA,EAAUrnL,OAC5D,OAAOs/P,GAAqD,SAArCA,EAAan6P,MAAM09D,cAC5C,QACE,OAAO,EACX,EAGW08L,GAAY,CACvBC,KAAM,OACNC,SAAU,WACVC,MAAO,QACPC,WAAY,cAGDC,GAAe3pQ,IAC1B,MAAM,WAAEgP,EAAU,UAAEknK,GAAcl2K,EAC5B4pQ,EAAS56P,EAAWC,MAAKmiL,GAAgC,kBAAnBA,EAAUrnL,OAChD8/P,EAAW76P,EAAWC,MAAKmiL,GAAgC,aAAnBA,EAAUrnL,OAExD,MAAoC,UAA1B,OAAN6/P,QAAM,IAANA,OAAM,EAANA,EAAQ16P,MAAM09D,eACT08L,GAAUC,KAEC,IAAdrzF,IAA2B,OAAR2zF,QAAQ,IAARA,OAAQ,EAARA,EAAU36P,SAAUo6P,GAAUG,MAC5CH,GAAUG,MACM,IAAdvzF,IAA2B,OAAR2zF,QAAQ,IAARA,OAAQ,EAARA,EAAU36P,SAAUo6P,GAAUI,WACnDJ,GAAUI,YACA,OAARG,QAAQ,IAARA,OAAQ,EAARA,EAAU36P,SAAUo6P,GAAUE,SAChCF,GAAUE,cADZ,CAGT,EAqEWM,GAAwCA,CAACC,EAA0BC,KAC9E,MAAM,SAAEC,EAAW,CAAC,EAAGC,YAAY,YAAE/rO,GAAa,SAAEgsO,GAAaJ,EAEjE,OAAO18Q,OAAOyH,KAAKm1Q,GAAUtrQ,KAAI8lH,IAC/B,MAAM2lJ,EAAqBjsO,EAAYsmF,GACjCi6I,EAASyL,EAAS1lJ,GAAU,aAC5B4lJ,EAAah5Q,OAAOi5Q,WAAWr7P,MAAKs7P,GAAOA,EAAI3qQ,OAAS8+P,IAAQzjI,UAAsB,WAC5F,MAAO,CACLnsI,GAAIs7Q,EAAmBI,OAAO17Q,GAC9BsG,MAAOi1Q,EAAaA,EAAWJ,EAASxlJ,IAAcwlJ,EAASxlJ,IAAa,GAC7E,GACD,EAgDG,MA0CMgmJ,GAAkCA,CAACjnM,EAASknM,IAChDr9Q,OAAOyH,KAAK0uE,GAAS7oE,QAAO,CAACgwQ,EAAmB98Q,KACrD,MAAM++B,EAAa89O,EAAiBR,WAAW/rO,YAAYtwC,GAErD6wQ,EAASgM,EAAiBP,SAASt8Q,GAAK,aACxCw8Q,EAAah5Q,OAAOi5Q,WAAWr7P,MAAKs7P,GAAOA,EAAI3qQ,OAAS8+P,IAAQzjI,UAAsB,WAEtF2vI,GAAgBpnM,EAAQ31E,GAAO21E,EAAQ31E,GAAK6F,WAAa,IAAIyrC,WAAW,eAE9E,IAAIw6B,EAAa6J,EAAQ31E,IAAyB,IAAjB21E,EAAQ31E,GACrC+8Q,EACE1vQ,KAAKxE,MAAM8sE,EAAQ31E,GAAKyJ,QAAQ,cAAe,KAC/C+yQ,EAAaA,EAAW7mM,EAAQ31E,IAAQ21E,EAAQ31E,GAClD,GAOJ,OALA88Q,EAAkB51Q,KAAK,CACrBjG,GAAI89B,EAAW49O,OAAO17Q,GACtBsG,MAAOukE,IAGFgxM,CAAiB,GACvB,IClML,GAtCev8Q,IAA2B,IAA1B,UAAEy8Q,GAAY,GAAMz8Q,EAClC,MAAM08Q,GAAYpyE,EAAAA,EAAAA,QAAO,OAEzB3/B,EAAAA,EAAAA,YAAU,KACRl4J,YAAW,SAAAkqQ,EAAA,OAAuB,QAAvBA,EAAMD,EAAUpzN,eAAO,IAAAqzN,OAAA,EAAjBA,EAAmBzkI,OAAO,GAAC,GAC5C,IAEF,MAAM0kI,EAAUA,KACd,MAAM,QAAE15F,EAAO,WAAET,EAAU,cAAEiF,EAAa,gBAAEC,EAAe,aAAEC,EAAY,OAAEzE,EAAM,iBAAEO,GAAqBiC,GAAahgL,MAC/Gk3Q,EAAavxQ,GAAAA,eAAezC,MAAMmG,YAAYrJ,IAAI,oBAElDm3Q,EAAkBxxQ,GAAAA,eAAezC,MAAMlD,MAAMmJ,YAAYsC,GAEzD2rQ,GAAe55F,GAAW25F,GAAmBA,IAAoB35F,EAAW25F,EAAkB35F,EAE9FkyF,EAAU3xF,GAAuD,SAAnCA,EAAiBllG,cAE/Cw+L,EAAU/5Q,OAAO4B,SAAS0iJ,KAEhCo8B,GAAeoB,aAAa9B,GAAkBtxF,OAC9C1uF,OAAO4B,SAAS0iJ,KAAQ,GAAEk7B,+BAAwCiF,eAA2BxE,aAAmByE,oBAAkCC,4CAAuDi1F,IAAaxH,EAAU,yBAA2B,iBAAiB0H,kBAA2BvsQ,mBAAmBwsQ,EAAQz3Q,MAAMy3Q,EAAQ3yQ,QAAQu9K,MAAiB,EAO3W,OACEqC,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,SAAQq9G,SAAA,EACrBgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,cAAaq9G,SACzBu9J,IAAavyF,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,eAAcq9G,SAAEv8G,GAAE,2BAEjDunL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,0CAAyCq9G,UACtDgrE,EAAAA,GAAAA,KAAA,QAAMluC,KAAK,SAASjB,SAAS,IAAIgB,UAVjBr5I,IACN,UAAVA,EAAEjD,KAAiBm9Q,GAAS,EAS8BjkI,QAASikI,EAAS/6Q,UAAU,iCAAiC5B,IAAKy8Q,EAAUx9J,SAAEv8G,GAAE,uBAExI,ECjCJupK,GAAgB16J,IAAU,IAADyrQ,EAC7B,OAA0F,QAA1FA,EAAO3xQ,GAAAA,eAAezC,MAAMlD,MAAMkJ,aAAa+R,WAAWC,MAAKmyP,GAAQA,EAAKr3P,OAASnK,WAAK,IAAAyrQ,OAAA,EAAnFA,EAAqFn8P,KAAK,EA4DnG,GAnDiB1gB,IACf,MAAMs1K,EAAWR,IACXgoG,GAA6B5yE,EAAAA,EAAAA,SAAO,GAE1C,IAAKlqM,EAAM0O,YACT,OAAO,KAGT,MAAQA,aAAa,UAAEquQ,IAAgB/8Q,GAEjC,iBAAEsjL,EAAgB,cAAEgE,EAAa,QAAExE,EAAO,WAAET,EAAU,aAAEmF,EAAY,UAAEvE,GAAcsC,GAAahgL,MACjGk3Q,EAAavxQ,GAAAA,eAAezC,MAAMmG,YAAYrJ,IAAI,oBAClDy3Q,EAAgBA,IAAM,CAACn6F,GAAkBtxF,MAAOsxF,GAAkBC,QAASD,GAAkBK,UAAU57K,SAAQ21Q,GAAM15F,GAAeoB,aAAas4F,KAevJ,IAAIC,EAAc,GAAE76F,+BAAwCiF,eAA2BxE,oBAA0B0E,gBAA2Bi1F,oBAJ5Hn5F,GAAuD,SAAnCA,EAAiBllG,cAI8H,yBAA2B,KAY9M,OATkB,KALAlzE,GAAAA,gBAAkBA,GAAAA,eAAezC,OAASyC,GAAAA,eAAezC,MAAMlD,MAAMkJ,cAAgBvD,GAAAA,eAAezC,MAAMlD,MAAMkJ,aAAai5K,YAKxHzE,EACrBi6F,EAAa5/O,mBAAmB2lJ,GAEY,SAAnCnX,GAAa,oBAEtBoxG,EAAapxG,GAAa,aAAexuI,mBAAmBwuI,GAAa,cAAgB,qBACzFgxG,EAA2B5zN,SAAU,IAIrC2gI,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,UAASq9G,SAAA,EACtB+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,OAAMq9G,SAAA,EACnBgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,QAAOq9G,SAAEv8G,GAAE,yBAC1BunL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,oBAAmBq9G,SAAEv8G,GAAE,wBAAyB,CAAEw6Q,oBAEnEjzF,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,0CAAyCq9G,UACtDgrE,EAAAA,GAAAA,KAAA,KAAGvxC,QAjCe4kI,KACtB,GAAIL,EAA2B5zN,QAAS,CACtC,MAAM4zN,EAA6BjN,GAAatqQ,IAAI,CAAC8iL,KAAK,uBAA0B,YAAW9lL,GAAE,uBACjGy6Q,IACA1nG,EAASwnG,EACX,MACEE,GACF,EA0BiC71H,KAAM+1H,EAAYz7Q,UAAU,kCAAiCq9G,SAAEv8G,GAAE,yBAE5F,EClDG66Q,GAAkBx9Q,IAAyC,IAAxC,YAAE8O,EAAW,kBAAE+B,GAAmB7Q,EAChE,MAAM01K,EAAWR,KACV8Y,EAAQqsE,IAAa3vF,EAAAA,EAAAA,WAAS,GAC/BskB,GAAesb,EAAAA,EAAAA,QAAO,MAE5BgwD,GAAgBtrE,GAAc,IAAMqrE,GAAU,MAE9C1vF,EAAAA,EAAAA,YAAU,KACJqjB,IACFgB,EAAa1lI,QAAQ7nD,MAAM6jF,SAAW,QACtCxgF,SAASwF,gBAAgB7I,MAAMurF,SAAW,GAC1CloF,SAASwF,gBAAgB7I,MAAM2jI,aAAe,GAChD,GACC,CAAC4oD,IAEJ,MAAMyvF,EAA6B5sQ,EAAqBA,EAAkB6sQ,0BAA4B,KAChGhxP,EAsDR,SAAoB3Z,GAAkE,IAAD0/P,EAAA,IAA/D,kBAAE5hQ,EAAiB,YAAE/B,EAAW,0BAAE2uQ,GAA2B1qQ,EACjF,MAAM,OAAEowK,EAAM,QAAED,EAAO,cAAEwE,EAAa,gBAAEC,EAAe,aAAEC,GAAiBjC,GAAahgL,OACjF,aAAEkJ,GAAiBvD,GAAAA,eAAezC,MAAMlD,MACxCo3Q,EAAa55F,GAAUr0K,EAAYsC,KAAO+xK,EAASA,EAASr0K,EAAYsC,GACxEusQ,EAAepC,GAAY1sQ,KAAkBqsQ,GAAUI,WACvDsC,GAAsC,OAAjB/sQ,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmBgtQ,qBAAsB,EAC9DC,EAAa,2BAA0Bf,mBAA4Br1F,eAA2BxE,aAAmByE,oBAAkCC,iDACnJm2F,EAA4G,UAAZ,QAApEtL,EAAA5jQ,EAAa+R,WAAWC,MAAKmyP,GAAsB,mBAAdA,EAAKr3P,cAA0B,IAAA82P,OAAA,EAApEA,EAAsE3xP,OAElGk9P,EAAW,CACfC,YAAanvQ,EAAYmvQ,YACzBH,aAGF,MAAO,EACJH,GAAgB,CACfj9Q,GAAI,YACJw9Q,SAAUv7Q,GAAE,qBACZsuQ,UAAW,gBACX1rF,WAAY,cACTy4F,GAEL,CACEt9Q,GAAI,wBACJw9Q,SAAUv7Q,GAAE,4BACZsuQ,UAAW,2BACR+M,GAELntQ,GAAqB/B,EAAYqvQ,MAAMC,SAAW,CAChD19Q,GAAI,kBACJw9Q,SAAUv7Q,GAAE,0BAA2B,CAAEi7Q,uBACzC3M,UAAW,gBACX1rF,WAAY,cACTy4F,GAELntQ,GAAqB/B,EAAYqvQ,MAAME,UAAY,CACjD39Q,GAAI,oBACJw9Q,SAAUv7Q,GAAE,4BAA6B,CAAE86Q,8BAC3CxM,UAAW,yBACR+M,GAEL,CACEt9Q,GAAI,eACJw9Q,SAAUv7Q,GAAE,wBACZsuQ,UAAW,YACR+M,GAEL,CACEt9Q,GAAI,iBACJw9Q,SAAUv7Q,GAAE,2BACZsuQ,UAAW,wBACR+M,IAEJD,GAA6B,CAC5Br9Q,GAAI,YACJw9Q,SAAUv7Q,GAAE,qBACZsuQ,UAAW,eACR+M,IAEJD,GAA6B,CAC5Br9Q,GAAI,uBACJw9Q,SAAUv7Q,GAAE,gCACZsuQ,UAAW,0BACR+M,IAEL50Q,OAAOnD,SAASsK,KAAIgW,IAAI,IAAUA,EAAMvf,MAAOuf,EAAK7lB,MACxD,CAxHgB49Q,CAAY,CAAEztQ,oBAAmB/B,cAAa2uQ,8BAY5D,OACExzF,EAAAA,GAAAA,MAACswE,GAAM,CAAC14P,UAAU,mBAAmB+9O,kBAXZngP,IACzB,MAAM,YAAEw+Q,EAAW,UAAEH,EAAS,UAAE7M,EAAS,WAAE1rF,GAAe74J,EAAM7L,MAAK0F,GAAQA,EAAK7lB,KAAOjB,IACzF,GAAIw+Q,EAGF,OAFAt6F,GAAeoB,aAAa9B,GAAkBtxF,YAC9C8zF,GAAiB84F,GAAWN,EAAaH,EAAW7M,EAAW1rF,IAGjE7P,EAAS6oG,GAAWN,EAAaH,EAAW7M,EAAW1rF,GAAY,EAIQyI,OAAQA,EAAQg1D,aAAcqX,EACjGpxC,OAASvmN,IAAC,IAAA87Q,EAAA,OAAsE,QAAtEA,EAAK97Q,EAAEtD,OAAOirI,WAAWA,WAAW43D,cAAc,4BAAoB,IAAAu8E,OAAA,EAAjEA,EAAmEtmI,OAAO,EAACh5B,SAAA,EAChGgrE,EAAAA,GAAAA,KAAC//J,GAAK,CAAA+0F,SAAEv8G,GAAE,+BACVsnL,EAAAA,GAAAA,MAAC+H,GAAM,CAAA9yE,SAAA,EACLgrE,EAAAA,GAAAA,KAAC2e,GAAI,CAACr3L,KAAK,WAAWnR,MAAM,OAAOC,OAAO,OAAOuB,UAAU,iBAEzD47Q,EAA4B,IAC5BvzF,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,qCAAoCq9G,UACjDgrE,EAAAA,GAAAA,KAAC2e,GAAI,CAACr3L,KAAK,2BAA2BnR,MAAM,OAAOC,OAAO,OAAOuB,UAAU,uBAIjFooL,EAAAA,GAAAA,MAACywE,GAAO,CAAC74P,UAAU,yBAAyBszO,6BAA8BA,KAAM,EAAOl1O,IAAK+uL,EAAa9vE,SAAA,CAErGpwG,EAAYmvQ,aACR/zF,EAAAA,GAAAA,KAACu0F,GAAM,KACPv0F,EAAAA,GAAAA,KAACw0F,GAAO,CAAC5vQ,YAAaA,KAE5Bo7K,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,mBACX04K,EAAAA,GAAAA,KAACywE,GAAO,CAAC37B,cAAc,SAAStyM,MAAOA,EAAMwyF,SACzC34F,IAAS2jK,EAAAA,GAAAA,KAAC0wE,GAAW,CAAe5zP,MAAOuf,EAAKvf,MAAMk4G,SACrD34F,EAAK23P,UADqB33P,EAAK7lB,OAIpCwpL,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,0BAEN,EAIb,SAAS+sQ,GAAYI,EAAWC,EAAU3N,EAAW1rF,GACnD,MAAM,aAAEqC,GAAiBjC,GAAahgL,MAChCq3Q,EAAU/M,GAAatqQ,IAAI,CAAE8iL,KAAMwoF,IAEzC,OAAI0N,EACM,GAAEC,kBAAyBpuQ,mBAAmBwsQ,EAAQz3Q,MAAMy3Q,EAAQ3yQ,QAAQu9K,OAAkBrC,EAAa,IAAMA,EAAa,KAGhI,GAAEy3F,IAAUz3F,EAAa,IAAMA,EAAa,IACtD,CCpFA,MCWas5F,GAAqB7+Q,IAA6C,IAA5C,MAAE0sB,EAAK,QAAEgnN,EAAO,mBAAEorC,GAAoB9+Q,EACvE,MAAO++Q,EAAcC,IAAmBt0G,EAAAA,EAAAA,UAASh+I,IAC1CyxH,EAAU8gI,IAAev0G,EAAAA,EAAAA,UAAS,OAClCw0G,EAAeC,IAAoBz0G,EAAAA,EAAAA,WAAS,GAC7C00G,GAAkB90E,EAAAA,EAAAA,UAClB50B,EAAWR,IACXzgJ,EAASwhJ,KAEftL,EAAAA,EAAAA,YAAU,KACRq0G,EAAgBtyP,EAAM,GACrB,CAACA,KAEJi+I,EAAAA,EAAAA,YAAU,KACJo0G,GACFI,GAAiB,EACnB,GACC,CAACJ,KAEJp0G,EAAAA,EAAAA,YAAU,KACY,IAAD00G,EAAfH,IAC6D,QAA/DG,EAAAv6Q,SAASm9L,cAAc,gDAAwC,IAAAo9E,GAA/DA,EAAiEnnI,QACjEinI,GAAiB,GACnB,GACC,CAACD,IAEJ,MAoDMI,EAAUC,IAAqB,IAADC,EAAAC,EAC9B,YAAY91Q,KAAK41Q,IACnB7rC,GAAWA,IAEb,MAAMpqL,EAAUy1N,EAAal+P,MAAKxhB,GAAKA,EAAE2H,QAAUu4Q,IACL,IAADG,EAA7C,GAAW,OAAPp2N,QAAO,IAAPA,GAAe,QAARk2N,EAAPl2N,EAASp8B,cAAM,IAAAsyP,GAAO,QAAPC,EAAfD,EAAiBx4Q,aAAK,IAAAy4Q,GAAtBA,EAAwB1uO,WAAW,KAGrC,OAFAiuO,EAAuB,OAAP11N,QAAO,IAAPA,GAAe,QAARo2N,EAAPp2N,EAASp8B,cAAM,IAAAwyP,OAAR,EAAPA,EAAiBxgK,eACjC+/J,EAAmB,OAAP31N,QAAO,IAAPA,OAAO,EAAPA,EAASp8B,QAGvB4xP,GAAsBA,GAAmB,GACzCE,EAAgBtyP,GAChBuyP,EAAY,KAAK,EAGnB,OAAKvyP,GAKHw9J,EAAAA,GAAAA,KAACqwE,GAAM,CAAC14P,UAAU,uBAAuB+9O,kBA9DfngP,IAC1B,MAAM8wI,EAAewuI,EAAal+P,MAAKxhB,GAAKA,EAAE2H,QAAUvH,IACxD,GAAgB,OAAZ8wI,QAAY,IAAZA,GAAAA,EAAcrxB,SAAS3/G,OAGzB,GAFAu/Q,GAAsBA,GAAmB,GACzCG,EAAY1uI,GACI,OAAZA,QAAY,IAAZA,GAAAA,EAAcqmI,YAAY,CAC5B,MAAM+I,EAAmB,CACvBj/Q,GAAK,MAAK6vI,EAAa7vI,GAAG6E,MAAM,KAChCyB,MAAQ,MAAKupI,EAAa7vI,GAAG6E,MAAM,KACnCiM,KAAM7O,GAAE,4BACRu8G,SAAU,IAEZ8/J,EAAgB,CAACW,KAAqBpvI,EAAarxB,UACrD,MACE8/J,EAAgBzuI,EAAarxB,cAZjC,CAiBA,GAAgB,OAAZqxB,QAAY,IAAZA,GAAAA,EAAcvpI,MAAM+pC,WAAW,QAAsB,OAAZw/F,QAAY,IAAZA,GAAAA,EAAcvpI,MAAM+pC,WAAW,OAAqB,OAAZw/F,QAAY,IAAZA,GAAAA,EAAcvpI,MAAM+pC,WAAW,MAMlH,OALAkuO,EAAY,MACZD,EAAgBtyP,GAChBoyP,GAAsBA,GAAmB,GACzCprC,GAAWA,SACXh+D,EAASu6F,GAAatqQ,IAAI,CAAE8iL,KAAM,WAAY/nL,GAAI6vI,EAAavpI,MAAMzB,MAAkB,OAAZgrI,QAAY,IAAZA,GAAAA,EAAcvpI,MAAM+pC,WAAW,OAAS,EAAI,MAIzG,OAAZw/F,QAAY,IAAZA,GAAAA,EAAcvpI,MAAM+pC,WAAW,MACjCwlO,GAAchmI,EAAa1kC,MAAOp3E,GAIpB,OAAZ87G,QAAY,IAAZA,GAAAA,EAAcvpI,MAAM+pC,WAAW,QACjCslO,GAAe9lI,EAAa1kC,OAC5BozK,EAAY,MACZD,EAAgBtyP,GAChBgnN,GAAWA,IACXorC,GAAsBA,GAAmB,GArB3C,CAsBA,EAuBgF9wF,QAAQ,EAAK9uE,UAC3F+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,4BAA4B5B,IAAKm/Q,EAAiB55D,QAzEpD9iN,IACf,GAAc,WAAVA,EAAEjD,IAAkB,CACtB,GAAsC,YAAlCiD,EAAEtD,OAAO8sK,aAAa,QAExB,YADAwnE,GAAWA,KAGb4rC,EAAO58Q,EAAEtD,OAAO8sK,aAAa,YAC/B,GAkEoFhtD,SAAA,CAC/Ei/B,IAAY+rC,EAAAA,GAAAA,KAAC01F,GAAU,CAAC58D,QAASA,IAAMs8D,IAAUl1P,MAAO+zH,EAAS3sI,QAClE04K,EAAAA,GAAAA,KAACywE,GAAO,CAACjuO,MAAOqyP,EAAc//C,cAAc,SAAQ9/G,SAChD34F,IACO0jK,EAAAA,GAAAA,MAAC2wE,GAAW,CAAe5zP,MAAOuf,EAAKvf,MAC1BnF,UAAWkR,IAAA,IAAC,UAAEo2M,EAAS,WAAE/wE,GAAYrlI,EAAA,OAAKo2M,GAAa/wE,EAAa,WAAa,EAAE,EAACl5B,SAAA,EACtGgrE,EAAAA,GAAAA,KAAC21F,GAAY,CAACt5P,KAAMA,KACpB2jK,EAAAA,GAAAA,KAAC41F,GAAY,CAACv5P,KAAMA,KACpB2jK,EAAAA,GAAAA,KAAC61F,GAAW,CAACx5P,KAAMA,MAJIA,EAAK7lB,YAT/BwpL,EAAAA,GAAAA,KAAA,SAkBE,EAIb,SAAS01F,GAAYx/Q,GACnB,MAAMH,GAAMqqM,EAAAA,EAAAA,WACN,YAAEstB,GAAgBooD,GAAU5/Q,EAAOH,GAEzC,OACEgqL,EAAAA,GAAAA,MAAA,aAAiB2tC,EAAa/1N,UAAW,4BAA+B5B,IAAKA,EAAIi/G,SAAA,EAC/EgrE,EAAAA,GAAAA,KAAC2e,GAAI,CAACr3L,KAAK,WAAWlR,OAAO,OAAOD,MAAM,SAC1C6pL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,uBAAsBq9G,SAAE9+G,EAAMgqB,UAGnD,CAEA,SAASy1P,GAAY//P,GAAa,IAAX,KAAEyG,GAAMzG,EAC7B,MAAO,WAAWnW,KAAK4c,EAAK7lB,MAAOwpL,EAAAA,GAAAA,KAAA,OAAAhrE,SAAM34F,EAAK/U,MAChD,CAEA,SAASsuQ,GAAYz1P,GAAa,IAAX,KAAE9D,GAAM8D,EAC7B,MAAO,QAAQ1gB,KAAK4c,EAAK7lB,MAAOupL,EAAAA,GAAAA,MAAA,OAAA/qE,SAAA,CAC7B34F,EAAKu/C,MAAQ,IAAKokH,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,gBAAeq9G,SAAE34F,EAAKglF,QACzD2+E,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,gBAAeq9G,SAAE34F,EAAK/U,OACtB,IAAf+U,EAAKu/C,QAAeokH,EAAAA,GAAAA,KAAA,QAAAhrE,SAAOv8G,GAAE,uBAElC,CAEA,SAASo9Q,GAAWx1P,GAAa,IAAX,KAAEhE,GAAMgE,EAC5B,MAAO,QAAQ5gB,KAAK4c,EAAK7lB,MAAOupL,EAAAA,GAAAA,MAAA,OAAA/qE,SAAA,EAC9BgrE,EAAAA,GAAAA,KAACstF,GAAI,CAAChmQ,KAAM+U,EAAKmjL,KAAMrpM,MAAM,KAAKC,OAAO,KAAKuB,UAAU,UACxDqoL,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,eAAcq9G,SAAE34F,EAAK/U,SAEzC,CCnJA,MA+BA,GA/BaxR,IAA8B,IAADi9Q,EAAA,IAA5B,eAAEgD,EAAiB,IAAIjgR,EACnC,MAAMkgR,EAA2D,QAA5CjD,EAAG3xQ,GAAAA,eAAezC,MAAMlD,MAAMuL,sBAAc,IAAA+rQ,OAAA,EAAzCA,EAA2CkD,YAC5DjvQ,EAAgBkvQ,IAAqB11G,EAAAA,EAAAA,UAASw1G,GAC/CG,EAAc9E,GAAYjwQ,GAAAA,eAAezC,MAAMlD,MAAMkJ,gBAAkBqsQ,GAAUG,OAEvF1wG,EAAAA,EAAAA,YAAU,KAAO,IAAD21G,EACdF,EAA2D,QAA1CE,EAACh1Q,GAAAA,eAAezC,MAAMlD,MAAMuL,sBAAc,IAAAovQ,OAAA,EAAzCA,EAA2CH,WAAW,GACvE,CAACD,IAEJ,MAUM98F,EAAU68F,EAAiBviP,mBAAmBuiP,GAAkBhQ,GAAatqQ,IAAI,CAAE8iL,KAAM,SAE/F,OACEyB,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,OAAMq9G,UACnB+qE,EAAAA,GAAAA,MAACxP,GAAI,CAAClzB,KAAM67B,EAASvhL,UAAU,sBAAqBq9G,SAAA,EAClDgrE,EAAAA,GAAAA,KAAC2e,GAAI,CAACr3L,KAAK,WAAWnR,MAAM,OAAOC,OAAO,OAAOuB,UAAU,cAd3Dw+Q,GAAenvQ,GACVg5K,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,eAEpBqP,GACKg5K,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,aAAYq9G,SAAEhuG,GAAkB,IAAM,SAAMA,IAE7D,SAWD,ECpCK,SAAS,GAAgB5N,EAAGa,GAKzC,OAJA,GAAkBlF,OAAOoiH,eAAiBpiH,OAAOoiH,eAAeliH,OAAS,SAAyBmE,EAAGa,GAEnG,OADAb,EAAE+/G,UAAYl/G,EACPb,CACT,EACO,GAAgBA,EAAGa,EAC5B,CCNA,UACY,ECAZ,GAAeinK,IAAAA,cAAoB,MCD5B,ICSIm1G,GAAY,YACZC,GAAS,SACTC,GAAW,WACXC,GAAU,UACVC,GAAU,UA6FjBC,GAA0B,SAAUtzI,GCzGzB,IAAwBnR,EAAUC,ED4G/C,SAASwkJ,EAAWxgR,EAAOsL,GACzB,IAAI0uH,EAEJA,EAAQkT,EAAiB1tI,KAAKE,KAAMM,EAAOsL,IAAY5L,KACvD,IAGI+gR,EADAC,EAFcp1Q,MAEuBq1Q,WAAa3gR,EAAM2rL,MAAQ3rL,EAAM0gR,OAuB1E,OArBA1mJ,EAAM4mJ,aAAe,KAEjB5gR,EAAM6gR,GACJH,GACFD,EAAgBL,GAChBpmJ,EAAM4mJ,aAAeP,IAErBI,EAAgBH,GAIhBG,EADEzgR,EAAM8gR,eAAiB9gR,EAAM+gR,aACfZ,GAEAC,GAIpBpmJ,EAAMvxH,MAAQ,CACZuE,OAAQyzQ,GAEVzmJ,EAAMgnJ,aAAe,KACdhnJ,CACT,CC1I+CgC,ED0GpBkR,GC1GUnR,ED0GtBykJ,GCzGNlhR,UAAYT,OAAOiI,OAAOk1H,EAAW18H,WAC9Cy8H,EAASz8H,UAAU+L,YAAc0wH,EACjC,GAAeA,EAAUC,GDyIzBwkJ,EAAW7oG,yBAA2B,SAAkC/3K,EAAMg3I,GAG5E,OAFah3I,EAAKihR,IAEJjqI,EAAU5pI,SAAWmzQ,GAC1B,CACLnzQ,OAAQozQ,IAIL,IACT,EAkBA,IAAI7yI,EAASizI,EAAWlhR,UAkPxB,OAhPAiuI,EAAOC,kBAAoB,WACzB9tI,KAAKuhR,cAAa,EAAMvhR,KAAKkhR,aAC/B,EAEArzI,EAAOI,mBAAqB,SAA4BC,GACtD,IAAIszI,EAAa,KAEjB,GAAItzI,IAAcluI,KAAKM,MAAO,CAC5B,IAAIgN,EAAStN,KAAK+I,MAAMuE,OAEpBtN,KAAKM,MAAM6gR,GACT7zQ,IAAWqzQ,IAAYrzQ,IAAWszQ,KACpCY,EAAab,IAGXrzQ,IAAWqzQ,IAAYrzQ,IAAWszQ,KACpCY,EAAaX,GAGnB,CAEA7gR,KAAKuhR,cAAa,EAAOC,EAC3B,EAEA3zI,EAAOO,qBAAuB,WAC5BpuI,KAAKyhR,oBACP,EAEA5zI,EAAO6zI,YAAc,WACnB,IACIC,EAAM11F,EAAO+0F,EADb10G,EAAUtsK,KAAKM,MAAMgsK,QAWzB,OATAq1G,EAAO11F,EAAQ+0F,EAAS10G,EAET,MAAXA,GAAsC,kBAAZA,IAC5Bq1G,EAAOr1G,EAAQq1G,KACf11F,EAAQ3f,EAAQ2f,MAEhB+0F,OAA4B5+Q,IAAnBkqK,EAAQ00G,OAAuB10G,EAAQ00G,OAAS/0F,GAGpD,CACL01F,KAAMA,EACN11F,MAAOA,EACP+0F,OAAQA,EAEZ,EAEAnzI,EAAO0zI,aAAe,SAAsBK,EAAUJ,GAKpD,QAJiB,IAAbI,IACFA,GAAW,GAGM,OAAfJ,EAIF,GAFAxhR,KAAKyhR,qBAEDD,IAAeb,GAAU,CAC3B,GAAI3gR,KAAKM,MAAM8gR,eAAiBphR,KAAKM,MAAM+gR,aAAc,CACvD,IAAInyP,EAAOlvB,KAAKM,MAAMuhR,QAAU7hR,KAAKM,MAAMuhR,QAAQr4N,QAAUgkH,IAAAA,YAAqBxtK,MAI9EkvB,GDzOW,SAAqBA,GACrCA,EAAKmsG,SACd,CCuOoBymJ,CAAY5yP,EACxB,CAEAlvB,KAAK+hR,aAAaH,EACpB,MACE5hR,KAAKgiR,mBAEEhiR,KAAKM,MAAM8gR,eAAiBphR,KAAK+I,MAAMuE,SAAWozQ,IAC3D1gR,KAAK28H,SAAS,CACZrvH,OAAQmzQ,IAGd,EAEA5yI,EAAOk0I,aAAe,SAAsBH,GAC1C,IAAIjjJ,EAAS3+H,KAETisL,EAAQjsL,KAAKM,MAAM2rL,MACnBg2F,EAAYjiR,KAAK4L,QAAU5L,KAAK4L,QAAQq1Q,WAAaW,EAErD3uQ,EAAQjT,KAAKM,MAAMuhR,QAAU,CAACI,GAAa,CAACz0G,IAAAA,YAAqBxtK,MAAOiiR,GACxEC,EAAYjvQ,EAAM,GAClBkvQ,EAAiBlvQ,EAAM,GAEvBmvQ,EAAWpiR,KAAK0hR,cAChBW,EAAeJ,EAAYG,EAASpB,OAASoB,EAASn2F,OAGrD21F,IAAa31F,GAAS55K,GACzBrS,KAAKsiR,aAAa,CAChBh1Q,OAAQszQ,KACP,WACDjiJ,EAAOr+H,MAAMiiR,UAAUL,EACzB,KAIFliR,KAAKM,MAAMkiR,QAAQN,EAAWC,GAC9BniR,KAAKsiR,aAAa,CAChBh1Q,OAAQqzQ,KACP,WACDhiJ,EAAOr+H,MAAMmiR,WAAWP,EAAWC,GAEnCxjJ,EAAOm+E,gBAAgBulE,GAAc,WACnC1jJ,EAAO2jJ,aAAa,CAClBh1Q,OAAQszQ,KACP,WACDjiJ,EAAOr+H,MAAMiiR,UAAUL,EAAWC,EACpC,GACF,GACF,IACF,EAEAt0I,EAAOm0I,YAAc,WACnB,IAAI/gJ,EAASjhI,KAET2hR,EAAO3hR,KAAKM,MAAMqhR,KAClBS,EAAWpiR,KAAK0hR,cAChBQ,EAAYliR,KAAKM,MAAMuhR,aAAUz/Q,EAAYorK,IAAAA,YAAqBxtK,MAEjE2hR,IAAQtvQ,IASbrS,KAAKM,MAAMoiR,OAAOR,GAClBliR,KAAKsiR,aAAa,CAChBh1Q,OAAQuzQ,KACP,WACD5/I,EAAO3gI,MAAMqiR,UAAUT,GAEvBjhJ,EAAO67E,gBAAgBslE,EAAST,MAAM,WACpC1gJ,EAAOqhJ,aAAa,CAClBh1Q,OAAQozQ,KACP,WACDz/I,EAAO3gI,MAAMsiR,SAASV,EACxB,GACF,GACF,KArBEliR,KAAKsiR,aAAa,CAChBh1Q,OAAQozQ,KACP,WACDz/I,EAAO3gI,MAAMsiR,SAASV,EACxB,GAkBJ,EAEAr0I,EAAO4zI,mBAAqB,WACA,OAAtBzhR,KAAKshR,eACPthR,KAAKshR,aAAaxlM,SAClB97E,KAAKshR,aAAe,KAExB,EAEAzzI,EAAOy0I,aAAe,SAAsBO,EAAW5wM,GAIrDA,EAAWjyE,KAAK8iR,gBAAgB7wM,GAChCjyE,KAAK28H,SAASkmJ,EAAW5wM,EAC3B,EAEA47D,EAAOi1I,gBAAkB,SAAyB7wM,GAChD,IAAImvD,EAASphI,KAETouL,GAAS,EAcb,OAZApuL,KAAKshR,aAAe,SAAUt5J,GACxBomE,IACFA,GAAS,EACThtD,EAAOkgJ,aAAe,KACtBrvM,EAAS+1C,GAEb,EAEAhoH,KAAKshR,aAAaxlM,OAAS,WACzBsyG,GAAS,CACX,EAEOpuL,KAAKshR,YACd,EAEAzzI,EAAOivE,gBAAkB,SAAyBxwC,EAASvvB,GACzD/8I,KAAK8iR,gBAAgB/lI,GACrB,IAAI7tH,EAAOlvB,KAAKM,MAAMuhR,QAAU7hR,KAAKM,MAAMuhR,QAAQr4N,QAAUgkH,IAAAA,YAAqBxtK,MAC9E+iR,EAA0C,MAAXz2G,IAAoBtsK,KAAKM,MAAM0iR,eAElE,GAAK9zP,IAAQ6zP,EAAb,CAKA,GAAI/iR,KAAKM,MAAM0iR,eAAgB,CAC7B,IAAIhjQ,EAAQhgB,KAAKM,MAAMuhR,QAAU,CAAC7hR,KAAKshR,cAAgB,CAACpyP,EAAMlvB,KAAKshR,cAC/DY,EAAYliQ,EAAM,GAClBijQ,EAAoBjjQ,EAAM,GAE9BhgB,KAAKM,MAAM0iR,eAAed,EAAWe,EACvC,CAEe,MAAX32G,GACF35J,WAAW3S,KAAKshR,aAAch1G,EAXhC,MAFE35J,WAAW3S,KAAKshR,aAAc,EAelC,EAEAzzI,EAAOpkH,OAAS,WACd,IAAInc,EAAStN,KAAK+I,MAAMuE,OAExB,GAAIA,IAAWmzQ,GACb,OAAO,KAGT,IAAI1xI,EAAc/uI,KAAKM,MACnB8+G,EAAW2vB,EAAY3vB,SAgBvB8jK,GAfMn0I,EAAYoyI,GACFpyI,EAAYsyI,aACXtyI,EAAYqyI,cACnBryI,EAAYiyI,OACbjyI,EAAYk9C,MACbl9C,EAAY4yI,KACT5yI,EAAYu9B,QACLv9B,EAAYi0I,eACnBj0I,EAAYyzI,QACTzzI,EAAY0zI,WACb1zI,EAAYwzI,UACfxzI,EAAY2zI,OACT3zI,EAAY4zI,UACb5zI,EAAY6zI,SACb7zI,EAAY8yI,QE/YhB,SAAuCniR,EAAQyvI,GAC5D,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAC5B,IAEIC,EAAKJ,EAFLD,EAAS,CAAC,EACV8vI,EAAajwI,OAAOyH,KAAKlH,GAE7B,IAAKH,EAAI,EAAGA,EAAI6vI,EAAW3vI,OAAQF,IACjCI,EAAMyvI,EAAW7vI,GACb4vI,EAAS5kI,QAAQ5K,IAAQ,IAC7BL,EAAOK,GAAOD,EAAOC,IAEvB,OAAOL,CACT,CFqYqB+vI,CAA8BN,EAAa,CAAC,WAAY,KAAM,eAAgB,gBAAiB,SAAU,QAAS,OAAQ,UAAW,iBAAkB,UAAW,aAAc,YAAa,SAAU,YAAa,WAAY,aAEjP,OAGEu8B,IAAAA,cAAoB63G,GAAuBlsG,SAAU,CACnD/vK,MAAO,MACc,oBAAbk4G,EAA0BA,EAAS9xG,EAAQ41Q,GAAc53G,IAAAA,aAAmBA,IAAAA,SAAe83G,KAAKhkK,GAAW8jK,GAEzH,EAEOpC,CACT,CAlT8B,CAkT5Bx1G,IAAAA,WA+LF,SAASnpH,KAAQ,CA7LjB2+N,GAAWvvF,YAAc4xF,GACzBrC,GAAWp8I,UA0LP,CAAC,EAILo8I,GAAWn8I,aAAe,CACxBw8I,IAAI,EACJE,cAAc,EACdD,eAAe,EACfJ,QAAQ,EACR/0F,OAAO,EACP01F,MAAM,EACNa,QAASrgO,GACTsgO,WAAYtgO,GACZogO,UAAWpgO,GACXugO,OAAQvgO,GACRwgO,UAAWxgO,GACXygO,SAAUzgO,IAEZ2+N,GAAWL,UAAYA,GACvBK,GAAWJ,OAASA,GACpBI,GAAWH,SAAWA,GACtBG,GAAWF,QAAUA,GACrBE,GAAWD,QAAUA,GACrB,YGhnBA,IAAIl1I,GAAY,CAAC,MAAO,YAAa,kBAAmB,YAAa,YAAa,WAAY,YAC9F,SAASzsI,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAAS+4H,GAAyB74H,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAAkEC,EAAKJ,EAAnED,EACzF,SAAuCI,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAA2DC,EAAKJ,EAA5DD,EAAS,CAAC,EAAO8vI,EAAajwI,OAAOyH,KAAKlH,GAAqB,IAAKH,EAAI,EAAGA,EAAI6vI,EAAW3vI,OAAQF,IAAOI,EAAMyvI,EAAW7vI,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,CAAQ,CADhN+vI,CAA8B3vI,EAAQyvI,GAAuB,GAAIhwI,OAAO2H,sBAAuB,CAAE,IAAIgmL,EAAmB3tL,OAAO2H,sBAAsBpH,GAAS,IAAKH,EAAI,EAAGA,EAAIutL,EAAiBrtL,OAAQF,IAAOI,EAAMmtL,EAAiBvtL,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,GAAkBR,OAAOS,UAAUmkD,qBAAqBjkD,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,GAAQ,CAAE,OAAOL,CAAQ,CAE3e,SAAS4wI,GAAQ3hH,EAAQ4hH,GAAkB,IAAIvpI,EAAOzH,OAAOyH,KAAK2nB,GAAS,GAAIpvB,OAAO2H,sBAAuB,CAAE,IAAIspI,EAAUjxI,OAAO2H,sBAAsBynB,GAAS4hH,IAAmBC,EAAUA,EAAQ9mI,QAAO,SAAU+mI,GAAO,OAAOlxI,OAAOqO,yBAAyB+gB,EAAQ8hH,GAAKppI,UAAY,KAAKL,EAAKC,KAAK9G,MAAM6G,EAAMwpI,EAAU,CAAE,OAAOxpI,CAAM,CACpV,SAAS0pI,GAAchxI,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAS,MAAQF,UAAUD,GAAKC,UAAUD,GAAK,CAAC,EAAGA,EAAI,EAAI2wI,GAAQ/wI,OAAOO,IAAS,GAAIkI,SAAQ,SAAUjI,GAAO4wI,GAAgBjxI,EAAQK,EAAKD,EAAOC,GAAO,IAAKR,OAAOwO,0BAA4BxO,OAAOyO,iBAAiBtO,EAAQH,OAAOwO,0BAA0BjO,IAAWwwI,GAAQ/wI,OAAOO,IAASkI,SAAQ,SAAUjI,GAAOR,OAAO6H,eAAe1H,EAAQK,EAAKR,OAAOqO,yBAAyB9N,EAAQC,GAAO,GAAI,CAAE,OAAOL,CAAQ,CACzf,SAASixI,GAAgB7gH,EAAK/vB,EAAKuH,GAAiK,OAApJvH,KAAO+vB,EAAOvwB,OAAO6H,eAAe0oB,EAAK/vB,EAAK,CAAEuH,MAAOA,EAAOD,YAAY,EAAMwG,cAAc,EAAMC,UAAU,IAAkBgiB,EAAI/vB,GAAOuH,EAAgBwoB,CAAK,CAMhN,IAAIg1G,GAAY4L,GAAcA,GAAc,CAAC,EAAGwwI,GAAWp8I,WAAY,CAAC,EAAG,CACzEtlB,SAAUqY,KAAAA,UAAoB,CAACA,KAAAA,QAAkBA,KAAAA,MAAiBA,KAAAA,OAClEptH,IAAKshL,GACL03F,UAAW5rJ,KAAAA,OACX6rJ,gBAAiB7rJ,KAAAA,OACjB11H,UAAW01H,KAAAA,OACX4zD,UAAW5zD,KAAAA,OACX4Q,SAAU5Q,KAAAA,UAAoB,CAACA,KAAAA,OAAkBA,KAAAA,OAAkBA,KAAAA,SAEjEkN,GAAe2L,GAAcA,GAAc,CAAC,EAAGwwI,GAAWn8I,cAAe,CAAC,EAAG,CAC/E2nC,QAASsf,GACTo1F,QAAQ,EACR/0F,OAAO,EACP01F,MAAM,EACN,IAAM,IAER,SAAS4B,GAAKjjR,GACZ,IAAIH,GAAMqqM,EAAAA,EAAAA,QAAO,MACbnY,EAAa/xL,EAAM+J,IACrBuvC,OAAqB,IAAfy4I,EAAwB,MAAQA,EACtCmxF,EAAmBljR,EAAM+iR,UACzBA,OAAiC,IAArBG,EAA8B,OAASA,EACnDC,EAAwBnjR,EAAMgjR,gBAC9BA,OAA4C,IAA1BG,EAAmC,OAASA,EAC9D1hR,EAAYzB,EAAMyB,UAClBspL,EAAY/qL,EAAM+qL,UAClBjsE,EAAW9+G,EAAM8+G,SACjBskK,EAAkBpjR,EAAM+nI,SACxBA,OAA+B,IAApBq7I,EAA6BvjR,EAAMujR,EAC9CjtD,EAAal+F,GAAyBj4H,EAAOqrI,IAC3Cg4I,ExYuBC,SAAcj0P,EAAK9oB,GAKxB,IAJA,IAEIjH,EAFAikR,EAAWn/Q,MAAMK,QAAQ8B,GAAQA,EAAO,CAACA,GACzCnH,EAASmkR,EAASnkR,OAElB8lC,EAAS,CAAC,EACP9lC,EAAS,GAGd8lC,EADA5lC,EAAMikR,EADNnkR,GAAU,IAEIiwB,EAAI/vB,GAEpB,OAAO4lC,CACT,CwYlCwBk2B,CAAK60E,GAAc,CACvC3L,aAAcA,IACb8xF,GAAa5qC,IACZq3F,EAAahlM,GAAKu4I,EAAY5qC,IAClC,OAAoBvgB,IAAAA,cAAoBw1G,GAAY5hR,GAAS,CAC3D2iR,QAASx5I,GACRs7I,IAAkB,SAAUr2Q,GAC7B,IAAI4vK,EAAsB,YAAX5vK,EACXuxC,EAAUusI,GAAgBxsI,KAAW78C,EAAWshR,EAAWnmG,GAAYomG,GAAkBj4F,GAC7F,OAAoB/f,IAAAA,cAAoB1xH,EAAK16C,GAAS,CACpD6C,UAAW88C,GACVqkO,EAAY,CACb/iR,IAAKkoI,IACHjpB,EACN,GACF,CACAmkK,GAAK7+I,UAAYA,GACjB6+I,GAAK5+I,aAAeA,GACpB,YC5DA,SAASuO,GAAQxjH,GAAkC,OAAOwjH,GAAU,mBAAqB3vI,QAAU,iBAAmBA,OAAOW,SAAW,SAAUwrB,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAO,mBAAqBnsB,QAAUmsB,EAAI/jB,cAAgBpI,QAAUmsB,IAAQnsB,OAAO3D,UAAY,gBAAkB8vB,CAAK,EAAGwjH,GAAQxjH,EAAM,CAC/U,IAAIi8G,GAAY,CAAC,YAAa,WAAY,SAAU,OAAQ,SAAU,SAAU,qBAAsB,kBAAmB,iBAAkB,YAAa,kBAAmB,MAAO,YAAa,YAAa,WAAY,oBAAqB,WAAY,OAAQ,aAAc,aAC/Q,SAASzsI,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAASqnM,GAAmBr3K,GAAO,OAInC,SAA4BA,GAAO,GAAI/qB,MAAMK,QAAQ0qB,GAAM,OAAOs3K,GAAkBt3K,EAAM,CAJhDu3K,CAAmBv3K,IAG7D,SAA0Bw3K,GAAQ,GAAsB,qBAAXzjM,QAAmD,MAAzByjM,EAAKzjM,OAAOW,WAA2C,MAAtB8iM,EAAK,cAAuB,OAAOviM,MAAMkB,KAAKqhM,EAAO,CAHxFC,CAAiBz3K,IAEtF,SAAqChsB,EAAGo8L,GAAU,IAAKp8L,EAAG,OAAQ,GAAiB,kBAANA,EAAgB,OAAOsjM,GAAkBtjM,EAAGo8L,GAAS,IAAIt8L,EAAInE,OAAOS,UAAU4F,SAAS1F,KAAK0D,GAAGiC,MAAM,GAAI,GAAc,WAANnC,GAAkBE,EAAEmI,cAAarI,EAAIE,EAAEmI,YAAY+F,MAAM,GAAU,QAANpO,GAAqB,QAANA,EAAa,OAAOmB,MAAMkB,KAAKnC,GAAI,GAAU,cAANF,GAAqB,2CAA2CuG,KAAKvG,GAAI,OAAOwjM,GAAkBtjM,EAAGo8L,EAAS,CAFjUsH,CAA4B13K,IAC1H,WAAgC,MAAM,IAAIjmB,UAAU,uIAAyI,CAD3D49L,EAAsB,CAKxJ,SAASL,GAAkBt3K,EAAKe,IAAkB,MAAPA,GAAeA,EAAMf,EAAI/vB,UAAQ8wB,EAAMf,EAAI/vB,QAAQ,IAAK,IAAIF,EAAI,EAAG4iG,EAAO,IAAI19F,MAAM8rB,GAAMhxB,EAAIgxB,EAAKhxB,IAAO4iG,EAAK5iG,GAAKiwB,EAAIjwB,GAAM,OAAO4iG,CAAM,CACtL,SAASo2B,GAAyB74H,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAAkEC,EAAKJ,EAAnED,EACzF,SAAuCI,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAA2DC,EAAKJ,EAA5DD,EAAS,CAAC,EAAO8vI,EAAajwI,OAAOyH,KAAKlH,GAAqB,IAAKH,EAAI,EAAGA,EAAI6vI,EAAW3vI,OAAQF,IAAOI,EAAMyvI,EAAW7vI,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,CAAQ,CADhN+vI,CAA8B3vI,EAAQyvI,GAAuB,GAAIhwI,OAAO2H,sBAAuB,CAAE,IAAIgmL,EAAmB3tL,OAAO2H,sBAAsBpH,GAAS,IAAKH,EAAI,EAAGA,EAAIutL,EAAiBrtL,OAAQF,IAAOI,EAAMmtL,EAAiBvtL,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,GAAkBR,OAAOS,UAAUmkD,qBAAqBjkD,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,GAAQ,CAAE,OAAOL,CAAQ,CAG3e,SAASu0I,GAAkBv0I,EAAQgB,GAAS,IAAK,IAAIf,EAAI,EAAGA,EAAIe,EAAMb,OAAQF,IAAK,CAAE,IAAI45H,EAAa74H,EAAMf,GAAI45H,EAAWlyH,WAAakyH,EAAWlyH,aAAc,EAAOkyH,EAAW1rH,cAAe,EAAU,UAAW0rH,IAAYA,EAAWzrH,UAAW,GAAMvO,OAAO6H,eAAe1H,EAAQ65H,EAAWx5H,IAAKw5H,EAAa,CAAE,CAG5T,SAASoS,GAAgB/nI,EAAGa,GAA6I,OAAxIknI,GAAkBpsI,OAAOoiH,eAAiBpiH,OAAOoiH,eAAeliH,OAAS,SAAyBmE,EAAGa,GAAsB,OAAjBb,EAAE+/G,UAAYl/G,EAAUb,CAAG,EAAU+nI,GAAgB/nI,EAAGa,EAAI,CACvM,SAASyvI,GAAaC,GAAW,IAAIC,EAGrC,WAAuC,GAAuB,qBAAZC,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,oBAAVpmB,MAAsB,OAAO,EAAM,IAAsF,OAAhF5nH,QAAQvG,UAAUwG,QAAQtG,KAAKm0I,QAAQC,UAAU/tI,QAAS,IAAI,WAAa,MAAY,CAAM,CAAE,MAAOvD,GAAK,OAAO,CAAO,CAAE,CAHvQwxI,GAA6B,OAAO,WAAkC,IAAsC7uG,EAAlC8uG,EAAQC,GAAgBP,GAAkB,GAAIC,EAA2B,CAAE,IAAIO,EAAYD,GAAgBt0I,MAAM2L,YAAa45B,EAAS0uG,QAAQC,UAAUG,EAAO70I,UAAW+0I,EAAY,MAAShvG,EAAS8uG,EAAMt0I,MAAMC,KAAMR,WAAc,OACpX,SAAoCwD,EAAMlD,GAAQ,GAAIA,IAA2B,WAAlBozI,GAAQpzI,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIyJ,UAAU,4DAA+D,OAAOirI,GAAuBxxI,EAAO,CAD4Fw3H,CAA2Bx6H,KAAMulC,EAAS,CAAG,CAExa,SAASivG,GAAuBxxI,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIu3H,eAAe,6DAAgE,OAAOv3H,CAAM,CAErK,SAASsxI,GAAgB9wI,GAA+J,OAA1J8wI,GAAkBn1I,OAAOoiH,eAAiBpiH,OAAOoF,eAAelF,OAAS,SAAyBmE,GAAK,OAAOA,EAAE+/G,WAAapkH,OAAOoF,eAAef,EAAI,EAAU8wI,GAAgB9wI,EAAI,CACnN,SAAS0sI,GAAQ3hH,EAAQ4hH,GAAkB,IAAIvpI,EAAOzH,OAAOyH,KAAK2nB,GAAS,GAAIpvB,OAAO2H,sBAAuB,CAAE,IAAIspI,EAAUjxI,OAAO2H,sBAAsBynB,GAAS4hH,IAAmBC,EAAUA,EAAQ9mI,QAAO,SAAU+mI,GAAO,OAAOlxI,OAAOqO,yBAAyB+gB,EAAQ8hH,GAAKppI,UAAY,KAAKL,EAAKC,KAAK9G,MAAM6G,EAAMwpI,EAAU,CAAE,OAAOxpI,CAAM,CACpV,SAAS0pI,GAAchxI,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAS,MAAQF,UAAUD,GAAKC,UAAUD,GAAK,CAAC,EAAGA,EAAI,EAAI2wI,GAAQ/wI,OAAOO,IAAS,GAAIkI,SAAQ,SAAUjI,GAAO4wI,GAAgBjxI,EAAQK,EAAKD,EAAOC,GAAO,IAAKR,OAAOwO,0BAA4BxO,OAAOyO,iBAAiBtO,EAAQH,OAAOwO,0BAA0BjO,IAAWwwI,GAAQ/wI,OAAOO,IAASkI,SAAQ,SAAUjI,GAAOR,OAAO6H,eAAe1H,EAAQK,EAAKR,OAAOqO,yBAAyB9N,EAAQC,GAAO,GAAI,CAAE,OAAOL,CAAQ,CACzf,SAASixI,GAAgB7gH,EAAK/vB,EAAKuH,GAAiK,OAApJvH,KAAO+vB,EAAOvwB,OAAO6H,eAAe0oB,EAAK/vB,EAAK,CAAEuH,MAAOA,EAAOD,YAAY,EAAMwG,cAAc,EAAMC,UAAU,IAAkBgiB,EAAI/vB,GAAOuH,EAAgBwoB,CAAK,CAShN,IAAIg1G,GAAY,CACdtlB,SAAUqY,KAAAA,UAAoB,CAACA,KAAAA,KAAgBA,KAAAA,OAAiBb,WAChEitJ,gBAAiBpsJ,KAAAA,OACjBi/D,UAAWj/D,KAAAA,OACXqsJ,gBAAiBrsJ,KAAAA,OACjBssJ,eAAgBtsJ,KAAAA,OAChBusJ,UAAWvsJ,KAAAA,KACXptH,IAAKshL,GACLuC,OAAQz2D,KAAAA,KACR4zD,UAAW5zD,KAAAA,OACX7vE,OAAQ6vE,KAAAA,QAAkBA,KAAAA,QAC1B4rE,mBAAoB5rE,KAAAA,MACpBv1C,KAAMu1C,KAAAA,KACN4M,UAAWqnD,GACXpsL,OAAQosL,GAAe90D,WACvBigE,UAAWp/D,KAAAA,MACX2/D,SAAU3/D,KAAAA,OACVwsJ,kBAAmBxsJ,KAAAA,UAAoB,CAACA,KAAAA,OAAkBg0D,KAC1Dy4F,SAAUzsJ,KAAAA,KACV0sJ,KAAM1sJ,KAAAA,KACNwM,WAAYxM,KAAAA,MAAgB8rJ,GAAK7+I,YAE/BC,GAAe,CACjBs/I,kBAAmB,eACnBvtF,UAAW,OACXstF,WAAW,EACX91F,QAAQ,EACRtmI,OAAQ,CAAC,EAAG,GACZs6B,MAAM,EACNmiD,UAAW,OACXwyD,UAAW,GACXqtF,SAhCF,WAAiB,EAiCfC,MAAM,EACNlgJ,WAAYqM,GAAc,CAAC,EAAGizI,GAAK5+I,eAEjCy/I,GAA6B,SAAU52I,IArD3C,SAAmBnR,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI/yH,UAAU,sDAAyD8yH,EAASz8H,UAAYT,OAAOiI,OAAOk1H,GAAcA,EAAW18H,UAAW,CAAE+L,YAAa,CAAEzE,MAAOm1H,EAAU3uH,UAAU,EAAMD,cAAc,KAAWtO,OAAO6H,eAAeq1H,EAAU,YAAa,CAAE3uH,UAAU,IAAc4uH,GAAYiP,GAAgBlP,EAAUC,EAAa,CAsDjcC,CAAU6nJ,EAAe52I,GACzB,IAxDoBpU,EAAaC,EAAYC,EAwDzCob,EAASZ,GAAaswI,GAC1B,SAASA,EAAc9jR,GACrB,IAAIg6H,EAUJ,OAtEJ,SAAyBvwH,EAAUqvH,GAAe,KAAMrvH,aAAoBqvH,GAAgB,MAAM,IAAI7vH,UAAU,oCAAwC,CA6DpJ8wH,CAAgBr6H,KAAMokR,IACtB9pJ,EAAQoa,EAAO50I,KAAKE,KAAMM,IACpB+jR,cAAgB/pJ,EAAM+pJ,cAAchlR,KAAKm1I,GAAuBla,IACtEA,EAAMgqJ,cAAgBhqJ,EAAMgqJ,cAAcjlR,KAAKm1I,GAAuBla,IACtEA,EAAM2yD,OAAS3yD,EAAM2yD,OAAO5tL,KAAKm1I,GAAuBla,IACxDA,EAAM4pJ,SAAW5pJ,EAAM4pJ,SAAS7kR,KAAKm1I,GAAuBla,IAC5DA,EAAMvxH,MAAQ,CACZmlL,OAAQ5tL,EAAM4tL,QAET5zD,CACT,CA+IA,OApNoBlB,EAsEPgrJ,EAtEoB/qJ,EAsEL,CAAC,CAC3B15H,IAAK,qBACLuH,MAAO,WACDlH,KAAKukR,UAAYvkR,KAAKukR,SAASj4I,YAActsI,KAAKukR,SAASj4I,WAAW,IAAMtsI,KAAKukR,SAASj4I,WAAW,GAAG8L,OAC1Gp4I,KAAKukR,SAASj4I,WAAW,GAAG8L,OAEhC,GACC,CACDz4I,IAAK,WACLuH,MAAO,WACLlH,KAAKM,MAAM4jR,WACXlkR,KAAK28H,SAAS,CACZuxD,QAAQ,GAEZ,GACC,CACDvuL,IAAK,gBACLuH,MAAO,WACL,OAAOlH,KAAKyyO,UACd,GACC,CACD9yO,IAAK,mBACLuH,MAAO,WACL,OAAOylL,GAAU3sL,KAAKM,MAAM+jI,UAC9B,GACC,CACD1kI,IAAK,SACLuH,MAAO,SAAgB/G,GACrBH,KAAKukR,SAAWpkR,CAClB,GACC,CACDR,IAAK,gBACLuH,MAAO,SAAuBgoB,GAC5BlvB,KAAKyyO,WAA6B,kBAATvjN,EAAoBy9J,GAAUz9J,GAAQA,CACjE,GACC,CACDvvB,IAAK,iBACLuH,MAAO,WACL,IAAI6nI,EAAc/uI,KAAKM,MACrB+qL,EAAYt8C,EAAYs8C,UACxBjsE,EAAW2vB,EAAY3vB,SACvB8uE,EAASn/C,EAAYm/C,OACrBhsG,EAAO6sD,EAAY7sD,KAEnBt6B,GADSmnF,EAAYzvI,OACZyvI,EAAYnnF,QACrBy7I,EAAqBt0D,EAAYs0D,mBACjCygF,EAAkB/0I,EAAY+0I,gBAC9BU,EAAkBz1I,EAAYg1I,eAC9BC,EAAYj1I,EAAYi1I,UACxBS,EAAmB11I,EAAY80I,gBAC/Bx5Q,EAAM0kI,EAAY1kI,IAElBwsL,GADY9nD,EAAY1K,UACZ0K,EAAY8nD,WACxBO,EAAWroD,EAAYqoD,SACvB6sF,EAAoBl1I,EAAYk1I,kBAEhCE,GADWp1I,EAAYm1I,SAChBn1I,EAAYo1I,MACnBlgJ,EAAa8K,EAAY9K,WACzByyD,EAAY3nD,EAAY2nD,UACxBxF,EAAQ34D,GAAyBwW,EAAapD,IAC5Co4I,EAAiB34F,GAAgBxsI,KAAW,QAAS4lO,GAAkBn5F,GACvEw4F,EAAkBz4F,GAAgBxsI,KAAW6lO,EAAkBX,EAAkB,GAAGp7Q,OAAOo7Q,EAAiB,SAAW,IAAK9jR,KAAKM,MAAM+qL,WACvIq5F,EAAgB7tF,EAAUpmL,KAAI,SAAUvK,GAC1C,OAAOA,EAAEwL,IACX,IACIizQ,EAAgB,CAAC,CACnBjzQ,KAAM,SACN2/B,QAAS,CACPuW,OAAQA,IAET,CACDl2C,KAAM,OACNknL,QAAS12G,EACT7wC,QAAS,CACPgyJ,mBAAoBA,IAErB,CACD3xL,KAAM,kBACN2/B,QAAS,CACPqrJ,SAAUunF,KAEX36Q,QAAO,SAAUpD,GAClB,OAAQw+Q,EAAchlP,SAASx5B,EAAEwL,KACnC,IACIkzQ,EAAoB,GAAGl8Q,OAAOm+L,GAAmB89E,GAAgB99E,GAAmBhQ,IACpFguF,EAAmBv0I,GAAcA,GAAcA,GAAc,CAAC,EAAGizI,GAAK5+I,cAAeV,GAAa,CAAC,EAAG,CACxGo/I,UAAWc,EAAOlgJ,EAAWo/I,UAAY,GACzC/2G,QAAS63G,EAAOlgJ,EAAWqoC,QAAU,IAEvC,OAAoBhB,IAAAA,cAAoBi4G,GAAMrkR,GAAS,CAAC,EAAG2lR,EAAkB3zF,EAAO,CAClF,GAAMhD,EACN00F,SAAU5iR,KAAKkkR,SACf75Q,IAAKA,IACUihK,IAAAA,cAAoBw5G,GAAa,CAChDn/E,iBAAkB3lM,KAAKyyO,WACvB57C,UAAW+tF,EACXluF,UAAWA,EACXU,SAAUA,IACT,SAAUl3L,GACX,IAAIC,EAAMD,EAAKC,IACbwB,EAAQzB,EAAKyB,MACbojR,EAAkB7kR,EAAKw2L,UACvBwO,EAAoBhlM,EAAKglM,kBACzB0B,EAAa1mM,EAAK0mM,WAClBpiH,EAAStkF,EAAKskF,OAChB,OAAoB8mF,IAAAA,cAAoB,MAAO,CAC7CnrK,IAAKA,EACLwB,MAAOA,EACPI,UAAW8hR,EACX,wBAAyBkB,EACzB,+BAAgC7/E,EAAoB,YAAS9iM,GACxC,oBAAbg9G,EAA0BA,EAAS,CAC3C56B,OAAQA,IACL46B,GAAW4kK,GAA0B14G,IAAAA,cAAoB,OAAQ,CACpEnrK,IAAKymM,EAAWzmM,IAChB4B,UAAWgiR,EACXpiR,MAAOilM,EAAWjlM,QAEtB,IACF,GACC,CACDhC,IAAK,SACLuH,MAAO,WAEL,OADAlH,KAAKqkR,cAAcrkR,KAAKM,MAAMhB,QAC1BU,KAAK+I,MAAMmlL,OACmB,WAAzBluL,KAAKM,MAAM+jI,UAAyBrkI,KAAKglR,iBAAgCx3G,IAAAA,aAAoClC,IAAAA,cAAoB,MAAO,CAC7InrK,IAAKH,KAAKitL,QACTjtL,KAAKglR,kBAAmBhlR,KAAKilR,oBAE3B,IACT,IAxM2C3rJ,EAyMzC,CAAC,CACH35H,IAAK,2BACLuH,MAAO,SAAkC5G,EAAOyI,GAC9C,OAAIzI,EAAM4tL,SAAWnlL,EAAMmlL,OAClB,CACLA,OAAQ5tL,EAAM4tL,QAGX,IACT,IAlN8D70D,GAAYwa,GAAkBza,EAAYx5H,UAAWy5H,GAAiBC,GAAaua,GAAkBza,EAAaE,GAAcn6H,OAAO6H,eAAeoyH,EAAa,YAAa,CAAE1rH,UAAU,IAoNrP02Q,CACT,CA/JiC,CA+J/B94G,IAAAA,WACF84G,GAAc1/I,UAAYA,GAC1B0/I,GAAcz/I,aAAeA,GAC7B,YCrOA,SAASzlI,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAAS0zI,GAAQxjH,GAAkC,OAAOwjH,GAAU,mBAAqB3vI,QAAU,iBAAmBA,OAAOW,SAAW,SAAUwrB,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAO,mBAAqBnsB,QAAUmsB,EAAI/jB,cAAgBpI,QAAUmsB,IAAQnsB,OAAO3D,UAAY,gBAAkB8vB,CAAK,EAAGwjH,GAAQxjH,EAAM,CAE/U,SAASmkH,GAAkBv0I,EAAQgB,GAAS,IAAK,IAAIf,EAAI,EAAGA,EAAIe,EAAMb,OAAQF,IAAK,CAAE,IAAI45H,EAAa74H,EAAMf,GAAI45H,EAAWlyH,WAAakyH,EAAWlyH,aAAc,EAAOkyH,EAAW1rH,cAAe,EAAU,UAAW0rH,IAAYA,EAAWzrH,UAAW,GAAMvO,OAAO6H,eAAe1H,EAAQ65H,EAAWx5H,IAAKw5H,EAAa,CAAE,CAG5T,SAASoS,GAAgB/nI,EAAGa,GAA6I,OAAxIknI,GAAkBpsI,OAAOoiH,eAAiBpiH,OAAOoiH,eAAeliH,OAAS,SAAyBmE,EAAGa,GAAsB,OAAjBb,EAAE+/G,UAAYl/G,EAAUb,CAAG,EAAU+nI,GAAgB/nI,EAAGa,EAAI,CACvM,SAASyvI,GAAaC,GAAW,IAAIC,EAGrC,WAAuC,GAAuB,qBAAZC,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,oBAAVpmB,MAAsB,OAAO,EAAM,IAAsF,OAAhF5nH,QAAQvG,UAAUwG,QAAQtG,KAAKm0I,QAAQC,UAAU/tI,QAAS,IAAI,WAAa,MAAY,CAAM,CAAE,MAAOvD,GAAK,OAAO,CAAO,CAAE,CAHvQwxI,GAA6B,OAAO,WAAkC,IAAsC7uG,EAAlC8uG,EAAQC,GAAgBP,GAAkB,GAAIC,EAA2B,CAAE,IAAIO,EAAYD,GAAgBt0I,MAAM2L,YAAa45B,EAAS0uG,QAAQC,UAAUG,EAAO70I,UAAW+0I,EAAY,MAAShvG,EAAS8uG,EAAMt0I,MAAMC,KAAMR,WAAc,OACpX,SAAoCwD,EAAMlD,GAAQ,GAAIA,IAA2B,WAAlBozI,GAAQpzI,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIyJ,UAAU,4DAA+D,OAAOirI,GAAuBxxI,EAAO,CAD4Fw3H,CAA2Bx6H,KAAMulC,EAAS,CAAG,CAExa,SAASivG,GAAuBxxI,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIu3H,eAAe,6DAAgE,OAAOv3H,CAAM,CAErK,SAASsxI,GAAgB9wI,GAA+J,OAA1J8wI,GAAkBn1I,OAAOoiH,eAAiBpiH,OAAOoF,eAAelF,OAAS,SAAyBmE,GAAK,OAAOA,EAAE+/G,WAAapkH,OAAOoF,eAAef,EAAI,EAAU8wI,GAAgB9wI,EAAI,CAK5M,IAAIkhI,GAAY,CACrBtlB,SAAUqY,KAAAA,UAAoB,CAACA,KAAAA,KAAgBA,KAAAA,OAC/Ci/D,UAAWj/D,KAAAA,M1YwIiB,CAAC,aAAc,OAAQ,WAAY,YAAa,MAAO,UAAW,cAAe,QAAS,YAAa,aAAc,SAAU,eAAgB,WAAY,OAAQ,e0YvI/Ln4H,OAAQosL,GAAe90D,WACvByN,UAAWqnD,GACXwC,OAAQz2D,KAAAA,KACR+mB,SAAU/mB,KAAAA,KACVusJ,UAAWvsJ,KAAAA,KACXwsJ,kBAAmBxsJ,KAAAA,UAAoB,CAACA,KAAAA,OAAkBg0D,KAC1D1pL,UAAW01H,KAAAA,OACXytJ,eAAgBztJ,KAAAA,OAChBssJ,eAAgBtsJ,KAAAA,OAChBosJ,gBAAiBpsJ,KAAAA,OACjB4zD,UAAW5zD,KAAAA,OACX42D,OAAQ52D,KAAAA,KACR0tJ,SAAU1tJ,KAAAA,KACVqsJ,gBAAiBrsJ,KAAAA,OACjBx7C,MAAOw7C,KAAAA,UAAoB,CAACA,KAAAA,MAAgB,CAC1CqwE,KAAMrwE,KAAAA,OACNkvE,KAAMlvE,KAAAA,SACJA,KAAAA,SACJo/D,UAAWp/D,KAAAA,MACX2/D,SAAU3/D,KAAAA,OACV7vE,OAAQ6vE,KAAAA,QAAkBA,KAAAA,QAC1B4Q,SAAU5Q,KAAAA,UAAoB,CAACA,KAAAA,KAAgBA,KAAAA,OAAkBA,KAAAA,SACjEkzD,QAASlzD,KAAAA,OACT0sJ,KAAM1sJ,KAAAA,KACNv1C,KAAMu1C,KAAAA,MAEJ2tJ,GAAiB,CACnBt9E,KAAM,EACNnB,KAAM,IAEJhiE,GAAe,CACjBupD,QAAQ,EACR81F,WAAW,EACXmB,UAAU,EACVlpM,MAAOmpM,GACP/2F,OAAQ,WAAmB,EAC3B1D,QAAS,QACTw5F,MAAM,GAER,SAASkB,GAAezhO,EAAS0hO,GAC/B,OAAOA,IAAgB1hO,IAAY0hO,GAAeA,EAAYh3N,SAAS1K,GACzE,CACA,SAAS2hO,GAAgB3hO,GACvB,IAAI4hO,EAAehmR,UAAUC,OAAS,QAAsB2C,IAAjB5C,UAAU,GAAmBA,UAAU,GAAK,GACvF,OAAOgmR,GAAgBA,EAAa/lR,QAAU+lR,EAAal8Q,QAAO,SAAUm8Q,GAC1E,OAAOJ,GAAezhO,EAAS6hO,EACjC,IAAG,EACL,CACA,IAAIC,GAAqC,SAAUl4I,IA9DnD,SAAmBnR,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI/yH,UAAU,sDAAyD8yH,EAASz8H,UAAYT,OAAOiI,OAAOk1H,GAAcA,EAAW18H,UAAW,CAAE+L,YAAa,CAAEzE,MAAOm1H,EAAU3uH,UAAU,EAAMD,cAAc,KAAWtO,OAAO6H,eAAeq1H,EAAU,YAAa,CAAE3uH,UAAU,IAAc4uH,GAAYiP,GAAgBlP,EAAUC,EAAa,CA+DjcC,CAAUmpJ,EAAuBl4I,GACjC,IAjEoBpU,EAAaC,EAAYC,EAiEzCob,EAASZ,GAAa4xI,GAC1B,SAASA,EAAsBplR,GAC7B,IAAIg6H,EAqBJ,OA1FJ,SAAyBvwH,EAAUqvH,GAAe,KAAMrvH,aAAoBqvH,GAAgB,MAAM,IAAI7vH,UAAU,oCAAwC,CAsEpJ8wH,CAAgBr6H,KAAM0lR,IACtBprJ,EAAQoa,EAAO50I,KAAKE,KAAMM,IACpBqlR,SAAW,GACjBrrJ,EAAMsrJ,qBAAuB,KAC7BtrJ,EAAMurJ,gBAAkBvrJ,EAAMurJ,gBAAgBxmR,KAAKm1I,GAAuBla,IAC1EA,EAAMu0D,oBAAsBv0D,EAAMu0D,oBAAoBxvL,KAAKm1I,GAAuBla,IAClFA,EAAMwrJ,mBAAqBxrJ,EAAMwrJ,mBAAmBzmR,KAAKm1I,GAAuBla,IAChFA,EAAM+zD,OAAS/zD,EAAM+zD,OAAOhvL,KAAKm1I,GAAuBla,IACxDA,EAAMyrJ,cAAgBzrJ,EAAMyrJ,cAAc1mR,KAAKm1I,GAAuBla,IACtEA,EAAM0rJ,cAAgB1rJ,EAAM0rJ,cAAc3mR,KAAKm1I,GAAuBla,IACtEA,EAAM2rJ,0BAA4B3rJ,EAAM2rJ,0BAA0B5mR,KAAKm1I,GAAuBla,IAC9FA,EAAM4rJ,2BAA6B5rJ,EAAM4rJ,2BAA2B7mR,KAAKm1I,GAAuBla,IAChGA,EAAMwtE,KAAOxtE,EAAMwtE,KAAKzoM,KAAKm1I,GAAuBla,IACpDA,EAAMqsE,KAAOrsE,EAAMqsE,KAAKtnM,KAAKm1I,GAAuBla,IACpDA,EAAM6rJ,aAAe7rJ,EAAM6rJ,aAAa9mR,KAAKm1I,GAAuBla,IACpEA,EAAM2yD,OAAS3yD,EAAM2yD,OAAO5tL,KAAKm1I,GAAuBla,IACxDA,EAAMvxH,MAAQ,CACZmlL,OAAQ5tL,EAAM4tL,QAEhB5zD,EAAM8rJ,YAAa,EACZ9rJ,CACT,CAoSA,OA7XoBlB,EA0FPssJ,EA1FoBrsJ,EA0FG,CAAC,CACnC15H,IAAK,oBACLuH,MAAO,WACLlH,KAAKomR,YAAa,EAClBpmR,KAAKqmR,cACP,GACC,CACD1mR,IAAK,uBACLuH,MAAO,WACLlH,KAAKomR,YAAa,EAClBpmR,KAAK8lR,qBACL9lR,KAAK2lR,SAAW,KAChB3lR,KAAKsmR,mBACLtmR,KAAKumR,kBACP,GACC,CACD5mR,IAAK,sBACLuH,MAAO,SAA6BtE,GAClC,IAAI4jR,EAAWxmR,KAAKM,MAAMqqL,QAAQhjL,MAAM,KACpC6+Q,EAASj8Q,QAAQ,WAAa,IAAMvK,KAAKM,MAAM4tL,QAAUq3F,GAAgB3iR,EAAEtD,OAAQU,KAAK2lR,YACtF3lR,KAAKymR,cACPzmR,KAAKumR,mBAEHvmR,KAAKM,MAAM4tL,SAAWm3F,GAAeziR,EAAEtD,OAAQU,KAAK0mR,UACtD1mR,KAAKgmR,cAAcpjR,GACT5C,KAAKM,MAAM4tL,QACrBluL,KAAK+lR,cAAcnjR,IAEZ4jR,EAASj8Q,QAAQ,UAAY,GAAKg7Q,GAAgB3iR,EAAEtD,OAAQU,KAAK2lR,YACtE3lR,KAAKymR,cACPzmR,KAAKumR,mBAEFvmR,KAAKM,MAAM4tL,OAGdluL,KAAKgmR,cAAcpjR,GAFnB5C,KAAK+lR,cAAcnjR,GAKzB,GACC,CACDjD,IAAK,4BACLuH,MAAO,WACDlH,KAAKM,MAAMqqL,QAAQpgL,QAAQ,UAAY,IAAMvK,KAAKM,MAAM6kR,WACtDnlR,KAAKymR,cACPzmR,KAAKumR,mBAEHvmR,KAAK+I,MAAMmlL,SAAWluL,KAAKM,MAAM4tL,QACnCluL,KAAKquL,SAGX,GACC,CACD1uL,IAAK,6BACLuH,MAAO,SAAoCtE,GACrC5C,KAAKM,MAAMqqL,QAAQpgL,QAAQ,UAAY,IAAMvK,KAAKM,MAAM6kR,WACtDnlR,KAAK2mR,cACP3mR,KAAKsmR,mBAEP1jR,EAAE2kM,UACFvnM,KAAKymR,aAAe9zQ,WAAW3S,KAAK2mM,KAAKtnM,KAAKW,KAAM4C,GAAI5C,KAAK4mR,SAAS,SAE1E,GACC,CACDjnR,IAAK,eACLuH,MAAO,SAAsBtE,GACb,WAAVA,EAAEjD,KACJK,KAAK2mM,KAAK/jM,EAEd,GACC,CACDjD,IAAK,SACLuH,MAAO,SAAgB/G,GACrB,IAAIkoI,EAAWroI,KAAKM,MAAM+nI,SACtBA,IACsB,oBAAbA,EACTA,EAASloI,GACsB,WAAtB+yI,GAAQ7K,KACjBA,EAAS7+E,QAAUrpD,IAGvBH,KAAK0mR,SAAWvmR,CAClB,GACC,CACDR,IAAK,WACLuH,MAAO,SAAkBvH,GACvB,IAAIs8E,EAAQj8E,KAAKM,MAAM27E,MACvB,MAAuB,WAAnBi3D,GAAQj3D,GACHuK,MAAMvK,EAAMt8E,IAAQylR,GAAezlR,GAAOs8E,EAAMt8E,GAElDs8E,CACT,GACC,CACDt8E,IAAK,mBACLuH,MAAO,SAA0B5H,GAC/B,IAAKA,EAAQ,OAAO,KACpB,IAAIoyB,EAAQ1xB,KAAK2lR,SAASp7Q,QAAQjL,GAClC,OAAIoyB,GAAS,EAAU1xB,KAAK2lR,SAASj0P,GAC9B1xB,KAAK6mR,iBAAiBvnR,EAAOmqI,cACtC,GACC,CACD9pI,IAAK,OACLuH,MAAO,SAActE,GACnB,IAAK5C,KAAKM,MAAM4tL,OAAQ,CAGtB,GAFAluL,KAAKsmR,mBACLtmR,KAAK4lR,qBAAuBhjR,EAAIA,EAAE4pM,eAAiBxsM,KAAK6mR,iBAAiBjkR,EAAEtD,QAAU,KACjFsD,GAAKA,EAAEu9P,cAA0C,oBAAnBv9P,EAAEu9P,aAA6B,CAC/D,IAAI15L,EAAO7jE,EAAEu9P,eACbngQ,KAAK4lR,qBAAuBn/M,GAAQA,EAAK,IAAMzmE,KAAK4lR,oBACtD,CACA5lR,KAAKquL,OAAOzrL,EACd,CACF,GACC,CACDjD,IAAK,gBACLuH,MAAO,SAAuBtE,GACxB5C,KAAKymR,cACPzmR,KAAKumR,mBAEPvmR,KAAK2mR,aAAeh0Q,WAAW3S,KAAK8nM,KAAKzoM,KAAKW,KAAM4C,GAAI5C,KAAK4mR,SAAS,QACxE,GACC,CACDjnR,IAAK,OACLuH,MAAO,SAActE,GACf5C,KAAKM,MAAM4tL,SACbluL,KAAKumR,mBACLvmR,KAAK4lR,qBAAuB,KAC5B5lR,KAAKquL,OAAOzrL,GAEhB,GACC,CACDjD,IAAK,gBACLuH,MAAO,SAAuBtE,GACxB5C,KAAK2mR,cACP3mR,KAAKsmR,mBAEPtmR,KAAKymR,aAAe9zQ,WAAW3S,KAAK2mM,KAAKtnM,KAAKW,KAAM4C,GAAI5C,KAAK4mR,SAAS,QACxE,GACC,CACDjnR,IAAK,mBACLuH,MAAO,WACL+1D,aAAaj9D,KAAK2mR,cAClB3mR,KAAK2mR,kBAAevkR,CACtB,GACC,CACDzC,IAAK,mBACLuH,MAAO,WACL+1D,aAAaj9D,KAAKymR,cAClBzmR,KAAKymR,kBAAerkR,CACtB,GACC,CACDzC,IAAK,oBACLuH,MAAO,SAA2BpF,EAAMi7I,EAAS+pI,GAC/C9mR,KAAK2lR,SAAS/9Q,SAAQ,SAAUtI,GAC9BA,EAAO0T,iBAAiBlR,EAAMi7I,EAAS+pI,EACzC,GACF,GACC,CACDnnR,IAAK,uBACLuH,MAAO,SAA8BpF,EAAMi7I,EAAS+pI,GAClD9mR,KAAK2lR,SAAS/9Q,SAAQ,SAAUtI,GAC9BA,EAAOm/H,oBAAoB38H,EAAMi7I,EAAS+pI,EAC5C,GACF,GACC,CACDnnR,IAAK,kBACLuH,MAAO,WACL,GAAIlH,KAAKM,MAAMqqL,QAAS,CACtB,IAAI67F,EAAWxmR,KAAKM,MAAMqqL,QAAQhjL,MAAM,MACJ,IAAhC6+Q,EAASj8Q,QAAQ,aACfi8Q,EAASj8Q,QAAQ,UAAY,GAAKi8Q,EAASj8Q,QAAQ,WAAa,IAClEvF,SAASgO,iBAAiB,QAAShT,KAAK6uL,qBAAqB,GAE3D7uL,KAAK2lR,UAAY3lR,KAAK2lR,SAASlmR,SAC7B+mR,EAASj8Q,QAAQ,UAAY,IAC/BvK,KAAK+mR,kBAAkB,YAAa/mR,KAAK+lR,eAAe,GACxD/lR,KAAK+mR,kBAAkB,WAAY/mR,KAAKgmR,eAAe,IAErDQ,EAASj8Q,QAAQ,UAAY,IAC/BvK,KAAK+mR,kBAAkB,UAAW/mR,KAAK8nM,MAAM,GAC7C9nM,KAAK+mR,kBAAkB,WAAY/mR,KAAK2mM,MAAM,IAEhD3mM,KAAK+mR,kBAAkB,UAAW/mR,KAAKmmR,cAAc,IAG3D,CACF,GACC,CACDxmR,IAAK,qBACLuH,MAAO,WACDlH,KAAK2lR,WACP3lR,KAAKgnR,qBAAqB,YAAahnR,KAAK+lR,eAAe,GAC3D/lR,KAAKgnR,qBAAqB,WAAYhnR,KAAKgmR,eAAe,GAC1DhmR,KAAKgnR,qBAAqB,UAAWhnR,KAAKmmR,cAAc,GACxDnmR,KAAKgnR,qBAAqB,UAAWhnR,KAAK8nM,MAAM,GAChD9nM,KAAKgnR,qBAAqB,WAAYhnR,KAAK2mM,MAAM,IAEnD3hM,SAASy5H,oBAAoB,QAASz+H,KAAK6uL,qBAAqB,EAClE,GACC,CACDlvL,IAAK,eACLuH,MAAO,WACL,IAAI+/Q,EAAYt6F,GAAU3sL,KAAKM,MAAMhB,QAAQ,GACzC2nR,IAAcjnR,KAAK2lR,WACrB3lR,KAAK8lR,qBACL9lR,KAAK2lR,SAAWsB,EAAYxiR,MAAMkB,KAAKshR,GAAa,GACpDjnR,KAAK4lR,qBAAuB5lR,KAAK4lR,sBAAwB5lR,KAAK2lR,SAAS,GACvE3lR,KAAK6lR,kBAET,GACC,CACDlmR,IAAK,SACLuH,MAAO,SAAgBtE,GACrB,OAAI5C,KAAKM,MAAMk+I,WAAax+I,KAAKomR,WACxBxjR,GAAKA,EAAE88H,iBAET1/H,KAAKM,MAAM+tL,OAAOzrL,EAC3B,GACC,CACDjD,IAAK,SACLuH,MAAO,WACL,IAAIy3H,EAAS3+H,KACTA,KAAKM,MAAM4tL,QACbluL,KAAKqmR,eAEP,IAAI/mR,EAASU,KAAK4lR,sBAAwB5lR,KAAK2lR,SAAS,GACxD,IAAKrmR,EACH,OAAO,KAET,IAAIyvI,EAAc/uI,KAAKM,MACrByB,EAAYgtI,EAAYhtI,UACxBspL,EAAYt8C,EAAYs8C,UACxB65F,EAAiBn2I,EAAYm2I,eAC7Bh3F,EAASn/C,EAAYm/C,OACrB81F,EAAYj1I,EAAYi1I,UACxBC,EAAoBl1I,EAAYk1I,kBAChCvtF,EAAY3nD,EAAY2nD,UACxBotF,EAAkB/0I,EAAY+0I,gBAC9BC,EAAiBh1I,EAAYg1I,eAC7BF,EAAkB90I,EAAY80I,gBAC9Bx/I,EAAY0K,EAAY1K,UACxBwyD,EAAY9nD,EAAY8nD,UACxBO,EAAWroD,EAAYqoD,SACvBxvI,EAASmnF,EAAYnnF,OACrBu8N,EAAOp1I,EAAYo1I,KACnBjiM,EAAO6sD,EAAY7sD,KACnBk9B,EAAW2vB,EAAY3vB,SACrByjC,EAAa3kE,GAAKl+E,KAAKM,MAAOnB,OAAOyH,KAAK89H,KAC1CwiJ,EAAgB97F,GAAgBy4F,EAAiBx4F,GACjDxsI,EAAUusI,GAAgB85F,EAAgB75F,GAC9C,OAAoB/f,IAAAA,cAAoB84G,GAAe,CACrDriR,UAAWA,EACXzC,OAAQA,EACR4uL,OAAQA,EACR81F,UAAWA,EACXC,kBAAmBA,EACnBvtF,UAAWA,EACXotF,gBAAiBA,EACjBC,eAAgBA,EAChBF,gBAAiBqD,EACjB7iJ,UAAWA,EACXwyD,UAAWA,EACXO,SAAUA,EACVxvI,OAAQA,EACRyjI,UAAWA,EACX84F,KAAMA,EACNjiM,KAAMA,IACL,SAAUhiF,GACX,IAAIskF,EAAStkF,EAAKskF,OAClB,OAAoB8mF,IAAAA,cAAoB,MAAOpsK,GAAS,CAAC,EAAG2jJ,EAAY,CACtE1iJ,IAAKw+H,EAAOsuD,OACZlrL,UAAW88C,EACXq9F,KAAM,UACN2wD,YAAaluE,EAAOsnJ,0BACpB77E,aAAczrE,EAAOunJ,2BACrBjqI,UAAWtd,EAAOwnJ,eACI,oBAAb/mK,EAA0BA,EAAS,CAC5C56B,OAAQA,IACL46B,EACP,GACF,IAjX2Cka,EAkXzC,CAAC,CACH35H,IAAK,2BACLuH,MAAO,SAAkC5G,EAAOyI,GAC9C,OAAIzI,EAAM4tL,SAAWnlL,EAAMmlL,OAClB,CACLA,OAAQ5tL,EAAM4tL,QAGX,IACT,IA3X8D70D,GAAYwa,GAAkBza,EAAYx5H,UAAWy5H,GAAiBC,GAAaua,GAAkBza,EAAaE,GAAcn6H,OAAO6H,eAAeoyH,EAAa,YAAa,CAAE1rH,UAAU,IA6XrPg4Q,CACT,CA/TyC,CA+TvCp6G,IAAAA,WACFo6G,GAAsBhhJ,UAAYA,GAClCghJ,GAAsB/gJ,aAAeA,GACrC,YCrYA,SAASzlI,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAUlV,SAASo7P,GAAQt6P,GACf,IAAI6mR,EAAevoO,KAAW,gBAAiBt+C,EAAMyjR,gBACjDmD,EAAgBtoO,KAAW,UAAW,OAAQt+C,EAAMujR,iBACpDhlO,EAAUD,KAAW,gBAAiBt+C,EAAM4kR,gBAChD,OAAoB55G,IAAAA,cAAoBo6G,GAAuBxmR,GAAS,CAAC,EAAGoB,EAAO,CACjFyjR,eAAgBoD,EAChBtD,gBAAiBqD,EACjBhC,eAAgBrmO,IAEpB,CACA+7M,GAAQl2H,UAAYA,GACpBk2H,GAAQj2H,aAjBW,CACjB+xD,UAAW,QACXotF,gBAAiB,aACjBn5F,QAAS,QACT/iI,OAAQ,CAAC,EAAG,IAcd,YCtBA,IAAI+jF,GAAY,CAAC,YAAa,YAAa,OAC3C,SAASzsI,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAAS+4H,GAAyB74H,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAAkEC,EAAKJ,EAAnED,EACzF,SAAuCI,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAA2DC,EAAKJ,EAA5DD,EAAS,CAAC,EAAO8vI,EAAajwI,OAAOyH,KAAKlH,GAAqB,IAAKH,EAAI,EAAGA,EAAI6vI,EAAW3vI,OAAQF,IAAOI,EAAMyvI,EAAW7vI,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,CAAQ,CADhN+vI,CAA8B3vI,EAAQyvI,GAAuB,GAAIhwI,OAAO2H,sBAAuB,CAAE,IAAIgmL,EAAmB3tL,OAAO2H,sBAAsBpH,GAAS,IAAKH,EAAI,EAAGA,EAAIutL,EAAiBrtL,OAAQF,IAAOI,EAAMmtL,EAAiBvtL,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,GAAkBR,OAAOS,UAAUmkD,qBAAqBjkD,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,GAAQ,CAAE,OAAOL,CAAQ,CAM3e,IAAIolI,GAAY,CACdr6H,IAAKshL,GACL5pL,UAAW01H,KAAAA,OACX4zD,UAAW5zD,KAAAA,QAEb,SAAS2vJ,GAAY9mR,GACnB,IAAIyB,EAAYzB,EAAMyB,UACpBspL,EAAY/qL,EAAM+qL,UAClBgH,EAAa/xL,EAAM+J,IACnBuvC,OAAqB,IAAfy4I,EAAwB,MAAQA,EACtCxvC,EAAatqB,GAAyBj4H,EAAOqrI,IAC3C9sF,EAAUusI,GAAgBxsI,KAAW78C,EAAW,gBAAiBspL,GACrE,OAAoB/f,IAAAA,cAAoB1xH,EAAK16C,GAAS,CAAC,EAAG2jJ,EAAY,CACpE9gJ,UAAW88C,IAEf,CACAuoO,GAAY1iJ,UAAYA,GACxB,6CCLA,MAAM2iJ,WAAuB5iJ,EAAAA,UAC3B94H,WAAAA,CAAarL,GACXukB,MAAMvkB,GAEN,MAAM,eAAE4Q,EAAc,iBAAEo2Q,GAAqBhnR,EAE7C,GAAI4Q,GAAkBA,EAAezR,OAAQ,CAC3C,MAAM4+I,EAAWipI,GAAoBp2Q,EAAe6P,MAAKmO,GAAQA,EAAKje,SAASK,KAAOg2Q,EAAiBh2Q,KAAMg2Q,EAAmBp2Q,EAAe,GAAGD,SAClJjR,KAAK+I,MAAQ,CACXu+Q,iBAAkBjpI,EAEtB,CACF,CAEAkpI,sBAAAA,CAAwBC,EAAkBC,GACxC,MAAQx2Q,SAAU4lQ,EAAUG,cAAe7lQ,GAAkBq2Q,EAC7D,IAAIE,EAAsB,GAE1B,GAAI7Q,EAAS8Q,kBAAoBx2Q,EAAe,CAC9C,IAAIwpB,EAAQ,EACRitP,EAAW,EAEfF,EAAsBv2Q,EAAcV,KAAKo3Q,IACvC,MAAQ52Q,SAAU62Q,EAAY9Q,cAAe+Q,GAAoBF,EAG3DG,EAAYD,EAAgBtoR,QAAWqoR,EAAW/Q,aAAe+Q,EAAWH,iBAAoB,EAAI,GAC1G,IAAIM,EAAmB,EACvB,GAAIH,EAAWH,kBAAoBI,EAAiB,CAClD,MAAMG,EAAgBvtP,EACtBA,GAASqtP,EACLrtP,EAAQ8sP,IACVQ,EAAmBD,GAAartP,EAAQ8sP,GACxC9sP,EAAQqtP,EAAYP,EAGE,IAAlBS,IACFD,EAAmB,EACnBttP,EAASqtP,EAAYP,GAG3B,MACE9sP,IACIA,EAAQ8sP,IACV9sP,EAAQ,GAMZ,OAFAitP,GAAYI,EAAYC,EAEjB,IACFH,EACHK,qBAAsBL,EAAW/Q,aAAe+Q,EAAWH,iBAC3Dx2Q,cAAe42Q,EAAgBt3Q,KAAI23Q,GAAkBA,EAAen3Q,WACpEg3Q,mBACAL,WACD,GAEL,CAEA,OAAOF,CACT,CAEAz5I,kBAAAA,CAAoBC,EAAWgJ,EAAWmxI,GACxC,MAAM,eAAEn3Q,EAAc,iBAAEo2Q,GAAqBtnR,KAAKM,MAElD,GAAqC,KAAjB,OAAhBgnR,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkBrmQ,aAGlB/P,GAAkBA,EAAezR,QAAU6nR,GAAoBA,EAAiBh2Q,KAAOtR,KAAK+I,MAAMu+Q,iBAAiBh2Q,GAAI,CACzH,MAAM+sI,EAAWntI,EAAe6P,MAAKmO,GAAQA,EAAKje,SAASK,KAAOg2Q,EAAiBh2Q,KAAMg2Q,EAAmBp2Q,EAAe,GAAGD,SAC9HjR,KAAK28H,SAAS,CAAE2qJ,iBAAkBjpI,GACpC,CACF,CAEA50H,MAAAA,GACE,MAAM,eAAEvY,EAAc,YAAEo3Q,GAAgBtoR,KAAKM,MAE7C,IAAM4Q,IAAkBA,EAAezR,OACrC,OAAO,KAGT,MAAM6nR,EAAmBtnR,KAAK+I,MAAMu+Q,iBAC9BiB,GAAwBjB,EAAiBK,iBACzCa,EAAwBt3Q,EAAe5H,QAAO4lB,GAAQA,EAAKje,SAASK,KAAOg2Q,EAAiBh2Q,KAAI,GAEhGm2Q,EAAgB35Q,KAAK0vD,MAAMirN,IAE3Bf,GAAuBa,GAAwBvoR,KAAKunR,uBAAuBiB,EAAuBf,GAClGG,EAAWF,GAAuBA,EAAoBjoR,QAAUioR,EAAoBA,EAAoBjoR,OAAS,GAAGmoR,SAE1H,OACEz9F,EAAAA,GAAAA,MAAA,OAAKpoL,UAAY,mBAAmBumR,EAAc,gBAAkB,MAAQC,EAAuB,sBAAwB,KAAMnpK,SAAA,CAE7HkpK,IACAl+F,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,iBAAgBq9G,UAE3BgrE,EAAAA,GAAAA,KAACjwD,GAAAA,GAAU,CAACp4H,UAAU,YAAY26H,WAAS,EAACqF,yBAAuB,EAACmB,YAAU,EAACE,cAAc,MAC3FJ,oBAAqB1iI,IAAS8pL,EAAAA,GAAAA,KAAA,UAAS9pL,EAAOyB,UAAU,mBAAoBq9G,UAC5EgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,UAASq9G,SAEpBluG,EAAeT,KAAI,CAAAvQ,EAAeX,KAAO,IAArB,SAAE0R,GAAU/Q,EAC9B,MAAM,GAAEoR,EAAE,WAAE2P,EAAU,KAAEpF,GAAS5K,EACjC,OAAOm5K,EAAAA,GAAAA,KAAA,OAAaroL,UAAY,qBAAoBulR,EAAiBh2Q,KAAOA,EAAK,WAAa,IAC5Fu7L,YAAaA,IAAM7sM,KAAK28H,SAAS,CAAE2qJ,iBAAkBr2Q,IAAYmuG,UACjEgrE,EAAAA,GAAAA,KAACzP,GAAI,CAAC54K,UAAU,yBAAyBwtI,wBAAyB,CAAEC,OAAQ3zH,GAAgBmQ,GAAImkP,GAAatqQ,IAAI,CAAE8iL,KAAM,WAAY/nL,GAAIqgB,EAAYvP,KAAM+vK,GAAmB5lK,MAArFtc,IAF1EA,EAGX,WAQpB4qL,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,iBAAgBq9G,SAAA,EAC7B+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,oBAAmBq9G,SAAA,EAChCgrE,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,cAAaq9G,UAC3BgrE,EAAAA,GAAAA,KAACzP,GAAI,CAACprC,wBAAyB,CAAEC,OAAQ83I,EAAiBzrQ,MAAQmQ,GAAImkP,GAAatqQ,IAAI,CAAE8iL,KAAM,WAAY/nL,GAAI0mR,EAAiBrmQ,WAAYvP,KAAM+vK,GAAmB6lG,EAAiBzrQ,YAGtLyrQ,EAAiBvQ,cACjB3sF,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,oBAAmBq9G,UACjCgrE,EAAAA,GAAAA,KAACzP,GAAI,CAAC54K,UAAU,yBAAyBiqB,GAAImkP,GAAatqQ,IAAI,CAAE8iL,KAAM,WAAY/nL,GAAI0mR,EAAiBrmQ,WAAYvP,KAAM+vK,GAAmB6lG,EAAiBzrQ,QAASujG,SACnKv8G,GAAE,gDAKXsnL,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,eAAcq9G,SAAA,CAEzBsoK,GAAuBA,EAAoBj3Q,KAAI,CAACq3Q,EAAYvoR,KAC1D,MAAM,WAAE0hB,EAAU,KAAEpF,EAAI,qBAAEssQ,EAAoB,cAAEh3Q,EAAa,iBAAE82Q,GAAqBH,EACpF,OAAO39F,EAAAA,GAAAA,MAAC7e,IAAAA,SAAc,CAAAlsD,SAAA,CAGlB6oK,EAAmB,GACnB,IAAIxjR,MAAMwjR,IAAmBx3Q,KAAI,CAAChP,EAAGlC,KAAM6qL,EAAAA,GAAAA,KAAA,OAAaroL,UAAU,mBAAbxC,MAEvD6qL,EAAAA,GAAAA,KAAA,OAAaroL,UAAU,kBAAiBq9G,UACtCgrE,EAAAA,GAAAA,KAACzP,GAAI,CAAC54K,UAAU,uBAAuBwtI,wBAAyB,CAAEC,OAAQ3zH,GAAgBmQ,GAAImkP,GAAatqQ,IAAI,CAAE8iL,KAAM,WAAY/nL,GAAIqgB,EAAYvP,KAAM+vK,GAAmB5lK,MAArFtc,IAD/EA,GAIR4oR,IACA/9F,EAAAA,GAAAA,KAAA,OAA6BroL,UAAU,kDAAiDq9G,UACtFgrE,EAAAA,GAAAA,KAACzP,GAAI,CAAC54K,UAAU,uBAAmDiqB,GAAImkP,GAAatqQ,IAAI,CAAE8iL,KAAM,WAAY/nL,GAAIqgB,EAAYvP,KAAM+vK,GAAmB5lK,KAASujG,SAC3Jv8G,GAAE,6BADsC,0BADpC,qBAOTsO,GAAiBA,EAAcV,KAAI,CAACi4Q,EAAYnpR,KAC9C,MAAM,WAAE0hB,EAAU,KAAEpF,GAAS6sQ,EAE7B,OAAOt+F,EAAAA,GAAAA,KAAA,OAAaroL,UAAU,kBAAiBq9G,UAC7CgrE,EAAAA,GAAAA,KAACzP,GAAI,CAAC54K,UAAU,uBAAuBwtI,wBAAyB,CAAEC,OAAQ3zH,GAAgBmQ,GAAImkP,GAAatqQ,IAAI,CAAE8iL,KAAM,WAAY/nL,GAAIqgB,EAAYvP,KAAM+vK,GAAmB5lK,MAArFtc,IADxEA,EAEX,MAvBgBA,EA0BX,IAKlBqoR,GAAYH,EACT,IAAIhjR,MAAMgjR,IAAgBh3Q,KAAI,CAAChP,EAAGlC,KAAM6qL,EAAAA,GAAAA,KAAA,OAAaroL,UAAU,mBAAbxC,KAAqC,GAG3F+nR,EAAiBqB,WACjBv+F,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,+BAA8Bq9G,UAC3CgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,yBAAwBq9G,UAACgrE,EAAAA,GAAAA,KAAA,OAAK5d,IAAK86G,EAAiBqB,SAAU5mR,UAAU,iBAAiBupM,IAAM,GAAEg8E,EAAiBzrQ,yBAMpI+rQ,EAjLa,EAiLFH,GACRr9F,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,WAAUq9G,UACzBgrE,EAAAA,GAAAA,KAACzP,GAAI,CAAC54K,UAAU,gBAAgBiqB,GAAImkP,GAAatqQ,IAAI,CAAE8iL,KAAM,WAAY/nL,GAAI0mR,EAAiBrmQ,WAAYvP,KAAM+vK,GAAmB6lG,EAAiBzrQ,QAASujG,SAAEv8G,GAAE,+BAC1J,UAKrB,EAGF,YCtIA,GA/DyB3C,IAAyB,IAAxB,eAAEgR,GAAgBhR,EAC1C,MAAO0oR,EAAaC,IAAkBj+G,EAAAA,EAAAA,UAAS,OACxC08G,EAAkBwB,IAAuBl+G,EAAAA,EAAAA,UAAS,MAEzD,KAAM15J,GAAkBA,EAAezR,OAAS,GAC9C,OAAO,KAGT,MAAM6qM,EAAeA,CAACusE,EAAUv3Q,KAC9Bo7P,gBAAe,KACbouB,EAAoBjS,GACpBgS,EAAe7jR,SAASg0M,eAAgB,MAAK69D,KAAY,GACzD,EAGEzsE,EAAeA,KACnB0+E,EAAoB,MACpBD,EAAe,KAAK,EAGtB,OAAQ1+F,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,oBAAmBq9G,SAAA,EACxC+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,uCAAuCuoM,aAAe1nM,GAAM0nM,EAAa,EAAG1nM,EAAEtD,QAAS8qM,aAAcA,EAAahrF,SAAA,EAC3HgrE,EAAAA,GAAAA,KAAA,QAAMroL,UAAY,mBAAsC,IAArBulR,EAAyB,YAAc,IAAM1mR,GAAG,OAAMw+G,SACtFv8G,GAAE,4BAETunL,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,oBAEd6mR,GAAoC,IAArBtB,IACfl9F,EAAAA,GAAAA,KAACwwE,GAAO,CAAC74P,UAAU,GAAGoiR,MAAM,EAAOj2F,QAAQ,EAAMwI,UAAU,eAClDp3L,OAAQspR,EAAavkJ,UAAWukJ,EAAa/E,gBAAgB,2BAA0BzkK,UAC9FgrE,EAAAA,GAAAA,KAACg9F,GAAW,CAAAhoK,UACVgrE,EAAAA,GAAAA,KAACi9F,GAAc,CAACn2Q,eAAgBA,EAAgBo3Q,aAAa,EAAMhB,iBAAkB,cAM3Fp2Q,EAAeT,KAAI,CAAAwC,EAA8B1T,KAAO,IAApC,SAAE0R,EAAQ,cAAE+lQ,GAAe/jQ,EAC7C,MAAM,WAAEgO,EAAU,KAAEpF,GAAS5K,EAC7B,OAAOk5K,EAAAA,GAAAA,MAACxP,GAAI,CAAC54K,UAAU,yBACVuoM,aAAe1nM,GAAM0nM,EAAarpL,GAClCmpL,aAAcA,EAEdp+K,GAAImkP,GAAatqQ,IAAI,CAAE8iL,KAAM,WAAY/nL,GAAIqgB,EAAYvP,KAAM+vK,GAAmB5lK,KAASujG,SAAA,EAChGgrE,EAAAA,GAAAA,KAAA,QAAMroL,UAAY,mBAAiBulR,IAAqBrmQ,EAAa,YAAc,IACrErgB,GAAK,MAAKqgB,IAAam+F,UACnCgrE,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,OAAewtI,wBAAyB,CAAEC,OAAQ3zH,IAAtCtc,IADnBA,GAIfqpR,GAAetB,IAAqBrmQ,IAA2B,OAAb+1P,QAAa,IAAbA,OAAa,EAAbA,EAAev3Q,QAAS,IAC1E2qL,EAAAA,GAAAA,KAACwwE,GAAO,CAACupB,MAAM,EAAOj2F,QAAQ,EAAMwI,UAAU,eACrCp3L,OAAQspR,EAAavkJ,UAAWr/H,SAAS+H,KAAM82Q,gBAAgB,2BAA0BzkK,UAChGgrE,EAAAA,GAAAA,KAACg9F,GAAW,CAAAhoK,UACVgrE,EAAAA,GAAAA,KAACi9F,GAAc,CAACn2Q,eAAgBA,EAAgBo3Q,aAAa,EAAOhB,iBAAkBr2Q,UAX5E1R,EAeX,MAGP,EC/DKwpR,GAAa7oR,IAOnB,IAPoB,eACzBkP,EAAc,gBACdE,EAAe,YACfN,EAAW,eACXkC,EAAc,SACd/B,EAAQ,WACRE,GACDnP,EACC,MAAM8oR,GAAYx+E,EAAAA,EAAAA,WACXtc,EAAQqsE,IAAa3vF,EAAAA,EAAAA,WAAS,IAC9Bq+G,EAAUC,IAAet+G,EAAAA,EAAAA,WAAS,IAClCu+G,EAAWC,IAAgBx+G,EAAAA,EAAAA,UAAS+rG,GAAmBzlQ,EAAgB/B,EAAUE,EAAYC,EAAiBF,KAErHy7J,EAAAA,EAAAA,YAAU,KACR,MAAM66C,EAAW9iN,IACD,WAAVA,EAAEjD,KAAyC,SAArBiD,EAAEtD,OAAO+F,SACjCgkR,GACF,EAIF,OADAlmR,OAAO6P,iBAAiB,QAAS0yM,GAC1B,KACLviN,OAAOs7H,oBAAoB,QAASinF,EAAQ,CAC7C,GACA,KAEH76C,EAAAA,EAAAA,YAAU,KACRu+G,EAAazS,GAAmBzlQ,EAAgB/B,EAAUE,EAAYC,EAAiBF,GAAgB,GACtG,CAAC8B,EAAgB/B,EAAUE,EAAYC,EAAiBF,KAE3Dy7J,EAAAA,EAAAA,YAAU,KACR,GAAIm+G,EAAUx/N,QAAS,CAErB,MAAMyoB,EAAY3tE,IACXA,EAAQ,GAAGglR,iBACd/uB,GAAU,GACV2uB,GAAY,GACZ5/D,EAASE,aACX,EAEF,IAAIF,EAAW,IAAIigE,qBAAqBt3M,EAR1B,CAAEsnC,UAAW,CAAC,EAAG,IAAM,GAAK,IAAM,KAShD+vG,EAASnL,QAAQ6qE,EAAUx/N,QAC7B,IAEC,CAACw/N,EAAUx/N,UAEd,MACM6/N,EAAcA,IAAMH,GAAY,GAUtC,OAAO/+F,EAAAA,GAAAA,MAAAstF,GAAAA,SAAA,CAAAr4J,SAAA,EACLgrE,EAAAA,GAAAA,KAACo/F,GAAW,CAACtmC,aAAeh1D,GAAWA,GAZhBqsE,GAAU,GAY8BrsE,OAAQA,EAAO9uE,UAC5EgrE,EAAAA,GAAAA,KAAC8H,GAAM,CAAC,aAAW,OAAOnwL,UAAU,cAAaq9G,UAC/CgrE,EAAAA,GAAAA,KAAC2e,GAAI,CAACr3L,KAAK,WAAWnR,MAAM,OAAOC,OAAO,OAAOuB,UAAU,YACrDinM,iBAAiB,4BAG1B9a,IAAU/D,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,cAAc2jN,QAAU9iN,IAClC,WAAVA,EAAEjD,KAAoBiD,EAAEtD,OAAOwwL,UAAUxhI,SAAS,sBACpD+6N,GACF,EACAjqK,SAAA,EACAgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,iBAAiBumI,YAAa+gJ,KAC7Cj/F,EAAAA,GAAAA,KAAA,OAAKwlE,eAfehtP,GAAMA,EAAEtD,OAAO6iM,cAAc,mBAAmB/pD,QAe/Br2I,UAAY,mBAAiBknR,EAAW,YAAc,IAAM9oR,IAAK6oR,EAAWtjE,QAtBtF9iN,IACf,WAAVA,EAAEjD,MACHiD,EAAEtD,OAAOwwL,UAAUxhI,SAAS,kBAAoB1rD,EAAEtD,OAAOwwL,UAAUxhI,SAAS,oBAC7E+6N,GACF,EAmBIlgE,OAASvmN,IACFomR,EAAUx/N,QAAQ8E,SAAS1rD,EAAEomN,gBAChCpmN,EAAEtD,OAAO84I,OACX,EACAh5B,UAEFgrE,EAAAA,GAAAA,KAAC20F,GAAkB,CAACnyP,MAAOu8P,EAAU,GAAG/pK,SAAUw0H,QAASy1C,WAG9D,ECpFQI,GAAiBA,IACpBj+Q,GAAAA,eAAiBA,GAAAA,eAAezC,MAAMlD,MAAQ,CAAC,ECsEzD,GA5De3F,IAA2B,IAA1B,UAAC6B,EAAS,QAAE6xO,GAAQ1zO,EAClC,MAAMgvL,GAAesb,EAAAA,EAAAA,UACf71K,EAASwhJ,KACT,YAAEjnK,GAAgBu6Q,MACjB7gF,EAAaC,IAAkBj+B,EAAAA,EAAAA,UAAyB,WAAhBj2I,EAAOg0J,KAAoBh0J,EAAO/zB,GAAM,IACjFg1K,EAAWR,IACXrwK,EAAWkwK,KAEjBpK,EAAAA,EAAAA,YAAU,KACJ1nK,OAAOumR,IACTvmR,OAAOumR,GAAG,OAAQ,WAAY3kR,EAASgpK,SACzC,GACC,CAAChpK,KAEJ8lK,EAAAA,EAAAA,YAAU,KACmC,IAAD8+G,EAAtC5nR,EAAUwjF,SAAS,oBACT,OAAZ2pG,QAAY,IAAZA,GAAqB,QAATy6F,EAAZz6F,EAAc1lI,eAAO,IAAAmgO,GAArBA,EAAuBxnF,cAAc,SAAS/pD,QAChD,GACA,CAACr2I,IAEH,MAAM6nR,EAAkBA,KACtB,IAAI1iR,EAvBaA,IAAUA,EAAQA,EAAMkC,QAAQ,sBAAuB,KAAKvB,OAAS,GAuB1E2hF,CAAYo/G,GACpB1hM,EAAMzH,OAAS,IACjB+L,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,cAAemB,GACpD0uK,EAASu6F,GAAatqQ,IAAI,CAAC8iL,KAAM,SAAU/nL,GAAIg9B,mBAAmB12B,MACpE,EAmBF,OAAOgI,IAAei7K,EAAAA,GAAAA,MAAA,OAAKpoL,UAAY,UAASA,GAAa,KAAM5B,IAAK+uL,EAAa9vE,SAAA,EACjFgrE,EAAAA,GAAAA,KAAClnE,GAAK,CAACphH,KAAK,OAAOC,UAAU,4BACtBmF,MAAO0hM,EACP/tI,YAAah4D,GAAE,0BACfkzI,SATOnzI,IAChB4I,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,eACxC4vL,EAAejmM,EAAEtD,OAAO4H,MAAM,EAQrBw+M,QArBS19F,IACA,UAAdA,EAAMroH,MACRiqR,IACA5hK,EAAM0X,kBAEU,WAAd1X,EAAMroH,MACR6L,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,eACxC26N,GAAWA,IACb,KAeExpD,EAAAA,GAAAA,KAAC8H,GAAM,CAACnwL,UAAU,gBAAgBmhN,QAAS0mE,EAAgBxqK,UACzDgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,wBAAuBq9G,UACpCgrE,EAAAA,GAAAA,KAAC2e,GAAI,CAACr3L,KAAK,aAAanR,MAAM,OAAOC,OAAO,OAAOuB,UAAU,sBAG/D,ECrDF8nR,GAAc96Q,IAClB,MAAM,QAAEu0K,GAAYuC,GAAahgL,MACjC,OAAQkJ,GAA2C,IAA3BA,EAAai5K,WAAmB1E,EAAWA,EAAU,EAAE,EA4DjF,GAzDepjL,IAAwG,IAAvG,YAAEgP,EAAW,WAAEG,EAAU,SAAEF,EAAQ,eAAEC,EAAc,YAAEJ,EAAW,gBAAEM,EAAe,aAAEP,GAAc7O,EAC/G,MAAO4pR,EAAqBC,IAA0Bn/G,EAAAA,EAAAA,WAAS,IACxDu1G,EAAgB6J,IAAqBp/G,EAAAA,EAAAA,UAASi/G,GAAW96Q,IAC1Dk7Q,GAAkBz/E,EAAAA,EAAAA,UAMxB,IAJA3/B,EAAAA,EAAAA,YAAU,KACRm/G,EAAkBH,GAAW96Q,GAAc,GAC1C,CAACA,KAECG,IAAgBE,IAAmBE,EACtC,OAAO,KAGT,MAAM,eAAE4B,EAAc,kBAAEH,GAAsB7B,EAExCg7Q,EAAqB/mR,OAAOgnR,WAAY,eAAcC,GAAMpV,OAAOjtO,QAAU,eAAiB,sBAC9FsiP,EAAcxY,GAAiBqY,EAAoB7lQ,oBAAS,OAA2B,GAE7F,OAAQ8lK,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,SAAQq9G,SAAA,EAC3BgrE,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,kBACXy4K,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,gBAAeq9G,SAAA,EAC5B+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,eAAcq9G,SAAA,EAC3BgrE,EAAAA,GAAAA,KAAC2+F,GAAU,CACT35Q,iBACAE,kBACAN,cACAkC,iBACAH,oBACA5B,WACAE,gBAEF+6K,EAAAA,GAAAA,KAACzP,GAAI,CAAC3uJ,GAAImkP,GAAatqQ,IAAI,CAAE8iL,KAAM,SAAW9N,gBAAgB,EAAMz7D,SAAEirK,IACpEjgG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,OAAOyqK,IAAK69G,EAAa/+E,IAAI,eAEjC,OAAdp6L,QAAc,IAAdA,OAAc,EAAdA,EAAgBzR,QAAS,IAAK2qL,EAAAA,GAAAA,KAACkgG,GAAgB,CAACp5Q,eAAgBA,KACjEk5K,EAAAA,GAAAA,KAACmgG,GAAM,CAACxoR,UAAW+nR,EAAsB,iBAAmB,gBAAiBl2C,QAASA,KAAO,IAAD42C,EAC1FT,GAAuB,GACA,QAAvBS,EAAAP,EAAgBzgO,eAAO,IAAAghO,GAAvBA,EAAyBpyI,OAAO,KAElC+xC,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,cAAaq9G,SAAA,EAC1BgrE,EAAAA,GAAAA,KAAC8H,GAAM,CAACnwL,UAAU,8BACVmhN,QAASA,IAAM6mE,GAAwBD,GACvC3pR,IAAK8pR,EAAgB7qK,UAE3BgrE,EAAAA,GAAAA,KAAC2e,GAAI,CAACr3L,KAAK,aAAanR,MAAM,OAAOC,OAAO,YAE9C4pL,EAAAA,GAAAA,KAACgtF,GAAe,CAAOhoQ,iBAAgBD,cACvCi7K,EAAAA,GAAAA,KAACutF,GAAgB,CAAOroQ,kBAAiBD,eACxCL,IAAeo7K,EAAAA,GAAAA,KAACszF,GAAe,CAAO1uQ,cAAa+B,uBACpDq5K,EAAAA,GAAAA,KAACqgG,GAAI,CAACtK,eAAgBA,WAG1B/1F,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,mBACP,EC3DV,GAReg5Q,KAEXtgG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,SAAQq9G,UACrBgrE,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,aCIjB,GATyBxR,IAA6B,IAA5B,QAAEgjN,EAAO,UAAEnhN,GAAW7B,EAC9C,OACEkqL,EAAAA,GAAAA,KAAA,OAAKvxC,QAASqqE,EAASjnE,UAAYr5I,GAAgB,UAAVA,EAAEjD,KAAmBujN,EAAQtgN,GAAMq4I,SAAS,IAAIiB,KAAK,SAAS,aAAW,QAChHn6I,UAAY,gCAA+BA,GAAa,KAAKq9G,UAC7DgrE,EAAAA,GAAAA,KAAC2e,GAAI,CAACr3L,KAAK,kBAAkBnR,MAAM,OAAOC,OAAO,OAAOuB,UAAU,qBAAqBm6I,KAAK,kBACxF,ECkBV,GAtBuBh8I,IAA+D,IAA9D,uBAAEyqR,EAAsB,6BAAEC,GAA8B1qR,EAQ9E,OACEkqL,EAAAA,GAAAA,KAAAqtF,GAAAA,SAAA,CAAAr4J,UACE+qE,EAAAA,GAAAA,MAAA,OAAKjuC,KAAK,SAASn6I,UAAU,4BAA2Bq9G,SAAA,EACtD+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,wBAAuBq9G,SAAA,CAAEv8G,GAAE,yCAAwCunL,EAAAA,GAAAA,KAAA,QAAMzoL,MAAO,CAACM,QAAQ,KAAKm9G,SAAC,UAC9GgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,8BAA6Bq9G,SAXnByrK,MAC7B,MACMC,EADqBjoR,GAAE,8BACU8E,MAAM,QAE7C,OADAmjR,EAAYz8Q,OAAO,EAAG,GAAG+7K,EAAAA,GAAAA,KAAA,QAAMvxC,QAAS8xI,EAAwB1uI,UAAYr5I,GAAe,UAAVA,EAAEjD,KAAmBgrR,EAAuB/nR,GAAyBq4I,SAAS,IAAG77B,SAAEv8G,GAAE,6BAAjC,mBAC9HioR,CAAW,EAQXD,MAEHzgG,EAAAA,GAAAA,KAAC2gG,GAAgB,CAAChpR,UAAU,UAAWmhN,QAAS0nE,QAGjD,ECqCP,GAtDsB1qR,IAAsC,IAArC,4BAAE8qR,GAA6B9qR,EACpD,OACEiqL,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,2BAA0Bq9G,SAAA,EACvCgrE,EAAAA,GAAAA,KAAC2gG,GAAgB,CAAChpR,UAAU,SAC1BmhN,QAAS8nE,KACX5gG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,uBAAsBq9G,SAAEv8G,GAAE,+BACzCsnL,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,6BAA4Bq9G,SAAA,EACzCgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,4BAA2Bq9G,SACvCv8G,GAAE,0CAELsnL,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,kCAAiCq9G,SAAA,CAC7Cv8G,GAAE,6CACHunL,EAAAA,GAAAA,KAAA,SACCvnL,GAAE,gDAELunL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,0BAAyBq9G,SACrCv8G,GAAE,0CAELunL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,gCAA+Bq9G,SAC3Cv8G,GAAE,+CAELunL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBAAqBq9G,SACjCv8G,GAAE,6BAELunL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,gBAAeq9G,UAC5B+qE,EAAAA,GAAAA,MAAA,SAAA/qE,SAAA,EACEgrE,EAAAA,GAAAA,KAAA,SAAOroL,UAAU,aAAYq9G,UAC3B+qE,EAAAA,GAAAA,MAAA,MAAIpoL,UAAU,aAAYq9G,SAAA,EACxBgrE,EAAAA,GAAAA,KAAA,MAAAhrE,UAAIgrE,EAAAA,GAAAA,KAAA,OAAAhrE,SAAMv8G,GAAE,gBACZunL,EAAAA,GAAAA,KAAA,MAAAhrE,UAAIgrE,EAAAA,GAAAA,KAAA,OAAAhrE,SAAMv8G,GAAE,kBACZunL,EAAAA,GAAAA,KAAA,MAAAhrE,UAAIgrE,EAAAA,GAAAA,KAAA,OAAAhrE,SAAMv8G,GAAE,sBACZunL,EAAAA,GAAAA,KAAA,MAAAhrE,UAAIgrE,EAAAA,GAAAA,KAAA,OAAAhrE,SAAMv8G,GAAE,4BAGhBunL,EAAAA,GAAAA,KAAA,SAAAhrE,SACGmmE,KAAsB90K,KAAKo0K,IAC1B,MAAM,KAAEnzK,EAAM2zK,YAAY,OAAEnD,EAAM,MAAExtF,GAAO,YAAE04D,GAAgBy3B,EAC7D,OACEsF,EAAAA,GAAAA,MAAA,MAAepoL,UAAU,aAAYq9G,SAAA,EACnCgrE,EAAAA,GAAAA,KAAA,MAAAhrE,UAAIgrE,EAAAA,GAAAA,KAAA,OAAAhrE,SAAM1tG,OACV04K,EAAAA,GAAAA,KAAA,MAAAhrE,UAAIgrE,EAAAA,GAAAA,KAAA,OAAAhrE,SAAMj8G,OAAO4B,SAASqgJ,cAC1BglC,EAAAA,GAAAA,KAAA,MAAAhrE,UAAI+qE,EAAAA,GAAAA,MAAA,OAAA/qE,SAAA,CAAM8iE,GAAW,GAAEA,IAAUr/K,GAAE6xF,SACnC01F,EAAAA,GAAAA,KAAA,MAAAhrE,UAAIgrE,EAAAA,GAAAA,KAAA,OAAAhrE,SAAMv8G,GAAEuqJ,SAJL17I,EAKJ,gBAOb,ECzBV,GAxBqBxR,IAAqB,IAApB,WAAE68Q,GAAY78Q,EAChC,MAAO+qR,EAAmBC,GAAwB5/G,IAAAA,UAAe,GAEjE,IAAKyxG,EACD,OAAO,KAUX,OACI3yF,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,iBAAgBq9G,SAC1B6rK,GACK7gG,EAAAA,GAAAA,KAAC+gG,GAAa,CAACH,4BALFI,IAAMF,GAAqB,MAMxC9gG,EAAAA,GAAAA,KAACihG,GAAc,CAACT,6BAXHU,KACvB9/Q,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,oBAAoB,GACzD89K,GAAeiB,UAAU,CAAEnlL,IAAKwjL,GAAkBQ,wBAAyBz8K,MAAO,SAAU,EAUlEyjR,uBARJY,IAAML,GAAqB,MAS3C,ECrBd,IAAIM,GAAW,WACX,GAAmB,qBAAR/nR,IACP,OAAOA,IASX,SAAS2yJ,EAAS5mI,EAAK7vB,GACnB,IAAI4lC,GAAU,EAQd,OAPA/V,EAAInmB,MAAK,SAAUi3D,EAAO5uC,GACtB,OAAI4uC,EAAM,KAAO3gE,IACb4lC,EAAS7T,GACF,EAGf,IACO6T,CACX,CACA,OAAsB,WAClB,SAASkmP,IACLzrR,KAAK0rR,YAAc,EACvB,CAsEA,OArEAvsR,OAAO6H,eAAeykR,EAAQ7rR,UAAW,OAAQ,CAI7CiG,IAAK,WACD,OAAO7F,KAAK0rR,YAAYjsR,MAC5B,EACAwH,YAAY,EACZwG,cAAc,IAMlBg+Q,EAAQ7rR,UAAUiG,IAAM,SAAUlG,GAC9B,IAAI+xB,EAAQ0kI,EAASp2J,KAAK0rR,YAAa/rR,GACnC2gE,EAAQtgE,KAAK0rR,YAAYh6P,GAC7B,OAAO4uC,GAASA,EAAM,EAC1B,EAMAmrN,EAAQ7rR,UAAUmG,IAAM,SAAUpG,EAAKuH,GACnC,IAAIwqB,EAAQ0kI,EAASp2J,KAAK0rR,YAAa/rR,IAClC+xB,EACD1xB,KAAK0rR,YAAYh6P,GAAO,GAAKxqB,EAG7BlH,KAAK0rR,YAAY7kR,KAAK,CAAClH,EAAKuH,GAEpC,EAKAukR,EAAQ7rR,UAAUqZ,OAAS,SAAUtZ,GACjC,IAAI2E,EAAUtE,KAAK0rR,YACfh6P,EAAQ0kI,EAAS9xJ,EAAS3E,IACzB+xB,GACDptB,EAAQ+J,OAAOqjB,EAAO,EAE9B,EAKA+5P,EAAQ7rR,UAAUkG,IAAM,SAAUnG,GAC9B,SAAUy2J,EAASp2J,KAAK0rR,YAAa/rR,EACzC,EAIA8rR,EAAQ7rR,UAAUmM,MAAQ,WACtB/L,KAAK0rR,YAAYr9Q,OAAO,EAC5B,EAMAo9Q,EAAQ7rR,UAAUgI,QAAU,SAAUqqE,EAAU6mG,QAChC,IAARA,IAAkBA,EAAM,MAC5B,IAAK,IAAI7pF,EAAK,EAAGvoE,EAAK1mB,KAAK0rR,YAAaz8L,EAAKvoE,EAAGjnB,OAAQwvF,IAAM,CAC1D,IAAI3uB,EAAQ55C,EAAGuoE,GACfhd,EAASnyE,KAAKg5K,EAAKx4G,EAAM,GAAIA,EAAM,GACvC,CACJ,EACOmrN,CACX,CA1EsB,EA2E1B,CAjGe,GAsGXhxG,GAA8B,qBAAXt3K,QAA8C,qBAAb6B,UAA4B7B,OAAO6B,WAAaA,SAGpG2mR,GACsB,qBAAXjhR,oBAAAA,GAA0BA,oBAAAA,EAAOoD,OAASA,KAC1CpD,oBAAAA,EAES,qBAAT1H,MAAwBA,KAAK8K,OAASA,KACtC9K,KAEW,qBAAXG,QAA0BA,OAAO2K,OAASA,KAC1C3K,OAGJ8C,SAAS,cAATA,GASP2lR,GACqC,oBAA1B1zJ,sBAIAA,sBAAsB74H,KAAKssR,IAE/B,SAAU15M,GAAY,OAAOt/D,YAAW,WAAc,OAAOs/D,EAAS1sE,KAAK43D,MAAQ,GAAG,IAAO,GAAK,EAqE7G,IAGI0uN,GAAiB,CAAC,MAAO,QAAS,SAAU,OAAQ,QAAS,SAAU,OAAQ,UAE/EC,GAAwD,qBAArBjiE,iBAInCkiE,GAA0C,WAM1C,SAASA,IAML/rR,KAAKgsR,YAAa,EAMlBhsR,KAAKisR,sBAAuB,EAM5BjsR,KAAKksR,mBAAqB,KAM1BlsR,KAAKmsR,WAAa,GAClBnsR,KAAKosR,iBAAmBpsR,KAAKosR,iBAAiB/sR,KAAKW,MACnDA,KAAKqsR,QAjGb,SAAmBp6M,EAAUgK,GACzB,IAAIqwM,GAAc,EAAOC,GAAe,EAAOxxM,EAAe,EAO9D,SAASyxM,IACDF,IACAA,GAAc,EACdr6M,KAEAs6M,GACAE,GAER,CAQA,SAASC,IACLd,GAAwBY,EAC5B,CAMA,SAASC,IACL,IAAIz6E,EAAYzsM,KAAK43D,MACrB,GAAImvN,EAAa,CAEb,GAAIt6E,EAAYj3H,EA7CN,EA8CN,OAMJwxM,GAAe,CACnB,MAEID,GAAc,EACdC,GAAe,EACf55Q,WAAW+5Q,EAAiBzwM,GAEhClB,EAAei3H,CACnB,CACA,OAAOy6E,CACX,CA4CuBzoM,CAAShkF,KAAKqsR,QAAQhtR,KAAKW,MAzC9B,GA0ChB,CA+JA,OAxJA+rR,EAAyBnsR,UAAU+sR,YAAc,SAAUrjE,IACjDtpN,KAAKmsR,WAAW5hR,QAAQ++M,IAC1BtpN,KAAKmsR,WAAWtlR,KAAKyiN,GAGpBtpN,KAAKgsR,YACNhsR,KAAK4sR,UAEb,EAOAb,EAAyBnsR,UAAUitR,eAAiB,SAAUvjE,GAC1D,IAAIwjE,EAAY9sR,KAAKmsR,WACjBz6P,EAAQo7P,EAAUviR,QAAQ++M,IAEzB53L,GACDo7P,EAAUz+Q,OAAOqjB,EAAO,IAGvBo7P,EAAUrtR,QAAUO,KAAKgsR,YAC1BhsR,KAAK+sR,aAEb,EAOAhB,EAAyBnsR,UAAUysR,QAAU,WACnBrsR,KAAKgtR,oBAIvBhtR,KAAKqsR,SAEb,EASAN,EAAyBnsR,UAAUotR,iBAAmB,WAElD,IAAIC,EAAkBjtR,KAAKmsR,WAAW7iR,QAAO,SAAUggN,GACnD,OAAOA,EAAS4jE,eAAgB5jE,EAAS6jE,WAC7C,IAOA,OADAF,EAAgBrlR,SAAQ,SAAU0hN,GAAY,OAAOA,EAAS8jE,iBAAmB,IAC1EH,EAAgBxtR,OAAS,CACpC,EAOAssR,EAAyBnsR,UAAUgtR,SAAW,WAGrCnyG,KAAaz6K,KAAKgsR,aAMvBhnR,SAASgO,iBAAiB,gBAAiBhT,KAAKosR,kBAChDjpR,OAAO6P,iBAAiB,SAAUhT,KAAKqsR,SACnCP,IACA9rR,KAAKksR,mBAAqB,IAAIriE,iBAAiB7pN,KAAKqsR,SACpDrsR,KAAKksR,mBAAmB/tE,QAAQn5M,SAAU,CACtC69I,YAAY,EACZi2F,WAAW,EACXu0C,eAAe,EACft0C,SAAS,MAIb/zO,SAASgO,iBAAiB,qBAAsBhT,KAAKqsR,SACrDrsR,KAAKisR,sBAAuB,GAEhCjsR,KAAKgsR,YAAa,EACtB,EAOAD,EAAyBnsR,UAAUmtR,YAAc,WAGxCtyG,IAAcz6K,KAAKgsR,aAGxBhnR,SAASy5H,oBAAoB,gBAAiBz+H,KAAKosR,kBACnDjpR,OAAOs7H,oBAAoB,SAAUz+H,KAAKqsR,SACtCrsR,KAAKksR,oBACLlsR,KAAKksR,mBAAmB1iE,aAExBxpN,KAAKisR,sBACLjnR,SAASy5H,oBAAoB,qBAAsBz+H,KAAKqsR,SAE5DrsR,KAAKksR,mBAAqB,KAC1BlsR,KAAKisR,sBAAuB,EAC5BjsR,KAAKgsR,YAAa,EACtB,EAQAD,EAAyBnsR,UAAUwsR,iBAAmB,SAAU1lQ,GAC5D,IAAI8F,EAAK9F,EAAGkO,aAAcA,OAAsB,IAAPpI,EAAgB,GAAKA,EAEvCq/P,GAAexiR,MAAK,SAAU1J,GACjD,SAAUi1B,EAAarqB,QAAQ5K,EACnC,KAEIK,KAAKqsR,SAEb,EAMAN,EAAyBuB,YAAc,WAInC,OAHKttR,KAAKutR,YACNvtR,KAAKutR,UAAY,IAAIxB,GAElB/rR,KAAKutR,SAChB,EAMAxB,EAAyBwB,UAAY,KAC9BxB,CACX,CAjM8C,GA0M1CyB,GAAsB,SAAUluR,EAAQgB,GACxC,IAAK,IAAI2uF,EAAK,EAAGvoE,EAAKvnB,OAAOyH,KAAKtG,GAAQ2uF,EAAKvoE,EAAGjnB,OAAQwvF,IAAM,CAC5D,IAAItvF,EAAM+mB,EAAGuoE,GACb9vF,OAAO6H,eAAe1H,EAAQK,EAAK,CAC/BuH,MAAO5G,EAAMX,GACbsH,YAAY,EACZyG,UAAU,EACVD,cAAc,GAEtB,CACA,OAAOnO,CACX,EAQImuR,GAAe,SAAUnuR,GAOzB,OAHkBA,GAAUA,EAAOszL,eAAiBtzL,EAAOszL,cAAcnkB,aAGnDk9G,EAC1B,EAGI+B,GAAYC,GAAe,EAAG,EAAG,EAAG,GAOxC,SAASC,GAAQ1mR,GACb,OAAOivD,WAAWjvD,IAAU,CAChC,CAQA,SAAS2mR,GAAellR,GAEpB,IADA,IAAIytI,EAAY,GACPnnD,EAAK,EAAGA,EAAKzvF,UAAUC,OAAQwvF,IACpCmnD,EAAUnnD,EAAK,GAAKzvF,UAAUyvF,GAElC,OAAOmnD,EAAU3pI,QAAO,SAAUiuD,EAAM8qB,GAEpC,OAAO9qB,EAAOkzN,GADFjlR,EAAO,UAAY68E,EAAW,UAE9C,GAAG,EACP,CAkCA,SAASsoM,GAA0BxuR,GAG/B,IAAI69H,EAAc79H,EAAO69H,YAAaC,EAAe99H,EAAO89H,aAS5D,IAAKD,IAAgBC,EACjB,OAAOswJ,GAEX,IAAI/kR,EAAS8kR,GAAYnuR,GAAQ4lI,iBAAiB5lI,GAC9CyuR,EA3CR,SAAqBplR,GAGjB,IAFA,IACIolR,EAAW,CAAC,EACP9+L,EAAK,EAAG++L,EAFD,CAAC,MAAO,QAAS,SAAU,QAED/+L,EAAK++L,EAAYvuR,OAAQwvF,IAAM,CACrE,IAAIzJ,EAAWwoM,EAAY/+L,GACvB/nF,EAAQyB,EAAO,WAAa68E,GAChCuoM,EAASvoM,GAAYooM,GAAQ1mR,EACjC,CACA,OAAO6mR,CACX,CAkCmBE,CAAYtlR,GACvBulR,EAAWH,EAAS5+J,KAAO4+J,EAAS3+J,MACpC++J,EAAUJ,EAASn1J,IAAMm1J,EAASt1J,OAKlCl4H,EAAQqtR,GAAQjlR,EAAOpI,OAAQC,EAASotR,GAAQjlR,EAAOnI,QAqB3D,GAlByB,eAArBmI,EAAOylR,YAOHtgR,KAAK8yE,MAAMrgF,EAAQ2tR,KAAc/wJ,IACjC58H,GAASstR,GAAellR,EAAQ,OAAQ,SAAWulR,GAEnDpgR,KAAK8yE,MAAMpgF,EAAS2tR,KAAa/wJ,IACjC58H,GAAUqtR,GAAellR,EAAQ,MAAO,UAAYwlR,KAoDhE,SAA2B7uR,GACvB,OAAOA,IAAWmuR,GAAYnuR,GAAQ0F,SAASwF,eACnD,CA/CS6jR,CAAkB/uR,GAAS,CAK5B,IAAIgvR,EAAgBxgR,KAAK8yE,MAAMrgF,EAAQ2tR,GAAY/wJ,EAC/CoxJ,EAAiBzgR,KAAK8yE,MAAMpgF,EAAS2tR,GAAW/wJ,EAMpB,IAA5BtvH,KAAKwjF,IAAIg9L,KACT/tR,GAAS+tR,GAEoB,IAA7BxgR,KAAKwjF,IAAIi9L,KACT/tR,GAAU+tR,EAElB,CACA,OAAOZ,GAAeI,EAAS5+J,KAAM4+J,EAASn1J,IAAKr4H,EAAOC,EAC9D,CAOA,IAAIguR,GAGkC,qBAAvBC,mBACA,SAAUnvR,GAAU,OAAOA,aAAkBmuR,GAAYnuR,GAAQmvR,kBAAoB,EAKzF,SAAUnvR,GAAU,OAAQA,aAAkBmuR,GAAYnuR,GAAQ6iN,YAC3C,oBAAnB7iN,EAAOovR,OAAyB,EAiB/C,SAASC,GAAervR,GACpB,OAAKm7K,GAGD+zG,GAAqBlvR,GAhH7B,SAA2BA,GACvB,IAAIsvR,EAAOtvR,EAAOovR,UAClB,OAAOf,GAAe,EAAG,EAAGiB,EAAKruR,MAAOquR,EAAKpuR,OACjD,CA8GequR,CAAkBvvR,GAEtBwuR,GAA0BxuR,GALtBouR,EAMf,CAiCA,SAASC,GAAelsR,EAAGC,EAAGnB,EAAOC,GACjC,MAAO,CAAEiB,EAAGA,EAAGC,EAAGA,EAAGnB,MAAOA,EAAOC,OAAQA,EAC/C,CAMA,IAAIsuR,GAAmC,WAMnC,SAASA,EAAkBxvR,GAMvBU,KAAK+uR,eAAiB,EAMtB/uR,KAAKgvR,gBAAkB,EAMvBhvR,KAAKivR,aAAetB,GAAe,EAAG,EAAG,EAAG,GAC5C3tR,KAAKV,OAASA,CAClB,CAyBA,OAlBAwvR,EAAkBlvR,UAAUs9K,SAAW,WACnC,IAAI2X,EAAO85F,GAAe3uR,KAAKV,QAE/B,OADAU,KAAKivR,aAAep6F,EACZA,EAAKt0L,QAAUP,KAAK+uR,gBACxBl6F,EAAKr0L,SAAWR,KAAKgvR,eAC7B,EAOAF,EAAkBlvR,UAAUsvR,cAAgB,WACxC,IAAIr6F,EAAO70L,KAAKivR,aAGhB,OAFAjvR,KAAK+uR,eAAiBl6F,EAAKt0L,MAC3BP,KAAKgvR,gBAAkBn6F,EAAKr0L,OACrBq0L,CACX,EACOi6F,CACX,CApDuC,GAsDnCK,GAOA,SAA6B7vR,EAAQ8vR,GACjC,IAAIhsB,EA/FZ,SAA4B18O,GACxB,IAAIjlB,EAAIilB,EAAGjlB,EAAGC,EAAIglB,EAAGhlB,EAAGnB,EAAQmmB,EAAGnmB,MAAOC,EAASkmB,EAAGlmB,OAElD6uR,EAAoC,qBAApBC,gBAAkCA,gBAAkBnwR,OACpE01L,EAAO11L,OAAOiI,OAAOioR,EAAOzvR,WAShC,OAPA4tR,GAAmB34F,EAAM,CACrBpzL,EAAGA,EAAGC,EAAGA,EAAGnB,MAAOA,EAAOC,OAAQA,EAClCo4H,IAAKl3H,EACL0tH,MAAO3tH,EAAIlB,EACXk4H,OAAQj4H,EAASkB,EACjBytH,KAAM1tH,IAEHozL,CACX,CAiF0B06F,CAAmBH,GAOrC5B,GAAmBxtR,KAAM,CAAEV,OAAQA,EAAQ8jQ,YAAaA,GAC5D,EAIAosB,GAAmC,WAWnC,SAASA,EAAkBv9M,EAAUw9M,EAAYC,GAc7C,GAPA1vR,KAAK2vR,oBAAsB,GAM3B3vR,KAAK4vR,cAAgB,IAAIpE,GACD,oBAAbv5M,EACP,MAAM,IAAI1oE,UAAU,2DAExBvJ,KAAK6vR,UAAY59M,EACjBjyE,KAAK8vR,YAAcL,EACnBzvR,KAAK+vR,aAAeL,CACxB,CAmHA,OA5GAF,EAAkB5vR,UAAUu+M,QAAU,SAAU7+M,GAC5C,IAAKE,UAAUC,OACX,MAAM,IAAI8J,UAAU,4CAGxB,GAAuB,qBAAZo/H,SAA6BA,mBAAmBxpI,OAA3D,CAGA,KAAMG,aAAkBmuR,GAAYnuR,GAAQqpI,SACxC,MAAM,IAAIp/H,UAAU,yCAExB,IAAIymR,EAAehwR,KAAK4vR,cAEpBI,EAAalqR,IAAIxG,KAGrB0wR,EAAajqR,IAAIzG,EAAQ,IAAIwvR,GAAkBxvR,IAC/CU,KAAK8vR,YAAYnD,YAAY3sR,MAE7BA,KAAK8vR,YAAYzD,UAZjB,CAaJ,EAOAmD,EAAkB5vR,UAAUw+M,UAAY,SAAU9+M,GAC9C,IAAKE,UAAUC,OACX,MAAM,IAAI8J,UAAU,4CAGxB,GAAuB,qBAAZo/H,SAA6BA,mBAAmBxpI,OAA3D,CAGA,KAAMG,aAAkBmuR,GAAYnuR,GAAQqpI,SACxC,MAAM,IAAIp/H,UAAU,yCAExB,IAAIymR,EAAehwR,KAAK4vR,cAEnBI,EAAalqR,IAAIxG,KAGtB0wR,EAAa/2Q,OAAO3Z,GACf0wR,EAAat1N,MACd16D,KAAK8vR,YAAYjD,eAAe7sR,MAXpC,CAaJ,EAMAwvR,EAAkB5vR,UAAU4pN,WAAa,WACrCxpN,KAAKiwR,cACLjwR,KAAK4vR,cAAc7jR,QACnB/L,KAAK8vR,YAAYjD,eAAe7sR,KACpC,EAOAwvR,EAAkB5vR,UAAUstR,aAAe,WACvC,IAAI5yJ,EAAQt6H,KACZA,KAAKiwR,cACLjwR,KAAK4vR,cAAchoR,SAAQ,SAAUsoR,GAC7BA,EAAYhzG,YACZ5iD,EAAMq1J,oBAAoB9oR,KAAKqpR,EAEvC,GACJ,EAOAV,EAAkB5vR,UAAUwtR,gBAAkB,WAE1C,GAAKptR,KAAKmtR,YAAV,CAGA,IAAIr0G,EAAM94K,KAAK+vR,aAEXzrR,EAAUtE,KAAK2vR,oBAAoBl/Q,KAAI,SAAUy/Q,GACjD,OAAO,IAAIf,GAAoBe,EAAY5wR,OAAQ4wR,EAAYhB,gBACnE,IACAlvR,KAAK6vR,UAAU/vR,KAAKg5K,EAAKx0K,EAASw0K,GAClC94K,KAAKiwR,aAPL,CAQJ,EAMAT,EAAkB5vR,UAAUqwR,YAAc,WACtCjwR,KAAK2vR,oBAAoBthR,OAAO,EACpC,EAMAmhR,EAAkB5vR,UAAUutR,UAAY,WACpC,OAAOntR,KAAK2vR,oBAAoBlwR,OAAS,CAC7C,EACO+vR,CACX,CAnJuC,GAwJnC1C,GAA+B,qBAAZjpR,QAA0B,IAAIA,QAAY,IAAI2nR,GAKjEvtE,GAOA,SAASA,EAAehsI,GACpB,KAAMjyE,gBAAgBi+M,GAClB,MAAM,IAAI10M,UAAU,sCAExB,IAAK/J,UAAUC,OACX,MAAM,IAAI8J,UAAU,4CAExB,IAAIkmR,EAAa1D,GAAyBuB,cACtChkE,EAAW,IAAIkmE,GAAkBv9M,EAAUw9M,EAAYzvR,MAC3D8sR,GAAU/mR,IAAI/F,KAAMspN,EACxB,EAIJ,CACI,UACA,YACA,cACF1hN,SAAQ,SAAUkF,GAChBmxM,GAAer+M,UAAUkN,GAAU,WAC/B,IAAI4Z,EACJ,OAAQA,EAAKomQ,GAAUjnR,IAAI7F,OAAO8M,GAAQ/M,MAAM2mB,EAAIlnB,UACxD,CACJ,IAUA,SAN2C,qBAA5BmsR,GAAS1tE,eACT0tE,GAAS1tE,eAEbA,GCz5BL,SAAU/3H,GAAUjjB,GACxB,MACmB,kBAAVA,GACG,OAAVA,GACCA,EAAkB3M,WAAaptC,KAAKmjH,YAEzC,CCIO,MAAM8jJ,GAAW,CACtBC,KAAM,GACNC,WAAY,IACZC,MAAO,OAsBIC,GAAoB,CAC/B3vR,GAAI,KACJ4vR,MAAO,QACPnmR,IAAK,MACL64L,UAAW,YACXutF,SAAU,WACVC,UAAW,aC5Cb,MAAMC,GAAc,uBAKd,SAAUC,KAAsD,IAA1ChwR,EAAEpB,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,kBAAiB,QAAAsnB,EAAAtnB,UAAAC,OAAKwK,EAAe,IAAAxF,MAAAqiB,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAf9c,EAAe8c,EAAA,GAAAvnB,UAAAunB,GAEpEtd,QAAQyC,KAAK,GAAGykR,OAAgB/vR,OAASqJ,EAC3C,CCCO,MAAMktL,GAAkB,CAC7B/kE,UAAW,CACTm+J,GAAkB3vR,GAClB2vR,GAAkBC,MAClBD,GAAkBlmR,IAClBkmR,GAAkBrtF,WAGpB2tF,YAAY,EACZC,UAAW,GACXC,UAAW,GACXC,uBAAuB,EACvBC,yBAAyB,EACzBh7P,KAAM,KACNi7P,gBAAiB3qR,OAAO4qR,kBACxBC,cAAe7qR,OAAO4qR,mBAOlB,SAAUE,GAAsBpuN,GACpC,OAAKx+D,MAAMK,QAAQm+D,GAGZA,EAAM35D,QAAQmd,IAAS6qQ,OC/B9BC,ED+B0ChB,GC9B1CiB,ED8B6D/qQ,EC5BtDtnB,OAAOyT,OAAO2+Q,GAAU7xP,SAAS8xP,GAJpC,IACJD,EACAC,CD8BkE,IAFzD,EAGX,CAKM,SAAUt6N,GAAS+L,GACvB,OAAOA,aAAiB39D,MAC1B,CAMM,SAAUmsR,GAAmBxuN,GACjC,MAAO,CAAC,SAAU,YAAYvjC,gBAAgBujC,IAAU/L,GAAS+L,EACnE,CAKM,SAAUyuN,GACdzuN,GAEA,OAAKx+D,MAAMK,QAAQm+D,GAGZA,EAAM35D,OAAOmoR,IAFX,EAGX,CAYM,SAAUE,GAAa1uN,GAC3B,MAAM2uN,EAAiC,CACrC1oQ,KAAK2oQ,cACL3oQ,KAAK4oQ,uBACL5oQ,KAAKmjH,cAGP,OAdI,SAAiBppE,GACrB,OAAOA,aAAiB/5C,IAC1B,CAYS6oQ,CAAO9uN,IAAU2uN,EAAqBlyP,SAASujC,EAAM3M,SAC9D,CAKM,SAAU07N,GAAa/uN,EAAgBrf,GAC3C,GAAI+tO,GAAa1uN,GAQf,OAPKA,EAAM3U,SAAS1K,IAElBgtO,GACE,wBACA,4PAGG3tN,EAGT,MAAM64H,EAAWl4I,EAAQm4I,YAAY,CAAEk2F,UAAU,IACjD,OAAIN,GAAa71F,IACXA,IAAa92L,UAEf4rR,GACE,uBACA,yPAGG90F,GAGFl4I,EAAQgvI,cAAcuP,cAAc,QAC7C,CAMM,SAAU+vF,GAAkBjvN,GAChC,MAAwB,kBAAVA,EAAqBA,EAAQ18D,OAAO4qR,iBACpD,CElHM,SAAUgB,KAA8C,IAA3BvlQ,EAAAptB,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAyB,GAC1D,MAAOm2I,EAAY,MAAOy8I,GAAcxlQ,EACxC,OAA0B,IAAtBwlQ,EAAW3yR,OACNk2I,EAEFy8I,EAAW3lR,QAAO,CAACkrD,EAAasrG,IAC9BtrG,EAAYruD,QAAQmd,GAASw8I,EAAavjI,SAASjZ,MACzDkvH,EACL,CAKM,SAAU08I,GAAgBpvN,GAC9B,MAAQ,GAAgBv6D,UAAUu6D,EACpC,CAmBM,SAAUqvN,GAAqBppK,GACnC,MAAMqpK,EAAiBrpK,EAAKz4G,KAAKgW,IAC/B,GAAIywC,GAASzwC,GACX,OAAQw8C,GAAkBx8C,EAAK5c,KAAKo5D,GAGtC,GAAoB,oBAATx8C,EACT,OAAQw8C,IACN,MAAM19B,EAAS9e,EAAKw8C,GACpB,MAAsB,mBAAX19B,GAETqrP,GACE,mCACA,2FACAnqQ,IAEK,GAEF8e,CAAM,EAIjB,GAAoB,kBAAT9e,EAAmB,CAC5B,MAAM3R,EAAK,IAAIxP,OAAO,KAAuBmhB,EAjC5Crd,QAAQ,qBAAsB,QAE9BA,QAAQ,MAAO,MA+BqC,MACrD,OAAQ65D,GAAkBnuD,EAAGjL,KAAKo5D,EACpC,CAQA,OALA2tN,GACE,0BACA,yHACAnqQ,GAEK,KAAM,CAAK,IAGpB,OAAQw8C,GACNsvN,EAAelpR,MAAMmpR,GAAkBA,EAAcvvN,IACzD,CCvEM,SAAUwvN,GACd16F,EACA53E,EACAlqF,GAEA,MAAMsP,EAAS9gC,MAAMkB,KACnBqsR,GAAa/7P,EAAM8hK,EAAS,IAAIrpD,iBAAiBvuB,IAEnD,OACE56E,EAAO9lC,SAAWs4L,EAASt4L,QAC3Bs4L,EAASv4J,OAAOokB,GAAYre,EAAO7F,SAASkkB,IAEhD,CAmBM,SAAU8uO,GACd9uO,EACA3tB,GAEAA,EAAW,OAAJA,QAAI,IAAJA,EAAAA,EAsBH,SAAsB2tB,GAC1B,OAAOA,EAAQgvI,cAAcuP,cAAc,QAC7C,CAxBiBpG,CAAYn4I,GAC3B,MAAMre,EAAS,GACf,IAAInY,EAASw2B,EACb,KAAOsiC,GAAU94D,IAAWA,IAAW6I,GACrCsP,EAAO1+B,KAAKumB,GACZA,EAASA,EAAOq8G,cAElB,OAAOlkG,CACT,CAKM,SAAUotP,GAAW56F,EAAqB9hK,GAC9C,OAAOk8P,GACLp6F,EAAStnL,KAAKmzC,GAAY8uO,GAAkB9uO,EAAS3tB,KAEzD,CC1DO,MAAM28P,GAAqB,KAGrBC,GAAgB,IAAIvtR,OAC/B,CACE,KACA,OACAwE,KAAK,MAIIgpR,GAAmB,IAAIxtR,OAClC,CACE,MACAwE,KAAK,MAIIipR,GAAmB,CAC9BxC,GAAkBG,UAClBH,GAAkBlmR,IAClBkmR,GAAkB3vR,GAClB2vR,GAAkBC,MAClBD,GAAkBrtF,UAClBqtF,GAAkBE,UChBPuC,GAA0BV,GAAqB,CAC1D,QACA,KAEA,SAMI,SAAUW,GAAiC/yR,GAEjC,IAFkC,KAChDwR,GACcxR,EACd,MAAO,IAAIwR,IACb,CAKM,SAAUwhR,GAAuBjgR,GAGvB,IAHwB,KACtCvB,EAAI,MACJxK,GACc+L,EACd,MAAO,IAAIvB,MAASxK,KACtB,CAqBA,SAASisR,GAAqB5oQ,GAA8B,IAA7B,SAAE2pK,EAAQ,UAAEk/F,GAAiB7oQ,EAC1D,MAAO,CACL7Y,KAAM2hR,GAAqBn/F,GAC3BhtL,MAAOmsR,GAAqBD,GAEhC,CAKM,SAAUE,GACd1vO,GAEA,MAAM2vO,EAAkB9uR,MAAMkB,KAAKi+C,EAAQi/F,YACxCv5I,QAAQkqR,GA9BP,SAA8BxzQ,EAElC4jC,GAAgB,IADhB,SAAEswI,GAAgBl0K,EAIlB,MAAM3a,EAAUu+C,EAAQv+C,QAAQq5E,cAChC,QAAI,CAAC,QAAS,UAAUh/C,SAASr6B,IAAyB,UAAb6uL,KAIrC8+F,GAAwB9+F,EAClC,CAmB+Bu/F,CAAqBD,EAAe5vO,KAC9DnzC,IAAI0iR,IACP,MAAO,IACFI,EAAgB9iR,IAAIwiR,OACpBM,EAAgB9iR,IAAIyiR,IAE3B,CCnEM,SAAUQ,GACd9vO,GAEA,OAAQA,EAAQwoH,aAAa,UAAY,IACtCvkK,OACAF,MAAM,OACN2B,QAAQmd,IAAUqsQ,GAAiBjpR,KAAK4c,KACxChW,KAAKgW,GAAS,IAAI4sQ,GAAqB5sQ,MAC5C,CCRM,SAAUktQ,GACd/vO,GAEA,MAAMhjD,EAAKgjD,EAAQwoH,aAAa,OAAS,GACnCjsD,EAAW,IAAIkzK,GAAqBzyR,KACpCk7L,EAAWl4I,EAAQm4I,YAAY,CAAEk2F,UAAU,IACjD,OAAQY,GAAchpR,KAAKjJ,IAAO6xR,GAAa,CAAC7uO,GAAUu8D,EAAU27E,GAChE,CAAC37E,GACD,EACN,CCVM,SAAUyzK,GACdhwO,GAEA,MAAMx2B,EAASw2B,EAAQ2mF,WAEvB,GAAIn9G,EAAQ,CACV,MACMymQ,EADWpvR,MAAMkB,KAAKynB,EAAOk/G,YAAYhjI,OAAO48E,IACxB37E,QAAQq5C,GACtC,GAAIiwO,GAAgB,EAClB,MAAO,CAAC,cAAcA,EAAe,KAEzC,CAEA,MAAO,EACT,CCdM,SAAUC,GACdlwO,GAEA,MAAO,CACLyvO,GAAqBzvO,EAAQv+C,QAAQq5E,eAEzC,CAKM,SAAUq1M,GAAeh8F,GAC7B,MAAM3lE,EAAY,IACb,IAAIzuH,IAAI0uR,GAAat6F,EAAStnL,IAAIqjR,OAEvC,OAA4B,IAArB1hK,EAAU3yH,QAAgB2yH,EAAU3yH,OAAS,EAAI,GAAK,CAAC2yH,EAAU,GAC1E,CChBM,SAAU4hK,GACdpwO,GAEA,MAAMv5C,EAAM0pR,GAAe,CAACnwO,IAAU,GAChC6lF,EAAgB7lF,EAAQ6lF,cAE9B,GAAIA,EAAe,CACjB,MAAMolB,EAAWpqJ,MAAMkB,KAAK8jI,EAAcrqB,UAAU91G,QACjDs6C,GAAYA,EAAQv+C,QAAQq5E,gBAAkBr0E,IAE3CwpR,EAAehlI,EAAStkJ,QAAQq5C,GACtC,GAAIiwO,GAAgB,EAClB,MAAO,CACL,GAAGxpR,iBAAmBwpR,EAAe,KAG3C,CAEA,MAAO,EACT,CCJM,SAAUI,KAE0D,IADxEhxN,EAAAzjE,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAkB,IAClB,WAAE00R,EAAa3tR,OAAO4qR,mBAAiB3xR,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA+B,CAAC,EAEvE,OAAOiF,MAAMkB,KAtBT,WAA4B,IAChCs9D,EAAAzjE,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAkB,IAClB,WAAE00R,EAAa3tR,OAAO4qR,mBAAiB3xR,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA+B,CAAC,EAAC,mBAExE,IAAI20R,EAAgB,EAChBn/F,EAAUo/F,GAAgB,GAE9B,KAAOp/F,EAAQv1L,QAAUwjE,EAAMxjE,QAAU00R,EAAgBD,GAAY,CACnEC,GAAiB,EACjB,MAAM5uP,EAASyvJ,EAAQvkL,KAAKm3C,GAAWqb,EAAMrb,WACvCriB,EACNyvJ,EAAUq/F,GAAYr/F,EAAS/xH,EAAMxjE,OAAS,EAChD,CACF,CAX0E,EAWzE,CASmB60R,CAAkBrxN,EAAO,CAAEixN,eAC/C,CAKA,SAASG,KAAgD,IAApCr/F,EAAAx1L,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAoB,GAAI+0R,EAAQ/0R,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,EACtD,MAAMk7D,EAAOs6H,EAAQv1L,OACrB,GAAa,IAATi7D,EACF,MAAO,GAET,MAAMn1B,EAAS,IAAIyvJ,GACnBzvJ,EAAOm1B,EAAO,IAAM,EACpB,IAAK,IAAIhpC,EAAQgpC,EAAO,EAAGhpC,GAAS,EAAGA,IACrC,GAAI6T,EAAO7T,GAAS6iQ,EAAU,CAC5B,GAAc,IAAV7iQ,EACF,OAAO0iQ,GAAgB15N,EAAO,GAE9Bn1B,EAAO7T,EAAQ,KACf6T,EAAO7T,GAAS6T,EAAO7T,EAAQ,GAAK,CAExC,CAGF,OAAI6T,EAAOm1B,EAAO,GAAK65N,EACdH,GAAgB15N,EAAO,GAGzBn1B,CACT,CAKA,SAAS6uP,KAAwB,IAAR15N,EAAIl7D,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,EAC9B,OAAOiF,MAAMkB,KAAKlB,MAAMi2D,GAAM9zD,OAChC,CCzBO,MAAM4tR,GAAgB,IAAIriP,WAAW,GAAG3sC,SAAS,IAAI25E,cAI/Cs1M,GAAwB,sCAK/B,SAAUpB,KAA+B,IAAVpwN,EAAKzjE,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,WAC3C,OAA2B,QAApBgtB,EAAW,QAAX9F,EAAG,OAAHk4M,UAAG,IAAHA,SAAG,EAAHA,IAAKzxK,cAAM,IAAAzmC,OAAA,EAAAA,EAAA5mB,KAAA8+N,IAAG37J,UAAM,IAAAz2C,EAAAA,EAQvB,WAA+C,IAAVy2C,EAAKzjE,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,GACjD,OAAOyjE,EACJt7D,MAAM,IACN8I,KAAKqsN,GACc,MAAdA,EACK,KAAK03D,MAEVC,GAAsB5qR,KAAKizN,GACtB,KAAKA,IAEP3vK,OAAO2vK,GAAW1zN,QAAQ,KAAM,QAExCU,KAAK,GACV,CArBiC4qR,CAA2BzxN,EAC5D,CAsBO,MAAM0xN,GAAwB,CACnCtqR,IAAK0pR,GACLnzR,GLlDI,SAAwBm3L,GAC5B,OAA2B,IAApBA,EAASt4L,QAAgBs4L,EAASt4L,OAAS,EAC9C,GACAk0R,GAAsB57F,EAAS,GACrC,EK+CEy4F,MNpDI,SAA4Bz4F,GAEhC,OAAOo6F,GADkBp6F,EAAStnL,IAAIijR,IAExC,EMkDExwF,UPMI,SACJnL,GAGA,OAAOo6F,GADkBp6F,EAAStnL,IAAI6iR,IAExC,EOVE7C,SJjDI,SACJ14F,GAEA,OAAOo6F,GAAgBp6F,EAAStnL,IAAImjR,IACtC,EI8CElD,UF7CI,SACJ34F,GAEA,OAAOo6F,GAAgBp6F,EAAStnL,IAAIujR,IACtC,GE4CaY,GAAgC,CAC3CvqR,IAAKypR,GACLlzR,GAAI+yR,GACJnD,MAAOkD,GACPxwF,UAAWowF,GACX7C,SAAUmD,GACVlD,UAAWsD,IA2DP,SAAUa,GACd98F,EACA9hK,EACAob,GAEA,MAAMyjP,EASF,SACJ/8F,EACA1mJ,GAEA,MAAM,UAAE0/O,EAAS,UAAED,EAAS,sBAAEE,EAAqB,gBAAEE,GACnD7/O,EAEI0jP,EAAiBzC,GAAqBvB,GACtCiE,EAAiB1C,GAAqBxB,GAEtCmE,EAAUA,CAACpkR,EAAuBqkR,KACtC,MAAMC,EApEJ,SACJp9F,EACAm9F,SAIA,OADsC,QAApCxuQ,EAAAiuQ,GAAsBO,UAAc,IAAAxuQ,EAAAA,EAAK,IAA0B,IACvDqxK,EAChB,CA6D8Bq9F,CAAmBr9F,EAAUm9F,GACjDG,EAzDJ,WAG0B,IAD9BN,EAA8Bv1R,UAAAC,OAAA,EAAAD,UAAA,QAAA4C,EAC9B4yR,EAA8Bx1R,UAAAC,OAAA,EAAAD,UAAA,QAAA4C,EAE9B,OAJA5C,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA2B,IAIf8J,QAAQmd,GAASuuQ,EAAevuQ,KAAUsuQ,EAAetuQ,IACvE,CAmD+B6uQ,CACzBH,EACAJ,EACAC,GAEIO,EAnDJ,WAE0B,IAA9BP,EAA8Bx1R,UAAAC,OAAA,EAAAD,UAAA,QAAA4C,EAE9B,OAHA5C,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA2B,IAGf4sE,MAAK,CAAC1oE,EAAGiB,KACnB,MAAM6wR,EAAmBR,EAAetxR,GAClC+xR,EAAmBT,EAAerwR,GACxC,OAAI6wR,IAAqBC,GACf,GAELD,GAAoBC,EAChB,EAEF,CAAC,GAEZ,CAoC4BC,CAAeL,EAAoBL,GAM3D,OAJAnkR,EAAKqkR,GAAiBlE,EAClBiD,GAAYsB,EAAiB,CAAErB,WAAYhD,IAC3CqE,EAAgB9kR,KAAKgW,GAAS,CAACA,KAE5B5V,CAAI,EAGb,OAMI,SACJwgC,GAEA,MAAM,UAAE+gF,EAAS,WAAEy+J,GAAex/O,EAE5BskP,EAAmB,GAAGjtR,OAAO0pH,GAC/By+J,IAAe8E,EAAiBj2P,SAAS,QAC3Ci2P,EAAiB9uR,KAAK,OAExB,OAAO8uR,CACT,CAhBSC,CAAkBvkP,GAAS5kC,OAAOwoR,EAAS,CAAC,EACrD,CApCyBY,CAAiB99F,EAAU1mJ,GAC5CykP,EAmFF,SACJhB,EACAzjP,GAEA,OApBI,SACJA,GAEA,MAAM,UAAE+gF,EAAS,wBAAE6+J,EAAuB,WAAEJ,EAAU,cAAEO,GACtD//O,EAEI0kP,EAAe9E,EACjBgD,GAAY7hK,EAAW,CAAE8hK,WAAY9C,IACrCh/J,EAAU3hH,KAAKgW,GAAS,CAACA,KAE7B,OAAOoqQ,EAAakF,EAAatlR,IAAIulR,IAAsBD,CAC7D,CASSE,CAAqB5kP,GACzB5gC,KAAKgW,GASJ,SACJyvQ,EACAf,GAEA,MAAMtkR,EAAwB,CAAC,EAC/BqlR,EAAetuR,SAASstR,IACtB,MAAMiB,EAAoBhB,EAAkBD,GACxCiB,EAAkB12R,OAAS,IAC7BoR,EAAKqkR,GAAiBiB,EACxB,IAIF,OCjQI,WAC2B,IAA/BlzN,EAAAzjE,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA6B,CAAC,EAE1B+lC,EAA8B,GAalC,OAZApmC,OAAOmF,QAAQ2+D,GAAOr7D,SAAQ1H,IAAkB,IAAhBP,EAAKiT,GAAO1S,EAC1CqlC,EAAS3yB,EAAOivE,SAAS36E,GACD,IAAlBq+B,EAAO9lC,OACF,CAAC,CAAE,CAACE,GAAMuH,IAEVq+B,EAAO90B,KAAKkiK,GAASxzK,OAAAC,OAAAD,OAAAC,OAAC,CAAC,EACzBuzK,GAAI,CACP,CAAChzK,GAAMuH,OAGX,IAEGq+B,CACT,CD+OuB6wP,CAAuCvlR,GACxCJ,IAAI4lR,GAC1B,CAtBaC,CAAmB7vQ,EAAMquQ,KAEjCxrR,QAAQmd,GAASA,EAAKhnB,OAAS,GACpC,CA5F4B82R,CAAoBzB,EAAgBzjP,GACxDmlP,EAAgBnE,GAAayD,GACnC,MAAO,IAAI,IAAInyR,IAAI6yR,GACrB,CAsDA,SAASR,GAAmB9sK,GAC1B,OAAOA,EAAKxpF,SAAS6wP,GAAkBlmR,MACrC6+G,EAAKxpF,SAAS6wP,GAAkBG,WAC9B,IAAIxnK,GACJ,IAAIA,EAAMqnK,GAAkBlmR,IAClC,CAkEM,SAAUgsR,KACoB,IAAlCI,EAAAj3R,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAgC,CAAC,EAEjC,MAAM84C,EAAU,IAAIy6O,IASpB,OANE0D,EAAalG,GAAkBlmR,MAC/BosR,EAAalG,GAAkBG,YAE/Bp4O,EAAQjqC,OAAOiqC,EAAQ/tC,QAAQgmR,GAAkBlmR,KAAM,GAGlDiuC,EACJ7nC,KAAK3O,IAAS40R,OAvBjBC,EAuB6CF,GAxB7CvB,EAwBuCpzR,GApBnC60R,EAAezB,GAAeprR,KAAK,IACnC,GANA,IACJorR,EACAyB,CAuB0D,IACvD7sR,KAAK,GACV,CAsBA,SAAS8sR,GACPxkK,EACAykK,GAEA,MAAwB,KAAjBA,EACHzkK,EArBN,SACEA,EACAykK,GAEA,MAAO,IACFzkK,EAAU3hH,KACV0vG,GAAa02K,EAAe1G,GAASE,WAAalwK,OAElDiS,EAAU3hH,KAAK0vG,GAAa02K,EAAe1G,GAASG,MAAQnwK,IAEnE,CAYM22K,CAA8B1kK,EAAWykK,EAC/C,CAKM,SAAUE,GACdh/F,EACA9hK,GAEoC,IADpC4gQ,EAAAr3R,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA4B,GAC5B6xC,EAAoC7xC,UAAAC,OAAA,EAAAD,UAAA,QAAA4C,EAEpC,MACM40R,EAAqBJ,GADF/B,GAAgB98F,EAAU1mJ,EAAQpb,KAAMob,GACDwlP,GAChE,IAAK,MAAMI,KAAqBD,EAC9B,GAAIvE,GAAa16F,EAAUk/F,EAAmB5lP,EAAQpb,MACpD,OAAOghQ,EAGX,OAAO,IACT,CErUM,SAAUC,GACd/2K,GAEA,MAAO,CACLj5G,MAAOi5G,EACPg3K,SAAS,EAEb,CAKM,SAAUC,GACdxzO,EACAyzO,GACuC,IAAvC7iN,EAAAh1E,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA0B2wR,GAASC,KAEnC,MAAMh+J,EAAY,CAAC,EAUnB,OATAilK,EAAczvR,SAAS0vR,IACrBrjJ,QAAQluI,IACNqsH,EACAklK,EFsDA,SACJ1zO,EACA0zO,GAEA,OAAO1C,GAA8B0C,GAAc1zO,EACrD,CE1DM2zO,CAA0B3zO,EAAS0zO,GAAc7mR,IAC/CymR,IAEH,IAEI,CACLtzO,UACA4wB,WACA49C,YAEJ,CAKM,SAAUolK,GAAwBt3R,GAG1B,IAH2B,UACvCkyH,EAAS,SACT59C,GACYt0E,EACRo4C,EAAU,IAAIy6O,IAGhB3gK,EAAUm+J,GAAkBlmR,MAC5B+nH,EAAUm+J,GAAkBG,aAE5Bp4O,EAAUA,EAAQhvC,QAAQmd,GAASA,IAAS8pQ,GAAkBlmR,OAGhE,IAAI81G,EAAW,GAUf,OATA7nE,EAAQ1wC,SAAS0vR,KACSllK,EAAUklK,IAAiB,IACnC1vR,SAAQqL,IAAuB,IAAtB,MAAE/L,EAAK,QAAEiwR,GAASlkR,EACrCkkR,IACFh3K,GAAYj5G,EACd,GACA,IAGIstE,EAAW2rC,CACrB,CC7DM,SAAUs3K,GAA2B7zO,GAczC,MAAO,CAAC,WAbe8uO,GAAkB9uO,GAASya,UACd5tD,KAAKmzC,IACvC,MAAM8zO,EAAcN,GAClBxzO,EACA,CAAC2sO,GAAkBE,UACnBN,GAASG,OAKX,OAHAoH,EAAYtlK,UAAUq+J,SAAS7oR,SAAS6uR,IACtCA,EAAaU,SAAU,CAAI,IAEtBO,CAAW,IAGajnR,IAAI+mR,KAA2B1tR,KAAK,GACvE,CClBM,SAAU6tR,GACdnG,GACqD,IAArDoG,EAAAp4R,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAmD,CAAC,EAEpD,MAAMu4L,EJ8WF,SAAiCy5F,IACjCA,aAAkBqG,UAAYrG,aAAkBsG,kBAClDtG,EAAS/sR,MAAMkB,KAAK6rR,IAEtB,MAAMz5F,GAAYtzL,MAAMK,QAAQ0sR,GAAUA,EAAS,CAACA,IAASloR,OAC3D48E,IAEF,MAAO,IAAI,IAAIviF,IAAIo0L,GACrB,CItXmBggG,CAAuBvG,GAClCngP,EhB4GF,SACJuS,GACmB,IAAnBg0O,EAAcp4R,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,CAAC,EAElB,MAAM6xC,EAAOlyC,OAAAC,OAAAD,OAAAC,OAAA,GACR+3L,IACAygG,GAGL,MAAO,CACLxlK,UAAWi/J,GAAsBhgP,EAAQ+gF,WACzC0+J,UAAWY,GAA6BrgP,EAAQy/O,WAChDC,UAAWW,GAA6BrgP,EAAQ0/O,WAChD96P,KAAM+7P,GAAa3gP,EAAQpb,KAAM2tB,GACjCotO,wBAAyB3/O,EAAQ2/O,sBACjCC,0BAA2B5/O,EAAQ4/O,wBACnCJ,aAAcx/O,EAAQw/O,WACtBK,gBAAiBgB,GAAkB7gP,EAAQ6/O,iBAC3CE,cAAec,GAAkB7gP,EAAQ+/O,eAE7C,CgBhIkB4G,CAAgBjgG,EAAS,GAAI6/F,GAC7C,IAAIK,EAAkB,GAClBC,EAAc7mP,EAAQpb,KAK1B,SAASkiQ,IACP,OJiUE,SACJpgG,EACA9hK,GAEoC,IADpC4gQ,EAAAr3R,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAA4B,GAC5B6xC,EAAoC7xC,UAAAC,OAAA,EAAAD,UAAA,QAAA4C,EAEpC,GAAwB,IAApB21L,EAASt4L,OACX,OAAO,KAGT,MAAM24R,EAAiB,CACrBrgG,EAASt4L,OAAS,EAAIs4L,EAAW,MAC9B46F,GAAW56F,EAAU9hK,GAAMxlB,KAAKmzC,GAAY,CAACA,MAGlD,IAAK,MAAMy0O,KAAmBD,EAAgB,CAC5C,MAAM7yP,EAASwxP,GACbsB,EACApiQ,EACA4gQ,EACAxlP,GAEF,GAAI9L,EACF,MAAO,CACL+yP,cAAeD,EACfl4K,SAAU56E,EAGhB,CAEA,OAAO,IACT,CIhWWgzP,CACLxgG,EACAmgG,EACAD,EACA5mP,EAEJ,CAEA,IAAImnP,EAA4BL,IAChC,KAAOK,GAA2B,CAChC,MAAM,cAAEF,EAAa,SAAEn4K,GAAaq4K,EACpC,GAAI/F,GAAa16F,EAAU53E,EAAU9uE,EAAQpb,MAC3C,OAAOkqF,EAET+3K,EAAcI,EAAc,GAC5BL,EAAkB93K,EAClBq4K,EAA4BL,GAC9B,CAIA,OAAIpgG,EAASt4L,OAAS,EACbs4L,EACJtnL,KAAKmzC,GAAY+zO,GAAe/zO,EAASvS,KACzCvnC,KAAK8oR,IDdN,SAA8B76F,GAClC,OAAOA,EAAStnL,IAAIgnR,IAA4B3tR,KAAK8oR,GACvD,CCeS6F,CAAoB1gG,EAC7B,CCjDA,IAAI2gG,GAuBJ,SArBA,WACE,MAAM3zR,EAAWkwK,IAiBjB,OAfApK,EAAAA,EAAAA,YAAU,KACR7lK,SAAS+H,KAAKiG,iBAAiB,WAAYpQ,IACzC81R,GAAmBf,GAAe/0R,EAAEtD,OAAO,GAC3C,GACD,KAEHurK,EAAAA,EAAAA,YAAU,KAIe,IAAD00G,GAFtB9M,GAAoBC,YAAY3tQ,EAASgpK,SAAWhpK,EAAS+Y,QAEzD46Q,MACsC,QAAxCnZ,EAAAv6Q,SAASm9L,cAAcu2F,WAAiB,IAAAnZ,GAAxCA,EAA0CnnI,QAC5C,GACC,CAACrzI,IAEG,IACT,ECVA,MAAM4zR,WAAel0J,EAAAA,UACnB94H,WAAAA,GACEkZ,QAAQ,KASV+zQ,UAAY,SAAUj9L,EAAI1nB,GACxB,IAAIghE,EACJ,OAAO,WACLh4E,aAAag4E,GACb,IAAIhrI,EAAOxF,MAAM7E,UAAU6F,MAAM3F,KAAKN,WACtCyK,EAAKu2G,QAAQxgH,MACbi1I,EAAQtiI,WAAWshE,EAAG50E,KAAKU,MAAMk0E,EAAIhqE,GAAO0xF,EAC9C,CACF,EAfE37F,KAAK64R,gBAAiB,EACtB74R,KAAK84R,eAAiB,KACtB94R,KAAK+4R,eAAgBtuG,EAAAA,EAAAA,YACvB,CAcAr8C,oBAAAA,GACMpuI,KAAK84R,gBAAgB94R,KAAK84R,eAAetvE,YAC/C,CAEA//L,MAAAA,GACE,MAAM,MAAE1gB,EAAK,SAAEq2G,EAAQ,UAAEr9G,GAAc/B,KAAKM,MAEtCynL,EAAah/K,GAASA,EAAMgG,aAAgBhG,EAAMgG,aAAai5K,UAAY,KAC/D,IAAdD,IAEF/nL,KAAK64R,gBAAiB,GAGpB74R,KAAK64R,iBACH74R,KAAK84R,gBAAgB94R,KAAK84R,eAAetvE,aAE7CxpN,KAAK84R,eAAiB,IAAI76E,GAAej+M,KAAK44R,UAAU,KAAK,SAAUt0R,GACrEA,EAAQsD,SAAQ04D,IACVq4N,GAAOK,gBAAkB14N,EAAM8iM,YAAY5iQ,SAC7Cm4R,GAAOK,cAAgB14N,EAAM8iM,YAAY5iQ,OACzCiJ,QAAQwC,IAAI,iCAAmCq0D,EAAM8iM,YAAY5iQ,QACjE2C,OAAOiqB,OAAOylP,YAAY,CACxB/wQ,KAAM,yBACN+O,KAAM,CACJrQ,OAAQ8/D,EAAM8iM,YAAY5iQ,OAC1BD,MAAO+/D,EAAM8iM,YAAY7iQ,QAE1B,KACL,GAEJ,KAEIP,KAAK+4R,cAAcvvO,SAASxpD,KAAK84R,eAAe36E,QAAQn+M,KAAK+4R,cAAcvvO,UAGjF,IAAIyvO,GAAgB,EAChB99K,EAAM,GACV,IAEEA,EAAMh4G,OAAOy1H,IAAI7zH,SAAS0iJ,IAC5B,CAAE,MAAOr7I,IAAS,CAEd+uG,IAAQA,EAAIz7E,SAAS,uBAAyBy7E,EAAIz7E,SAAS,8BAC7Du5P,GAAgB,GAElB,MAAMC,EAAiC,IAAdnxG,EACvBh/K,EAAMgG,aAAa+R,WAAWC,MAAKmyP,GAAsB,wBAAdA,EAAKr3P,MAAiD,SAAfq3P,EAAKlyP,SACrFhhB,KAAK64R,gBAAkBI,EAE3B,OACE9uG,EAAAA,GAAAA,MAAA,OAAA/qE,SAAA,EACEgrE,EAAAA,GAAAA,KAAC+uG,GAAO,IAAKpwR,KACbohL,EAAAA,GAAAA,MAAA,OAAKpoL,UAAY,UAASA,GAAwB,MAAMk3R,EAAgB,UAAY,MAAOC,EAA+B,GAAZ,YAAiB95K,SAAA,CAC5H85K,IAAoB9uG,EAAAA,GAAAA,KAACgvG,GAAM,IAAKrwR,KACjCqhL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,eAAe5B,IAAKH,KAAK+4R,cAAc35K,SACnDA,IAEF85K,IAAoB9uG,EAAAA,GAAAA,KAACsgG,GAAM,IAC3B3hR,EAAMmG,aAAenG,EAAMgG,eAAgBq7K,EAAAA,GAAAA,KAACivG,GAAa,CAACtc,WAAYh0Q,EAAMmG,YAAYoqR,uBAE3FlvG,EAAAA,GAAAA,KAACmvG,GAAmB,MAG1B,EApFIZ,GASGK,cAAgB,EA8EzB,0ECtGA,MC+BA,GAlBqB94R,IAAgC,IAA/B,MAAE6rG,EAAK,IAAEoP,EAAG,UAAEp5G,GAAW7B,EAC7C,IAAK6rG,EACH,OAAOq+E,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,kBAExB,MAAMy3R,EAAWztL,EAAM48K,SAAW58K,EAAM48K,SAAWtkQ,oBAAS,MAE5D,OACE8lK,EAAAA,GAAAA,MAACxP,GAAI,CAAC3uJ,GAAImvF,EAAKp5G,UAAY,iBAAgBA,GAAa,KAAM,wBAAuBgqG,EAAM9qF,WAAWm+F,SAAA,EACpGgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,gBAAeq9G,UAC5BgrE,EAAAA,GAAAA,KAAA,OAAKkhB,IAAI,GAAG9+B,IAAKgtH,OAEnBpvG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,gBAAeq9G,UAC5BgrE,EAAAA,GAAAA,KAACqvG,KAAiB,CAAC93R,MAAO,CAAEksO,WAAY,YAAc7gG,WAAYjhC,EAAMlwF,KAAMoxH,QAAS,EAAGpB,QAAQ,cAE/F,EChBE6tJ,GAAeA,CAACC,EAAUC,EAAaC,IAC1CF,EAAWC,IAAgBC,EA2BrC,GAxBmBv5R,IACjB,MAAM,MAAEyrG,EAAK,YAAE6tL,EAAW,YAAEE,GAAc,EAAI,WAAEC,EAAU,WAAEC,GAAe15R,EAE3E,OACE6pL,EAAAA,GAAAA,MAAA,QAAMpoL,UAAU,YAAWq9G,SAAA,CAEtBrT,GAASA,EAAMkuL,SAAWL,EAEvB7tL,EAAM8tL,yBACFzvG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,UAASq9G,SAAEv8G,GAAE,8CAC5BunL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,QAAOq9G,SAAEv8G,GAAE,4BAC5B,KAEPkpG,GAASA,EAAMkuL,UAAYL,GACxBxvG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,UAASq9G,SAEtB,GAAEv8G,GAAE,yBAAyBkpG,EAAMkuL,YAA+B,IAAnBluL,EAAMkuL,SAAiBD,GAAc,OAASD,GAAc,YAE7G,OAEC,gEChCJ,MC+CDG,GAA8BA,CAACh4G,EAAQi4G,KAC3C,MAAM,eAAEC,EAAc,OAAEt2O,EAAM,cAAEu2O,EAAa,iBAAEC,GAAqBH,GAE7DI,EAAWvyM,GAAYk6F,EAAO/nE,QAAQkgL,GAAe70R,WAAWmC,MAAM,KAE7E,OAAOyyR,EACJhxR,QAAQ,YAAa06C,GAIrB16C,QAAQ,YAAa64K,GAAkBs4G,EAAWJ,EAAaryG,eAAiB9/F,EAAWsyM,EAAmBtyM,EAAW,IAAI,EAGlI,GD5D0BwyM,KACxB,MAAMC,UAA2Bh2J,EAAAA,UAC/Bh7G,MAAAA,GACE,MAAMixQ,EAAYF,EAAiBE,UAC7B3xR,EAAQyC,GAAAA,eAAiBA,GAAAA,eAAezC,MAAMlD,MAAQ,CAAC,EACvD80R,EAAmBD,EAAYA,EAAUn4O,KAASx5C,IAAUA,EAClE,OAAOqhL,EAAAA,GAAAA,KAACowG,EAAgB,IAAMx6R,KAAKM,MAAOyI,MAAO4xR,EAAkBzrR,YAAayrR,EAAiBzrR,aACnG,EAGF,OAAOurR,CAAkB,ECkD3B,EAnDqBv6R,IAAsF,IAArF,MAAE6rG,EAAK,eAAE6uL,EAAc,MAAE7xR,EAAK,aAAE8xR,GAAe,EAAI,oBAAEC,EAAsB,IAAI56R,EACnG,MAAM,aAAE6O,EAAY,gBAAEO,EAAe,eAAEF,GAAmBrG,EAE1D,IAAKgG,IAAiBO,IAAoBF,IAAmB28F,GAASxlG,OAAOigF,MAAMulB,EAAMxrF,QAAUha,OAAOigF,MAAMulB,EAAMrrF,KAAQ,MAAO,GAErI,IAAIy5Q,EAAe,CACjBY,UAAWD,GAAuB/rR,EAAaisR,UAC/Cl3O,OAAQx0C,EAAgB/L,OACxBgjB,KAAMjX,EAAgB4nQ,KACtBkjB,eAAgBhrR,EAAe6rR,eAC/BX,iBAAkBlrR,EAAe8rR,iBACjCb,cAAejrR,EAAe+rR,cAC9BrzG,aAAc14K,EAAeiC,cAG/B,MAAM,MAAEiP,EAAK,IAAEG,EAAG,kBAAEE,GAAsBnV,GAAAA,eAAezC,MAAMiZ,QAAQ3B,mBAAmB0rF,GAEpFqvL,EAAqBjB,EAAaY,UACrC3xR,QAAQ,WAAY8wR,GAA4B55Q,EAAO65Q,IACvD/wR,QAAQ,SAAU8wR,GAA4Bz5Q,EAAK05Q,IACnD/wR,QAAQ,uBAAwB8wR,GAA4Bv5Q,EAAmBw5Q,IAG5EkB,GAA2B,IAAX/6Q,EAGtB,OACE6pK,EAAAA,GAAAA,MAAA,QAAMpoL,UAAU,gBAAeq9G,SAAA,CAE3Bi8K,GAAgBT,IAChBzwG,EAAAA,GAAAA,MAAA,QAAMpoL,UAAU,yBAAwBq9G,SAAA,CAAEv8G,GAAE,2BAA0BunL,EAAAA,GAAAA,KAAA,QAAAhrE,SAAM,aAE9E+qE,EAAAA,GAAAA,MAAA,QAAMpoL,UAAU,QAAOq9G,SAAA,CAAEi8K,EAAeD,EAAqB,MAAM,IAAEP,IAAgBzwG,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,iBAAgBq9G,SAAE+6K,EAAa5zQ,YAC/H,IC7BL+0Q,GAAY,WAElB,MAAMC,WAAqB92J,EAAAA,UACvB94H,WAAAA,CAAYrL,GACRukB,MAAMvkB,GAAM,KAMhBk7R,kBAAoB,CAACnqP,EAASnqC,KAC1B,GAAuB,IAAnBmqC,EAAQ5xC,OACR,OAAO,KAGX,IAAI4+I,EAAWhtG,EAAQtwB,MAAM0F,GAAkBvf,IAAUuf,EAAKzF,QAK9D,YAJiB5e,IAAbi8I,IACAA,EAAWhtG,EAAQ,IAGhBgtG,CAAQ,EAClB,KAQDpC,UAAar5I,IACT,GAAc,MAAVA,EAAEjD,KAAyB,MAAViD,EAAEjD,KAAyB,MAAViD,EAAEjD,KAAyB,MAAViD,EAAEjD,IAErD,OADAiD,EAAE88H,kBACK,CACX,EACH,KAcD/jD,UAAYjB,GAAS,KAAM93E,IACnBA,EAAEtD,OAAO4H,MAAQo0R,KACjB14R,EAAEtD,OAAO4H,MAAQo0R,IAErB14R,EAAEtD,OAAO4H,MAAQga,SAASte,EAAEtD,OAAO4H,OACnClH,KAAKM,MAAMy1I,SAASnzI,EAAE,IA/CtB5C,KAAKy7R,cAAgBz7R,KAAKy7R,cAAcp8R,KAAKW,MAC7CA,KAAK07R,gBAAkBp7R,EAAMq5R,QACjC,CAeA8B,aAAAA,CAAc74R,GACVA,EAAE2kM,UACFvnM,KAAK07R,gBAAkBx6Q,SAASte,EAAEtD,OAAO4H,OACzClH,KAAK27E,UAAU/4E,EACnB,CASA+4R,gBAAAA,CAAiBC,EAAah7R,GAC1B,MAAMsG,EAAQga,SAASlhB,KAAK07R,gBAAkBE,GAC9C,GAAI10R,EAAQ,EAAG,CACX,MAAM89H,EAAKhgI,SAASm9L,cAAe,IAAGvhM,KAClCokI,IACAA,EAAG99H,MAAQA,GAEflH,KAAK07R,gBAAkBx0R,EACvBlH,KAAK27E,UAAU,CAAEr8E,OAAQ,CAAE4H,QAAOtG,OACtC,CACJ,CAUA6oB,MAAAA,GACI,MAAM,eAAEoyQ,EAAc,SAAElC,EAAQ,oBAAEmC,EAAmB,SAAE/lJ,EAAQ,GAAEn1I,EAAE,mBAAEm7R,GAAuB/7R,KAAKM,MAEjG,IAAKu7R,EACD,OAAO,KAGX,MAAMG,EAAuBH,EAAeI,SAAWj8R,KAAKw7R,kBAAkBK,EAAeI,QAAStC,GAEtG,OAAQxvG,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,mBAAkBq9G,SAAA,EACnCy8K,EAAeK,aAAeH,IAC5B3xG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBAAqBq9G,UAChCgrE,EAAAA,GAAAA,KAAA,QAAMroL,UAAW,mCAAqC+5R,EAAqBl7R,GAAI,YAAcA,EAAGw+G,SAAEu6K,OAGxGkC,EAAeK,YAAcH,IAC3B5xG,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,oCAAmCq9G,SAAA,EAC9C+qE,EAAAA,GAAAA,MAAA,QAAMpoL,UAAU,iBAAgBq9G,SAAA,CAAEv8G,GAAE,oBAAoB,QACxDunL,EAAAA,GAAAA,KAAA,QAAMroL,UAAW,mCAAqC+5R,EAAqBl7R,GAAI,YAAcA,EAAGw+G,SAAEu6K,OAGzGkC,EAAeK,YAAyC,OAA3BL,EAAeI,UAAqBF,IAC9D3xG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,uBAAsBq9G,UACjCgrE,EAAAA,GAAAA,KAAA,SAAOxpL,GAAI,YAAcA,EAAIkB,KAAM,SAAUC,UAAW,mCAAqC+5R,EACzF/lJ,SAAU/1I,KAAKy7R,cAAe/5P,aAAe8kD,MAAMmzM,GAAiC,KAArBz4Q,SAASy4Q,GACxE19I,UAAWj8I,KAAKi8I,UAChB0sH,QAAU/lQ,IAAgB,MAGrCi5R,EAAeK,YAAyC,OAA3BL,EAAeI,SAAoBF,IAC7D5xG,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,uCAAsCq9G,SAAA,EACjDgrE,EAAAA,GAAAA,KAAA,QAAMroL,UAAY,oBAAkB/B,KAAK07R,iBAAmB,EAAI,WAAa,IACzE7iJ,QAASA,KAAQ74I,KAAK27R,kBAAkB,EAAG,YAAc/6R,EAAG,EAAGw+G,SAAC,OACpEgrE,EAAAA,GAAAA,KAAA,SAAOxpL,GAAI,YAAcA,EAAIkB,KAAM,SAAUC,UAAW,oCAAsC+5R,EAC1F/lJ,SAAU/1I,KAAKy7R,cAAe/5P,aAAe8kD,MAAMmzM,GAAiC,KAArBz4Q,SAASy4Q,GACxE19I,UAAWj8I,KAAKi8I,UAChB0sH,QAAU/lQ,IAAgB,KAC9BwnL,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,iBAAiB82I,QAASA,KAAQ74I,KAAK27R,iBAAiB,EAAG,YAAc/6R,EAAG,EAAGw+G,SAAC,SAIvGy8K,EAAeK,YAAwC,MAA1BL,EAAeI,SAAmBJ,EAAeI,QAAQx8R,SAAWs8R,IAC9F3xG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBAAqBq9G,UAChCgrE,EAAAA,GAAAA,KAAA,UAAQxpL,GAAI,YAAcA,EAAIm1I,SAAUA,EAAUh0I,UAAW,sCAAwC+5R,EAAqBp6P,aAAcs6P,EAAqBh7Q,MAAO5gB,MAAO47R,EAAqBngR,KAAKujG,SAChMy8K,EAAeI,QAAQxrR,KAAKgW,IAClB2jK,EAAAA,GAAAA,KAAA,UAAyBljL,MAAOuf,EAAKzF,MAAMo+F,SAAG34F,EAAK5K,MAAtC4K,EAAKzF,aAKxC66Q,EAAeK,YAAwC,MAA1BL,EAAeI,SAAmBJ,EAAeI,QAAQx8R,QAAUs8R,IAC7F3xG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,mCAAkCq9G,UAC7CgrE,EAAAA,GAAAA,KAAA,UAAQxpL,GAAI,YAAcA,EAAIm1I,SAAUA,EAAUh0I,UAAW,mDAAqD+5R,EAAqBp6P,aAAcs6P,EAAqBh7Q,MAAO5gB,MAAO47R,EAAqBngR,KAAKujG,SAC7My8K,EAAeI,QAAQxrR,KAAKgW,IAClB2jK,EAAAA,GAAAA,KAAA,UAAyBljL,MAAOuf,EAAKzF,MAAMo+F,SAAG34F,EAAK5K,MAAtC4K,EAAKzF,eAMjD,EAEJ,YCzCA,MC5CA,GAtCwB1gB,IACtB,MAAM,MAAEyrG,EAAK,YAAE6tL,EAAW,eAAEgB,GAAmBt6R,EAE/C,IAAKyrG,EACH,OAAO,KAGT,MAAMowL,EAAepwL,GAA4B,OAAnBA,EAAMqwL,UAC9B,SAAEC,EAAQ,SAAED,EAAQ,aAAEE,GAAiBvwL,EAC7C,OACEq+E,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,mBAAkBq9G,SAE9B+8K,EACKvC,EAAc,GAAKgB,EAAkB/3R,GAAE,wCAAyC,CACjF05R,gBAAiB3C,EACjB4C,mBAAoBH,EAASI,aAC1B,GACc,IAAhB7C,GAAsBgB,EAQvB/3R,GAAE,wCACA,CACE05R,gBAAiB3C,EACjB8C,mBAAoBN,EAASK,WAC7BH,eACAK,aAAcP,EAASvgR,KACvB2gR,mBAAoBH,EAASI,aAb/B55R,GAAE,mCAAoC,CACtC65R,mBAAoBN,EAASK,WAC7BH,eACAK,aAAcP,EAASvgR,KACvB2gR,mBAAoBH,EAASI,cAYhC,ECiIX,GApKqBn8R,IACnB,MAAMs1K,EAAWR,KACVwnH,EAAkBC,IAAuBjyH,EAAAA,EAAAA,UAAS,OAClDkyH,EAAoBC,IAAyBnyH,EAAAA,EAAAA,WAAS,IACtDoyH,EAAsBC,IAA2BryH,EAAAA,EAAAA,UAAS,OAC1DsyH,EAAsBC,IAA2BvyH,EAAAA,EAAAA,WAAS,IAC1D+uH,EAAUyD,IAAexyH,EAAAA,EAAAA,UAAS,OAClCyyH,EAAiBC,IAAsB1yH,EAAAA,EAAAA,WAAS,IAChD2yH,EAA2BC,IAAgC5yH,EAAAA,EAAAA,UAAS,MAC3E,IAAI,iBAAC6yH,EAAgB,iBAAEC,EAAgB,MAAE3xL,EAAK,IAAEoP,EAAG,SAAEwiL,EAAQ,UAAE57R,GAAazB,EAE5E,MAqEMu4I,EAAW19B,IACI,kBAARA,GACTy6D,EAASz6D,EACX,EASF,IANA0vD,EAAAA,EAAAA,YAAU,IACD,KACL5tG,aAAasgO,EAA0B,GAExC,CAACA,KAECxxL,EACH,OAAO,KAGT2xL,EAAmBA,GAAsC,EACzDD,EAAmBA,GAAsC,EAEzD,MAAMjE,EAAYztL,GAASA,EAAM48K,SAAY58K,EAAM48K,SAAWtkQ,oBAAS,MACjEu5Q,EAAwB7xL,EAAM8xL,eAAiB9xL,EAAM8xL,cAAch2R,OAAOpI,OAAS,EAAK,GAAEssG,EAAMlwF,UAAUkwF,EAAM8xL,gBAAkB9xL,EAAMlwF,KACxIiiR,EAAqB/xL,EAAMgyL,eAAiBhyL,EAAMgyL,cAAcC,oBAChEC,EAAsBjB,GAAwBjxL,EAAMmyL,aACpDtD,GAAkBoC,IAAyBc,EAC1BnE,GAAY5tL,EAAMwwL,gBAEzC,OACEpyG,EAAAA,GAAAA,MAAA,OAAKpoL,UAAY,gBAAeA,GAAwB,KAAM,wBAAuBgqG,EAAM9qF,WAAWm+F,SAAA,EACpGgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,gBAAgB82I,QAASA,IAAMA,EAAQ19B,GAAKiE,UACzDgrE,EAAAA,GAAAA,KAAC2iB,GAAW,CAAChrM,UAAU,QAAQyqK,IAAKgtH,OAEtCpvG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,eAAeJ,MAAO,CAAC8hI,UAAiC,IAAnBi6J,EAAF,MAA+B7kJ,QAASA,IAAMA,EAAQ19B,GAAKiE,UAC3GgrE,EAAAA,GAAAA,KAAC4lB,GAAO,CAACtZ,UAAU,MAAMjuL,KAAMm1R,EAAuB3wJ,QAASywJ,OAEjEtzG,EAAAA,GAAAA,KAAC+zG,GAAS,CAACpyL,MAAOA,EAAMoyL,UAAWvE,YAAa7tL,EAAMwwL,kBACrDoB,IAAYvzG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBAAsBJ,MAAO,CAAC8hI,UAAiC,IAAnBg6J,EAAF,MAA8Br+K,UAClGgrE,EAAAA,GAAAA,KAAC4lB,GAAO,CAACtZ,UAAU,SAASjuL,KAAMsjG,EAAMqyL,iBAAkBnxJ,QAASwwJ,MAGpE1xL,EAAMsyL,YAAcJ,IAAuB9zG,EAAAA,GAAAA,MAAA,OAAA/qE,SAAA,EAC1CgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,gBAAeq9G,UAC5BgrE,EAAAA,GAAAA,KAACk0G,GAAc,CAAC1E,YAAa7tL,EAAMwwL,gBAAiBxwL,MAAOA,EAAMwyL,KAAM3D,eAAgBA,OAEzFxwG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,gBAAeq9G,SAC3B09K,GACC1yG,EAAAA,GAAAA,KAACE,GAAW,KAAKF,EAAAA,GAAAA,KAAC7pK,GAAK,CAACwrF,MAAOkyL,EAAqBrD,eAAgBA,UAI1ExwG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBA8BX,EC7GV,GAvDsB7B,IAAgE,IAA/D,SAAEs5R,EAAQ,MAAEp5R,EAAK,SAAEo+R,EAAQ,WAAEC,EAAU,IAAEtjL,EAAG,UAAEp5G,GAAW7B,EAC9E,MAAMw+R,GAAgBl0F,EAAAA,EAAAA,UAChB50B,EAAWR,IAqCjB,OAvBAvK,EAAAA,EAAAA,YAAU,KACR,MAAM8zH,EAAgBA,KACpB,IAAID,EACF,OAGF,MAAMjjH,EAASijH,EAAcl1O,QAAQ24I,cAAc,WAC7C5hM,EAAQyE,SAAS+H,KAAKowH,YAExBh6H,OAAOgnR,WAAY,eAAcC,GAAMwU,OAAO72P,QAChD0zI,EAAO95K,MAAM,aAAkBpB,EAAS,GAAX,KAE7Bk7K,EAAO95K,MAAM,aAAe,EAC9B,EAOF,OAJAwB,OAAO6P,iBAAiB,SAAU2rR,GAClC36M,GAAS,IAAM26M,GACfA,IAEO,IAAOx7R,OAAOs7H,oBAAoB,SAAUkgK,EAAc,GAChE,KAGDx0G,EAAAA,GAAAA,MAAA,OAAKpoL,UAAY,kBAAiBA,GAAa,KAAM5B,IAAKu+R,EAAct/K,SAAA,CAEpEo6K,IAAYpvG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,kBAAkByqK,IAAM,GAAEgtH,IAAYluF,IAAI,MAEvElhB,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,OAAMq9G,UACnB+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,aAAYq9G,SAAA,EACzBgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,aAAYq9G,SAAEh/G,KAC7BgqL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,gBAAeq9G,SAAEo/K,KAChCp0G,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,iCAAiC82I,QAASA,IA5CnD19B,KACRA,IAGAA,EAAIlqE,WAAW,QACjB9tC,OAAO4B,SAAS0iJ,KAAOtsC,EAGvBy6D,EAASz6D,GACX,EAmCqE0jL,CAAK1jL,GAAKiE,SAAEq/K,WAG3E,ECqHV,GA1Jcn+R,IACZ,MAAQ4O,aAAa,WAAE8B,IAAiB1Q,GAEjCw+R,EAAUC,IAAen0H,EAAAA,EAAAA,WAAS,IAClCo0H,EAAwBC,IAA6Br0H,EAAAA,EAAAA,UAAS,KAC9Ds0H,EAAsBC,IAA2Bv0H,EAAAA,EAAAA,UAAS,OAC1Dw0H,EAAsBC,IAA2Bz0H,EAAAA,EAAAA,UAAS,MAE3D00H,EAAwBztB,GAAiB,oCAAqCxtP,oBAAS,OAAmC,GAC1Hk7Q,EAAqB1tB,GAAiB,wCAAyChvQ,GAAE,wBACjF28R,EAAwB3tB,GAAiB,uCAAwChvQ,GAAE,2BACnF48R,EAA0B5tB,GAAiB,0CAA2ChvQ,GAAE,8BACxF+qM,EAAWA,IAAMmxF,EAAY/5R,SAAS+H,KAAKowH,YAAcj8G,SAASkpQ,GAAMwU,GAAGx1R,QAAQ,KAAM,MA2C/F,OAzCAyhK,EAAAA,EAAAA,YAAU,KACR1nK,OAAO6P,iBAAiB,SAAU46L,EAASvuM,UAAK,IAChD2kF,GAAS,IAAK4pH,GAEd,WAEE,IAAI,MAAE8xF,EAAK,WAAEl+Q,SAAqBhW,GAAAA,eAAeiX,IAAIzR,WAAWsI,iBAAiB,EAD/D,KAElB,GAAc,IAAVomR,EACF,OAGF,MAAM/2G,EAAO76K,KAAKwvD,KAAKoiO,EANL,KAOlB,GAAI/2G,EAAO,EAAG,CACZ,MAAQnnK,WAAYm+Q,SAA6Bn0R,GAAAA,eAAeiX,IAAIzR,WAAWsI,iBAAiBqvK,EARhF,KASZg3G,EAAmBlgS,OAAS,IAC9B+hB,EAAam+Q,EAEjB,CAEA,MAAMP,EAAuB59Q,EAAWA,EAAW/hB,OAAS,IACtD,SAAEmgS,SAAmBp0R,GAAAA,eAAeiX,IAAIhR,SAASiL,YAAY0iR,EAAqB9tR,GAAI,GAC5F6tR,EAAwBS,GACxBP,EAAwBD,EACzB,EAnBD,GAqBAxxF,IACO,KACLzqM,OAAOs7H,oBAAoB,SAAUmvE,GAoHzCpiM,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,wBACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,wBACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,kBACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,oBACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,sBACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,8BACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,aACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,2BA1HlB,IAEnB,KAEH4xJ,EAAAA,EAAAA,YAAU,KACR,GAAI75J,GAAcA,EAAWvR,SAAWu/R,EAAwB,CAC9D,MAAM,WAAE/9Q,EAAU,KAAEpF,GAAS7K,EAAW,GAClC6uR,EAAa1vB,GAAatqQ,IAAI,CAAE8iL,KAAM,WAAY/nL,GAAIqgB,EAAYvP,KAAM+vK,GAAmB5lK,KACjGojR,EAA0BptB,GAAiB,yCAA0CguB,GAAY,GAAO,GAC1G,IAEC,CAACv/R,EAAM4O,YAAa8B,IAElB1Q,EAAMyI,OAKTohL,EAAAA,GAAAA,MAACwuG,GAAM,IAAKr4R,EAAOyB,UAAU,OAAMq9G,SAAA,EACjCgrE,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,kBACX04K,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,oBAAmBq9G,UAChCgrE,EAAAA,GAAAA,KAACijB,GAAM,CAAAjuF,UACLgrE,EAAAA,GAAAA,KAAC01G,GAAa,CACZtG,SAAU8F,EACVl/R,MAAOm/R,EACPf,SAAUgB,EACVf,WAAYgB,EACZtkL,IAAK6jL,SAkBX50G,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,iBAAgBq9G,SAC5BpuG,GAAcA,EAAWvR,OAAS,IACjC2qL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,qBAAoBq9G,SAG7BpuG,EAAWP,KAAKs7F,IACLq+E,EAAAA,GAAAA,KAAC21F,GAAY,CAAgBh0K,MAAOA,EACtBoP,IAAKg1J,GAAatqQ,IAAI,CACpB8iL,KAAM,WACN/nL,GAAImrG,EAAM9qF,WACVvP,KAAM+vK,GAAmB11E,EAAMlwF,SAJ5BkwF,EAAMz6F,WAuD9C84K,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,uBA5FN,IA6FE,ECxKb,MCmBMquR,GAAmBA,KACvBv0R,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,4BACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,yBACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,mBACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,iBACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,kBACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,oBACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,sBACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,8BACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,aACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,2BAA2B,EAqIrE,GAlIkB3Y,IAChB,MAAQM,GAAIo/R,GAAuB7pH,KAC5B2oH,EAAUC,IAAen0H,EAAAA,EAAAA,WAAS,IAClCq1H,EAAYC,IAAiBt1H,EAAAA,EAAAA,UAAS,OACtCp5J,EAAiB2uR,IAAsBv1H,EAAAA,EAAAA,UAAS,OAChDz5J,EAAeivR,IAAoBx1H,EAAAA,EAAAA,UAAS,OAC5Cy1H,EAA0BC,IAA+B11H,EAAAA,EAAAA,UAAS,OAClE21H,EAAuBC,IAA4B51H,EAAAA,EAAAA,UAAS,OAC5D61H,EAAmBC,IAAwB91H,EAAAA,EAAAA,WAAS,GACrDwiC,EAAeizF,GAA4BA,EAAyB5gS,OAAS8gS,EAE7E3yF,EAAW5pH,GAAS,KAAK,IAAM+6M,EAAY/5R,SAAS+H,KAAKowH,YAAcj8G,SAASkpQ,GAAMwU,GAAGx1R,QAAQ,KAAM,QACvGuhI,EAAcj+H,UAClB,GAAIszR,KAAsC,OAAfxuR,QAAe,IAAfA,OAAe,EAAfA,EAAiByP,YAAY,CAAC,IAAD0/Q,EACtDZ,KACA,MAAMa,QAAsBp1R,GAAAA,eAAeiX,IAAIzR,WAAWwI,0BAA0BwmR,GACpFE,EAAcU,GACdT,QAAyB30R,GAAAA,eAAeiX,IAAIzR,WAAWyI,YAAYmnR,IACnER,EAAkH,QAAlGO,QAAQn1R,GAAAA,eAAeiX,IAAIzR,WAAWuI,iBAAiBqnR,EAAe,EAjC3D,YAiCuF,IAAAD,OAAA,EAAjGA,EAAoGn/Q,YACrH,MAAM,SAAEo+Q,EAAQ,MAAEF,SAAgBl0R,GAAAA,eAAeiX,IAAIhR,SAASiL,YAAYkkR,EAAe,EAnCpE,GAoCrBN,EAA4BV,GAC5BY,EAAyBd,GAEzBgB,GAAqB,KAAM,IAC3BA,GAAqB,KAAM,GAC7B,GAGIG,GAAe1uG,EAAAA,EAAAA,cAAYzlL,UAC/B,IAAKpM,EAAM4O,YACT,OAAO,KAET,MAAM4xR,EAAWT,EAA2BvyR,KAAKwvD,KAAK+iO,EAAyB5gS,OAhDxD,GAgDuF,EAAI,GAC1GmgS,SAAUnuR,SAAmBjG,GAAAA,eAAeiX,IAAIhR,SAASiL,aAA2B,OAAflL,QAAe,IAAfA,OAAe,EAAfA,EAAiBF,KAAM2uR,EAAYa,EAjDzF,GAkDjBC,EAAiBV,EAA2B,IAAIA,KAA6B5uR,GAAYA,EAC/F6uR,EAA4BS,GAC5Bv1R,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,2BAA4Bg7R,EAAe,GAC/E,CAACV,EAAyC,OAAf7uR,QAAe,IAAfA,OAAe,EAAfA,EAAiBF,GAAI2uR,EAAY3/R,EAAM4O,cA4BrE,IA1BA27J,EAAAA,EAAAA,YAAU,KACR,WACE1nK,OAAO6P,iBAAiB,SAAU46L,SAC5BjjE,GACP,EAHD,GAIO,KACLxnI,OAAOs7H,oBAAoB,SAAUmvE,GACrCmyF,IAAkB,IAGnB,KAEHl1H,EAAAA,EAAAA,YAAU,KACR,iBAAmBlgC,GAAa,EAAhC,EAAmC,GAElC,CAACq1J,KAEJn1H,EAAAA,EAAAA,YAAU,KACU7lK,SAAS+H,KAAKmwH,eACV/5H,OAAO6nI,aAEJq1J,GAA4BjzF,GAA+B,OAAf57L,QAAe,IAAfA,GAAAA,EAAiBF,IACpFuvR,GACF,GACC,CAACR,EAAyC,OAAf7uR,QAAe,IAAfA,OAAe,EAAfA,EAAiBF,GAAI87L,EAAcyzF,KAE5DvgS,EAAM4O,YACT,OAAO,KAET,MAAM8xR,EACJT,EACIpvR,GAAiBA,EAAc1R,OAAS,EACtCoD,GAAE,mCAAoC,CAAE83B,MAAO4lQ,IAC/C19R,GAAE,0BAA2B,CAAE83B,MAAO4lQ,IACxC,GAEN,OAEEp2G,EAAAA,GAAAA,MAACwuG,GAAM,IAAKr4R,EAAOyB,UAAU,WAAUq9G,SAAA,EACrCgrE,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,kBACX04K,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,QAAQwtI,wBAAyB,CAAEC,OAAQh+H,GAAmBA,EAAgBqK,QAE5F4kR,GAAqBtvR,GAAiBA,EAAc1R,OAAS,IAC5D0qL,EAAAA,GAAAA,MAAA,OAAA/qE,SAAA,EACEgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,qBAAoBq9G,UACjCgrE,EAAAA,GAAAA,KAACijB,GAAM,CAA0BQ,OAAK,EAAAzuF,SAElCjuG,EAAcV,KAAKs7F,IACRq+E,EAAAA,GAAAA,KAAC21F,GAAY,CAAgBh0K,MAAOA,EACtBoP,IAAKg1J,GAAatqQ,IAAI,CAAE8iL,KAAM,WAAY/nL,GAAImrG,EAAM9qF,WAAYvP,KAAM+vK,GAAmB11E,EAAMlwF,SAD1FkwF,EAAMz6F,OAH3BE,EAAgBF,OAU/B84K,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,eAGlByP,GAAmB6uR,GAA4BA,EAAyB5gS,OAAS,IAChF2qL,EAAAA,GAAAA,KAAA,OAAAhrE,UACEgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,4BAA2Bq9G,UACxCgrE,EAAAA,GAAAA,KAAC+iB,GAAiB,CAAC/sM,MAAO4gS,EAAc5zF,aAAcA,EAAcvuE,SAAUgiK,EAAazhL,SAEvFihL,EAAyB5vR,KAAKs7F,KAE1B+yL,GACA/yL,EAAMjrF,iBACmF1e,IAAzF2pG,EAAMjrF,WAAWC,MAAKmyP,GAAsB,iBAAdA,EAAKr3P,MAA0C,SAAfq3P,EAAKlyP,WAGnEopK,EAAAA,GAAAA,KAAC62G,GAAW,CAEVl1L,MAAOA,EAAO4xL,UAAQ,EACtBD,iBAAiB,IACjBD,iBAAiB,IACjBtiL,IAAK8/J,GAAelvK,GAChBokK,GAAatqQ,IAAI,CAAE8iL,KAAM,WAAY/nL,GAAImrG,EAAM9qF,WAAYvP,KAAM+vK,GAAmB11E,EAAMlwF,QAC1Fs0P,GAAatqQ,IAAI,CAAE8iL,KAAM,UAAW/nL,GAAImrG,EAAM9qF,WAAYvP,KAAM+vK,GAAmB11E,EAAMlwF,SANxFkwF,EAAMz6F,aAe3B84K,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,sBACJ,EC5Eb,GA1EgBpR,IAAW,IAAD4gS,EAAAC,EACxB,MAAMvrH,EAAWR,IAEXgsH,EAAsBx+R,IAC1B,MAAMsH,EAAMtH,EAAEiO,KACd,IAAK3G,IAAQA,EAAIpI,KACf,OAGF,MAAMigL,EAAS5+K,OAAO4B,SAASgpK,SAAW5qK,OAAO4B,SAAS+Y,OAG1D,GAAiB,qBAAb5T,EAAIpI,KAEN,YADA2wQ,GAAoBsD,wBAAwB7rQ,GAI9C,GAAiB,iBAAbA,EAAIpI,MAAwC,qBAAboI,EAAIpI,KAErC,YADA2wQ,GAAoBkD,oBAAoBzrQ,EAAK63K,GAI/C,GAAiB,2BAAb73K,EAAIpI,MAAkD,0BAAboI,EAAIpI,KAE/C,YADA2wQ,GAAoBoD,wBAAwB3rQ,GAI9C,GAAiB,sBAAbA,EAAIpI,KAA8B,CAAC,IAADu/R,EACpC,GAAY,QAARA,EAAAn3R,EAAI2G,YAAI,IAAAwwR,GAARA,EAAUC,sBAAoE,IAA5CpgR,SAAShX,EAAI2G,KAAKywR,sBACtD,OAOF,YALC91R,GAAAA,eAAeiX,IAAI9I,OAAOC,uBACxBpG,MAAMzC,IACLvF,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,oBAAqBgL,EAAkB,GAIlF,CAEA,MAAQqlQ,eAAgBmrB,GAAmC9uB,GAAoBwD,wBAAwB/rQ,EAAK63K,GACrFw/G,GAAkC9uB,GAAoB6D,gBAAgBpsQ,IAEpE,CAAC,QAAS,QAAS,SAAU,gBAAiB,gBAAiB,aAAc,cAAe,aAAc,gBAAiB,4CAA6C,kBAAmB,gBAAgBw1B,SAASx1B,EAAIpI,OAAU0J,GAAAA,eAAezC,MAAMuF,SAASpE,EAAK,EAqBhS,OAlBA2gK,EAAAA,EAAAA,YAAU,KACR4nG,GAAoB0B,YAAcv+F,CAAQ,KAG5C/K,EAAAA,EAAAA,YAAU,KACR1nK,OAAO6P,iBAAiB,SAAUy/P,GAAoBe,cACtDrwQ,OAAO6P,iBAAiB,UAAWouR,GACnCj+R,OAAO6P,iBAAiB,QAAQ,IAAMy/P,GAAoBa,yBAE1Db,GAAoBiD,yBAEb,KACLvyQ,OAAOs7H,oBAAoB,SAAUg0I,GAAoBe,cACzDrwQ,OAAOs7H,oBAAoB,UAAW2iK,GACtCj+R,OAAOs7H,oBAAoB,QAAQ,IAAMg0I,GAAoBa,wBAAuB,IAErF,KAGDlpF,EAAAA,GAAAA,KAACuuG,GAAM,IAAKr4R,EAAK8+G,SACK,QAAnB8hL,EAAA/9R,OAAOuxQ,oBAAY,IAAAwsB,GAAuB,QAAvBC,EAAnBD,EAAqBvsB,6BAAqB,IAAAwsB,GAA1CA,EAA4CzhQ,SAAS,aACpD0qJ,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,2BAA0Bq9G,UACzCgrE,EAAAA,GAAAA,KAAA,MAAAhrE,SAAKv8G,GAAE,uCAETunL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,mBAAmB5B,IAAKyC,GAAK6vQ,GAAoBc,gBAAkB3wQ,KAC3E,ECrDb,GApBiBtC,IAAW,IAADkhS,EACzB,MAAM7sQ,EAASwhJ,IAcf,OAZAtL,EAAAA,EAAAA,YAAU,KACR,WACE,MAAM42H,QAAkBj2R,GAAAA,eAAeiX,IAAIhR,SAASgL,yBAAyBkY,EAAO/zB,IAC9E+wQ,QAAuBnmQ,GAAAA,eAAeiX,IAAIhR,SAASkL,eAAe8kR,GAAW,GACnFj2R,GAAAA,eAAezC,MAAMmG,YAAY+S,QAAQ,CAAE0vP,kBAC5C,EAJD,GAKO,KACLnmQ,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,iBAAiB,IAG1D,IAEmB,QAAlBuoR,EAAClhS,EAAM4O,mBAAW,IAAAsyR,GAAjBA,EAAmB7vB,gBAGjBvnF,EAAAA,GAAAA,KAACt/H,GAAM,IAAKxqD,IAFV,IAEkB,ECX7B,MAAMohS,WAAoBj9J,EAAAA,UACxB94H,WAAAA,CAAarL,GACXukB,MAAMvkB,GAENN,KAAK+I,MAAQ,CACXo8N,aAAc,IAGhBnlO,KAAK+1I,SAAW/1I,KAAK+1I,SAAS12I,KAAKW,MACnCA,KAAK2hS,0BAA4B3hS,KAAK2hS,0BAA0BtiS,KAAKW,KACvE,CAEA8tI,iBAAAA,GACE,MAAQ8zJ,cAAgB7D,eAAe,SAAE9D,IAAY,WAAE4H,GAAe7hS,KAAKM,MAEtE25R,EAASiC,YAAmC,OAArBjC,EAASgC,SAEnCj8R,KAAK+1I,SAAS,CAAEz2I,OAAQ,CAAE4H,MAAO26R,EAAW5H,WAEhD,CAEA0H,yBAAAA,CAA2Bz6R,GACzB,MAAQ06R,cAAgB7D,eAAiB9D,UAAU,QAAE6H,EAAO,QAAEC,MAAkB/hS,KAAKM,MAErF,OAAK4G,GAASs/E,MAAMt/E,GACXrE,GAAE,mCAGPi/R,GAAWv7R,OAAOW,GAAS46R,EACtBj/R,GAAE,iCAAkC,CAAE05R,gBAAiBuF,IAG5DC,GAAWx7R,OAAOW,GAAS66R,EACtBl/R,GAAE,iCAAkC,CAAEm/R,gBAAiBD,IAGzD,IACT,CAEAhsJ,QAAAA,CAAUnzI,GACR,MAAM,iBAAEq/R,GAAqBjiS,KAAKM,MAE5B4G,EAAQtE,EAAEtD,OAAO4H,MACjBi+N,EAAenlO,KAAK2hS,0BAA0Bz6R,GAEpDlH,KAAK28H,SAAS,CAAEwoG,aAAcA,IAG9B88D,EAAiB/6R,EAAwB,OAAjBi+N,EAC1B,CAEA17M,MAAAA,GACE,MAAQm4Q,cAAgB7D,eAAe,SAAE9D,GAAU,GAAE3oR,GAAI,WAAEuwR,GAAe7hS,KAAKM,MAG/E,IAAK25R,IAAcA,EAASiC,YAAsC,IAAxB2F,EAAW5H,SACnD,OAAO,KAET,MAAM6B,EAAsB97R,KAAK+I,MAAMo8N,aAAe,YAAc,GAEpE,OAAQh7C,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,yBAAwBq9G,SAAA,EAC7CgrE,EAAAA,GAAAA,KAACmxG,GAAY,CACXM,eAAgB5B,EAChB6B,oBAAqBA,EACrBnC,SAAUkI,EAAW5H,SACrBr5R,GAAI0Q,EACJykI,SAAU/1I,KAAK+1I,WAEhB/1I,KAAK+I,MAAMo8N,eACV/6C,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,iBAAgBq9G,SAAEp/G,KAAK+I,MAAMo8N,iBAGnD,EAGF,YCxFA,SAASjmO,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAUlV,SAASwwM,GAAQ1vM,GACf,IAAI6mR,EAAevoO,KAAW,gBAAiBt+C,EAAMyjR,gBACjDmD,EAAgBtoO,KAAW,UAAW,OAAQt+C,EAAMujR,iBACpDhlO,EAAUD,KAAW,gBAAiBt+C,EAAM4kR,gBAChD,OAAoB55G,IAAAA,cAAoBo6G,GAAuBxmR,GAAS,CAAC,EAAGoB,EAAO,CACjFyjR,eAAgBoD,EAChBtD,gBAAiBqD,EACjBhC,eAAgBrmO,IAEpB,CACAmxJ,GAAQtrE,UAAYA,GACpBsrE,GAAQrrE,aAjBW,CACjB+xD,UAAW,MACXyuF,UAAU,EACVrB,gBAAiB,aACjBn5F,QAAS,eAcX,YCPA,MAAMu3G,WAAwBz9J,EAAAA,UAC5B94H,WAAAA,CAAarL,GACXukB,MAAMvkB,GAENN,KAAK+I,MAAQ,CACXo8N,aAAc,IAGhBnlO,KAAK+1I,SAAW/1I,KAAK+1I,SAAS12I,KAAKW,MACnCA,KAAK2hS,0BAA4B3hS,KAAK2hS,0BAA0BtiS,KAAKW,KACvE,CAEAiuI,kBAAAA,CAAoBC,EAAWgJ,GAC7B,GAAIhJ,EAAUi0J,cAAgBniS,KAAKM,MAAM6hS,cAAgB37M,MAAMxmF,KAAKM,MAAM6hS,aAAc,CACtF,MAAM,WAAEN,GAAe7hS,KAAKM,MAC5BN,KAAK+1I,SAAS,CAAEz2I,OAAQ,CAAE4H,MAAO26R,EAAW5H,WAC9C,CACF,CAEAnsJ,iBAAAA,GACE,MAAM,WAAE+zJ,GAAe7hS,KAAKM,MAEvBuhS,GAKL7hS,KAAK+1I,SAAS,CAAEz2I,OAAQ,CAAE4H,MAAO26R,EAAW5H,WAC9C,CAEA0H,yBAAAA,CAA2Bz6R,GACzB,MAAQ06R,cAAc,KAAErD,EAAMR,eAAiB9D,UAAU,QAAE6H,EAAO,QAAEC,IAAW,UAAE5D,GAAW,YAAEgE,GAAgBniS,KAAKM,MAE7G8hS,EAAe7D,EAAKnC,SAAWmC,EAAKnC,SAASK,WAAa8B,EAAKlC,SAAWkC,EAAKlC,SAASI,WAAa,GAErG4F,EAAYlE,EAAYA,EAAUlE,SAAW,KAEnD,OAAK/yR,GAASs/E,MAAMt/E,GACXrE,GAAE,mCAGPi/R,GAAWv7R,OAAOW,GAAS46R,EACtBj/R,GAAE,iCAAkC,CAAE05R,gBAAiBuF,IAG5DC,GAAWx7R,OAAOW,GAASi7R,EAAcJ,EACpB,IAAhBI,EACHt/R,GAAE,iCAAkC,CAAEm/R,gBAAiBD,IACtD,GAAEl/R,GAAE,iCAAkC,CAAEm/R,gBAAiBD,8BAC9Cl/R,GAAE,6CAA8C,CAClEo3R,SAAU1zR,OAAOW,GACjBo7R,eAAgBF,EAChBV,YAAaS,EACbI,cAAeJ,EAAc57R,OAAOW,yBAKhCm7R,GAAa97R,OAAOW,GAASi7R,EAAcE,IAAclE,EAAUtE,wBAC9C,IAAhBsI,EACHt/R,GAAE,mCAAoC,CAAE2/R,kBAAmBH,IAC1D,GAAEx/R,GAAE,mCAAoC,CAAE2/R,kBAAmBH,wBACtDx/R,GAAE,6CAA8C,CAC9Do3R,SAAU1zR,OAAOW,GACjBo7R,eAAgBF,EAChBV,YAAaS,EACbI,cAAeJ,EAAc57R,OAAOW,OAI7B,IACT,CAEA6uI,QAAAA,CAAUnzI,GACR,MAAM,iBAAEq/R,GAAqBjiS,KAAKM,MAE5B4G,EAAQtE,EAAEtD,OAAO4H,MACjBi+N,EAAenlO,KAAK2hS,0BAA0Bz6R,GAEpDlH,KAAK28H,SAAS,CAAEwoG,aAAcA,IAG9B88D,EAAiB/6R,EAAwB,OAAjBi+N,EAC1B,CAEA17M,MAAAA,GACE,MAAM,aAAEm4Q,EAAY,WAAEC,GAAe7hS,KAAKM,MAE1C,IAAKshS,IAAiBC,EACpB,OAAO,KAGT,MAAQ9D,eAAe,SAAE9D,GAAU,GAAE3oR,GAAOswR,EAE5C,IAAK3H,EACH,OAAO,KAET,MAAM6B,EAAsB97R,KAAK+I,MAAMo8N,aAAe,YAAc,GAEpE,OAAQh7C,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,yBAAwBq9G,SAAA,EAC7CgrE,EAAAA,GAAAA,KAACmxG,GAAY,CACXM,eAAgB5B,EAChB6B,oBAAqBA,EACrBnC,SAAUkI,EAAW5H,SACrBr5R,GAAI0Q,EACJykI,SAAU/1I,KAAK+1I,WAEhB/1I,KAAK+I,MAAMo8N,eACN/6C,EAAAA,GAAAA,KAAC4lB,GAAO,CAACjuM,UAAU,yBAAyB20L,UAAU,SAASxI,QAAQ,EAAM5uL,OAAQ,YAAcgS,EAAG8tG,SACnGp/G,KAAK+I,MAAMo8N,iBAIxB,EAGF,YC3HO,IAAIs9D,GAA+Bn3H,IAAAA,cAAoB,CAAC,GCR/D,SAASp4B,GAAQxjH,GAAkC,OAAOwjH,GAAU,mBAAqB3vI,QAAU,iBAAmBA,OAAOW,SAAW,SAAUwrB,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAO,mBAAqBnsB,QAAUmsB,EAAI/jB,cAAgBpI,QAAUmsB,IAAQnsB,OAAO3D,UAAY,gBAAkB8vB,CAAK,EAAGwjH,GAAQxjH,EAAM,CAC/U,IAAIi8G,GAAY,CAAC,KAAM,WAAY,YAAa,QAAS,MAAO,aAChE,SAASuE,GAAQ3hH,EAAQ4hH,GAAkB,IAAIvpI,EAAOzH,OAAOyH,KAAK2nB,GAAS,GAAIpvB,OAAO2H,sBAAuB,CAAE,IAAIspI,EAAUjxI,OAAO2H,sBAAsBynB,GAAS4hH,IAAmBC,EAAUA,EAAQ9mI,QAAO,SAAU+mI,GAAO,OAAOlxI,OAAOqO,yBAAyB+gB,EAAQ8hH,GAAKppI,UAAY,KAAKL,EAAKC,KAAK9G,MAAM6G,EAAMwpI,EAAU,CAAE,OAAOxpI,CAAM,CACpV,SAAS0pI,GAAchxI,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAS,MAAQF,UAAUD,GAAKC,UAAUD,GAAK,CAAC,EAAGA,EAAI,EAAI2wI,GAAQ/wI,OAAOO,IAAS,GAAIkI,SAAQ,SAAUjI,GAAO4wI,GAAgBjxI,EAAQK,EAAKD,EAAOC,GAAO,IAAKR,OAAOwO,0BAA4BxO,OAAOyO,iBAAiBtO,EAAQH,OAAOwO,0BAA0BjO,IAAWwwI,GAAQ/wI,OAAOO,IAASkI,SAAQ,SAAUjI,GAAOR,OAAO6H,eAAe1H,EAAQK,EAAKR,OAAOqO,yBAAyB9N,EAAQC,GAAO,GAAI,CAAE,OAAOL,CAAQ,CACzf,SAASixI,GAAgB7gH,EAAK/vB,EAAKuH,GAAiK,OAApJvH,KAAO+vB,EAAOvwB,OAAO6H,eAAe0oB,EAAK/vB,EAAK,CAAEuH,MAAOA,EAAOD,YAAY,EAAMwG,cAAc,EAAMC,UAAU,IAAkBgiB,EAAI/vB,GAAOuH,EAAgBwoB,CAAK,CAChN,SAASxwB,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAAS+4H,GAAyB74H,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAAkEC,EAAKJ,EAAnED,EACzF,SAAuCI,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAA2DC,EAAKJ,EAA5DD,EAAS,CAAC,EAAO8vI,EAAajwI,OAAOyH,KAAKlH,GAAqB,IAAKH,EAAI,EAAGA,EAAI6vI,EAAW3vI,OAAQF,IAAOI,EAAMyvI,EAAW7vI,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,CAAQ,CADhN+vI,CAA8B3vI,EAAQyvI,GAAuB,GAAIhwI,OAAO2H,sBAAuB,CAAE,IAAIgmL,EAAmB3tL,OAAO2H,sBAAsBpH,GAAS,IAAKH,EAAI,EAAGA,EAAIutL,EAAiBrtL,OAAQF,IAAOI,EAAMmtL,EAAiBvtL,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,GAAkBR,OAAOS,UAAUmkD,qBAAqBjkD,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,GAAQ,CAAE,OAAOL,CAAQ,CAG3e,SAASu0I,GAAkBv0I,EAAQgB,GAAS,IAAK,IAAIf,EAAI,EAAGA,EAAIe,EAAMb,OAAQF,IAAK,CAAE,IAAI45H,EAAa74H,EAAMf,GAAI45H,EAAWlyH,WAAakyH,EAAWlyH,aAAc,EAAOkyH,EAAW1rH,cAAe,EAAU,UAAW0rH,IAAYA,EAAWzrH,UAAW,GAAMvO,OAAO6H,eAAe1H,EAAQ65H,EAAWx5H,IAAKw5H,EAAa,CAAE,CAG5T,SAASoS,GAAgB/nI,EAAGa,GAA6I,OAAxIknI,GAAkBpsI,OAAOoiH,eAAiBpiH,OAAOoiH,eAAeliH,OAAS,SAAyBmE,EAAGa,GAAsB,OAAjBb,EAAE+/G,UAAYl/G,EAAUb,CAAG,EAAU+nI,GAAgB/nI,EAAGa,EAAI,CACvM,SAASyvI,GAAaC,GAAW,IAAIC,EAGrC,WAAuC,GAAuB,qBAAZC,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,oBAAVpmB,MAAsB,OAAO,EAAM,IAAsF,OAAhF5nH,QAAQvG,UAAUwG,QAAQtG,KAAKm0I,QAAQC,UAAU/tI,QAAS,IAAI,WAAa,MAAY,CAAM,CAAE,MAAOvD,GAAK,OAAO,CAAO,CAAE,CAHvQwxI,GAA6B,OAAO,WAAkC,IAAsC7uG,EAAlC8uG,EAAQC,GAAgBP,GAAkB,GAAIC,EAA2B,CAAE,IAAIO,EAAYD,GAAgBt0I,MAAM2L,YAAa45B,EAAS0uG,QAAQC,UAAUG,EAAO70I,UAAW+0I,EAAY,MAAShvG,EAAS8uG,EAAMt0I,MAAMC,KAAMR,WAAc,OACpX,SAAoCwD,EAAMlD,GAAQ,GAAIA,IAA2B,WAAlBozI,GAAQpzI,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIyJ,UAAU,4DAA+D,OAAOirI,GAAuBxxI,EAAO,CAD4Fw3H,CAA2Bx6H,KAAMulC,EAAS,CAAG,CAExa,SAASivG,GAAuBxxI,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIu3H,eAAe,6DAAgE,OAAOv3H,CAAM,CAErK,SAASsxI,GAAgB9wI,GAA+J,OAA1J8wI,GAAkBn1I,OAAOoiH,eAAiBpiH,OAAOoF,eAAelF,OAAS,SAAyBmE,GAAK,OAAOA,EAAE+/G,WAAapkH,OAAOoF,eAAef,EAAI,EAAU8wI,GAAgB9wI,EAAI,CAOnN,IAAIk/R,GAA4B,SAAUl1J,IAb1C,SAAmBnR,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI/yH,UAAU,sDAAyD8yH,EAASz8H,UAAYT,OAAOiI,OAAOk1H,GAAcA,EAAW18H,UAAW,CAAE+L,YAAa,CAAEzE,MAAOm1H,EAAU3uH,UAAU,EAAMD,cAAc,KAAWtO,OAAO6H,eAAeq1H,EAAU,YAAa,CAAE3uH,UAAU,IAAc4uH,GAAYiP,GAAgBlP,EAAUC,EAAa,CAcjcC,CAAUmmK,EAAcl1J,GACxB,IAhBoBpU,EAAaC,EAAYC,EAgBzCob,EAASZ,GAAa4uJ,GAC1B,SAASA,EAAapiS,GACpB,IAAIg6H,EAWJ,OA/BJ,SAAyBvwH,EAAUqvH,GAAe,KAAMrvH,aAAoBqvH,GAAgB,MAAM,IAAI7vH,UAAU,oCAAwC,CAqBpJ8wH,CAAgBr6H,KAAM0iS,IACtBpoK,EAAQoa,EAAO50I,KAAKE,KAAMM,IACpByI,MAAQ,CACZ45R,gBAAgB,GAElBroK,EAAMkoJ,QAAUloJ,EAAMkoJ,QAAQnjR,KAAKm1I,GAAuBla,IAC1DA,EAAMmoJ,WAAanoJ,EAAMmoJ,WAAWpjR,KAAKm1I,GAAuBla,IAChEA,EAAMooJ,OAASpoJ,EAAMooJ,OAAOrjR,KAAKm1I,GAAuBla,IACxDA,EAAMqoJ,UAAYroJ,EAAMqoJ,UAAUtjR,KAAKm1I,GAAuBla,IAC9DA,EAAMsoJ,SAAWtoJ,EAAMsoJ,SAASvjR,KAAKm1I,GAAuBla,IACrDA,CACT,CA8EA,OA5GoBlB,EA+BPspK,GA/BoBrpK,EA+BN,CAAC,CAC1B15H,IAAK,UACLuH,MAAO,SAAiBgoB,EAAM0zQ,GAC5B5iS,KAAK28H,SAAS,CACZgmK,gBAAgB,IAElB3iS,KAAKM,MAAMkiR,QAAQtzP,EAAM0zQ,EAC3B,GACC,CACDjjS,IAAK,aACLuH,MAAO,SAAoBgoB,EAAM0zQ,GAE/B,IAAIviK,EAAenxG,EAAKmxG,aAKxB,OAJArgI,KAAK28H,SAAS,CACZgmK,gBAAgB,IAElB3iS,KAAKM,MAAMmiR,WAAWvzP,EAAM0zQ,GACrBviK,CACT,GACC,CACD1gI,IAAK,SACLuH,MAAO,SAAgBgoB,GACrBlvB,KAAK28H,SAAS,CACZgmK,gBAAgB,IAElB3iS,KAAKM,MAAMoiR,OAAOxzP,EACpB,GACC,CACDvvB,IAAK,YACLuH,MAAO,SAAmBgoB,GACxBlvB,KAAK28H,SAAS,CACZgmK,gBAAgB,IAElBzzQ,EAAKmtL,cAAc,IAAIwmF,YAAY,sBACnC7iS,KAAKM,MAAMqiR,UAAUzzP,EACvB,GACC,CACDvvB,IAAK,WACLuH,MAAO,SAAkBgoB,GACvBA,EAAKmtL,cAAc,IAAIwmF,YAAY,qBACnC7iS,KAAKM,MAAMsiR,SAAS1zP,EACtB,GACC,CACDvvB,IAAK,SACLuH,MAAO,WACL,IAAIy3H,EAAS3+H,KACT+uI,EAAc/uI,KAAKM,MACrBwiS,EAAO/zJ,EAAgB,GACvB3vB,EAAW2vB,EAAY3vB,SACvBisE,EAAYt8C,EAAYs8C,UACxB03G,EAAoBh0J,EAAYwP,MAChCA,OAA8B,IAAtBwkJ,GAAsCA,EAC9Cp7F,EAAkB54D,EAAY1kI,IAC9BuvC,OAA0B,IAApB+tJ,EAA6B,MAAQA,EAC3C5lM,EAAYgtI,EAAYhtI,UACxB4hR,EAAkBprJ,GAAyBwW,EAAapD,IAC1D,OAAoB2/B,IAAAA,cAAoBw1G,GAAY5hR,GAAS,CAAC,EAAGykR,EAAiB,CAChF13F,MAAO1tC,EACPojI,KAAMpjI,EACN,GAAMukJ,EACNtgB,QAASxiR,KAAKwiR,QACdC,WAAYziR,KAAKyiR,WACjBC,OAAQ1iR,KAAK0iR,OACbC,UAAW3iR,KAAK2iR,UAChBC,SAAU5iR,KAAK4iR,YACb,SAAUt1Q,GACZ,IAAI0gG,EAAY2wB,EAAO/yH,QAAQoiG,UAC3BkvE,EAAW5vK,IAAWw+K,IAA8Bx+K,IAAWw+K,GAC/Dk3G,GAAsB11R,IAAWw+K,IAA+Bx+K,IAAWw+K,KAA+BntD,EAAO51H,MAAM45R,iBAAiC,QAAd30L,EAAsB,sBAAwB,qBACxLi1L,EAAiB31R,IAAWw+K,KAA8C,QAAd99E,EAAsB,qBAAuB,sBACzGk1L,EAAc93G,GAAgBxsI,KAAW78C,EAAW,gBAAiBm7K,GAAY,SAAU8lH,EAAoBC,GAAiB53G,GACpI,OAAoB/f,IAAAA,cAAoB1xH,EAAK,CAC3C73C,UAAWmhS,GACV9jL,EACL,GACF,MA1G0Ey0B,GAAkBza,EAAYx5H,UAAWy5H,GAAiBC,GAAaua,GAAkBza,EAAaE,GAAcn6H,OAAO6H,eAAeoyH,EAAa,YAAa,CAAE1rH,UAAU,IA4GrPg1R,CACT,CA/FgC,CA+F9Bp3H,IAAAA,WACFo3H,GAAah+J,UAAY4L,GAAcA,GAAc,CAAC,EAAGwwI,GAAWp8I,WAAY,CAAC,EAAG,CAElFr6H,IAAKshL,GACL,GAAMl0D,KAAAA,KAEN4zD,UAAW5zD,KAAAA,OACXrY,SAAUqY,KAAAA,KAEV8mB,MAAO9mB,KAAAA,KAEP11H,UAAW01H,KAAAA,SAEbirK,GAAa/9J,aAAe2L,GAAcA,GAAc,CAAC,EAAGwwI,GAAWn8I,cAAe,CAAC,EAAG,CACxF2nC,QAASsf,KAEX82G,GAAanxG,YAAckxG,GAC3B,YCxIA,SAASvvJ,GAAQxjH,GAAkC,OAAOwjH,GAAU,mBAAqB3vI,QAAU,iBAAmBA,OAAOW,SAAW,SAAUwrB,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAO,mBAAqBnsB,QAAUmsB,EAAI/jB,cAAgBpI,QAAUmsB,IAAQnsB,OAAO3D,UAAY,gBAAkB8vB,CAAK,EAAGwjH,GAAQxjH,EAAM,CAC/U,SAASxwB,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAElV,SAASq0I,GAAkBv0I,EAAQgB,GAAS,IAAK,IAAIf,EAAI,EAAGA,EAAIe,EAAMb,OAAQF,IAAK,CAAE,IAAI45H,EAAa74H,EAAMf,GAAI45H,EAAWlyH,WAAakyH,EAAWlyH,aAAc,EAAOkyH,EAAW1rH,cAAe,EAAU,UAAW0rH,IAAYA,EAAWzrH,UAAW,GAAMvO,OAAO6H,eAAe1H,EAAQ65H,EAAWx5H,IAAKw5H,EAAa,CAAE,CAG5T,SAASoS,GAAgB/nI,EAAGa,GAA6I,OAAxIknI,GAAkBpsI,OAAOoiH,eAAiBpiH,OAAOoiH,eAAeliH,OAAS,SAAyBmE,EAAGa,GAAsB,OAAjBb,EAAE+/G,UAAYl/G,EAAUb,CAAG,EAAU+nI,GAAgB/nI,EAAGa,EAAI,CACvM,SAASyvI,GAAaC,GAAW,IAAIC,EAGrC,WAAuC,GAAuB,qBAAZC,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,oBAAVpmB,MAAsB,OAAO,EAAM,IAAsF,OAAhF5nH,QAAQvG,UAAUwG,QAAQtG,KAAKm0I,QAAQC,UAAU/tI,QAAS,IAAI,WAAa,MAAY,CAAM,CAAE,MAAOvD,GAAK,OAAO,CAAO,CAAE,CAHvQwxI,GAA6B,OAAO,WAAkC,IAAsC7uG,EAAlC8uG,EAAQC,GAAgBP,GAAkB,GAAIC,EAA2B,CAAE,IAAIO,EAAYD,GAAgBt0I,MAAM2L,YAAa45B,EAAS0uG,QAAQC,UAAUG,EAAO70I,UAAW+0I,EAAY,MAAShvG,EAAS8uG,EAAMt0I,MAAMC,KAAMR,WAAc,OACpX,SAAoCwD,EAAMlD,GAAQ,GAAIA,IAA2B,WAAlBozI,GAAQpzI,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIyJ,UAAU,4DAA+D,OAAOirI,GAAuBxxI,EAAO,CAD4Fw3H,CAA2Bx6H,KAAMulC,EAAS,CAAG,CAExa,SAASivG,GAAuBxxI,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIu3H,eAAe,6DAAgE,OAAOv3H,CAAM,CAErK,SAASsxI,GAAgB9wI,GAA+J,OAA1J8wI,GAAkBn1I,OAAOoiH,eAAiBpiH,OAAOoF,eAAelF,OAAS,SAAyBmE,GAAK,OAAOA,EAAE+/G,WAAapkH,OAAOoF,eAAef,EAAI,EAAU8wI,GAAgB9wI,EAAI,CAOnN,IACIkhI,GAAY,CAEdy+J,YAAa1rK,KAAAA,OAEb/oH,KAAM+oH,KAAAA,KAAeb,WAErB5pD,SAAUyqD,KAAAA,KAAeb,WAEzBwsK,SAAU3rK,KAAAA,KAIVy8B,MAAOz8B,KAAAA,MAAgB,CAAC,SAAS,IAEjC4rK,KAAM5rK,KAAAA,MAAgB,CAAC,aAEvB0d,SAAU1d,KAAAA,UAAoB,CAACA,KAAAA,OAAkBA,KAAAA,OAAkBA,KAAAA,OACnErY,SAAUqY,KAAAA,MAEV6rK,WAAY7rK,KAAAA,KAEZ8rK,WAAY9rK,KAAAA,KAEZ8mB,MAAO9mB,KAAAA,KAEP6vE,KAAM7vE,KAAAA,KACN0sJ,KAAM1sJ,KAAAA,KAEN4zD,UAAW5zD,KAAAA,OAEX11H,UAAW01H,KAAAA,OAEX+rK,YAAa/rK,KAAAA,MAEXgsK,GAActkS,OAAOyH,KAAK89H,IAS1B+P,GAAwB,SAAUjH,IAzDtC,SAAmBnR,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI/yH,UAAU,sDAAyD8yH,EAASz8H,UAAYT,OAAOiI,OAAOk1H,GAAcA,EAAW18H,UAAW,CAAE+L,YAAa,CAAEzE,MAAOm1H,EAAU3uH,UAAU,EAAMD,cAAc,KAAWtO,OAAO6H,eAAeq1H,EAAU,YAAa,CAAE3uH,UAAU,IAAc4uH,GAAYiP,GAAgBlP,EAAUC,EAAa,CA0DjcC,CAAUkY,EAAUjH,GACpB,IA5DoBpU,EAAaC,EAAYC,EA4DzCob,EAASZ,GAAaW,GAC1B,SAASA,EAASn0I,GAChB,IAAIg6H,EAgBJ,OAhFJ,SAAyBvwH,EAAUqvH,GAAe,KAAMrvH,aAAoBqvH,GAAgB,MAAM,IAAI7vH,UAAU,oCAAwC,CAiEpJ8wH,CAAgBr6H,KAAMy0I,IACtBna,EAAQoa,EAAO50I,KAAKE,KAAMM,IACpBojS,eAAiBppK,EAAMopK,eAAerkS,KAAKm1I,GAAuBla,IACxEA,EAAM4f,YAAc5f,EAAM4f,YAAY76I,KAAKm1I,GAAuBla,IAClEA,EAAMqpK,WAAarpK,EAAMqpK,WAAWtkS,KAAKm1I,GAAuBla,IAChEA,EAAMspK,SAAWtpK,EAAMspK,SAASvkS,KAAKm1I,GAAuBla,IAC5DA,EAAMupK,iBAAmBvpK,EAAMupK,iBAAiBxkS,KAAKm1I,GAAuBla,IAC5EA,EAAMwpK,eAAiBxpK,EAAMwpK,eAAezkS,KAAKm1I,GAAuBla,IACxEA,EAAMypK,YAAc,EACpBzpK,EAAM0pK,YAAc,EACpB1pK,EAAMvxH,MAAQ,CACZo6R,YAAa7oK,EAAMh6H,MAAM6iS,YACzBn1L,UAAW,MACXi2L,kBAAkB,GAEb3pK,CACT,CAsPA,OArUoBlB,EAgFPqb,EAhFoBpb,EAgFV,CAAC,CACtB15H,IAAK,oBACLuH,MAAO,WAEmB,aAApBlH,KAAKM,MAAM+iS,MACbrjS,KAAKshI,cAIPt8H,SAASgO,iBAAiB,QAAShT,KAAK0jS,eAC1C,GACC,CACD/jS,IAAK,qBACLuH,MAAO,SAA4BgnI,EAAWgJ,GACxCA,EAAUisJ,cAAgBnjS,KAAK+I,MAAMo6R,aACzCnjS,KAAKshI,aACP,GACC,CACD3hI,IAAK,uBACLuH,MAAO,WACLlH,KAAK+8H,gBACL/3H,SAASy5H,oBAAoB,QAASz+H,KAAK0jS,eAC7C,GACC,CACD/jS,IAAK,iBACLuH,MAAO,SAAwBg9R,GACzBlkS,KAAKM,MAAM8iS,WACO,KAAhBc,EAAI1uJ,QACNx1I,KAAKM,MAAM0sE,WACc,KAAhBk3N,EAAI1uJ,SACbx1I,KAAKM,MAAMoO,OAGjB,GACC,CACD/O,IAAK,mBACLuH,MAAO,SAA0BtE,GAC1B5C,KAAKM,MAAMkjS,cAGhBxjS,KAAK+jS,YAAcnhS,EAAEolN,eAAe,GAAGzhF,QACvCvmI,KAAKgkS,YAAcphS,EAAEolN,eAAe,GAAGxhF,QACzC,GACC,CACD7mI,IAAK,iBACLuH,MAAO,SAAwBtE,GAC7B,GAAK5C,KAAKM,MAAMkjS,YAAhB,CAGA,IAAIW,EAAWvhS,EAAEolN,eAAe,GAAGzhF,QAC/B69J,EAAWxhS,EAAEolN,eAAe,GAAGxhF,QAC/B69J,EAAQv2R,KAAKwjF,IAAItxF,KAAK+jS,YAAcI,GAIpCE,EAHQv2R,KAAKwjF,IAAItxF,KAAKgkS,YAAcI,IAMpCC,EA5HY,KA+HZF,EAAWnkS,KAAK+jS,YAClB/jS,KAAKM,MAAMoO,OAEX1O,KAAKM,MAAM0sE,WAhBb,CAkBF,GACC,CACDrtE,IAAK,kBACLuH,MAAO,WACL,MAAO,CACL8mG,UAAWhuG,KAAK+I,MAAMilG,UAE1B,GACC,CACDruG,IAAK,cACLuH,MAAO,SAAUo9R,GACf,SAAShjK,IACP,OAAOgjK,EAAavkS,MAAMC,KAAMR,UAClC,CAIA,OAHA8hI,EAAY97H,SAAW,WACrB,OAAO8+R,EAAa9+R,UACtB,EACO87H,CACT,CARO,EAQL,WACA,IAAI3C,EAAS3+H,KAEbA,KAAK+8H,gBACD/8H,KAAKM,MAAM60I,WACbn1I,KAAKukS,cAAgBjjK,aAAY,WAC/B3C,EAAOr+H,MAAMoO,MACf,GAAGwS,SAASlhB,KAAKM,MAAM60I,SAAU,KAErC,KACC,CACDx1I,IAAK,gBACLuH,MAAO,SAAUs9R,GACf,SAASznK,IACP,OAAOynK,EAAezkS,MAAMC,KAAMR,UACpC,CAIA,OAHAu9H,EAAcv3H,SAAW,WACvB,OAAOg/R,EAAeh/R,UACxB,EACOu3H,CACT,CARO,EAQL,WACAA,cAAc/8H,KAAKukS,cACrB,KACC,CACD5kS,IAAK,aACLuH,MAAO,WAKH,IAAI6nI,EAJmB,UAArB/uI,KAAKM,MAAM4zJ,OACbl0J,KAAK+8H,gBAEH/8H,KAAKM,MAAMgjS,aAEZv0J,EAAc/uI,KAAKM,OAAOgjS,WAAWvjS,MAAMgvI,EAAavvI,UAE7D,GACC,CACDG,IAAK,WACLuH,MAAO,WAKH,IAAIgoI,EAJmB,UAArBlvI,KAAKM,MAAM4zJ,OACbl0J,KAAKshI,cAEHthI,KAAKM,MAAMijS,aAEZr0J,EAAelvI,KAAKM,OAAOijS,WAAWxjS,MAAMmvI,EAAc1vI,UAE/D,GACC,CACDG,IAAK,cACLuH,MAAO,SAAqBu9R,EAAe1iS,GACzC,IAAIk/H,EAASjhI,KACTu+I,EAAQv+I,KAAKM,MAAMi+I,MACvB,OAAoB+sB,IAAAA,cAAoB,MAAO,CAC7CvpK,UAAWA,GACV0iS,EAAch0R,KAAI,SAAUgW,EAAMiL,GACnC,IAAIoxQ,EAAOpxQ,IAAUuvG,EAAOl4H,MAAMo6R,YAClC,OAAoB73H,IAAAA,aAAmB7kJ,EAAM,CAC3C,GAAMq8Q,EACNvkJ,MAAOA,GAEX,IACF,GACC,CACD5+I,IAAK,SACLuH,MAAO,WACL,IAAIk6H,EAASphI,KACT0kS,EAAe1kS,KAAKM,MACtB+qL,EAAYq5G,EAAar5G,UACzB9sC,EAAQmmJ,EAAanmJ,MACrBx8I,EAAY2iS,EAAa3iS,UACzBulM,EAAOo9F,EAAap9F,KACpB68E,EAAOugB,EAAavgB,KAClBthI,EAAa3kE,GAAKl+E,KAAKM,MAAOmjS,IAC9BkB,EAAev5G,GAAgBxsI,KAAW78C,EAAW,WAAYoiR,GAAQ,gBAAiB5lI,GAAS,QAAS+oD,GAAQ,iBAAkBjc,GACtIu5G,EAAex5G,GAAgBxsI,KAAW,kBAAmBysI,GAG7DjsE,EAAWp/G,KAAKM,MAAM8+G,SAAS91G,QAAO,SAAU+1G,GAClD,OAAiB,OAAVA,QAA4Bj9G,IAAVi9G,GAAwC,mBAAVA,CACzD,IAMA,GALiBD,EAAS5/E,OAAM,SAAU6/E,GACxC,OAAOA,EAAMv9G,OAAS4gS,EACxB,IAIE,OAAoBp3H,IAAAA,cAAoB,MAAOpsK,GAAS,CAAC,EAAG2jJ,EAAY,CACtE9gJ,UAAW4iS,EACXr6F,aAActqM,KAAK2jS,WACnBv5F,aAAcpqM,KAAK4jS,WACJt4H,IAAAA,cAAoBm3H,GAAgBxrH,SAAU,CAC7D/vK,MAAOlH,KAAKsxL,mBACXtxL,KAAKk6I,YAAY96B,EAAUwlL,KAIhC,GAAIxlL,EAAS,aAAc36G,MAAO,CAChC,IAAIogS,EAAiBzlL,EAAS,GAC1B0lL,EAAe1lL,EAAS,GACxB2lL,EAAgB3lL,EAAS,GAC7B,OAAoBksD,IAAAA,cAAoB,MAAOpsK,GAAS,CAAC,EAAG2jJ,EAAY,CACtE9gJ,UAAW4iS,EACXr6F,aAActqM,KAAK2jS,WACnBv5F,aAAcpqM,KAAK4jS,WACJt4H,IAAAA,cAAoBm3H,GAAgBxrH,SAAU,CAC7D/vK,MAAOlH,KAAKsxL,mBACXtxL,KAAKk6I,YAAY2qJ,EAAgBD,GAAeE,EAAcC,GACnE,CAGA,IAAIC,EAAa5lL,EAAS,GAUtB6lL,EAAiC35H,IAAAA,aAAmB05H,EAAY,CAClEnpJ,eAVmB,SAAwBj5I,GACI,oBAApCoiS,EAAW1kS,MAAMu7I,gBAC1Bza,EAAOzE,SAAS,CACdsnK,kBAAkB,IACjB,WACD,OAAOe,EAAW1kS,MAAMu7I,eAAej5I,EACzC,GAEJ,IAII6hS,EAAgBrlL,EAAS,GACzB8lL,EAAc9lL,EAAS,GACvB+lL,EAAe/lL,EAAS,GAC5B,OAAoBksD,IAAAA,cAAoB,MAAOpsK,GAAS,CAAC,EAAG2jJ,EAAY,CACtE9gJ,UAAW4iS,EACXr6F,aAActqM,KAAK2jS,WACnBv5F,aAAcpqM,KAAK4jS,SACnBr7J,aAAcvoI,KAAK6jS,iBACnBr7J,WAAYxoI,KAAK8jS,iBACFx4H,IAAAA,cAAoBm3H,GAAgBxrH,SAAU,CAC7D/vK,MAAOlH,KAAKsxL,mBACX2zG,EAAmBjlS,KAAKk6I,YAAYuqJ,EAAeG,GAAeM,EAAaC,GACpF,IAzS2C7rK,EA0SzC,CAAC,CACH35H,IAAK,2BACLuH,MAAO,SAAkCk+R,EAAWluJ,GAClD,IAAI3I,EAAW,KACX40J,EAAcjsJ,EAAUisJ,YAC1Bn1L,EAAYkpC,EAAUlpC,UACtBi2L,EAAmB/sJ,EAAU+sJ,iBAkB/B,OAjBImB,EAAUjC,cAAgBA,IAExBiC,EAAUjC,cAAgBA,EAAc,EAC1Cn1L,EAAY,MACHo3L,EAAUjC,cAAgBA,EAAc,EACjDn1L,EAAY,QACHo3L,EAAUjC,YAAcA,EACjCn1L,EAAYi2L,EAAmB,QAAU,MAChCmB,EAAUjC,cAAgBA,IACnCn1L,EAAYi2L,EAAmB,MAAQ,SAEzC11J,EAAW,CACT40J,YAAaiC,EAAUjC,YACvBn1L,UAAWA,EACXi2L,kBAAkB,IAGf11J,CACT,IAnU8DlV,GAAYwa,GAAkBza,EAAYx5H,UAAWy5H,GAAiBC,GAAaua,GAAkBza,EAAaE,GAAcn6H,OAAO6H,eAAeoyH,EAAa,YAAa,CAAE1rH,UAAU,IAqUrP+mI,CACT,CA5Q4B,CA4Q1B62B,IAAAA,WACF72B,GAAS/P,UAAYA,GACrB+P,GAAS9P,aAtRU,CACjBwQ,SAAU,IACV+e,MAAO,QACPkvI,UAAU,EACV7kJ,OAAO,EACPilJ,aAAa,EACbrf,MAAM,GAiRR,YCzUMkhB,GAAU,cAGVC,GAAW,eAuHjB,GArHqBhlS,IACjB,MAAM,OAAC67I,EAAM,OAAEiyC,EAAM,WAAEm3G,EAAU,SAAE/mJ,GAAYl+I,GACxCklS,EAAgBC,IAAqB76H,EAAAA,EAAAA,UAAS,IAqC/C86H,EAAoBn2F,IACtBpzD,EAAOv0I,SAAQ,CAACkvI,EAAOv3I,KACfA,EAAI,GAAK6uL,EAAS,GAClBmhB,EAAK1oM,KAAK,CAAC2pR,MAAO6U,GAASzkS,GAAIrB,EAAG6uL,OAAQ7uL,IAAM6uL,IAE1C,IAAN7uL,GAAW6uL,EAAS,GACpBmhB,EAAK1oM,KAAK,CAAC2pR,MAAOr0I,EAAO18I,OAAS,EAAI6lS,GAAWD,GAASzkS,GAAIrB,EAAG6uL,OAAQ7uL,IAAM6uL,GACnF,GACF,GASNvjB,EAAAA,EAAAA,YAAU,KACN,MAAM0kC,EAAO,GAIb,GAHe,IAAXnhB,GACAs3G,EAAiBn2F,GAEjBnhB,EAAS,GAAKo3G,EAAe/lS,OAAQ,CACrC,MAAMkmS,EAAsBH,EAAeh1P,WAAUiuG,GAAOA,EAAI79I,KAAOwtL,IAC3C,IAAxBu3G,GA3DMp2F,KACVnhB,EAAS,EACTs3G,EAAiBn2F,GAEjBpzD,EAAOv0I,SAAQ,CAACw0I,EAAK78I,KACbA,EAAI6uL,EAAS,GAAKmhB,EAAK9vM,OAAS,GAChC8vM,EAAK1oM,KAAK,CACN2pR,MAAQjhF,EAAK9vM,QAA0B,IAAhB8vM,EAAK9vM,OAA0B4lS,GAAXC,GAC3C1kS,GAAIrB,EACJ6uL,OAAQ7uL,IAAM6uL,GAEtB,GAER,EA+CQw3G,CAASr2F,GAETo2F,IAAwBH,EAAe/lS,OAAS,GAAK+lS,EAAeG,GAAqB/kS,KAAOu7I,EAAO18I,OAAS,GA9CvG8vM,KACbpzD,EAAOv0I,SAAQ,CAACkvI,EAAOv3I,KACfgwM,EAAK9vM,OAAS,GAAKF,GAAK6uL,EAAS,GACjCmhB,EAAK1oM,KAAK,CACN2pR,MAASjxR,IAAM6uL,EAAS,GAAuB,IAAhBmhB,EAAK9vM,QAAgBF,IAAM48I,EAAO18I,OAAS,EAAM6lS,GAAWD,GAC3FzkS,GAAIrB,EACJ6uL,OAAQ7uL,IAAM6uL,GAEtB,GACF,EAsCEy3G,CAAYt2F,GAEZo2F,EAAsB,IAAMA,EAAsBH,EAAe/lS,OAAS,GAAK+lS,EAAeG,GAAqB/kS,KAAOu7I,EAAO18I,OAAS,IArCxH8vM,KAC1Bi2F,EAAe59R,SAAQ,CAAC62I,EAAKl/I,KACzBk/I,EAAI2vC,OAAS3vC,EAAI79I,KAAOwtL,EACxBmhB,EAAK1oM,KAAK43I,EAAI,GAChB,EAmCMqnJ,CAAqBv2F,IAEI,IAAzBo2F,GAA8BxpJ,EAAO18I,OAAS,IAAM2uL,GAvBxCmhB,KACpB,IAAK,IAAIhwM,EAAI48I,EAAO18I,OAAS,EAAG8vM,EAAK9vM,OAAS,EAAGF,IAC7CgwM,EAAK/uF,QAAQ,CAACgwK,MAAuB,IAAhBjhF,EAAK9vM,OAAe6lS,GAAWD,GAASzkS,GAAIrB,EAAG6uL,OAAQ7uL,IAAM6uL,GACtF,EAqBQ23G,CAAex2F,EAGvB,CACAk2F,EAAkBl2F,EAAK,GAExB,CAACpzD,EAAQiyC,IAEZ,MAAM43G,GAAa7zG,EAAAA,EAAAA,cAAY,KAC3B,KAAIh2C,EAAO18I,OAAS,GAIpB,OAAO+lS,EAAe/0R,KAAKguI,IAInB2rC,EAAAA,GAAAA,KAAA,QACIzoL,MAJO,CAAC6jF,SAAU,WAAYy9G,OAAQ,SAMtClhM,UAAY,iBAAgB08I,EAAI+xI,SAAS/xI,EAAI2vC,OAAS,SAAW,KACjEv1C,QAASA,KACD2F,GACJ+mJ,EAAW9mJ,EAAI79I,GAAG,GAJjB69I,EAAI79I,KAQnB,GAEH,CAAC4kS,IAEJ,OACIp7G,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,uBAAsBq9G,UACjCgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,eAAeJ,MAAO,CACjCnB,OAAS,MACTD,MAAQ,SACV6+G,SACG4mL,OAEH,gECzHd,MCiNA,GA3M4B1lS,IAC1B,MAAM,UACJg7I,EAAY,CACV/6I,MAAO,GAAIC,OAAQ,IACpB,WACDm7I,EAAa,CACXp7I,MAAO,GAAIC,OAAQ,IACpB,mBACDylS,GAAqB,EAAI,UACzBC,EAAY,GAAE,WACdvrJ,EAAa,GAAE,YACfowD,EAAc,EAAC,cACfo7F,EAAgB,EAAC,WACjBC,EAAa,CACX,KAAM,CAAEx5Q,MAAO,GACf,KAAM,CAAEA,MAAO,IAChB,OACDuvH,EAAS,GAAE,MACXvvH,EAAQ,GAAE,cACVy5Q,EAAa,cACbC,EAAa,YACbj3B,GAAc,EAAE,OAChB1mQ,GACErI,GAEGimS,EAAeC,IAAoB57H,EAAAA,EAAAA,UAAS,MAC5Cu4H,EAAasD,IAAkB77H,EAAAA,EAAAA,UAAS,IACxCxrD,EAAUsnL,IAAe97H,EAAAA,EAAAA,UAAS,KAClC+7H,EAASC,IAAch8H,EAAAA,EAAAA,UAASmgC,GACjCn2D,GAAqB41D,EAAAA,EAAAA,UACrBq8F,GAA0Br8F,EAAAA,EAAAA,UAC1Bs8F,GAAmB30G,EAAAA,EAAAA,cAAY,KACnC,GAAoB,IAAhBgxG,EACFyD,EAAW77F,OACN,CAEL67F,EAAY,KADEV,EAAYC,GAAiBhD,EAAcp4F,IAE3D,IACC,CAACo4F,EAAap4F,EAAam7F,EAAWC,KAEzCt7H,EAAAA,EAAAA,YAAU,KACR,MAAMk8H,EAAgBC,IACV33B,EAAc8zB,IAEd4D,GACVN,EAAep3B,EAAc03B,EAAgB,GAE3C5D,IAAgB9zB,GAA8B,IAAf8zB,GACjCsD,EAAep3B,EAAc,EAC/B,GAEC,CAACA,EAAa+2B,KAEjBv7H,EAAAA,EAAAA,YAAU,KACR47H,EAAe,EAAE,GAChB,CAACrnL,EAAS3/G,UAEborK,EAAAA,EAAAA,YAAU,KACR67H,EAAYvqJ,GAAUA,EAAO18I,OAAS08I,EAASvvH,EAAM,GACpD,CAACuvH,EAAQvvH,KAEZi+I,EAAAA,EAAAA,YAAU,KACRi8H,GAAkB,GACjB,CAAC3D,EAAa2D,IAEjB,MAAMtzF,EAAWL,GAAa,CAC5BrD,aAAcA,KAAOm3F,GAAsBR,EAAe/3R,GAC1DqhM,cAAeA,KAAOm3F,GAAqBT,EAAehiP,GAC1DorJ,8BAA8B,EAC9Ba,YAAY,IAGRy2F,EAAgBA,KAAO,IAADC,EAC1B,QAAkC,QAA1BA,EAAAxyJ,EAAmBprF,eAAO,IAAA49O,OAAA,EAA1BA,EAA4BjqK,aAAcgpK,IAAkBD,EAAYC,GAAiBhqJ,EAAO18I,MAAM,EAG1G4nS,GAA8B78F,EAAAA,EAAAA,QAAOs8F,GACrCQ,GAA4B98F,EAAAA,EAAAA,QAAO28F,IACzCt8H,EAAAA,EAAAA,YAAU,KACRw8H,EAA4B79O,QAAUs9O,EACtCQ,EAAyB99O,QAAU29O,CAAa,KAGlDt8H,EAAAA,EAAAA,YAAU,KACR,MAGM08H,EAAyBA,KAFD3kS,MAG5B4jS,EAHiCc,EAAyB99O,QAAQ5mD,GAGvB,OAAS,MAAM,EAGtDgrM,EAAWA,KAPgBhrM,MAQ/B6jS,EAAe,GACfc,IAToCF,EAA4B79O,QAAQ5mD,EAU9C,EAK5B,OAFAgrM,IACAzqM,OAAO6P,iBAAiB,SAAU46L,GAC3B,KACLzqM,OAAOs7H,oBAAoB,SAAUmvE,EAAS,CAC/C,GACA,KAEH/iC,EAAAA,EAAAA,YAAU,KACsBjoK,MAC9B4jS,EADmCc,EAAyB99O,QAAQ5mD,GACzB,OAAS,MAAM,GACzD,CAACu5I,EAAQvvH,IAEZ,MAUMo6Q,EAAmBA,KAAA,IAAAQ,EAAA,OAAM15R,KAAK0vD,QAAyB,OAAlBo3E,QAAkB,IAAlBA,GAA2B,QAAT4yJ,EAAlB5yJ,EAAoBprF,eAAO,IAAAg+O,OAAT,EAAlBA,EAA6BrqK,aAAcgpK,IAAkBD,EAAYC,KAAmB,CAAC,EAElIY,EAAgBC,IAEhBC,EAAqB9D,EAAc4D,GAAiB3nL,EAAS3/G,OAC7DynS,EAAoC,IAAhB/D,GAEpB,KAAEz0R,EAAI,KAAE+1C,GAjBYhlD,KACxB,MAAMsnS,EAAgBC,IAChBS,EAAYhoS,EAASsnS,EAAgB5D,EAK3C,MAAO,CAAEz0R,KAHI+4R,GAAaV,EAAgB5D,EAAc4D,EAAgB5D,EAAcsE,EAGvEhjP,KAFF0+O,EAAc4D,EAAgB,EAAI5D,EAAc4D,EAExC,EAUAW,CAAiBtoL,EAAS3/G,QAEjD,OAAM08I,GAAWA,EAAO18I,QAAamtB,GAAUA,EAAMntB,QAKnD0qL,EAAAA,GAAAA,MAAA,OAAKxoL,MAAOgH,EAAQ5G,UAAU,8BAA+ByxM,EAAQp0F,SAAA,EACjE+nL,MAAmB/8G,EAAAA,GAAAA,KAAA,OACnBzoL,MAAO,CAAEpB,MAAO+6I,EAAU/6I,OAC1BwB,UAAY,mCAAiCmlS,EAAoB,YAAc,IAAK9nL,SAEnF6mL,GAAsBiB,EAAoB,MACvC98G,EAAAA,GAAAA,KAACu9G,GAAAA,eAAS,CACV9uJ,QAASA,KAAOquJ,GAAqBT,EAAehiP,GACpD/yC,KAAM4pI,EAAU2uD,IAChB1pM,MAAQ,GAAE+6I,EAAU/6I,UACpBC,OAAS,GAAE86I,EAAU96I,gBAI3B4pL,EAAAA,GAAAA,KAAA,OACEzoL,MAAO,CACLpB,MAAOgmS,EACP/lS,OAAS,GAAEm6I,EAA2B,EAAdowD,OAE1BhpM,UAAU,yBACV5B,IAAKy0I,EAAmBx1B,UAExBgrE,EAAAA,GAAAA,KAAA,OACEzoL,MAAO,CAAEwtH,KAAO,GAAEw3K,OAClB5kS,UAAU,iBACV5B,IAAK0mS,EAAwBznL,SAE5BxyF,GAASA,EAAMntB,OACZmtB,EAAMnc,KAAI,CAACgW,EAAMlnB,KACjB6qL,EAAAA,GAAAA,KAAA,OACEyiB,YAAaA,IAAMw5F,GAAiBA,EAAc9mS,GAClD6qM,aAAcA,IAAMi8F,GAAiBA,GAAe,GACpDxtJ,QAASA,IAAMytJ,GAAiBA,EAAc/mS,GAC9CoC,MAAO,CAAEpB,MAAQ,GAAE2lS,MAAe1lS,OAAS,GAAEm6I,MAAgB/W,YAAc,GAAEuiK,OAC7EpkS,UAAU,8BAA6Bq9G,SAGtC34F,GAFK,QAAOlnB,OAKf48I,EAAO1rI,KAAI,CAACqmI,EAAOv3I,KACnB6qL,EAAAA,GAAAA,KAAA,OACEyiB,YAAaA,IAAMw5F,GAAiBA,EAAc9mS,GAClD6qM,aAAcA,IAAMi8F,GAAiBA,GAAe,GACpDxtJ,QAASA,IAAMytJ,GAAiBA,EAAc/mS,GAC9CoC,MAAO,CAAEpB,MAAQ,GAAE2lS,MAAe1lS,OAAS,GAAEm6I,MAAgB/W,YAAc,GAAEuiK,OAC7EpkS,UAAY,+BAA6BxC,IAAM8vQ,EAAc,oBAAsB,IAAKjwJ,UAGxFgrE,EAAAA,GAAAA,KAAC2iB,GAAW,CAAChrM,UAAU,uBAAuByqK,IAAK11B,KAF7C,SAAQv3I,YAOtB4nS,MAAmB/8G,EAAAA,GAAAA,KAAA,OACnBzoL,MAAO,CAAEpB,MAAOo7I,EAAWp7I,OAC3BwB,UAAY,oCAAkCklS,EAAqB,YAAc,IAAK7nL,SAErF6mL,GAAsBgB,EAAqB,MACxC78G,EAAAA,GAAAA,KAACw9G,GAAAA,eAAU,CACX/uJ,QAASA,KAAOouJ,GAAsBR,EAAe/3R,GACrDnO,MAAQ,GAAEo7I,EAAWp7I,UACrBC,OAAS,GAAEm7I,EAAWn7I,kBAlEvB,IAsED,gEC7MV,MCYMqnS,GAAcntN,GAAS,KAAK,CAACotN,EAAYC,MACzB,IAAhBD,GACFC,EAAeD,EAAW,IAoI9B,GAhIsB5nS,IAAsF,IAArF,OAACi8I,EAAS,GAAE,YAAE+tD,GAAc,EAAI,eAAE89F,GAAiB,EAAK,YAAEp8F,GAAc,GAAO1rM,EACpG,MAAM2yE,GAAU23H,EAAAA,EAAAA,QAAO,OAChBy9F,EAAWC,IAAgBt9H,EAAAA,EAAAA,WAAS,IACpCykG,EAAa04B,IAAkBn9H,EAAAA,EAAAA,UAAS,IACxCu9H,EAAoBC,IAAyBx9H,EAAAA,EAAAA,WAAU,IACvD9wB,EAAYuuJ,IAAiBz9H,EAAAA,EAAAA,WAAS,IAE7CC,EAAAA,EAAAA,YAAU,KACRq9H,GAAa,GACT/rJ,EAAO18I,OAAS4vQ,GAClB04B,EAAe5rJ,EAAO18I,OAAS,GAGjC2oS,GAAuB,GACvBC,GAAc,EAAK,GAElB,CAAClsJ,KAEJ0uB,EAAAA,EAAAA,YAAU,KACNg9H,GAAYM,EAAoBJ,EAAe,GAChD,CAACI,IAEJ,MAAM30F,EAAWL,GAAa,CAC5BrD,aAAcA,IAAMw4F,EAAO7oS,OAAS,GAAKiP,IACzCqhM,cAAeA,IAAMu4F,EAAO7oS,OAAS,GAAKutE,IAC1C6iI,8BAA8B,EAC9Ba,YAAY,IAGR5D,GAAgB3a,EAAAA,EAAAA,cAAao2G,IAE/BF,GADEE,EAIJ,GACC,IAEG75R,EAAOA,KACX,GAAIu5R,EAAW,OACf,MAAMj5H,EAAYqgG,IAAgBlzH,EAAO18I,OAAS,EAAI,EAAI4vQ,EAAc,EACxE04B,EAAe/4H,EAAU,EAGrBhiG,EAAWA,KACf,GAAIi7N,EAAW,OACf,MAAMj5H,EAA4B,IAAhBqgG,EAAoBlzH,EAAO18I,OAAS,EAAI4vQ,EAAc,EACxE04B,EAAe/4H,EAAU,EAGrBs5H,EAASnsJ,EAAO1rI,KAAI,CAACqmI,EAAOplH,KAChC04J,EAAAA,GAAAA,KAACs4G,GAAY,CAEX/f,UAAWA,IAAMulB,GAAa,GAC9BtlB,SAAUA,IAAMslB,GAAa,GAAO9oL,UAEpCgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,gBAAeq9G,SAC3B8qF,GACG9f,EAAAA,GAAAA,KAACo+G,GAAS,CAAC78F,cAAemB,EAAetgC,IAAK11B,EAAM2xJ,IAAK78F,YAAaA,KACtExhB,EAAAA,GAAAA,KAAC2iB,GAAW,CAAChrM,UAAU,QAAQyqK,IAAK11B,EAAM2xJ,IAAK78F,YAAaA,OAP7D90D,EAAM2xJ,IAAM/2Q,KAyBrB,OAAKyqH,GAA4B,IAAlBA,EAAO18I,QAGpB0qL,EAAAA,GAAAA,MAAA,OAAKhqL,IAAK0yE,EAAS9wE,UAAU,wBAAuBq9G,SAAA,EAClD+qE,EAAAA,GAAAA,MAAA,OACEvpL,GAAG,yBACHmB,UAAU,uCAAsCq9G,SAAA,CAE/CkpL,EAAO7oS,OAAS,IACf2qL,EAAAA,GAAAA,KAAA,QAAMroL,UAAY,qBAAmB+3I,EAAa,QAAU,IAAK16B,UAC/DgrE,EAAAA,GAAAA,KAACu9G,GAAAA,eAAS,CAACpnS,MAAM,OAAOC,OAAO,OAAOq4I,QAAS7rE,OAGnDo9G,EAAAA,GAAAA,KAAA,UAASopB,EAAQp0F,UACfgrE,EAAAA,GAAAA,KAAC31C,GAAQ,CACPU,UAAU,EACVnoE,SAAUA,EACVt+D,KAAMA,EACNy0R,YAAa9zB,EAAYjwJ,SACxBkpL,MAGJA,EAAO7oS,OAAS,IACf2qL,EAAAA,GAAAA,KAAA,QAAMroL,UAAY,sBAAoB+3I,EAAa,QAAU,IAAK16B,UAChEgrE,EAAAA,GAAAA,KAACw9G,GAAAA,eAAU,CAACrnS,MAAM,OAAOC,OAAO,OAAOq4I,QAASnqI,SApCzBg6R,MAAO,IAADC,EAAAC,EAAAC,EACrC,MACMC,EAAY5hS,IAAUkjL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,0BAAyBq9G,SAAEl4G,IACtE,OAF6C,QAAnByhS,EAAAxsJ,EAAOkzH,UAAY,IAAAs5B,OAAA,EAAnBA,EAAqBI,eAAkC,QAAnBH,EAAAzsJ,EAAOkzH,UAAY,IAAAu5B,GAAa,QAAbC,EAAnBD,EAAqBG,mBAAW,IAAAF,OAAb,EAAnBA,EAAkChhS,OAAOpI,QAAS,EAGvGqpS,EAAS3sJ,EAAOkzH,GAAa05B,aAElC5sJ,EAAO18I,OA9EM,GA+ERqpS,EAAU,GAAEz5B,EAAc,KAAKlzH,EAAO18I,UAExC,IAAI,EA+BRipS,GACAvsJ,EAAO18I,OAAS,IACf2qL,EAAAA,GAAAA,KAAC4+G,GAAkB,CACjB1tJ,UAAW,CACT/6I,MAAO,EAAGC,OAAQ,IAEpBm7I,WAAY,CACVp7I,MAAO,EAAGC,OAAQ,IAEpBmI,OAAQ,CAAEpI,MAAQ,QAClB47I,OAAQA,EAAO1rI,KAAIqmI,GAASA,EAAM2xJ,MAClCnC,cAAeyB,EACf1B,cAAe+B,EACf/4B,YAAaA,EACb42B,oBAAoB,KAExB77G,EAAAA,GAAAA,KAAC6+G,GAAW,CAAC9sJ,OAAQA,EAAQiyC,OAAQihF,EAAak2B,WAAa3kS,GAAOmnS,EAAennS,KACpFonS,IAAkB59G,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,uBAAsBq9G,UACtDgrE,EAAAA,GAAAA,KAACE,GAAW,SA9CyB,IAgDnC,EC7IG4+G,GAAczkK,GACNnkI,IACb,MAAM,SAAEytK,GAAakH,IACfW,EAAWR,KACVsI,GAAgBJ,KAEvB,OACI8M,EAAAA,GAAAA,KAAC3lD,EAAS,CAACs9C,OAAQhU,EAAU6H,SAAUA,EAAU8H,aAAcA,KAAkBp9K,GAAQ,ECTrG,SAAS4yI,GAAQxjH,GAAkC,OAAOwjH,GAAU,mBAAqB3vI,QAAU,iBAAmBA,OAAOW,SAAW,SAAUwrB,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAO,mBAAqBnsB,QAAUmsB,EAAI/jB,cAAgBpI,QAAUmsB,IAAQnsB,OAAO3D,UAAY,gBAAkB8vB,CAAK,EAAGwjH,GAAQxjH,EAAM,CAE/U,SAASmkH,GAAkBv0I,EAAQgB,GAAS,IAAK,IAAIf,EAAI,EAAGA,EAAIe,EAAMb,OAAQF,IAAK,CAAE,IAAI45H,EAAa74H,EAAMf,GAAI45H,EAAWlyH,WAAakyH,EAAWlyH,aAAc,EAAOkyH,EAAW1rH,cAAe,EAAU,UAAW0rH,IAAYA,EAAWzrH,UAAW,GAAMvO,OAAO6H,eAAe1H,EAAQ65H,EAAWx5H,IAAKw5H,EAAa,CAAE,CAG5T,SAASoS,GAAgB/nI,EAAGa,GAA6I,OAAxIknI,GAAkBpsI,OAAOoiH,eAAiBpiH,OAAOoiH,eAAeliH,OAAS,SAAyBmE,EAAGa,GAAsB,OAAjBb,EAAE+/G,UAAYl/G,EAAUb,CAAG,EAAU+nI,GAAgB/nI,EAAGa,EAAI,CACvM,SAASyvI,GAAaC,GAAW,IAAIC,EAGrC,WAAuC,GAAuB,qBAAZC,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,oBAAVpmB,MAAsB,OAAO,EAAM,IAAsF,OAAhF5nH,QAAQvG,UAAUwG,QAAQtG,KAAKm0I,QAAQC,UAAU/tI,QAAS,IAAI,WAAa,MAAY,CAAM,CAAE,MAAOvD,GAAK,OAAO,CAAO,CAAE,CAHvQwxI,GAA6B,OAAO,WAAkC,IAAsC7uG,EAAlC8uG,EAAQC,GAAgBP,GAAkB,GAAIC,EAA2B,CAAE,IAAIO,EAAYD,GAAgBt0I,MAAM2L,YAAa45B,EAAS0uG,QAAQC,UAAUG,EAAO70I,UAAW+0I,EAAY,MAAShvG,EAAS8uG,EAAMt0I,MAAMC,KAAMR,WAAc,OACpX,SAAoCwD,EAAMlD,GAAQ,GAAIA,IAA2B,WAAlBozI,GAAQpzI,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIyJ,UAAU,4DAA+D,OAC1P,SAAgCvG,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIu3H,eAAe,6DAAgE,OAAOv3H,CAAM,CAD4FwxI,CAAuBxxI,EAAO,CAD4Fw3H,CAA2Bx6H,KAAMulC,EAAS,CAAG,CAIxa,SAAS+uG,GAAgB9wI,GAA+J,OAA1J8wI,GAAkBn1I,OAAOoiH,eAAiBpiH,OAAOoF,eAAelF,OAAS,SAAyBmE,GAAK,OAAOA,EAAE+/G,WAAapkH,OAAOoF,eAAef,EAAI,EAAU8wI,GAAgB9wI,EAAI,CAKnN,IAAIkhI,GAAY,CACdtlB,SAAUqY,KAAAA,KAAeb,WACzB1nG,KAAMuoG,KAAAA,KAEJ0xK,GAAsB,SAAU37J,IAfpC,SAAmBnR,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI/yH,UAAU,sDAAyD8yH,EAASz8H,UAAYT,OAAOiI,OAAOk1H,GAAcA,EAAW18H,UAAW,CAAE+L,YAAa,CAAEzE,MAAOm1H,EAAU3uH,UAAU,EAAMD,cAAc,KAAWtO,OAAO6H,eAAeq1H,EAAU,YAAa,CAAE3uH,UAAU,IAAc4uH,GAAYiP,GAAgBlP,EAAUC,EAAa,CAgBjcC,CAAU4sK,EAAQ37J,GAClB,IAlBoBpU,EAAaC,EAAYC,EAkBzCob,EAASZ,GAAaq1J,GAC1B,SAASA,IAEP,OAvBJ,SAAyBp/R,EAAUqvH,GAAe,KAAMrvH,aAAoBqvH,GAAgB,MAAM,IAAI7vH,UAAU,oCAAwC,CAsBpJ8wH,CAAgBr6H,KAAMmpS,GACfz0J,EAAO30I,MAAMC,KAAMR,UAC5B,CAsBA,OA5CoB45H,EAuBP+vK,GAvBoB9vK,EAuBZ,CAAC,CACpB15H,IAAK,uBACLuH,MAAO,WACDlH,KAAKopS,aACPpkS,SAAS+H,KAAKmzG,YAAYlgH,KAAKopS,aAEjCppS,KAAKopS,YAAc,IACrB,GACC,CACDzpS,IAAK,SACLuH,MAAO,WACL,OAAKmlL,IAGArsL,KAAKM,MAAM4uB,MAASlvB,KAAKopS,cAC5BppS,KAAKopS,YAAcpkS,SAASgxH,cAAc,OAC1ChxH,SAAS+H,KAAKy4H,YAAYxlI,KAAKopS,cAEb57H,IAAAA,aAAsBxtK,KAAKM,MAAM8+G,SAAUp/G,KAAKM,MAAM4uB,MAAQlvB,KAAKopS,cAN9E,IAOX,MA1C0Ev1J,GAAkBza,EAAYx5H,UAAWy5H,GAAiBC,GAAaua,GAAkBza,EAAaE,GAAcn6H,OAAO6H,eAAeoyH,EAAa,YAAa,CAAE1rH,UAAU,IA4CrPy7R,CACT,CA7B0B,CA6BxB79H,IAAAA,WACF69H,GAAOzkK,UAAYA,GACnB,YClDA,SAASwO,GAAQxjH,GAAkC,OAAOwjH,GAAU,mBAAqB3vI,QAAU,iBAAmBA,OAAOW,SAAW,SAAUwrB,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAO,mBAAqBnsB,QAAUmsB,EAAI/jB,cAAgBpI,QAAUmsB,IAAQnsB,OAAO3D,UAAY,gBAAkB8vB,CAAK,EAAGwjH,GAAQxjH,EAAM,CAC/U,SAASwgH,GAAQ3hH,EAAQ4hH,GAAkB,IAAIvpI,EAAOzH,OAAOyH,KAAK2nB,GAAS,GAAIpvB,OAAO2H,sBAAuB,CAAE,IAAIspI,EAAUjxI,OAAO2H,sBAAsBynB,GAAS4hH,IAAmBC,EAAUA,EAAQ9mI,QAAO,SAAU+mI,GAAO,OAAOlxI,OAAOqO,yBAAyB+gB,EAAQ8hH,GAAKppI,UAAY,KAAKL,EAAKC,KAAK9G,MAAM6G,EAAMwpI,EAAU,CAAE,OAAOxpI,CAAM,CACpV,SAAS0pI,GAAchxI,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAS,MAAQF,UAAUD,GAAKC,UAAUD,GAAK,CAAC,EAAGA,EAAI,EAAI2wI,GAAQ/wI,OAAOO,IAAS,GAAIkI,SAAQ,SAAUjI,GAAO4wI,GAAgBjxI,EAAQK,EAAKD,EAAOC,GAAO,IAAKR,OAAOwO,0BAA4BxO,OAAOyO,iBAAiBtO,EAAQH,OAAOwO,0BAA0BjO,IAAWwwI,GAAQ/wI,OAAOO,IAASkI,SAAQ,SAAUjI,GAAOR,OAAO6H,eAAe1H,EAAQK,EAAKR,OAAOqO,yBAAyB9N,EAAQC,GAAO,GAAI,CAAE,OAAOL,CAAQ,CACzf,SAASJ,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAAS+wI,GAAgB7gH,EAAK/vB,EAAKuH,GAAiK,OAApJvH,KAAO+vB,EAAOvwB,OAAO6H,eAAe0oB,EAAK/vB,EAAK,CAAEuH,MAAOA,EAAOD,YAAY,EAAMwG,cAAc,EAAMC,UAAU,IAAkBgiB,EAAI/vB,GAAOuH,EAAgBwoB,CAAK,CAEhN,SAASmkH,GAAkBv0I,EAAQgB,GAAS,IAAK,IAAIf,EAAI,EAAGA,EAAIe,EAAMb,OAAQF,IAAK,CAAE,IAAI45H,EAAa74H,EAAMf,GAAI45H,EAAWlyH,WAAakyH,EAAWlyH,aAAc,EAAOkyH,EAAW1rH,cAAe,EAAU,UAAW0rH,IAAYA,EAAWzrH,UAAW,GAAMvO,OAAO6H,eAAe1H,EAAQ65H,EAAWx5H,IAAKw5H,EAAa,CAAE,CAG5T,SAASoS,GAAgB/nI,EAAGa,GAA6I,OAAxIknI,GAAkBpsI,OAAOoiH,eAAiBpiH,OAAOoiH,eAAeliH,OAAS,SAAyBmE,EAAGa,GAAsB,OAAjBb,EAAE+/G,UAAYl/G,EAAUb,CAAG,EAAU+nI,GAAgB/nI,EAAGa,EAAI,CACvM,SAASyvI,GAAaC,GAAW,IAAIC,EAGrC,WAAuC,GAAuB,qBAAZC,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,oBAAVpmB,MAAsB,OAAO,EAAM,IAAsF,OAAhF5nH,QAAQvG,UAAUwG,QAAQtG,KAAKm0I,QAAQC,UAAU/tI,QAAS,IAAI,WAAa,MAAY,CAAM,CAAE,MAAOvD,GAAK,OAAO,CAAO,CAAE,CAHvQwxI,GAA6B,OAAO,WAAkC,IAAsC7uG,EAAlC8uG,EAAQC,GAAgBP,GAAkB,GAAIC,EAA2B,CAAE,IAAIO,EAAYD,GAAgBt0I,MAAM2L,YAAa45B,EAAS0uG,QAAQC,UAAUG,EAAO70I,UAAW+0I,EAAY,MAAShvG,EAAS8uG,EAAMt0I,MAAMC,KAAMR,WAAc,OACpX,SAAoCwD,EAAMlD,GAAQ,GAAIA,IAA2B,WAAlBozI,GAAQpzI,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIyJ,UAAU,4DAA+D,OAAOirI,GAAuBxxI,EAAO,CAD4Fw3H,CAA2Bx6H,KAAMulC,EAAS,CAAG,CAExa,SAASivG,GAAuBxxI,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIu3H,eAAe,6DAAgE,OAAOv3H,CAAM,CAErK,SAASsxI,GAAgB9wI,GAA+J,OAA1J8wI,GAAkBn1I,OAAOoiH,eAAiBpiH,OAAOoF,eAAelF,OAAS,SAAyBmE,GAAK,OAAOA,EAAE+/G,WAAapkH,OAAOoF,eAAef,EAAI,EAAU8wI,GAAgB9wI,EAAI,CAOnN,SAAS2+C,KAAQ,CACjB,IAAIknP,GAAgB5xK,KAAAA,MAAgB8rJ,GAAK7+I,WACrCA,GAAY,CAEdyS,UAAW1f,KAAAA,KAEX6xK,SAAU7xK,KAAAA,UAAoB,CAACA,KAAAA,KAAgBA,KAAAA,MAAgB,CAAC,aAEhE8xK,kBAAmB9xK,KAAAA,OACnB+xK,mBAAoBH,GAEpBI,SAAUhyK,KAAAA,KAEVrY,SAAUqY,KAAAA,KAEViyK,iBAAkBjyK,KAAAA,OAClB11H,UAAW01H,KAAAA,OACX4M,UAAWqnD,GACXL,UAAW5zD,KAAAA,OACXkyK,SAAUlyK,KAAAA,KAEV0sJ,KAAM1sJ,KAAAA,KAENmyK,WAAYnyK,KAAAA,UAAoB,CAACA,KAAAA,KAAgBA,KAAAA,MAAgB,CAAC,KAAM,KAAM,KAAM,SACpF4Q,SAAU5Q,KAAAA,UAAoB,CAACA,KAAAA,OAAkBA,KAAAA,OAAkBA,KAAAA,OAEnEy2D,OAAQz2D,KAAAA,KAER2rK,SAAU3rK,KAAAA,KAEVkmF,WAAYlmF,KAAAA,OACZoyK,eAAgBpyK,KAAAA,OAChBqyK,gBAAiBT,GAEjBnlB,SAAUzsJ,KAAAA,KAEV+qJ,QAAS/qJ,KAAAA,KAETirJ,OAAQjrJ,KAAAA,KAERsyK,SAAUtyK,KAAAA,KAEVuyK,sBAAuBvyK,KAAAA,KAEvBykB,KAAMzkB,KAAAA,OAEN4+G,WAAY5+G,KAAAA,KAEZ/8D,KAAM+8D,KAAAA,OAEN42D,OAAQ52D,KAAAA,KACRwyK,UAAWxyK,KAAAA,KAEXyyK,eAAgBzyK,KAAAA,KAChB0yK,cAAe1yK,KAAAA,OACf1zG,OAAQ0zG,KAAAA,UAAoB,CAACA,KAAAA,OAAkBA,KAAAA,UAE7CgsK,GAActkS,OAAOyH,KAAK89H,IAC1BC,GAAe,CACjBupD,QAAQ,EACR/2C,WAAW,EACXsyJ,UAAU,EACVpzD,YAAY,EACZn6F,KAAM,SACNotJ,UAAU,EACVlG,UAAU,EACVr/Q,OAAQ,KACRogQ,MAAM,EACN4lB,SAAU5nP,GACV+hO,SAAU/hO,GACV2nP,gBAAiB,CACfx9H,QAASsf,IAEX49G,mBAAoB,CAClBnoB,cAAc,EACd/0G,QAASsf,IAGXs+G,gBAAgB,EAChBF,uBAAuB,EACvB3lK,UAAW,OACX4lK,WAAW,GAETG,GAAqB,SAAU58J,IAhGnC,SAAmBnR,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI/yH,UAAU,sDAAyD8yH,EAASz8H,UAAYT,OAAOiI,OAAOk1H,GAAcA,EAAW18H,UAAW,CAAE+L,YAAa,CAAEzE,MAAOm1H,EAAU3uH,UAAU,EAAMD,cAAc,KAAWtO,OAAO6H,eAAeq1H,EAAU,YAAa,CAAE3uH,UAAU,IAAc4uH,GAAYiP,GAAgBlP,EAAUC,EAAa,CAiGjcC,CAAU6tK,EAAO58J,GACjB,IAnGoBpU,EAAaC,EAAYC,EAmGzCob,EAASZ,GAAas2J,GAC1B,SAASA,EAAM9pS,GACb,IAAIg6H,EAoBJ,OA3HJ,SAAyBvwH,EAAUqvH,GAAe,KAAMrvH,aAAoBqvH,GAAgB,MAAM,IAAI7vH,UAAU,oCAAwC,CAwGpJ8wH,CAAgBr6H,KAAMoqS,IACtB9vK,EAAQoa,EAAO50I,KAAKE,KAAMM,IACpBikR,SAAW,KACjBjqJ,EAAM+vK,qBAAuB,KAC7B/vK,EAAMgwK,qBAAuBhwK,EAAMgwK,qBAAqBjrS,KAAKm1I,GAAuBla,IACpFA,EAAMiwK,oBAAsBjwK,EAAMiwK,oBAAoBlrS,KAAKm1I,GAAuBla,IAClFA,EAAMkwK,wBAA0BlwK,EAAMkwK,wBAAwBnrS,KAAKm1I,GAAuBla,IAC1FA,EAAMmwK,aAAenwK,EAAMmwK,aAAaprS,KAAKm1I,GAAuBla,IACpEA,EAAMowK,8BAAgCpwK,EAAMowK,8BAA8BrrS,KAAKm1I,GAAuBla,IACtGA,EAAMqwK,UAAYrwK,EAAMqwK,UAAUtrS,KAAKm1I,GAAuBla,IAC9DA,EAAMyvK,SAAWzvK,EAAMyvK,SAAS1qS,KAAKm1I,GAAuBla,IAC5DA,EAAM4pJ,SAAW5pJ,EAAM4pJ,SAAS7kR,KAAKm1I,GAAuBla,IAC5DA,EAAMswK,sBAAwBtwK,EAAMswK,sBAAsBvrS,KAAKm1I,GAAuBla,IACtFA,EAAMuwK,8BAAgCvwK,EAAMuwK,8BAA8BxrS,KAAKm1I,GAAuBla,IACtGA,EAAM2vK,UAAY3vK,EAAM2vK,UAAU5qS,KAAKm1I,GAAuBla,IAC9DA,EAAMvxH,MAAQ,CACZmlL,QAAQ,EACR48G,6BAA6B,GAExBxwK,CACT,CA0WA,OApeoBlB,EA2HPgxK,EA3HoB/wK,EA2Hb,CAAC,CACnB15H,IAAK,oBACLuH,MAAO,WACL,IAAI6nI,EAAc/uI,KAAKM,MACrB4tL,EAASn/C,EAAYm/C,OACrB/2C,EAAYpI,EAAYoI,UACxBqrI,EAAUzzI,EAAYyzI,QACpBt0F,IACFluL,KAAKwiB,OACLxiB,KAAK28H,SAAS,CACZuxD,QAAQ,IAEN/2C,GACFn3I,KAAK+qS,YAGLvoB,GACFA,IAIFx9Q,SAASgO,iBAAiB,QAAShT,KAAKiqS,WAAW,GACnDjqS,KAAKomR,YAAa,CACpB,GACC,CACDzmR,IAAK,qBACLuH,MAAO,SAA4BgnI,EAAWgJ,GAC5C,GAAIl3I,KAAKM,MAAM4tL,SAAWhgD,EAAUggD,OAMlC,OALAluL,KAAKwiB,YACLxiB,KAAK28H,SAAS,CACZuxD,QAAQ,IAORluL,KAAKM,MAAM62I,WAAan3I,KAAK+I,MAAMmlL,SAAWh3C,EAAUg3C,QAC1DluL,KAAK+qS,WAEH/qS,KAAKukR,UAAYr2I,EAAUnqH,SAAW/jB,KAAKM,MAAMyjB,SACnD/jB,KAAKukR,SAAS5iR,MAAMoiB,OAAS/jB,KAAKM,MAAMyjB,OAE5C,GACC,CACDpkB,IAAK,uBACLuH,MAAO,WACLlH,KAAK6qS,gCACD7qS,KAAKM,MAAMoiR,QACb1iR,KAAKM,MAAMoiR,SAET1iR,KAAKukR,WACPvkR,KAAKs5L,WACDt5L,KAAKM,MAAM4tL,QAAUluL,KAAK+I,MAAMmlL,SAClCluL,KAAKgyL,SAGThtL,SAASy5H,oBAAoB,QAASz+H,KAAKiqS,WAAW,GACtDjqS,KAAKomR,YAAa,CACpB,GAGC,CACDzmR,IAAK,sBACLuH,MAAO,SAA6BtE,GAClC,GAAIA,EAAEtD,SAAWU,KAAKgrS,kBAAmB,CACvCpoS,EAAE+iN,kBACF,IAAI2jF,EAAWtpS,KAAKirS,QAAUjrS,KAAKirS,QAAQ1gK,WAAa,KAIxD,GAHI++J,GAAY1mS,EAAEtD,SAAWgqS,GAAoC,WAAxBtpS,KAAKM,MAAMgpS,UAClDtpS,KAAK0qS,iCAEF1qS,KAAKM,MAAM4tL,SAAkC,IAAxBluL,KAAKM,MAAMgpS,SAAmB,OACpDA,GAAY1mS,EAAEtD,SAAWgqS,GAAYtpS,KAAKM,MAAM+tL,QAClDruL,KAAKM,MAAM+tL,OAAOzrL,EAEtB,CACF,GACC,CACDjD,IAAK,YACLuH,MAAO,SAAmBtE,GACxB,GAAgB,IAAZA,EAAE0sL,SACFtvL,KAAKkrS,WAAad,EAAMe,UAAY,GAAxC,CAEA,IAAIC,EAAoBprS,KAAKsqS,uBACzBe,EAAiBD,EAAkB3rS,OACvC,GAAuB,IAAnB4rS,EAAJ,CAGA,IAFA,IAAIC,EAAetrS,KAAKurS,kBACpBC,EAAe,EACVjsS,EAAI,EAAGA,EAAI8rS,EAAgB9rS,GAAK,EACvC,GAAI6rS,EAAkB7rS,KAAO+rS,EAAc,CACzCE,EAAejsS,EACf,KACF,CAEEqD,EAAEi5K,UAA6B,IAAjB2vH,GAChB5oS,EAAE88H,iBACF0rK,EAAkBC,EAAiB,GAAGjzJ,SAC5Bx1I,EAAEi5K,UAAY2vH,IAAiBH,EAAiB,IAC1DzoS,EAAE88H,iBACF0rK,EAAkB,GAAGhzJ,QAdS,CAJiB,CAoBnD,GACC,CACDz4I,IAAK,0BACLuH,MAAO,SAAiCtE,GACtC5C,KAAKgrS,kBAAoBpoS,EAAEtD,MAC7B,GACC,CACDK,IAAK,eACLuH,MAAO,SAAsBtE,GACvB5C,KAAKM,MAAM4tL,QAAUtrL,EAAE4yI,UAAYu2C,GAASC,KAAOhsL,KAAKM,MAAM+tL,SAC5DruL,KAAKM,MAAM8iS,UACbxgS,EAAE88H,iBACF98H,EAAE+iN,kBACF3lN,KAAKM,MAAM+tL,OAAOzrL,IACe,WAAxB5C,KAAKM,MAAMgpS,WACpB1mS,EAAE88H,iBACF98H,EAAE+iN,kBACF3lN,KAAK0qS,iCAGX,GACC,CACD/qS,IAAK,gCACLuH,MAAO,WACL,IAAIy3H,EAAS3+H,KACbA,KAAK6qS,gCACL7qS,KAAK28H,SAAS,CACZmuK,6BAA6B,IAE/B9qS,KAAKyrS,0BAA4B94R,YAAW,WAC1CgsH,EAAOhC,SAAS,CACdmuK,6BAA6B,GAEjC,GAAG,IACL,GACC,CACDnrS,IAAK,WACLuH,MAAO,SAAkBgoB,EAAM0zQ,GAC7B5iS,KAAKM,MAAMypS,YACV/pS,KAAKM,MAAMwpS,gBAAgBvnB,WAAapgO,IAAMjzB,EAAM0zQ,EACvD,GACC,CACDjjS,IAAK,WACLuH,MAAO,SAAkBgoB,GACvB,IAAIg7Q,EAAiBlqS,KAAKM,MAAM4pS,eAEhClqS,KAAKM,MAAM4jR,YACVlkR,KAAKM,MAAMwpS,gBAAgBlnB,UAAYzgO,IAAMjzB,GAC1Cg7Q,GACFlqS,KAAKs5L,UAEPt5L,KAAKgyL,QACDhyL,KAAKomR,YACPpmR,KAAK28H,SAAS,CACZuxD,QAAQ,GAGd,GACC,CACDvuL,IAAK,WACLuH,MAAO,WACDlH,KAAKirS,SAAWjrS,KAAKirS,QAAQ1gK,YAAuD,oBAAlCvqI,KAAKirS,QAAQ1gK,WAAW6N,OAC5Ep4I,KAAKirS,QAAQ1gK,WAAW6N,OAE5B,GACC,CACDz4I,IAAK,uBACLuH,MAAO,WACL,OAAOlH,KAAKukR,SAAS71I,iBAAiBm+C,GAAkB/iL,KAAK,MAC/D,GACC,CACDnK,IAAK,kBACLuH,MAAO,WACL,IAAIokS,EACAF,EAAoBprS,KAAKsqS,uBAC7B,IACEgB,EAAetmS,SAASqwI,aAC1B,CAAE,MAAOpiH,GACPq4Q,EAAeF,EAAkB,EACnC,CACA,OAAOE,CACT,GACC,CACD3rS,IAAK,YACLuH,MAAO,SAAmBwkS,GACxB,GAAK1rS,KAAKM,MAAM2pS,WAGXjqS,KAAKukR,YAINvkR,KAAKirS,SAAWjrS,KAAKirS,QAAQ1gK,aAAemhK,EAAGpsS,WAI/CU,KAAKkrS,WAAad,EAAMe,UAAY,GAAxC,CAKA,IADA,IAAI/rL,EAAWp/G,KAAKsqS,uBACX/qS,EAAI,EAAGA,EAAI6/G,EAAS3/G,OAAQF,GAAK,EAExC,GAAI6/G,EAAS7/G,KAAOmsS,EAAGpsS,OAAQ,OAE7B8/G,EAAS3/G,OAAS,IAEpBisS,EAAGhsK,iBACHgsK,EAAG/lF,kBACHvmG,EAAS,GAAGg5B,QAVd,CAYF,GACC,CACDz4I,IAAK,OACLuH,MAAO,WACL,IACElH,KAAK2rS,mBAAqB3mS,SAASqwI,aACrC,CAAE,MAAOpiH,GACPjzB,KAAK2rS,mBAAqB,IAC5B,CACK3rS,KAAKukR,WACRvkR,KAAKukR,SAAWv/Q,SAASgxH,cAAc,OACvCh2H,KAAKukR,SAAS1xQ,aAAa,WAAY,MACvC7S,KAAKukR,SAAS5iR,MAAM6jF,SAAW,WAC/BxlF,KAAKukR,SAAS5iR,MAAMoiB,OAAS/jB,KAAKM,MAAMyjB,OACxC/jB,KAAK4rS,gBAAkBj/G,GAAU3sL,KAAKM,MAAM+jI,WAC5CrkI,KAAK4rS,gBAAgBpmK,YAAYxlI,KAAKukR,WAExCvkR,KAAKqqS,qB3chVJ,WACL,IAAI1oS,EAAQwB,OAAO+hI,iBAAiBlgI,SAAS+H,KAAM,MACnD,OAAOmU,SAASvf,GAASA,EAAM8tM,iBAAiB,kBAAoB,EAAG,GACzE,C2c6UkCo8F,GACxBzB,EAAMe,UAAY,IACpBf,EAAM0B,qBAAuB3oS,OAAO+hI,iBAAiBlgI,SAAS+H,MAAMmgF,UAEtE49F,KACwB,IAApBs/G,EAAMe,YACRnmS,SAAS+H,KAAKhL,UAAY68C,KAAW55C,SAAS+H,KAAKhL,UAAWqpL,GAAgB,aAAcprL,KAAKM,MAAM+qL,YACvGrmL,SAAS+H,KAAKpL,MAAMurF,SAAW,UAEjCltF,KAAKkrS,WAAad,EAAMe,UACxBf,EAAMe,WAAa,CACrB,GACC,CACDxrS,IAAK,UACLuH,MAAO,WACDlH,KAAKukR,WACPvkR,KAAK4rS,gBAAgB1rL,YAAYlgH,KAAKukR,UACtCvkR,KAAKukR,SAAW,MAElBvkR,KAAK4qS,uBACP,GACC,CACDjrS,IAAK,wBACLuH,MAAO,WACL,GAAIlH,KAAK2rS,mBAAoB,CAC3B,IAAI3B,EAAwBhqS,KAAKM,MAAM0pS,sBACnChqS,KAAK2rS,mBAAmBvzJ,OAAS4xJ,GAAuBhqS,KAAK2rS,mBAAmBvzJ,QACpFp4I,KAAK2rS,mBAAqB,IAC5B,CACF,GACC,CACDhsS,IAAK,QACLuH,MAAO,WACL,GAAIkjS,EAAMe,WAAa,EAAG,CACxB,IAAIY,EAAqB3gH,GAAgB,aAAcprL,KAAKM,MAAM+qL,WAE9D2gH,EAA0B,IAAI1mS,OAAO,QAAQoD,OAAOqjS,EAAoB,UAC5E/mS,SAAS+H,KAAKhL,UAAYiD,SAAS+H,KAAKhL,UAAUqH,QAAQ4iS,EAAyB,KAAKnkS,OACxF7C,SAAS+H,KAAKpL,MAAMurF,SAAWk9M,EAAM0B,oBACvC,CACA9rS,KAAK4qS,wBACLR,EAAMe,UAAYr9R,KAAKgwB,IAAI,EAAGssQ,EAAMe,UAAY,GAChDtgH,GAAkB7qL,KAAKqqS,qBACzB,GACC,CACD1qS,IAAK,gCACLuH,MAAO,WACDlH,KAAKyrS,4BACPxuO,aAAaj9D,KAAKyrS,2BAClBzrS,KAAKyrS,+BAA4BrpS,EAErC,GACC,CACDzC,IAAK,oBACLuH,MAAO,WACL,IAAI8pL,EACF/vD,EAASjhI,KACP6iJ,EAAa3kE,GAAKl+E,KAAKM,MAAOmjS,IAC9BwI,EAAkB,eACtB,OAAoB3gI,IAAAA,cAAoB,MAAOpsK,GAAS,CAAC,EAAG2jJ,EAAY,CACtE9gJ,UAAWqpL,GAAgBxsI,KAAWqtP,EAAiBjsS,KAAKM,MAAMyB,WAAYivL,EAAc,CAAC,EAAGzgD,GAAgBygD,EAAa,SAAStoL,OAAO1I,KAAKM,MAAMo6D,MAAO16D,KAAKM,MAAMo6D,MAAO61E,GAAgBygD,EAAa,GAAGtoL,OAAOujS,EAAiB,aAAcjsS,KAAKM,MAAMmpS,UAAWl5J,GAAgBygD,EAAa,GAAGtoL,OAAOujS,EAAiB,eAAgBjsS,KAAKM,MAAM+1O,YAAa9lG,GAAgBygD,EAAa,oBAA8C,IAA1BhxL,KAAKM,MAAMspS,YAAsBr5J,GAAgBygD,EAAa,oBAAoBtoL,OAAO1I,KAAKM,MAAMspS,WAAY,SAA2C,kBAA1B5pS,KAAKM,MAAMspS,YAA0B54G,IAAehxL,KAAKM,MAAM+qL,WAC9lBnvC,KAAM,WACN/7I,IAAK,SAAa8D,GAChBg9H,EAAOgqK,QAAUhnS,CACnB,IACeqnK,IAAAA,cAAoB,MAAO,CAC1CvpK,UAAWqpL,GAAgBxsI,KAAW,gBAAiB5+C,KAAKM,MAAMopS,kBAAmB1pS,KAAKM,MAAM+qL,YAC/FrrL,KAAKM,MAAM8+G,UAChB,GACC,CACDz/G,IAAK,SACLuH,MAAO,WACL,IAAIgjS,EAAiBlqS,KAAKM,MAAM4pS,eAChC,GAAMlqS,KAAKukR,WAAavkR,KAAK+I,MAAMmlL,SAAWg8G,GAAiB,CAC7D,IAAIgC,IAAkBlsS,KAAKukR,WAAavkR,KAAK+I,MAAMmlL,SAAWg8G,EAC9DlqS,KAAKukR,SAAS5iR,MAAMwiI,QAAU+nK,EAAgB,OAAS,QACvD,IAAIh9J,EAAelvI,KAAKM,MACtB6pS,EAAgBj7J,EAAai7J,cAC7BN,EAAiB36J,EAAa26J,eAC9BN,EAAoBr6J,EAAaq6J,kBACjCl+G,EAAYn8C,EAAam8C,UACzB6C,EAASh/C,EAAag/C,OACtBo7G,EAAWp6J,EAAao6J,SACxBptJ,EAAOhN,EAAagN,KACpByhE,EAAazuE,EAAayuE,WAC1BgsF,EAAWz6J,EAAay6J,SACxBthK,EAAW6G,EAAa7G,SACtB8jK,EAAkB,CACpBtzJ,QAAS74I,KAAKuqS,oBACdjiK,YAAatoI,KAAKwqS,wBAClB9kF,QAAS1lN,KAAKyqS,aACdxuJ,UAAWj8I,KAAK2qS,UAChBhpS,MAAO,CACLwiI,QAAS,SAEX,kBAAmBw5E,EACnB,cAAc,EACdzhE,KAAMA,EACNjB,SAAU,MAERmxJ,EAAgBpsS,KAAKM,MAAM6jR,KAC3B2lB,EAAkBx5J,GAAcA,GAAcA,GAAc,CAAC,EAAGizI,GAAK5+I,cAAe3kI,KAAKM,MAAMwpS,iBAAkB,CAAC,EAAG,CACvHzmB,UAAW+oB,EAAgBpsS,KAAKM,MAAMwpS,gBAAgBzmB,UAAY,GAClE/2G,QAAS8/H,EAAgBpsS,KAAKM,MAAMwpS,gBAAgBx9H,QAAU,IAE5Dk9H,EAAqBl5J,GAAcA,GAAcA,GAAc,CAAC,EAAGizI,GAAK5+I,cAAe3kI,KAAKM,MAAMkpS,oBAAqB,CAAC,EAAG,CAC7HnmB,UAAW+oB,EAAgBpsS,KAAKM,MAAMkpS,mBAAmBnmB,UAAY,GACrE/2G,QAAS8/H,EAAgBpsS,KAAKM,MAAMkpS,mBAAmBl9H,QAAU,IAE/D+/H,EAAW/C,IAAa8C,EAA6B9gI,IAAAA,cAAoBi4G,GAAMrkR,GAAS,CAAC,EAAGsqS,EAAoB,CAClH,GAAMt7G,KAAYo7G,EAClBj+G,UAAWA,EACXtpL,UAAWqpL,GAAgBxsI,KAAW,iBAAkB2qP,GAAoBl+G,MAC3D/f,IAAAA,cAAoB,MAAO,CAC5CvpK,UAAWqpL,GAAgBxsI,KAAW,iBAAkB,OAAQ2qP,GAAoBl+G,MAEtF,OAAoB/f,IAAAA,cAAoB69H,GAAQ,CAC9Cj6Q,KAAMlvB,KAAKukR,UACGj5G,IAAAA,cAAoB,MAAO,CACzCvpK,UAAWqpL,GAAgB++G,IACb7+H,IAAAA,cAAoBi4G,GAAMrkR,GAAS,CAAC,EAAGitS,EAAiBrC,EAAiB,CACvF,GAAM57G,EACNq0F,UAAWviR,KAAK+pS,SAChBnnB,SAAU5iR,KAAKkkR,SACf74F,UAAWA,EACXtpL,UAAWqpL,GAAgBxsI,KAAW,QAASirP,EAAgB7pS,KAAK+I,MAAM+hS,6BAA+B,gBAAiBz/G,GAC1HhjD,SAAUA,IACRshK,EAAU3pS,KAAKssS,qBAAsBD,GAC3C,CACA,OAAO,IACT,IAle8DhzK,GAAYwa,GAAkBza,EAAYx5H,UAAWy5H,GAAiBC,GAAaua,GAAkBza,EAAaE,GAAcn6H,OAAO6H,eAAeoyH,EAAa,YAAa,CAAE1rH,UAAU,IAoerP08R,CACT,CApYyB,CAoYvB9+H,IAAAA,WACF8+H,GAAM1lK,UAAYA,GAClB0lK,GAAMzlK,aAAeA,GACrBylK,GAAMe,UAAY,EAClBf,GAAM0B,qBAAuB,KAC7B,YCjfA,IAAIngK,GAAY,CAAC,YAAa,YAAa,WAAY,SAAU,MAAO,UAAW,iBAAkB,SACrG,SAASzsI,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAAS+4H,GAAyB74H,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAAkEC,EAAKJ,EAAnED,EACzF,SAAuCI,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAA2DC,EAAKJ,EAA5DD,EAAS,CAAC,EAAO8vI,EAAajwI,OAAOyH,KAAKlH,GAAqB,IAAKH,EAAI,EAAGA,EAAI6vI,EAAW3vI,OAAQF,IAAOI,EAAMyvI,EAAW7vI,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,CAAQ,CADhN+vI,CAA8B3vI,EAAQyvI,GAAuB,GAAIhwI,OAAO2H,sBAAuB,CAAE,IAAIgmL,EAAmB3tL,OAAO2H,sBAAsBpH,GAAS,IAAKH,EAAI,EAAGA,EAAIutL,EAAiBrtL,OAAQF,IAAOI,EAAMmtL,EAAiBvtL,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,GAAkBR,OAAOS,UAAUmkD,qBAAqBjkD,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,GAAQ,CAAE,OAAOL,CAAQ,CAM3e,IAAIolI,GAAY,CACdtlB,SAAUqY,KAAAA,KAEV11H,UAAW01H,KAAAA,OAEXu6D,MAAOv6D,KAAAA,OACP80K,eAAgB90K,KAAAA,OAEhB4zD,UAAW5zD,KAAAA,OAEXptH,IAAKshL,GAEL0C,OAAQ52D,KAAAA,KACR+0K,QAAS7gH,IAEX,SAAS8gH,GAAYnsS,GACnB,IAAIosS,EACA3qS,EAAYzB,EAAMyB,UACpBspL,EAAY/qL,EAAM+qL,UAClBjsE,EAAW9+G,EAAM8+G,SACjBivE,EAAS/tL,EAAM+tL,OACfgE,EAAa/xL,EAAM+J,IACnBuvC,OAAqB,IAAfy4I,EAAwB,KAAOA,EACrCs6G,EAAiBrsS,EAAMksS,QACvBI,OAA6B,IAAnBD,EAA4B,MAAQA,EAC9CE,EAAwBvsS,EAAMisS,eAC9BA,OAA2C,IAA1BM,EAAmC,QAAUA,EAC9D76G,EAAQ1xL,EAAM0xL,MACdnvC,EAAatqB,GAAyBj4H,EAAOqrI,IAC3C9sF,EAAUusI,GAAgBxsI,KAAW78C,EAAW,gBAAiBspL,GASrE,OARK2G,GAAS3D,IACZq+G,EAA2BphI,IAAAA,cAAoB,SAAU,CACvDxpK,KAAM,SACN+2I,QAASw1C,EACTtsL,UAAWqpL,GAAgB,YAAaC,GACxC,aAAckhH,KAGEjhI,IAAAA,cAAoBshI,EAAS1tS,GAAS,CAAC,EAAG2jJ,EAAY,CACxE9gJ,UAAW88C,IACIysH,IAAAA,cAAoB1xH,EAAK,CACxC73C,UAAWqpL,GAAgB,cAAeC,IACzCjsE,GAAW4yE,GAAS06G,EACzB,CACAD,GAAY/nK,UAAYA,GACxB,YCrDA,IAAIiH,GAAY,CAAC,YAAa,YAAa,OAC3C,SAASzsI,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAAS+4H,GAAyB74H,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAAkEC,EAAKJ,EAAnED,EACzF,SAAuCI,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAA2DC,EAAKJ,EAA5DD,EAAS,CAAC,EAAO8vI,EAAajwI,OAAOyH,KAAKlH,GAAqB,IAAKH,EAAI,EAAGA,EAAI6vI,EAAW3vI,OAAQF,IAAOI,EAAMyvI,EAAW7vI,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,CAAQ,CADhN+vI,CAA8B3vI,EAAQyvI,GAAuB,GAAIhwI,OAAO2H,sBAAuB,CAAE,IAAIgmL,EAAmB3tL,OAAO2H,sBAAsBpH,GAAS,IAAKH,EAAI,EAAGA,EAAIutL,EAAiBrtL,OAAQF,IAAOI,EAAMmtL,EAAiBvtL,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,GAAkBR,OAAOS,UAAUmkD,qBAAqBjkD,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,GAAQ,CAAE,OAAOL,CAAQ,CAM3e,IAAIolI,GAAY,CAEd3iI,UAAW01H,KAAAA,OAEX4zD,UAAW5zD,KAAAA,OAEXptH,IAAKshL,IAEP,SAASmhH,GAAUxsS,GACjB,IAAIyB,EAAYzB,EAAMyB,UACpBspL,EAAY/qL,EAAM+qL,UAClBgH,EAAa/xL,EAAM+J,IACnBuvC,OAAqB,IAAfy4I,EAAwB,MAAQA,EACtCxvC,EAAatqB,GAAyBj4H,EAAOqrI,IAC3C9sF,EAAUusI,GAAgBxsI,KAAW78C,EAAW,cAAespL,GACnE,OAAoB/f,IAAAA,cAAoB1xH,EAAK16C,GAAS,CAAC,EAAG2jJ,EAAY,CACpE9gJ,UAAW88C,IAEf,CACAiuP,GAAUpoK,UAAYA,GACtB,YC5BA,IAAIiH,GAAY,CAAC,YAAa,YAAa,OAC3C,SAASzsI,KAAiS,OAApRA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAASF,UAAUD,GAAI,IAAK,IAAII,KAAOD,EAAcP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,GAAU,CAAE,OAAOL,CAAQ,EAAUJ,GAASa,MAAMC,KAAMR,UAAY,CAClV,SAAS+4H,GAAyB74H,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAAkEC,EAAKJ,EAAnED,EACzF,SAAuCI,EAAQyvI,GAAY,GAAc,MAAVzvI,EAAgB,MAAO,CAAC,EAAG,IAA2DC,EAAKJ,EAA5DD,EAAS,CAAC,EAAO8vI,EAAajwI,OAAOyH,KAAKlH,GAAqB,IAAKH,EAAI,EAAGA,EAAI6vI,EAAW3vI,OAAQF,IAAOI,EAAMyvI,EAAW7vI,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,IAAaL,EAAOK,GAAOD,EAAOC,IAAQ,OAAOL,CAAQ,CADhN+vI,CAA8B3vI,EAAQyvI,GAAuB,GAAIhwI,OAAO2H,sBAAuB,CAAE,IAAIgmL,EAAmB3tL,OAAO2H,sBAAsBpH,GAAS,IAAKH,EAAI,EAAGA,EAAIutL,EAAiBrtL,OAAQF,IAAOI,EAAMmtL,EAAiBvtL,GAAQ4vI,EAAS5kI,QAAQ5K,IAAQ,GAAkBR,OAAOS,UAAUmkD,qBAAqBjkD,KAAKJ,EAAQC,KAAgBL,EAAOK,GAAOD,EAAOC,GAAQ,CAAE,OAAOL,CAAQ,CAM3e,IAAIolI,GAAY,CAEd3iI,UAAW01H,KAAAA,OAEX4zD,UAAW5zD,KAAAA,OAEXptH,IAAKshL,IAEP,SAASohH,GAAYzsS,GACnB,IAAIyB,EAAYzB,EAAMyB,UACpBspL,EAAY/qL,EAAM+qL,UAClBgH,EAAa/xL,EAAM+J,IACnBuvC,OAAqB,IAAfy4I,EAAwB,MAAQA,EACtCxvC,EAAatqB,GAAyBj4H,EAAOqrI,IAC3C9sF,EAAUusI,GAAgBxsI,KAAW78C,EAAW,gBAAiBspL,GACrE,OAAoB/f,IAAAA,cAAoB1xH,EAAK16C,GAAS,CAAC,EAAG2jJ,EAAY,CACpE9gJ,UAAW88C,IAEf,CACAkuP,GAAYroK,UAAYA,GACxB,YC3BasoK,GAEK,EAFLA,GAGC,EAHDA,GAID,EAJCA,GAKJ,EALIA,GAMH,ECyBV,MAAMC,WAAgBxoK,EAAAA,UACpB94H,WAAAA,CAAYrL,GACVukB,MAAMvkB,GAAM,KAuCd4sS,kBAAqBtqS,IAEnB,MAAM,sBAAEuqS,EAAqB,SAAEv3H,GAAa51K,KAAKM,MAIjD,GAFAkJ,GAAO2C,KAAKvJ,EAAEiO,KAAK/O,KAAO,uBAAwBc,GAE9B,2BAAhBA,EAAEiO,KAAK/O,KAAmC,CAE5C,IAAIL,EAAIuD,SAASm9L,cAAc,SAAS/mE,WACpC15H,EAAIsD,SAASm9L,cAAc,SAAS9mE,UACxCr2H,SAASm9L,cAAc,SAAS2zE,SAAW,WAAc9wQ,SAASm9L,cAAc,SAASy0C,SAASn1O,EAAGC,EAAI,CAC3G,CAQA,GAPoB,0BAAhBkB,EAAEiO,KAAK/O,OACTkD,SAASm9L,cAAc,SAAS2zE,SAAW,WAAc,GAEvC,eAAhBlzQ,EAAEiO,KAAK/O,MAAyBc,EAAEiO,KAAKA,MACzC7L,SAASm9L,cAAc,SAASy0C,SAASh0O,EAAEiO,KAAKA,KAAKpP,EAAGmB,EAAEiO,KAAKA,KAAKnP,GAGlD,+BAAhBkB,EAAEiO,KAAK/O,KAAuC,CAChD,MAAMsrS,EAAcxqS,EAAEiO,KAAKA,KAAKu8R,YAC1Bn/M,EAAUrrF,EAAEiO,KAAKA,KAAKo9E,QACxBm/M,GAAeA,IAAgBD,EAAsB77R,IACvDtR,KAAKqtS,uBAAuBp/M,EAEhC,CACA,GAAoB,8BAAhBrrF,EAAEiO,KAAK/O,KAAsC,CAC/C,MAAMsrS,EAAcxqS,EAAEiO,KAAKA,KAAKu8R,YAC5BA,GAAeA,IAAgBD,EAAsB77R,KACnDtR,KAAKM,MAAMgtS,iBAAiBC,cAC9BvtS,KAAKwtS,gBAAgBL,EAAsB77R,GAAI,CAAEi8R,eAAe,EAAOE,cAAc,IAE9EztS,KAAK+I,MAAM2kS,sBAClB1tS,KAAK28H,SAAS,CAAE+wK,qBAAqB,IACjC1tS,KAAK2tS,sBACP3tS,KAAK2tS,qBAAsB,EAC3B3tS,KAAK4tS,oBAAqB,EAC1B5tS,KAAK23B,aAIb,CACA,GAAoB,uBAAhB/0B,EAAEiO,KAAK/O,KAA+B,CACxC,MAAMsrS,EAAcxqS,EAAEiO,KAAKA,KAAKu8R,YAChC,GAAIA,GAAeA,IAAgBD,EAAsB77R,GAAI,CAC3D,MAAM9Q,EAASoC,EAAEiO,KAAKA,KAAKrQ,OACrBD,EAAQqC,EAAEiO,KAAKA,KAAKtQ,MAE1B,GAAIP,KAAK6tS,oBAAsB7tS,KAAK6tS,mBAAmBlsS,MAAO,CAC5D3B,KAAK6tS,mBAAmBlsS,MAAMnB,OAAU,GAAEA,MAC1CR,KAAK6tS,mBAAmBlsS,MAAMpB,MAAS,GAAEA,MAEzC,MAAMutS,EAAY9oS,SAASm9L,cAAc,0CACzCniM,KAAK+tS,oBAAoBpsS,MAAMnB,OAAYstS,EAAU1wK,aAAe,GAA3B,KACzCp9H,KAAK+tS,oBAAoBpsS,MAAMpB,MAAS,GAAEutS,EAAU3wK,gBACpDn9H,KAAKguS,WAAW3yK,UAAU,EAC5B,CACF,CACF,CAEA,GAAoB,yBAAhBz4H,EAAEiO,KAAK/O,OAELc,EAAEiO,KAAKA,KAAKzG,MAAM,oBAAsBxH,EAAEiO,KAAKA,KAAKzG,MAAM,kDAAkD,CAC9G,MAAM,cAAEw9K,EAAa,QAAExE,EAAO,WAAET,EAAU,aAAEmF,GAAiBjC,GAAahgL,MAClD,CAACs9K,GAAkBtxF,MAAOsxF,GAAkBC,QAASD,GAAkBK,UAC/E57K,SAAQ21Q,GAAM15F,GAAeoB,aAAas4F,KAG1D3nG,EADa,GAAE+M,+BAAwCiF,eAA2BxE,qDAA2D0E,IAE/I,CACF,EA5GA9nL,KAAK4tS,oBAAqB,EAE1B5tS,KAAK6tS,mBAAqBviI,IAAAA,YAC1BtrK,KAAKiuS,cAAgB3iI,IAAAA,YACrBtrK,KAAKguS,WAAa1iI,IAAAA,YAClBtrK,KAAK+tS,oBAAsBziI,IAAAA,YAC3BtrK,KAAKyzQ,UAAY,GACjBzzQ,KAAK2tS,qBAAsB,EAE3B3tS,KAAKkuS,mBAAqBluS,KAAKkuS,mBAAmB7uS,KAAKW,MACvDA,KAAKmuS,cAAgBnuS,KAAKmuS,cAAc9uS,KAAKW,MAC7CA,KAAKouS,YAAcpuS,KAAKouS,YAAY/uS,KAAKW,MACzCA,KAAKquS,mBAAqBruS,KAAKquS,mBAAmBhvS,KAAKW,MACvDA,KAAKiiS,iBAAmBjiS,KAAKiiS,iBAAiB5iS,KAAKW,MACnDA,KAAKsuS,SAAWtuS,KAAKsuS,SAASjvS,KAAKW,MACnCA,KAAKuuS,MAAQvuS,KAAKuuS,MAAMlvS,KAAKW,MAC7BA,KAAKwuS,sBAAwBxuS,KAAKwuS,sBAAsBnvS,KAAKW,MAC7DA,KAAKyuS,gBAAkBzuS,KAAKyuS,gBAAgBpvS,KAAKW,MAEjDA,KAAK+I,MAAQ,CACX2lS,kBAAkB,EAClBC,eAAe,EACfC,iBAAkB,EAClBlB,qBAAqB,EACrBmB,eAAe,EAEnB,CAEAzgK,oBAAAA,IAEOpuI,KAAK+I,MAAM4lS,eAAiB3uS,KAAK+I,MAAM2lS,mBAAqB1pS,UAAYA,SAASm9L,cAAc,SAClGn9L,SAASm9L,cAAc,QAAQrS,UAAU5sG,OAAO,cAGlD//E,OAAOs7H,oBAAoB,UAAWz+H,KAAKktS,mBAC3C/pS,OAAOs7H,oBAAoB,SAAUz+H,KAAKyuS,gBAC5C,CA2EA3gK,iBAAAA,GACE,MAAM,sBAAEq/J,GAA0BntS,KAAKM,MAEvC,IAAK6sS,EACH,OAAO,KAETntS,KAAKyzQ,UAAYzzQ,KAAK0zQ,aAAay5B,EAAsB77R,IAEzD,MAAMu9R,EAAgB7pS,SAAS+H,KAAKowH,aAAej8G,SAASkpQ,GAAMpV,GAAG5rQ,QAAQ,KAAM,KAInF,GAFApJ,KAAK28H,SAAS,CAAEkyK,cAAeA,IAE3BA,EAAe,CACjB,MAAM5rO,EAAQj+D,SAAS8pS,uBAAuB,oCAC1C7rO,GAA0B,IAAjBA,EAAMxjE,QAAcwjE,EAAM,GAAGjwD,iBAAiB,SAAS,SAAUpQ,GAAKA,EAAEtD,OAAO0gN,gBAAe,EAAM,GACnH,CAEA78M,OAAO6P,iBAAiB,UAAWhT,KAAKktS,mBACxC/pS,OAAO6P,iBAAiB,SAAUhT,KAAKyuS,gBACzC,CAEAxgK,kBAAAA,CAAmBC,EAAWgJ,GAC5B,MAAM,oBAAE63J,EAAqB5B,uBAAuB,GAAE77R,EAAE,WAAE09R,GAAc1B,kBAAkB,kBAAE2B,IAAwBjvS,KAAKM,MAEnH4uS,IAAkBH,EAAoBhR,cAAcoR,WAAW1vS,OAEjEO,KAAKM,MAAM8uS,aAAelhK,EAAUkhK,cACjCH,GAAqBD,GAAcE,GACtClvS,KAAK4tS,oBAAqB,EAC1B5tS,KAAK23B,YAEEq3Q,GACPhvS,KAAKwtS,gBAAgBl8R,EAAI,CAAE29R,mBAAmB,IAGpD,CAEAR,eAAAA,GACE,MAAMI,EAAgB7pS,SAAS+H,KAAKowH,aAAej8G,SAASkpQ,GAAMpV,GAAG5rQ,QAAQ,KAAM,KACnFpJ,KAAK28H,SAAS,CAAEkyK,cAAeA,GACjC,CAEArB,eAAAA,CAAgBJ,EAAa7+Q,GAC3B/iB,GAAAA,eAAezC,MAAMmG,YAAYgT,MAAM,CAAEmtR,aAAc,CAAEziR,MAAO,CAAE,CAACwgR,GAAc7+Q,KACnF,CAEA8+Q,sBAAAA,CAAuB4B,GACrB,MAAM,SAAEl5J,EAAUo3J,uBAAuB,GAAE77R,GAAMg8R,kBAAoBgC,YAAaC,IAAyBvvS,KAAKM,MAChH,IAAIgvS,EAAcC,GAEbvvS,KAAK4tS,oBAAsBqB,GAC9BjvS,KAAKiuS,eAAiBjuS,KAAKiuS,cAAc55B,eAAiBr0Q,KAAKiuS,cAAc55B,cAActvQ,SAASqE,QAAQpJ,KAAK0zQ,aAAapiQ,IAC9HtR,KAAK28H,SAAS,CAAE+xK,kBAAkB,IAClCY,GAAc,EACdv5J,EAASzkI,EAAI07R,KAELhtS,KAAK4tS,oBACb5tS,KAAKguS,YAAchuS,KAAKguS,WAAWzyK,cAGjCv7H,KAAK4tS,qBACP5tS,KAAK4tS,oBAAqB,GAG5B5tS,KAAKwtS,gBAAgBl8R,EAAI,CAAE29R,oBAAqBA,EAAmBK,YAAaA,GAClF,CAEAnB,aAAAA,GACE,MAAQhB,uBAAuB,GAAE77R,IAAStR,KAAKM,MAC/CN,KAAK28H,SAAS,CAAE+xK,kBAAkB,IAClC1uS,KAAKwtS,gBAAgBl8R,EAAI,CAAE29R,kBAAmB,KAAMK,aAAa,GACnE,CAEAlB,WAAAA,GACEpuS,KAAK4tS,oBAAqB,EAC1B5tS,KAAK23B,UACP,CAEAA,QAAAA,IACO33B,KAAK4tS,oBAAsB5tS,KAAKiuS,cAAc55B,cACjDr0Q,KAAK6tS,mBAAmBx5B,cAAcxB,YAAY,CAChD/wQ,KAAM,2BACN+O,KAAM,CAAC,GACN,KAEI7Q,KAAK4tS,oBAAsB5tS,KAAKiuS,cAAc55B,eACrDr0Q,KAAKiuS,cAAc55B,cAAcxB,YAAY,CAC3C/wQ,KAAM,2BACN+O,KAAM,CAAC,GACN,IAEP,CAEAw9R,kBAAAA,GACE,MAAQlB,uBAAuB,GAAE77R,GAAI,iBAAEg8R,GAAqBttS,KAAKM,OAEtB,IAAvCgtS,EAAiB2B,oBACnBjvS,KAAK2tS,qBAAsB,GAG7B3tS,KAAK28H,SAAS,CAAE+xK,kBAAmB1uS,KAAK+I,MAAM2lS,iBAAkBhB,qBAAqB,IAEhFJ,EAAiBkC,eAIpBxvS,KAAKwtS,gBAAgBl8R,EAAI,CAAEg+R,aAAa,IAHxCtvS,KAAKwtS,gBAAgBl8R,EAAI,CAAEk+R,gBAAgB,EAAMF,aAAa,GAKlE,CAEArN,gBAAAA,CAAiBtI,EAAU1rM,GACzB,MAAM,SAAE8nD,EAAUo3J,uBAAuB,GAAE77R,EAAE,SAAE2oR,IAAej6R,KAAKM,MACnEN,KAAKwtS,gBAAgBl8R,EAAI,CAAE+rR,gBAAiBpvM,IAExC0rM,IAAaM,GACflkJ,EAASzkI,EAAI07R,GAAwB,CAAErT,YAE3C,CAEA2U,QAAAA,GACE,MAAM,SAAEv4J,EAAUo3J,uBAAuB,GAAE77R,IAAStR,KAAKM,MACzDy1I,EAASzkI,EAAI07R,IACbhtS,KAAKwtS,gBAAgBl8R,EAAI,CAAE+rR,gBAAiB,KAAM4R,kBAAmB,MACvE,CAEAV,KAAAA,GACE,MAAM,SAAEx4J,EAAUo3J,uBAAuB,GAAE77R,IAAStR,KAAKM,MACzDy1I,EAASzkI,EAAI07R,IACbhtS,KAAKwtS,gBAAgBl8R,EAAI,CAAEm8R,aAAc,KAAMwB,kBAAmB,MACpE,CAEAf,kBAAAA,GACE,MAAQf,uBAAuB,GAAE77R,IAAStR,KAAKM,MAC/CN,KAAK28H,SAAS,CAAEgyK,eAAgB3uS,KAAK+I,MAAM4lS,gBAC3C3uS,KAAKwtS,gBAAgBl8R,EAAI,CAAEg+R,aAActvS,KAAK+I,MAAM4lS,eACtD,CAGAH,qBAAAA,CAAsBtnS,GACpBlH,KAAK28H,SAAS,CAAEiyK,iBAAkB1nS,GACpC,CAEAwsQ,YAAAA,CAAa05B,GACX,MAAM,QAAEhqH,GAAYyC,GAAahgL,OAC3B,YAAEmJ,GAAgBxD,GAAAA,eAAezC,MAAMlD,MAEvCkvQ,EAAoB7zP,SAASkpQ,GAAMpV,GAAG5rQ,QAAQ,KAAM,KACpD6rQ,EAAgBjwQ,SAAS+H,KAAKowH,YAAc43I,EAAoB,mBAAqB,mBACrF,WAAEpyF,GAAekD,GAAahgL,MACpC,MAAQ,GAAE88K,wCAAiDyqH,KAAen4B,2BAAuCnnQ,KAAKC,yBAAyBiB,EAAcA,EAAYsC,GAAK,gBAAgBZ,mBAAmBvN,OAAO4B,SAAS0iJ,mBAAmB27B,GAAoB,IAC1Q,CAEAqsH,cAAAA,CAAe1tS,EAAW23R,GACxB,MAAM,sBAAEyT,EAAqB,iBAAEG,GAAqBttS,KAAKM,MAEzD,OACE6pL,EAAAA,GAAAA,MAAA,OAAKpoL,UAAW,gBAAkBA,EAAUq9G,SAAA,CACzC+tL,EAAsB6B,YAAc1B,EAAiBC,gBAAkB7T,IAAgBtvG,EAAAA,GAAAA,KAACE,GAAW,KAC5D,IAAvCgjH,EAAiB2B,oBAAgC7kH,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,0BAAyBq9G,UAACgrE,EAAAA,GAAAA,KAAC2e,GAAI,CAACr3L,KAAK,YAAYnR,MAAM,OAAOC,OAAO,OAAOuB,UAAU,iBACvJorS,EAAsB6B,aAAe1B,EAAiBC,gBAAkB7T,IAAiBtvG,EAAAA,GAAAA,KAAA,QAAMroL,UAAW,eAAgB82I,QAAS74I,KAAKquS,mBAAmBjvL,UAACgrE,EAAAA,GAAAA,KAAC4lB,GAAO,CAACtZ,UAAU,MAAMjuL,KAAM5F,GAAE,wBAAyBoqI,QAAS,QAC7NkgK,EAAsB6B,YAActV,KAAkBtvG,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,wBAAuBq9G,UAACgrE,EAAAA,GAAAA,KAAC4lB,GAAO,CAACtZ,UAAU,MAAMjuL,KAAM5F,GAAE,wBAAyBoqI,QAAS,QAG1K,CAEAyiK,oBAAAA,CAAqB3tS,GACnB,MAAM,oBAAEgtS,GAAwB/uS,KAAKM,MACrC,OACE8pL,EAAAA,GAAAA,KAAA,QAAMroL,UAAWA,EAAUq9G,SACxB2vL,EAAoB5Q,WAAa4Q,EAAoB5Q,UAAUtE,0BAA2BzvG,EAAAA,GAAAA,KAAC+zG,GAAS,CAACpyL,MAAOgjM,EAAoB5Q,UAAWvE,YAAamV,EAAoBhR,cAAc9D,SAAS6H,WAG1M,CAEA6N,uBAAAA,GACE3qS,SAASm9L,cAAc,2CAA2CrS,UAAU9pL,IAAI,WAClF,CAEAyjB,MAAAA,GACE,MAAM,oBAAEslR,EAAmB,sBAAE5B,EAAqB,kBAAEyC,EAAiB,aAAEC,EAAY,mBAAE/S,EAAkB,iBAAEwQ,EAAgB,YAAEnL,GAAgBniS,KAAKM,MAEhJ,IAAKyuS,IAAwB5B,IAA0BG,EACrD,OAAO,KAET,MAAM,KAAEzxR,EAAI,SAAE8sQ,EAAQ,WAAEmnB,GAAef,GACjC,WAAEC,GAAe7B,EAEjB+B,IAAkBH,EAAoBhR,cAAcoR,WAAW1vS,OAEjEowS,GAAgBb,GAAcE,IAAkB5B,EAAiBC,gBAAkBD,EAAiBG,cACtGztS,KAAKwtS,gBAAgBL,EAAsB77R,GAAI,CAAEi8R,eAAe,IAGlE,IAAIrK,EAAc,iBACb8L,IAAY9L,GAAe,aAEhC,IAAI6M,EAAiB,YACuB,IAAvCzC,EAAiB2B,oBAAoE,IAArC3B,EAAiBjQ,iBAA+Br9R,KAAK+I,MAAM2lS,iBAI1GM,IAAe1B,EAAiBkC,gBAAkBlC,EAAiB0C,2BAA6Bd,IAClGa,GAAkB,eAJpBA,GAAkB,aAQpB,MAAM3N,EAAe2M,EAAoBxQ,KAAKnC,SAAW2S,EAAoBxQ,KAAKnC,SAASK,WAAasS,EAAoBxQ,KAAKlC,SAAW0S,EAAoBxQ,KAAKlC,SAASI,WAAa,GACrLwT,EAAalB,EAAoB5Q,WAAazE,GAAaqV,EAAoB5Q,UAAUlE,SAAU8U,EAAoBhR,cAAc9D,SAAS6H,QAASiN,EAAoB5Q,UAAUtE,yBAErLqW,EAAWnB,EAAoBlR,cAAiB,GAAEhiR,OAAUkzR,EAAoBlR,cAAcr4R,aAAeqW,EAE7Gs0R,EAAeP,GAAqBA,EAAkBrvR,OAA2C,IAAlCqvR,EAAkBrvR,MAAMA,MAC7F,OACE4pK,EAAAA,GAAAA,MAAA,OAAKpoL,UAAWguS,EAAgB,wBAAuBhB,EAAoB9tR,WAAWm+F,SAAA,EACpF+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAWmhS,EAAY9jL,SAAA,EAC1BgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,aAAa82I,QAAS74I,KAAKkuS,mBAAmB9uL,UAC3DgrE,EAAAA,GAAAA,KAAC2iB,GAAW,CAAChrM,UAAU,QAAQyqK,IAAKm8G,OAEtCx+F,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,2BAA0Bq9G,SAAA,EACvC+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,sBAAqBq9G,SAAA,EAClC+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,YAAWq9G,SAAA,EACxBgrE,EAAAA,GAAAA,KAAC4lB,GAAO,CAACtZ,UAAU,MAAMjuL,KAAMynS,EAAUjjK,QAAS,IACjDiiK,GAAiBlvS,KAAKyvS,eAAe,kBAAmBQ,GACxDjwS,KAAK0vS,qBAAqB,uBAE7BvlH,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,aAAYq9G,SAAA,CACxB09K,GAAsB8S,GAAqBO,IAAgB/lH,EAAAA,GAAAA,KAACE,GAAW,KACtEwyG,GAAsB8S,GAAqBO,IAAgB/lH,EAAAA,GAAAA,KAAC7pK,GAAK,CAACwrF,MAAO6jM,EAAkBrvR,MAAOq6Q,eAAgBgV,EAAkBQ,oBAEvIlB,GAAiBlvS,KAAKyvS,eAAe,qBAAsBQ,GAC3DjwS,KAAK0vS,qBAAqB,kCAE5BV,KAAgBD,EAAoB5Q,YAAuE,IAA1D4Q,EAAoB5Q,UAAUtE,yBAAoCkV,EAAoB5Q,UAAUlE,UAAY8U,EAAoBhR,cAAc9D,SAAS6H,WAAY33G,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,WAAUq9G,SAAA,EAC5OgrE,EAAAA,GAAAA,KAAC83G,GAAe,CACdD,iBAAkBjiS,KAAKiiS,iBACvBE,YAAaA,EACbP,aAAcmN,EACdlN,WAAYsL,IAEb6B,IAAc5kH,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,iBAAgBq9G,SAAEgjL,IAChD2M,EAAoBxQ,KAAKnC,WAC1BhyG,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,oBAAmBq9G,SAC9Bv8G,GAAE,oCACD,CACE85R,aAAcoS,EAAoBxQ,KAAKnC,SAASvgR,KAChDygR,aAAcyS,EAAoBxQ,KAAKjC,aACvCE,mBAAoBuS,EAAoBxQ,KAAKlC,SAASI,mBAK9DuS,GAAciB,IAAc7lH,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,eAAcq9G,UAACgrE,EAAAA,GAAAA,KAAC+zG,GAAS,CAACpyL,MAAOgjM,EAAoB5Q,UAAWvE,YAAamV,EAAoBhR,cAAc9D,SAAS6H,aACnKkN,IAAeiB,IAAc7lH,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,UAASq9G,UAACgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,8BAA8B82I,QAAS74I,KAAKuuS,MAAMnvL,SAAEv8G,GAAE,mBAC5HqsS,GAAiBlvS,KAAKyvS,eAAe,oBAAqBQ,MAG5DjB,IAAc5kH,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,aAAa82I,QAAS74I,KAAKsuS,SAASlvL,SAAC,aAGrE+qE,EAAAA,GAAAA,MAACigH,GAAK,CAACl8G,OAAQluL,KAAK+I,MAAM2lS,iBAAkB7E,eAAe,4BAA4BE,SAAU/pS,KAAK2vS,wBAAwBvwL,SAAA,EAC5H+qE,EAAAA,GAAAA,MAACsiH,GAAW,CAAArtL,SAAA,EAACgrE,EAAAA,GAAAA,KAAA,OAAK76C,wBAAyB,CAACC,OAAS,GAAE3sI,GAAE,6BAA6BgZ,QAAUuuK,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,cAAaq9G,UAACgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,YAAY82I,QAAS74I,KAAKmuS,cAAc/uL,SAAC,eACrL+qE,EAAAA,GAAAA,MAAC2iH,GAAS,CAAA1tL,SAAA,EAELp/G,KAAK+I,MAAM8lS,gBACZzkH,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,oBAAmBq9G,UAACgrE,EAAAA,GAAAA,KAAC2iB,GAAW,CAAChrM,UAAU,QAAQyqK,IAAKm8G,OAEzEv+F,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,uBAAuB5B,IAAMA,GAAQH,KAAK+tS,oBAAsB5tS,EAAIi/G,UACjF+qE,EAAAA,GAAAA,MAAChwD,GAAAA,GAAU,CAACp4H,UAAU,YAAY26H,WAAS,EAACqG,sBAAuBziI,IAAS8pL,EAAAA,GAAAA,KAAA,UAAS9pL,EAAOyB,UAAU,qBAC1FihI,oBAAqB1iI,IAAS8pL,EAAAA,GAAAA,KAAA,UAAS9pL,EAAOyB,UAAU,mBAAqB6gI,WAAYtiI,IAAS8pL,EAAAA,GAAAA,KAAA,UAAS9pL,EAAOyB,UAAU,SAAW5B,IAAMA,GAAQH,KAAKguS,WAAa7tS,EAAIi/G,SAAA,CAEnLp/G,KAAK+I,MAAM8lS,gBACXzkH,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,oBAAmBq9G,UAACgrE,EAAAA,GAAAA,KAAC2iB,GAAW,CAAChrM,UAAU,QAAQyqK,IAAKm8G,MAGvE3oR,KAAK+I,MAAM2kS,sBACXtjH,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,+BAA8Bq9G,UAACgrE,EAAAA,GAAAA,KAACE,GAAW,OAE5DF,EAAAA,GAAAA,KAAA,UAAQroL,UAAY,iBAAe/B,KAAK+I,MAAM2kS,oBAAsB,gBAAkB,IAAMlhI,IAAKxsK,KAAKyzQ,UAAWtzQ,IAAMA,GAAQH,KAAK6tS,mBAAqB1tS,EAAKkwS,YAAY,IAAI7vS,OAAO,QAAQJ,MAAM,iBAAiBG,MAAM,QAAQ2gI,UAAU,gBAIlPipD,EAAAA,GAAAA,MAAC4iH,GAAW,CAAA3tL,SAAA,EACVgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,0CAA0C82I,QAAS74I,KAAKmuS,cAAc/uL,SAAEv8G,GAAE,gCACzFunL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sCAAsC82I,QAAS74I,KAAKouS,YAAYhvL,SAAEv8G,GAAE,mCAIrFgtS,GAAgBb,GAAcE,IAC9B9kH,EAAAA,GAAAA,KAAA,UAAQ5d,IAAKxsK,KAAKyzQ,UAAWtzQ,IAAMA,GAAQH,KAAKiuS,cAAgB9tS,EAAK4B,UAAU,gBAAgB3B,MAAM,mBAGvGgqL,EAAAA,GAAAA,KAACggH,GAAK,CAACl8G,OAAQluL,KAAK+I,MAAM4lS,cAAe9E,eAAe,oBAAoBx7G,OAAQruL,KAAKkuS,mBAAmB9uL,UAC1GgrE,EAAAA,GAAAA,KAAC0iH,GAAS,CAAA1tL,UACR+qE,EAAAA,GAAAA,MAAA,OAAA/qE,SAAA,EACEgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,cAAaq9G,UAACgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,YAAY82I,QAAS74I,KAAKkuS,mBAAmB9uL,SAAC,YAC1FgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,cAAaq9G,UAC1BgrE,EAAAA,GAAAA,KAAC4lB,GAAO,CAACtZ,UAAU,MAAMjuL,KAAMoT,EAAMoxH,QAAS,OAEhDm9C,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,yBAAwBq9G,UACrCgrE,EAAAA,GAAAA,KAACkmH,GAAa,CAAC1vS,GAAK,mBAAkBusS,EAAsB77R,KAC7Ci/R,YAAavwS,KAAK+I,MAAM6lS,iBACxBzyJ,OAAQ2zJ,EAAWr/R,KAAKqmI,IACf,CACL2xJ,IAAK3xJ,MAGTozD,aAAclqM,KAAK+I,MAAM8lS,2BAQtD,EAGF,SAAe3F,GAAW+D,IC7b1B,MAAMuD,WAAqB/rK,EAAAA,UACzB94H,WAAAA,CAAarL,GACXukB,MAAMvkB,GACNN,KAAK+I,MAAQ,CACXqmS,YAAY,GAEdpvS,KAAKywS,eAAgB,EAErBzwS,KAAK0wS,aAAe1wS,KAAK0wS,aAAarxS,KAAKW,KAC7C,CAEA,+BAAOi4K,CAA0B33K,EAAOyI,GACtC,OAAIzI,EAAM8uS,aAAermS,EAAMqmS,WACtB,CAAEA,YAAY,GAEhB,CAAEA,YAAY,EACvB,CAEAthK,iBAAAA,GACE9tI,KAAKywS,eAAgB,CACvB,CAEAC,YAAAA,CAActD,EAAauD,EAAY9/R,GACrC,MAAM,SAAEklI,GAAa/1I,KAAKM,MAE1By1I,GAAYA,EAASq3J,EAAauD,EAAY9/R,EAChD,CAEA4Y,MAAAA,GACE,MAAM,WAAEmnR,EAAU,aAAEC,EAAY,aAAExB,EAAY,uBAAEyB,EAAsB,WAAE1B,EAAU,mBAAEtS,EAAkB,uBAAEiU,EAAsB,YAAE5O,GAAgBniS,KAAKM,MAErJ,IAAKswS,IAAeC,IAAiBxB,EACnC,OAAO,KAET,MAAQ2B,MAAOC,GAAiBL,EAChC,IAAMI,MAAOE,GAAeL,EAE5B,OAAKI,GAAiBC,EAGfA,EAAWzgS,KAAI,CAAC0gS,EAAW5xS,KAChC,MAAM6xS,EAAcH,EAAalwR,MAC/BswR,GAAkBA,EAAeC,QAAQhgS,KAAO6/R,EAAUI,YAEtDC,EAAsBV,GAA0BA,EAAuBE,MAAMjwR,MACjF6uR,GAAqBA,EAAkB/0B,cAAgBs2B,EAAU7/R,KAQ7DmgS,EACJ3U,GAAsBqU,EAAUnC,cAAgB+B,GAA2BA,GAA0BA,IAA2BI,EAAU7/R,IAEtIg8R,EAAmB+B,EAAaziR,MAAMukR,EAAU7/R,IAEtD,OACE8/R,IACEhnH,EAAAA,GAAAA,KAAC6iH,GAAO,CAENE,sBAAuBgE,EACvBpC,oBAAqBqC,EAAYE,QACjChE,iBAAkBA,EAClBsC,kBAAmB4B,EACnBz7J,SAAU/1I,KAAK0wS,aACfb,aAAc7vS,KAAKywS,cACnBrB,WAAYA,EACZtS,mBAAoB2U,EACpBtP,YAAaA,GATR5iS,EAWR,IAlCI,IAqCX,EAGF,YCjFA,GAXqBW,IAA8B,IAA7B,SAAEk/G,EAAQ,UAAEr9G,GAAW7B,EAC3C,OAAOkqL,EAAAA,GAAAA,KAAA,OAAKroL,UAAY,iBAAgBA,IAAYq9G,UAClD+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,0BAAyBq9G,SAAA,EACtCgrE,EAAAA,GAAAA,KAAC2e,GAAI,CAACr3L,KAAK,YAAYnR,MAAM,OAAOC,OAAO,UAC3C4pL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,mCAAkCq9G,SAChDA,QAGC,ECHR,GAL4Bl/G,IAAA,IAAC,iBAAEwxS,GAAkBxxS,EAAA,OAAKwxS,GACpDtnH,EAAAA,GAAAA,KAACunH,GAAY,CAAC5vS,UAAU,wBAAuBq9G,SAC5Cv8G,GAAE,iCACa,IAAI,mCCHxB,MA8CA,GA9Cc3C,IAAmF,IAAlF,SAAE0xS,EAAQ,SAAEC,EAAQ,eAAElgC,EAAc,YAAE4I,EAAW,SAAEukB,EAAQ,cAAEgT,GAAe5xS,EACzF,MAAO6xS,IAAWnnI,EAAAA,EAAAA,UAChB+mG,GAAkBA,EAAeqgC,MAAS,GAAErgC,EAAeqgC,MAAMvJ,mBAAmBluB,IAAgB,OAE/F03B,IAAmBrnI,EAAAA,EAAAA,UACxB+mG,GAAkBA,EAAeqgC,QAC7BlT,IAAantB,EAAeqgC,MAAME,SAASjhQ,WAAW,YAClD6tP,GAA8C,oBAAlCntB,EAAeqgC,MAAME,WAC9BvgC,EAAeqgC,MAAME,SAASjhQ,WAAW,YAGhDkhQ,EAAoBA,KACxBP,GAAU,EAGZ,OAAIC,EAAiB,KAChB/S,EAmBCmT,GACK7nH,EAAAA,GAAAA,KAAA,KAAGx9K,UAAQ,EAAC7K,UAAY,8BAA4B+vS,EAAgB,GAAK,aAAerqJ,KAAMsqJ,EAAQ3yL,UAC3GgrE,EAAAA,GAAAA,KAACgoH,GAAAA,eAAS,CAACrwS,UAAU,kBAAkBxB,MAAM,OAAOC,OAAO,YAGxD4pL,EAAAA,GAAAA,KAAA,OAAKroL,UAAY,8BAA4B+vS,EAAgB,GAAK,aAAej5J,QAASs5J,EAAkB/yL,UACjHgrE,EAAAA,GAAAA,KAACgoH,GAAAA,eAAS,CAACrwS,UAAU,kBAAkBxB,MAAM,OAAOC,OAAO,WAxBzDyxS,GAEA7nH,EAAAA,GAAAA,KAAA,KAAGx9K,UAAQ,EAAC7K,UAAU,6BAA6B0lJ,KAAMsqJ,EAAQ3yL,UAC/D+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,aAAYq9G,SAAA,EACzBgrE,EAAAA,GAAAA,KAACgoH,GAAAA,eAAS,CAACrwS,UAAU,kBAAkBxB,MAAM,OAAOC,OAAO,UAC3D4pL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,mBAAkBq9G,SAAEv8G,GAAE,8BAMtCunL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,6BAA6B82I,QAASs5J,EAAkB/yL,UAC5E+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,aAAYq9G,SAAA,EACzBgrE,EAAAA,GAAAA,KAACgoH,GAAAA,eAAS,CAACrwS,UAAU,kBAAkBxB,MAAM,OAAOC,OAAO,UAC3D4pL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,mBAAkBq9G,SAAEv8G,GAAE,4BAY3C,EC9BF,GAb6B3C,IAA0D,IAAzD,mBAACmyS,EAAkB,oBAAEC,EAAmB,SAAE9zJ,GAASt+I,EAC/E,MAAOk2M,EAAYm8F,IAAiB3nI,EAAAA,EAAAA,WAAS,GAM7C,OAJAC,EAAAA,EAAAA,YAAU,KACN0nI,EAAc/zJ,EAAS,GACxB,CAACA,IAEG6zJ,GACLjoH,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,0CAA0Cy8I,SAAU43D,EAAYv9D,QAASy5J,EAAoBlzL,SACzGv8G,GAAE,iCACK,IAAI,kCCIlB,MAGMglS,GAAcntN,GAAS,KAAK,CAACotN,EAAYC,MACzB,IAAhBD,GACFC,EAAeD,EAAW,IA4K9B,GAzKgB5nS,IAgBT,IAhBU,iBACfwxS,EAAgB,kBAChBc,EAAiB,SACjB1T,EAAQ,QACR5jB,EAAO,UACPi2B,EAAS,kBACTsB,EAAiB,eACjBC,EAAc,mBACdL,EAAkB,oBAClBC,EAAmB,eACnBtK,EAAc,6BACd2K,EAA4B,aAC5BC,GAAe,EAAK,WACpBt5J,GAAa,EAAK,sBAClBu5J,EAAqB,0BACrBC,EAA4B,MAC7B5yS,EAEC,MAAOmvQ,EAAa04B,IAAkBn9H,EAAAA,EAAAA,UAAS,IACxCu9H,EAAoBC,IAAyBx9H,EAAAA,EAAAA,WAAU,IACvDolG,EAAeV,IAAoB1kG,EAAAA,EAAAA,WAAS,IAC5Ct4B,EAAsBygK,IAA2BnoI,EAAAA,EAAAA,UAAS,IAC3DooI,EAAoBA,KAAA,IAAAC,EAAA,OAA+B,OAAzBH,QAAyB,IAAzBA,OAAyB,EAAzBA,EAA2BrzS,QAAS,IAAsB,OAAjB+yS,QAAiB,IAAjBA,GAA6B,QAAZS,EAAjBT,EAAmB1C,kBAAU,IAAAmD,OAAZ,EAAjBA,EAA+BxzS,QAAS,CAAC,EAM5GyzS,EAAqBp8J,IACzBixJ,EAAejxJ,GACf+7J,GAAyBA,EAAsB/7J,EAAM,GAGvD+zB,EAAAA,EAAAA,YAAU,KACRg9H,GAAYM,EAAoB+K,EAAkB,GAEjD,CAAC/K,IAEJ,MAAMhsJ,EAAS22J,GAA6BN,EAAkB1C,YAAc,GACtEqD,EAAc,CAClB3tN,SAAU,WACVzhE,OAAQ,EACR60G,IAAK,mBACLE,OAAQ,WAeJ41I,EAAe,CAAC,mBACb,OAAPwM,QAAO,IAAPA,OAAO,EAAPA,EAASzlP,QAASulP,GAAuBg4B,IAAsB,eAAiB,gBAAmB,IAC5F,OAAP93B,QAAO,IAAPA,OAAO,EAAPA,EAASzlP,QAASulP,GAAmB,MAAQ,IACtC,OAAPE,QAAO,IAAPA,OAAO,EAAPA,EAASzlP,QAASulP,GAAuBg4B,IAAsB,gBAAkB,iBAAmB,IAC7F,OAAP93B,QAAO,IAAPA,OAAO,EAAPA,EAASzlP,QAASulP,IAAwBq3B,EAAqB,GAAK,uBACpE/oS,QAAO1F,GAAKA,IAAGkG,KAAK,KAUhBspS,EAAkBA,IAAO/jC,KAAiC,OAAjBmjC,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmB1C,WAAWrwS,QAAS,EAClFsoS,EAAe,GACfA,EAAgB14B,EAAc,GAE5BgkC,EAAmBA,IACrBtL,EAD4C,IAAhB14B,GACI,OAAjBmjC,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmB1C,WAAWrwS,QAAS,EACvC4vQ,EAAc,GAEjC,OACEllF,EAAAA,GAAAA,MAAAstF,GAAAA,SAAA,CAAAr4J,SAAA,EACE+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAW2sQ,EAAatvJ,SAAA,EAC3BgrE,EAAAA,GAAAA,KAAC31C,GAAAA,GAAQ,CACP5D,cAAc,EACdmI,gBAAgB,EAChBI,YAAY,EACZnB,mBAAmB,EACnBqB,YAAY,EACZxZ,WAAY,GACZiW,SAAUm9J,EACVziK,aAAc4+H,EACd98H,0CAA0C,EAC1CqH,WAAW,EACXtH,qBAAsBA,EACtB/K,aA/BmB3kI,IACzB,IAAIotQ,EAIJ,OAAOptQ,EAAEwjI,QAAQ3mI,OAAS,EAAIszS,EAAwB,KAASA,EAAwB,IAHrFA,EAAwB,IAGgE,EA2BpFv4J,eAAgBA,IAAOutJ,EAAej6R,KAAK2lC,KAAqB,OAAjB++P,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmB1C,WAAWrwS,QAAS,EAAG4vQ,EAAc,IACvG50H,iBAAkBA,IAAMstJ,EAAej6R,KAAKgwB,IAAI,EAAGuxO,EAAc,IACjEj0H,gBAAiBA,CAACS,EAAgB9B,EAASzvH,IACzCyvH,IAAYi2H,IACV5lF,EAAAA,GAAAA,KAACu9G,GAAAA,eAAS,CAACpnS,MAAM,OAAOC,OAAO,OAAOq4I,QAASgD,EACpCl6I,MAAO,IAAKwxS,EAAahkL,KAAM,MAG9CssB,gBAAiBA,CAACI,EAAgB7B,EAAS1vH,IACzC0vH,IAAYg2H,IACV5lF,EAAAA,GAAAA,KAACw9G,GAAAA,eAAU,CAACrnS,MAAM,OAAOC,OAAO,OAAOq4I,QAASgD,EACpCl6I,MAAO,IAAKwxS,EAAa/jL,MAAO,MAE/ChQ,SAEA+8B,EAAO18I,QAAU08I,EAAO1rI,KAAI,CAACqmI,EAAOplH,KAEjCy4J,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,+BAA8Bq9G,SAAA,EACzCwzL,IAAgBxoH,EAAAA,GAAAA,KAACkpH,GAAmB,CAAO5B,qBAC5C1J,IAAkB59G,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,uBAAsBq9G,UACtDgrE,EAAAA,GAAAA,KAACE,GAAW,OAEdF,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,gBAAeq9G,UAC5BgrE,EAAAA,GAAAA,KAACmpH,GAAS,CAAC7hR,MAAOA,EAAO29O,YAAaA,EAAa7iG,IAAK11B,EAAM2xJ,KAAO3xJ,EAC1DozD,aAAa,EAAM8lE,cAAeA,EAAeV,iBAAkBA,EACnE8jC,gBAAiBA,EAEjBC,iBAAkBA,QAVkBv8J,EAAM2xJ,KAAO3xJ,EAAQplH,QAiB5EkhR,GArFyBlK,MAAO,IAADC,EAAAC,EAAAC,EACrC,MACMC,EAAY5hS,IAAUkjL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,0BAAyBq9G,SAAEl4G,IACtE,OAF6C,QAAnByhS,EAAAxsJ,EAAOkzH,UAAY,IAAAs5B,OAAA,EAAnBA,EAAqBI,eAAkC,QAAnBH,EAAAzsJ,EAAOkzH,UAAY,IAAAu5B,GAAa,QAAbC,EAAnBD,EAAqBG,mBAAW,IAAAF,OAAb,EAAnBA,EAAkChhS,OAAOpI,QAAS,EAGvGqpS,EAAS3sJ,EAAOkzH,GAAa05B,aAElC5sJ,EAAO18I,OA5DM,GA6DRqpS,EAAU,GAAEz5B,EAAc,KAAKlzH,EAAO18I,UAExC,IAAI,EA4EWipS,GA3GIpvJ,GAAc05J,KAAuBR,EAAkB1C,WAAWrwS,QA/BvE,KA4If2qL,EAAAA,GAAAA,KAAC4+G,GAAkB,CACjB1tJ,UAAW,CACT/6I,MAAO,EAAGC,OAAQ,IAEpBm7I,WAAY,CACVp7I,MAAO,EAAGC,OAAQ,IAEpBmI,OAAQ,CAAEpI,MAAQ,QAClB47I,OAAQA,EAAO1rI,KAAIqmI,GAASA,EAAM2xJ,MAClCnC,cAAe4M,EACf7M,cAAe+B,EACf/4B,YAAaA,EACb42B,oBAAoB,IAxHJ+M,OACtB15J,GAAe4hI,IAAYA,EAAQzlP,OAASulP,IAAwBE,EAAQzlP,OAASulP,KAAwBw3B,EAAkB1C,YAAc0C,EAAkB1C,WAAWrwS,OAjCvJ,MA2Jf2qL,EAAAA,GAAAA,KAAC6+G,GAAW,CAAC9sJ,OAAQA,EAAQiyC,OAAQihF,EAAak2B,WAAa3kS,GAAOmnS,EAAennS,KACtFs6Q,GAAWA,EAAQ82B,QAClB5nH,EAAAA,GAAAA,KAAC4nH,GAAK,CACJrgC,eAAgBuJ,EAChB4jB,SAAUA,EACVgT,eAAa,EACbv3B,YAAa42B,EAAU7/R,GACvBsgS,SAAUA,IAAMa,GAAmBC,GACnCb,WAAU/S,IAAW5jB,EAAQzlP,OAASulP,KAAwBE,EAAQ82B,aAIxEY,IAAgBxoH,EAAAA,GAAAA,KAACopH,GAAoB,CACrCnB,qBACAC,sBACA9zJ,SAAUm0J,MAEb,ECpKP,MAAMc,WAAmBhvK,EAAAA,UACvB94H,WAAAA,GACEkZ,QAAO,KAmCTsgB,QAAUz4B,eAAgB+0R,EAAW2L,GAEnC,IAAK3L,EAAW,OAEhB,MAAMvmB,QAAgB1vQ,GAAAA,eAAeiX,IAAIhR,SAASkL,eAAe8kR,GAAW,GAC5E,IAEIiS,EAFAC,EAAe,KAGnB,MAAM,aAAEj2H,GAAiB19K,KAAKM,MAC1Bo9K,IACAg2H,EAAqBh2H,EAAa73K,IAAI,gBAIxC8tS,EADEvG,GAAesG,QACIloS,GAAAA,eAAeiX,IAAI9I,OAAOI,aAAaqzR,GAAesG,SAEtDloS,GAAAA,eAAeiX,IAAI9I,OAAOE,aAAa4nR,GAG9D,MAAMmS,QAAkBpoS,GAAAA,eAAeiX,IAAI9I,OAAOS,aAAaqnR,GAEzD4N,EAAe,CAAEziR,MAAO,CAAC,GAC/B+mR,EAAa3C,MAAMppS,SAAQupS,IAWzB,GAVA9B,EAAaziR,MAAMukR,EAAU7/R,IAAM,CACjCi8R,eAAe,EACfE,aAAc,KACd+B,gBAAgB,EAChBF,aAAa,EACbU,2BAA2B,EAC3Bf,kBAAmB,KACnB5R,gBAAiB,MAGf8T,EAAUnC,YAAc9zB,EAAQ81B,MAAO,CACzC,MAAMI,EAAcl2B,EAAQ81B,MAAMjwR,MAChCswR,GAAkBA,EAAeC,QAAQhgS,KAAO6/R,EAAUI,YAExDH,GAAeA,EAAYE,QAAQnT,WAAazE,GAAa0X,EAAYE,QAAQnT,UAAUlE,SAAUmX,EAAYE,QAAQvT,cAAc9D,SAAS6H,QAASsP,EAAYE,QAAQnT,UAAUtE,2BACzLsX,EAAUnC,YAAa,EAE3B,KAGFxjS,GAAAA,eAAezC,MAAMmG,YAAY+S,QAAQ,CAAE0vP,eAAgBuJ,EAAS0hB,iBAAkB+W,EAAcC,UAAWA,EAAWvE,aAAcA,GAC1I,EA9EErvS,KAAK+I,MAAQ,CACX8qS,oBAAqB,EACrBzE,YAAY,EACZ0E,oBAAoB,EACpBhX,oBAAoB,EACpBiX,uBAAuB,EACvB1pH,WAAW,EACX2pH,kBAAkB,EAClBC,oBAAoB,EACpBC,kBAAkB,GAGpBl0S,KAAKm0S,mBAAoB,EACzBn0S,KAAKo0S,sBAAuB,EAE5Bp0S,KAAKq0S,yBAA0B,EAC/Br0S,KAAKs0S,uBAAwB,EAE7Bt0S,KAAKu0S,yBAA0B,EAC/Bv0S,KAAKw0S,qBAAsB,EAC3Bx0S,KAAK+wS,uBAAyB,EAE9B/wS,KAAKy0S,gBAAkBz0S,KAAKy0S,gBAAgBp1S,KAAKW,MACjDA,KAAK00S,sBAAwB10S,KAAK00S,sBAAsBr1S,KAAKW,MAC7DA,KAAKiiS,iBAAmBjiS,KAAKiiS,iBAAiB5iS,KAAKW,MACnDA,KAAK20S,sBAAwB30S,KAAK20S,sBAAsBt1S,KAAKW,MAC7DA,KAAK40S,iBAAmB50S,KAAK40S,iBAAiBv1S,KAAKW,MACnDA,KAAK60S,qBAAuB70S,KAAK60S,qBAAqBx1S,KAAKW,MAC3DA,KAAK80S,mBAAqB90S,KAAK80S,mBAAmBz1S,KAAKW,MACvDA,KAAK+0S,qBAAuB/0S,KAAK+0S,qBAAqB11S,KAAKW,MAC3DA,KAAK+1I,SAAW/1I,KAAK+1I,SAAS12I,KAAKW,MACnCA,KAAKg1S,UAAYh1S,KAAKg1S,UAAU31S,KAAKW,KACvC,CAgDA8tI,iBAAAA,GACE3qI,OAAO6P,iBAAiB,SAAUhT,KAAK6+H,UAAU,GACjD76C,GAAS,IAAKhkF,KAAK6+H,UAEnB7+H,KAAK6+H,UACP,CAEAoP,kBAAAA,GACE,MAAQ/+H,aAAa,eAAEyiQ,IAAqB3xQ,KAAKM,OAEzC4O,aAAa,iBAAE0tR,EAAgB,aAAEyS,IAAmBrvS,KAAKM,MAEjE,IAAKs8R,IAAqByS,IAAiB19B,IAAmBA,EAAeq/B,MAAO,OAEpF,MAAQ9hS,aAAemgS,cAAc,MAAEziR,KAAc5sB,KAAKM,MAG1D,IAAKN,KAAKo0S,qBAAsB,CAC9Bp0S,KAAKo0S,sBAAuB,EAE5B,MAAMa,EAAwBrY,EAAiBoU,MAAM1nS,QAAO6nS,IAC1D,MAAMC,EAAcD,GAAax/B,EAAeq/B,MAAMjwR,MAAKswR,GAAkBF,EAAUI,YAAcF,EAAeC,QAAQhgS,KAAIggS,QAChI,OAAQF,IAAgBA,EAAYrT,cAAcoR,WAAW1vS,MAAM,IAClEgR,KAAIgW,GAAQA,EAAKnV,KAGd4jS,EAA0BtY,EAAiBoU,MAAM1nS,QAAO6nS,GACrDA,EAAUnC,aAAeiG,EAAsBv1Q,SAASyxQ,EAAU7/R,MAQ3E,OALAtR,KAAK28H,SAAS,CAAEo3K,wBAAyBmB,EAAwBz1S,cAEjEO,KAAK40S,mBACFphS,MAAM8T,GAAQA,IACd7T,OAAOwf,GAAQA,GAEpB,CAEA,MAAMkiR,EAAgBvY,EAAiBoU,MAAM1nS,QAAOmd,GAAQA,EAAKuoR,aAAYv+R,KAAIgW,GAAQA,EAAKnV,KAExF2jS,EAAwBrY,EAAiBoU,MAAM1nS,QAAO6nS,IAC1D,MAAMC,EAAcD,GAAax/B,EAAeq/B,MAAMjwR,MAAKswR,GAAkBF,EAAUI,YAAcF,EAAeC,QAAQhgS,KAAIggS,QAChI,OAAQF,IAAgBA,EAAYrT,cAAcoR,WAAW1vS,MAAM,IAClEgR,KAAIgW,GAAQA,EAAKnV,KAGd8jS,EAA8Bj2S,OAAOyH,KAAKgmB,GAAO4S,OAAM7/B,IACnDw1S,EAAcz1Q,SAAS//B,IAC5BitB,EAAMjtB,GAAK8tS,cAAgB0H,EAAcz1Q,SAAS//B,IACnDs1S,EAAsBv1Q,SAAS//B,KAI/BK,KAAK+I,MAAMgrS,uBAAyBqB,GACtCp1S,KAAK28H,SAAS,CAAEo3K,uBAAuB,IAIrC/zS,KAAKu0S,yBAA2Bp1S,OAAOyH,KAAKgmB,GAAO7L,MAAKphB,GAAOw1S,EAAcz1Q,SAAS//B,KAAuC,IAA/BitB,EAAMjtB,GAAK09R,oBAC3Gr9R,KAAKw0S,qBAAsB,GAIzBx0S,KAAKw0S,qBAAuBr1S,OAAOyH,KAAKgmB,GAAO4S,OAAM7/B,IAAQw1S,EAAcz1Q,SAAS//B,IAAQitB,EAAMjtB,GAAK09R,oBACzGr9R,KAAKw0S,qBAAsB,EAC3Bx0S,KAAKu0S,yBAA0B,GAGjC,MAAMc,EAA6Bl2S,OAAOyH,KAAKgmB,GAAO4S,OAAM7/B,IAAQw1S,EAAcz1Q,SAAS//B,IAAyC,OAAjCitB,EAAMjtB,GAAKsvS,oBAO9G,GAAIjvS,KAAK+I,MAAMshL,WAAagrH,EAA4B,CAEtDr1S,KAAK28H,SAAS,CAAE0tD,WAAW,EAAO2pH,kBAAkB,EAAO5E,YAAY,IAOvE,GAJmBpvS,KAAK+I,MAAM+qS,oBAC5B30S,OAAOyH,KAAKgmB,GAAO4S,OAAM7/B,IAAQw1S,EAAcz1Q,SAAS//B,IAASitB,EAAMjtB,GAAKsvS,mBAAqBriR,EAAMjtB,GAAK09R,kBAG9F,CAEdr9R,KAAKs0S,sBAAwBt0S,KAAKs0S,uBAAwB,EAS1D,IAPkBn1S,OAAOyH,KAAKgmB,GAAO4S,OAAM7/B,IACjCw1S,EAAcz1Q,SAAS//B,IAC7BitB,EAAMjtB,GAAK6vS,gBACXyF,EAAsBv1Q,SAAS//B,KAOjC,OAFAK,KAAK28H,SAAS,CAAEs3K,oBAAqBj0S,KAAK+I,MAAMkrS,0BAChDj0S,KAAKs1S,mBAAmB1oR,EAAO,CAAEojR,2BAA2B,IAK9DhwS,KAAK+0S,uBACFvhS,MAAM8T,GAAQA,IACd7T,OAAOwf,GAAQA,GACpB,KACK,CACHjzB,KAAK28H,SAAS,CAAEu3K,kBAAkB,IAElCl0S,KAAKs0S,uBAAyBt0S,KAAK+I,MAAM+qS,oBAAsB30S,OAAOyH,KAAKgmB,GAAO7L,MAAKphB,GAAOw1S,EAAcz1Q,SAAS//B,KAAuC,IAA/BitB,EAAMjtB,GAAK09R,kBAExIr9R,KAAKq0S,wBAA0Bl1S,OAAOyH,KAAKgmB,GAAO7L,MAAKphB,GAAOw1S,EAAcz1Q,SAAS//B,KAAyC,IAAjCitB,EAAMjtB,GAAKsvS,oBAExG,MAAMsG,EAAgBvwS,SAAS8pS,uBAAuB,aACtDyG,GAAiBA,EAAc91S,QAAU81S,EAAc,GAAGv1F,gBAAe,EAC3E,CACF,CAGI7gN,OAAOyH,KAAKgmB,GAAO7L,MAAKphB,GAAOitB,EAAMjtB,GAAK2vS,cAC5CtqS,SAASm9L,cAAc,QAAQrS,UAAU9pL,IAAI,cAG7ChB,SAASm9L,cAAc,QAAQrS,UAAU5sG,OAAO,aAGpD,CAEAkrD,oBAAAA,GACEjrI,OAAOs7H,oBAAoB,SAAUz+H,KAAK6+H,UAAU,GACpDrzH,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,kBACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,oBACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,sBACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,8BACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,gBACxCzN,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO,YAC1C,CAEA4lH,QAAAA,GAEE,MAAM22K,EAASxwS,SAASm9L,cAAc,WAChCszG,EAAczwS,SAASm9L,cAAc,uBAEtCszG,GAAsC,IAAvBA,EAAYh2S,QAAiB+1S,IAE7CA,EAAO31K,wBAAwBjH,KAAOz1H,OAAO6nI,YAC/CyqK,EAAY3lH,UAAU5sG,OAAO,SAG7BuyN,EAAY3lH,UAAU9pL,IAAI,SAE9B,CAEAsvS,kBAAAA,CAAmB1oR,EAAO2B,GACxB,MAAMmnR,EAAsB,CAAErG,aAAc,CAAEziR,MAAO,CAAC,IACtDA,GAASztB,OAAOyH,KAAKgmB,GAAOhlB,SAAQjI,IAClC+1S,EAAoBrG,aAAaziR,MAAMjtB,GAAO4uB,CAAM,IAGtD/iB,GAAAA,eAAezC,MAAMmG,YAAYgT,MAAMwzR,EACzC,CAEAjB,eAAAA,GAEE,GAAIz0S,KAAK+I,MAAMgrS,uBAAyB/zS,KAAK+I,MAAMshL,UAAW,OAE9D,MAAQn7K,aAAa,iBAAE0tR,EAAkByS,cAAc,MAAEziR,KAAc5sB,KAAKM,MAExDs8R,EAAiBoU,YAAkE5uS,IAAzDw6R,EAAiBoU,MAAMjwR,MAAK0F,GAAQA,EAAKuoR,eAIvFhvS,KAAKs1S,mBAAmB1oR,EAAO,CAAEqiR,kBAAmB,OACpDjvS,KAAK28H,SAAS,CAAEyyK,YAAY,EAAM/kH,WAAW,EAAM2pH,kBAAkB,IACvE,CAEAU,qBAAAA,GACE10S,KAAK+0S,uBACFvhS,MAAM8T,GAAQA,IACd7T,OAAOwf,GAAQA,GACpB,CAEA,0BAAM8hR,GACJ,MAAQ7lS,aAAa,iBAAE0tR,GAAkB,OAAE76G,EAAM,SAAEnM,GAAa51K,KAAKM,MAKrE,SAH4BkL,GAAAA,eAAeiX,IAAI9I,OAAOK,gBAAgB4iR,EAAiBtrR,GAAIsrR,GAGxE,CACjB,IAAK76G,EAAOrjG,cAAch/C,SAAU,gBAAiBg/C,eAAgB,CACnE,MAAM+oE,EAAQ,GAAEs6B,iBAAsB66G,EAAiBtrR,KAEvD,IAAIqkS,EAAexyS,OAAOyrK,QAAQ7lK,MAEb,OAAjB4sS,QAA0CvzS,IAAjBuzS,IAC3BA,EAAe,CAAEx6L,IAAK,GAAInD,GAAI,GAAI3mE,QAAS,CAAC,IAG9CskQ,EAAax6L,IAAMssC,EACnBkuJ,EAAa39L,GAAKyvC,EAElBtkJ,OAAOyrK,QAAQM,aAAaymI,EAAc,GAAIluJ,EAChD,CAGAmuB,EAASu6F,GAAatqQ,IAAI,CAAE8iL,KAAM,kBAAsB,gBAAei0G,EAAiBtrR,KAC1F,CACF,CAEA2wR,gBAAAA,CAAiB/6R,EAAO0uS,GACtB,MAAQ1mS,aAAa,iBAAE0tR,IAAuB58R,KAAKM,MAE/Cs8R,EAAiB3C,WAAa/yR,IAChClH,KAAKu0S,yBAA0B,EAC/Bv0S,KAAK+1I,SAAS,KAAMi3J,GAA4B,CAAErT,SAAUzyR,KAG9DlH,KAAK28H,SAAS,CAAEm3K,mBAAoB8B,GAEtC,CAEAjB,qBAAAA,CAAsBjjR,GACpB1xB,KAAK28H,SAAS,CAAEk3K,oBAAqBniR,GACvC,CAGAqkH,QAAAA,CAASq3J,EAAauD,EAAY9/R,GAChC,IAAIglS,EACA1E,EACA2E,EAGJ,IAAK91S,KAAK+1S,OAAQ,CAChB/1S,KAAK+1S,QAAS,EAEd,MAAQ7mS,aAAa,iBAAE0tR,IAAuB58R,KAAKM,MAEnDu1S,EAAsBtzP,KAASq6O,GAC/B,MAAMsU,EAAa2E,EAAoB7E,MACvC,OAAQL,GACN,KAAK3D,GACH6I,EAAoB5b,SAAW/4Q,SAASrQ,EAAK8oR,UAC7C,MACF,KAAKqT,GACHmE,EAAYD,EAAWnwR,MAAK0F,GAAQA,EAAKnV,KAAO87R,IAChD+D,EAAUlX,SAAW/4Q,SAASrQ,EAAK8oR,UACnC,MACF,KAAKqT,GACHmE,EAAYD,EAAWnwR,MAAK0F,GAAQA,EAAKnV,KAAO87R,IAChD+D,EAAUnC,YAAa,EACvB,MACF,KAAKhC,GACHmE,EAAYD,EAAWnwR,MAAK0F,GAAQA,EAAKnV,KAAO87R,IAChD+D,EAAUnC,YAAa,EAEvBhvS,KAAK28H,SAAS,CAAEo3K,uBAAuB,IAS3C/zS,KAAK+wS,uBAAyB3D,EAG9B0I,EAAYhoS,KAAK0vD,MAAM1vD,KAAKC,SAAWD,KAAK86C,IAAI,GAAI,KAAO,EAC3D5oD,KAAKg2S,oBAAsBF,EAE3BtqS,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,mBAAoB8vS,GACzD71S,KAAK+1S,QAAS,CAChB,CAEAF,GAAuB71S,KAAK40S,iBAAiBiB,EAAqBC,GAC/DtiS,MAAM8T,GAAQA,IACd7T,OAAOwf,GAAQA,GACpB,CAMA,sBAAM2hR,CAAiBiB,EAAqBC,GAC1C,MAAQ5mS,aAAa,iBAAE0tR,IAAuB58R,KAAKM,MAEnDN,KAAK28H,SAAS,CAAEmgK,oBAAoB,IAEpC,MAAMmZ,EAAuBJ,GAA4CjZ,EAEnEsZ,QAAmB1qS,GAAAA,eAAeiX,IAAI9I,OAAOO,kBAAkB+7R,EAAqB3kS,GAAI2kS,GAG1Fj2S,KAAKg2S,sBAAwBF,GAAcA,IAC7CtqS,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,6BAA8BmwS,GACnEl2S,KAAK28H,SAAS,CAAEmgK,oBAAoB,IAExC,CAEA+X,oBAAAA,GACE70S,KAAK28H,SAAS,CAAEs3K,oBAAoB,IACpC,MAAMkC,EAAYnxS,SAAS8pS,uBAAuB,cAClDqH,GAAaA,EAAU12S,QAAU02S,EAAU,GAAGn2F,gBAAe,EAC/D,CAEA80F,kBAAAA,GACE90S,KAAK28H,SAAS,CAAEu3K,kBAAkB,GACpC,CAEA,eAAMc,GACJ,MAAQ9lS,aAAa,eAAEyiQ,EAAc,UAAEiiC,IAAgB5zS,KAAKM,MAC5DN,KAAK28H,SAAS,CAAE0tD,WAAW,EAAM2pH,kBAAkB,IACnD,MAAMoC,QAAiB5qS,GAAAA,eAAeiX,IAAI9I,OAAOQ,QAAQy5R,EAAU/4B,aAC7D90F,EAAU,GAAEoqF,GAAatqQ,IAAI,CAAE8iL,KAAM,WAAY/nL,GAAI+wQ,EAAe1wP,WAAYvP,KAAM+vK,GAAmBkwF,EAAe91P,uBAAwBu6R,EAAS9kS,kBAC/JnO,OAAO4B,SAASqE,QAAQ28K,EAC1B,CAEAt8J,MAAAA,GACE,IAAKzpB,KAAKM,MAAM4O,YAAa,OAAO,KAEpC,MAAQA,aAAa,eAAEyiQ,EAAc,iBAAEirB,EAAgB,UAAEgX,EAAS,aAAEvE,EAAY,2BAAEgH,EAA0B,mBAAE3C,IAAyB1zS,KAAKM,MAE5I,IAAKN,KAAKm0S,mBAAqBxiC,EAO7B,OANA3xQ,KAAKm0S,mBAAoB,EAEzBn0S,KAAKmlC,QAAQwsO,EAAergQ,GAAIoiS,GAC7BlgS,MAAM8T,GAAOA,IACb7T,OAAOwf,GAAQA,IAEX,KAGT,MAAM,aAAEyqJ,GAAiB19K,KAAKM,MACxBg2S,IAAoB54H,EAAa73K,IAAI,YAErC,aAAEiiL,GAAiBjC,GAAahgL,MAEtC,IAAK8rQ,EAAgB,OAAO,KAE5B,MAAM4kC,EAAgBv2S,KAAKw0S,oBAAsB3xS,GAAE,2DAA6D,KAE1G2zS,EAAgB7kC,EAAeksB,cAAgB,MAAQlsB,EAAeksB,cAAgB,GAEtF4Y,EAAe7Z,GAAqBA,EAAiBoU,WAAwE5uS,IAAzDw6R,EAAiBoU,MAAMjwR,MAAK0F,GAAQA,EAAKuoR,aAAhD,KAC7D0H,IAAgB9Z,MAA8BjrB,EAAeosB,cAAc9D,SAASiC,YAA4C,IAA9BU,EAAiB3C,UAEzH,OACE7vG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,cAAaq9G,UAC1B+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,OAAMq9G,SAAA,EACnBgrE,EAAAA,GAAAA,KAAA,OAAMroL,UAAU,kBAAiBq9G,UAC/BgrE,EAAAA,GAAAA,KAACusH,GAAO,CAACz7B,QAASvJ,EAAgBihC,cAAc,EAAMJ,kBAAmB7gC,OAE3ExnF,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,mBAAkBq9G,SAAA,CAC9Bp/G,KAAK+I,MAAMshL,YACVD,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,+BAA8Bq9G,UAC3C+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,4BAA2Bq9G,SAAA,CACvCp/G,KAAK+I,MAAMirS,mBAAoB5pH,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBAAqBq9G,SAAEv8G,GAAE,qCACxEunL,EAAAA,GAAAA,KAACE,GAAW,UAKlBF,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,WAAWwtI,wBAAyB,CAAEC,OAAS,GAAEmiI,EAAe91P,QAAQ26R,OACtF5C,IAAc0C,IAAmBnsH,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,cAAaq9G,SAAA,CAC3Dv8G,GAAE,iCAAkC,CACnC+zS,mBAAoBv0H,GAAmBuxH,EAAUiD,cAAe/uH,MAElEsC,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,eAAe82I,QAAS74I,KAAKg1S,UAAU51L,SAAEv8G,GAAE,2BAE5D8uQ,EAAeV,cAAe7mF,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,kBAAiBq9G,UAC7DgrE,EAAAA,GAAAA,KAAA,OAAK76C,wBAAyB,CAAEC,OAAQmiI,EAAeV,kBAEzD7mF,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,iBAAgBq9G,UAC7BgrE,EAAAA,GAAAA,KAACusH,GAAO,CAACz7B,QAASvJ,EAAgBihC,cAAc,EAAMJ,kBAAmB7gC,MAE1E+kC,GAAgB9Z,IAAoBzyG,EAAAA,GAAAA,MAAA,QAAMpoL,UAAU,eAAcq9G,SAAA,CAChEv8G,GAAE,wBACHsnL,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,mBAAkBq9G,SAAA,EAC/BgrE,EAAAA,GAAAA,KAACs3G,GAAW,CACVO,iBAAkBjiS,KAAKiiS,iBACvBL,aAAcjwB,EACdkwB,WAAYjF,IAEb2Z,IACCnsH,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,iBAAgBq9G,SAAEm3L,WAKvCnsH,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,aACfqoL,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,qBAAoBq9G,SAAEv8G,GAAE,8BACxCunL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,wBAAuBq9G,SACnCw9K,GAAoByS,GAAgBgH,GACnCjsH,EAAAA,GAAAA,KAAComH,GAAY,CACXK,aAAcjU,EACdgU,WAAYj/B,EACZ09B,aAAcA,EACdyB,uBAAwBuF,EACxBjH,WAAYpvS,KAAK+I,MAAMqmS,WACvBwF,iBAAkB50S,KAAK40S,iBACvB7+J,SAAU/1I,KAAK+1I,SACf+mJ,mBAAoB98R,KAAK+I,MAAM+zR,mBAC/BiU,uBAAwB/wS,KAAK+wS,uBAC7B5O,YAAavF,EAAiB3C,YAGhC7vG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,cAAaq9G,UAC1BgrE,EAAAA,GAAAA,KAACE,GAAW,SAKlBF,EAAAA,GAAAA,KAAA,OAAKxpL,GAAG,mCAERupL,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,2BAA0Bq9G,SAAA,EACvC+qE,EAAAA,GAAAA,MAAA,QAAMpoL,UAAU,cAAaq9G,SAAA,CAC1Bp/G,KAAK+I,MAAM+zR,qBAAsB1yG,EAAAA,GAAAA,KAACE,GAAW,KAC5CtqL,KAAK+I,MAAM+zR,oBAAsBuZ,IAA8BjsH,EAAAA,GAAAA,KAAC7pK,GAAK,CAACwrF,MAAOsqM,EAA2BS,MAAMv2R,MAAOq6Q,eAAgByb,EAA2BS,MAAM1G,qBAG1KhmH,EAAAA,GAAAA,KAAA,OACExpL,GAAG,sBACHmB,UAAU,iDACV82I,QAAS74I,KAAKy0S,gBACdj2J,UAAWi4J,GAAez2S,KAAK+I,MAAMshL,UAAUjrE,SAE9Cp/G,KAAK+I,MAAMgrS,uBACV3pH,EAAAA,GAAAA,KAACE,GAAW,IAEZznL,GAAE,yBAIJ7C,KAAK+I,MAAMkrS,qBACX7pH,EAAAA,GAAAA,KAACwwE,GAAO,CACN74P,UAAU,2BACVsiI,UAAU,gCACV6pD,OAAQluL,KAAK+I,MAAMkrS,mBACnBv9G,UAAU,MACVp3L,OAAO,sBACP+uL,OAAQruL,KAAK60S,qBAAqBz1L,UAClC+qE,EAAAA,GAAAA,MAACi9F,GAAW,CAAAhoK,SAAA,EACVgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,2BAA0Bq9G,SACtCv8G,GAAE,sCAELsnL,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,kBAAiBq9G,SAAA,EAC9BgrE,EAAAA,GAAAA,KAAA,OACEroL,UAAU,4BACV82I,QAAS74I,KAAK60S,qBAAqBz1L,SAClCv8G,GAAE,yCAELunL,EAAAA,GAAAA,KAAA,OACEroL,UAAU,+CACV82I,QAAS74I,KAAK00S,sBAAsBt1L,SACnCv8G,GAAE,kDAOX7C,KAAK+I,MAAMmrS,mBACX9pH,EAAAA,GAAAA,KAACwwE,GAAO,CACN74P,UAAU,yBACVsiI,UAAU,gCACV6pD,OAAQluL,KAAK+I,MAAMmrS,iBACnBx9G,UAAU,MACVp3L,OAAO,sBACP+uL,OAAQruL,KAAK80S,mBAAmB11L,UAChC+qE,EAAAA,GAAAA,MAACi9F,GAAW,CAAAhoK,SAAA,EACVgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,gBAAeq9G,UAACgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,YAAY82I,QAAS74I,KAAK80S,mBAAmB11L,SAAC,YAC5F+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,2BAA0Bq9G,SAAA,CACtCv8G,GAAE,iCAAiC,OAElC7C,KAAKq0S,yBAA2Br0S,KAAKs0S,uBACnClqH,EAAAA,GAAAA,KAAA,OAAAhrE,UACE+qE,EAAAA,GAAAA,MAAA,MAAA/qE,SAAA,EACEgrE,EAAAA,GAAAA,KAAA,MAAAhrE,SAAKv8G,GAAE,yCACPunL,EAAAA,GAAAA,KAAA,MAAAhrE,SAAKv8G,GAAE,iDAIX7C,KAAKq0S,wBAA0BxxS,GAAE,sCAAwCA,GAAE,4DAWnG,EAEF,SAAeqmS,GAAWuK,qCC5lB1B,MCKMsD,GACM,CACRC,mBAAoB,qCACpBjyS,SAAU,CACR6zH,IAAK,OACLzJ,KAAM,KAER8nL,YAAa,CACXx+K,OAAQ,MACRtJ,KAAM,MACN+nL,SAAU,WAVVH,GAac,CAChBC,mBAAoB,qCACpBjyS,SAAU,CACR0zH,OAAQ,OACRrJ,MAAO,OAET6nL,YAAa,CACXx+K,OAAQ,iBACRtJ,KAAM,MACN+nL,SAAU,UAtBVH,GAyBgB,CAClBC,mBAAoB,uCACpBjyS,SAAU,CACR0zH,OAAQ,OACRrJ,MAAO,OAET6nL,YAAa,CACXx+K,OAAQ,iBACRtJ,KAAM,MACN+nL,SAAU,UAlCVH,GAqCS,CACXC,mBAAoB,+BACpBjyS,SAAU,CACR0zH,OAAQ,OACRrJ,MAAO,OAET6nL,YAAa,CACXx+K,OAAQ,iBACRtJ,KAAM,MACN+nL,SAAU,UA9CVH,GAiDa,CACfC,mBAAoB,8BACpBjyS,SAAU,CACR0zH,OAAQ,QACRtJ,KAAM,MACNjuH,UAAW,oBAEb+1S,YAAa,CACXx+K,OAAQ,iBACRtJ,KAAM,MACN+nL,SAAU,UAKVC,GAAe,SAACnyK,GAAmB,IAAfpM,EAAGp5H,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,IAC9B,MAAMq1L,EAAO7vD,EAAGnF,wBAChB,OACEg1D,EAAKj8D,KAAOA,GACVi8D,EAAK1lE,MAAQ,GACb0lE,EAAKp8D,OAASo8D,EAAKr0L,SAAW2C,OAAO6nI,aAAehmI,SAASwF,gBAAgB4yH,eAC7Ey3D,EAAKzlE,QAAUjsH,OAAOgoL,YAAcnmL,SAASwF,gBAAgB2yH,YAEnE,EAEMi6K,GAAoBA,CAACC,EAAYC,EAAeC,EAAeC,EAAaC,EAAgBC,KAChG,IAAKJ,IAAkBC,IAAiBC,IAAeC,EACrD,OAEF,MAoBMjyN,EApBcmpC,MAClB,MAAM8mL,EAAc8B,EAAc/tP,QAClC,OAAMisP,GAA4C,QAA7BA,EAAY9zS,MAAMnB,SAAqBk3S,EAG/B,UAAzBL,EAAWtqI,WAAyB2qI,GAAwBjC,GAA4C,QAA7BA,EAAY9zS,MAAMnB,OACxFu2S,GAEoB,YAAzBM,EAAWtqI,WAA2B0oI,GAA4C,QAA7BA,EAAY9zS,MAAMnB,OAClEu2S,GAEM,OAAXS,QAAW,IAAXA,GAAAA,EAAahuP,SAAW2tP,GAAaK,EAAYhuP,SAC5CutP,GAES,OAAdU,QAAc,IAAdA,GAAAA,EAAgBjuP,SAAW2tP,GAAaM,EAAejuP,SAClDutP,GAEF,KAdEA,EAcE,EAGIpoL,GACjB,GAAInpC,GAAY8xN,EAAc9tP,QAAS,CACrC,MAAMmuP,EAAa3yS,SAASm9L,cAAc38G,EAASwxN,oBAC/CW,IACFA,EAAWnyK,YAAY8xK,EAAc9tP,SACrCmuP,EAAWh2S,MAAMi2S,YAAY,WAAY,YACzCN,EAAc9tP,QAAQ32C,aAAa,QAAS,IAC5C1T,OAAOyH,KAAK4+E,EAASzgF,UAAU6C,SAASiwS,IACtCP,EAAc9tP,QAAQ7nD,MAAMi2S,YAAYC,EAAeryN,EAASzgF,SAAS8yS,GAAe,IAEtFryN,EAASyxN,aAAe93S,OAAOyH,KAAK4+E,EAASyxN,aAAax3S,SAC5D63S,EAAc9tP,QAAQ7nD,MAAMi2S,YAAY,wBAAyBpyN,EAASyxN,YAAYx+K,QACtF6+K,EAAc9tP,QAAQ7nD,MAAMi2S,YAAY,sBAAuBpyN,EAASyxN,YAAY9nL,MACpFmoL,EAAc9tP,QAAQ7nD,MAAMi2S,YAAY,iBAAkBpyN,EAASyxN,YAAYC,WAGrF,GAgGF,GA5Feh3S,IAA0H,IAAzH,UAAE43S,EAAS,qBAAEJ,EAAoB,WAAEK,EAAU,uBAAEC,EAAsB,cAAET,EAAa,YAAEC,EAAW,eAAEC,GAAgBv3S,EACjI,MAAOm3S,EAAYY,IAAiBrtI,EAAAA,EAAAA,UAAS,CAAC,GACxC0sI,GAAgB9sG,EAAAA,EAAAA,QAAO,MAOvBv5D,GAAckhD,EAAAA,EAAAA,cAAY,KAC9BilH,GAAkBC,EAAYC,EAAeC,EAAeC,EAAaC,EAAgBC,EAAqB,GAC7G,CAACL,EAAYC,EAAeC,EAAeC,EAAaC,EAAgBC,IAErEQ,GAAyB1tG,EAAAA,EAAAA,QAAOv5D,GA+DtC,OA9DA45B,EAAAA,EAAAA,YAAU,KACRqtI,EAAuB1uP,QAAUynF,CAAW,GAC3C,CAACA,KAEJ45B,EAAAA,EAAAA,YAAU,KACR,MAAM5uC,EAAeA,KACnBi8K,EAAuB1uP,SAAS,EAIlC,OADArmD,OAAO6P,iBAAiB,SAAUipH,GAC3B,KACL94H,OAAO6P,iBAAiB,SAAUipH,EAAa,CAChD,GACA,KAEH4uC,EAAAA,EAAAA,YAAU,KACR,MAAM13I,EAAS,CACb,qBAAwB,CACtBrxB,KAAM,QACN4xB,QAAS7wB,GAAE,uCAEb,UAAa,CACXf,KAAM,QACN4xB,QAAS7wB,GAAE,+BAEb,yBAA4B,CAC1Bf,KAAM,UACN4xB,QAAS7wB,GAAE,oCAEb,iBAAoB,CAClBf,KAAM,QACN4xB,QAAS7wB,GAAE,6BAEb,cAAiB,CACff,KAAM,QACN4xB,QAAS7wB,GAAE,uBAAwB,CAAC+uH,SAAW,KAAIomL,EAAuBvyS,MAAM,EAAG,GAAGqE,KAAK,YAI/F,GAAIguS,EAAW,CACb,MAAMK,EAAgB,CAAEprI,UAAW55I,EAAO2kR,GAAWh2S,KAAMqjO,aAAchyM,EAAO2kR,GAAWpkR,SAC3FukR,EAAcE,GACdf,GAAkBe,EAAeb,EAAeC,EAAeC,EAAaC,EAAgBC,GACxFJ,EAAc9tP,UAChB8tP,EAAc9tP,QAAQ7nD,MAAMi2S,YAAY,UAAW,SACnDN,EAAc9tP,QAAQ41D,SAAS,GAAGz9G,MAAMi2S,YAAY,UAAW,QAEnE,MAAO,GAAkB,OAAdE,EAAoB,CAC7BG,EAAc,CAAC,GACXX,EAAc9tP,UAChB8tP,EAAc9tP,QAAQ7nD,MAAMi2S,YAAY,UAAW,QACnDN,EAAc9tP,QAAQ41D,SAAS,GAAGz9G,MAAMi2S,YAAY,UAAW,SAEjE,MAAMhyG,EAAgB5gM,SAASg0M,eAAe,UAC9C,GAAIpT,EAAe,CACWA,EAAcn8D,cACtBvpB,YAAY0lF,EAClC,CACF,IAEC,CAACkyG,EAAWE,KAGb7tH,EAAAA,GAAAA,MAAA,OAAKhqL,IAAKm3S,EAAev1S,UAAY,kBAAiBs1S,EAAWtqI,YAAansK,GAAG,SAASe,MAAO,CAAEwiI,QAAS,QAAS/kB,SAAA,EACnH+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,uBAAuBJ,MAAO,CAAEwiI,QAAS,QAAS/kB,SAAA,EAC/DgrE,EAAAA,GAAAA,KAAA,UAAQroL,UAAU,eAAe82I,QAASA,KA1E9Co/J,EAAc,CAAC,QACfF,KAyEkE34L,UAC5DgrE,EAAAA,GAAAA,KAAC2e,GAAI,CAACr3L,KAAK,kBAAkBnR,MAAM,OAAOC,OAAO,YAEnD4pL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,aAAYq9G,UACzBgrE,EAAAA,GAAAA,KAACguH,GAAAA,eAAS,CAAC73S,MAAM,OAAOC,OAAO,YAEjC4pL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,kBAAiBq9G,SAAEi4L,EAAWlyE,mBAE/C/6C,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,YACZ,0HC7MH,MAAMs2S,IAAUj3S,EAAAA,EAAAA,aAAW,CAAAlB,EAG/Bo4S,KAAgB,IAHgB,OACjCl8Q,EAAM,QAAEk4N,EAAO,SAAEl1I,EAAQ,OAAE8uE,EAAM,eAAEqqH,EAAc,cACjDC,EAAa,OAAEC,EAAM,QAAEC,EAAO,kBAAEC,EAAiB,cAAEC,EAAa,SAAEtoD,EAAQ,mBAAEuoD,GAC7E34S,EACC,MAAM44S,GAAoBtuG,EAAAA,EAAAA,QAAO,OAC1BuuG,EAAeC,IAAoBpuI,EAAAA,EAAAA,UAASsjB,IAC5C+qH,EAAYC,IAAiBtuI,EAAAA,EAAAA,UAAS8tI,GAEvCS,EAAkB,IAAItvF,kBAAiB13B,EAAAA,EAAAA,cAAY,KACN,WAA7C2mH,EAAkBtvP,QAAQ7nD,MAAMurF,UAClC4rN,EAAkBtvP,QAAQ7nD,MAAMi2S,YAAY,aAAekB,EAAkBtvP,QAAQ0zE,aAAe,GAAM,KAC5G,GACC,CAAC47K,MAEJjuI,EAAAA,EAAAA,YAAU,KACJqjB,GACF8qH,GAAiB,GACjBF,EAAkBtvP,QAAQ7nD,MAAMi2S,YAAY,aAAekB,EAAkBtvP,QAAQ0zE,aAAe,GAAM,QAE1G47K,EAAkBtvP,QAAQ7nD,MAAMi2S,YAAY,WAAY,UACxDkB,EAAkBtvP,QAAQ7nD,MAAMi2S,YAAY,aAAc,OAC5D,GACC,CAAC1pH,KAEJrjB,EAAAA,EAAAA,YAAU,KACRquI,EAAcR,EAAQ,GACrB,CAACA,KAEJ7tI,EAAAA,EAAAA,YAAU,KACRsuI,EAAgBh7F,QAAQ26F,EAAkBtvP,QAAS,CAAEsvL,WAAW,EAAMC,SAAS,EAAMl2F,YAAY,IAC1F,IAAMs2J,EAAgB3vF,eAE5B,IAEH,MAAM4vF,EAAgBA,IAAMb,EAAerqH,GAAU,EAAI9xJ,GAOnDi9Q,EAAYT,EAAcnsS,QAAO,CAAChK,EAAGwwB,IAAQxwB,GAAKwwB,IAAK,GACvDqmR,IAA2C,OAAlBT,QAAkB,IAAlBA,IAAAA,EAAoBzrJ,cAAemsJ,KAA+B,OAAlBV,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBzrJ,YAAa,CAC9GlK,eAAgB,CAAE,IAAK,CAAC,MACxBN,kBAAmB,CAAE,IAAK,CAAC,MAC3BsD,sBAAsB,IACrB98I,QAAQ,MAAO,KAAKvB,OAEvB,OACEsiL,EAAAA,GAAAA,MAAAstF,GAAAA,SAAA,CAAAr4J,SAAA,EACE+qE,EAAAA,GAAAA,MAAA,OACEpoL,UAAY,WAAUmsL,EAAS,eAAiB,MAAMmrH,EAAY,gBAAkB,MAAM/oD,EAAW,SAAW,KAChHnwP,IAAKm4S,EAAWl5L,SAAA,EAChB+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,iBAAiB82I,QAASugK,EAAen9J,UAlBpCr5I,GAAgB,UAAVA,EAAEjD,KAAmBy5S,IAkBsCn+J,SAAS,IAAG77B,SAAA,EAC/F+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,gBAAeq9G,SAAA,EAC5B+qE,EAAAA,GAAAA,MAAA,QAAMpoL,UAAU,mBAAkBq9G,SAAA,CAAEhjF,EAAS,EAAE,YAC/CguJ,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,qBAAoBq9G,SACnB,6BAAjBk1I,EAAQ5iP,KAAsC7O,GAAE,4BAA8ByxP,EAAQ5iP,UAEvF2nS,IAAcnrH,IAAU9D,EAAAA,GAAAA,KAACguH,GAAAA,eAAS,CAAC73S,MAAM,OAAOC,OAAO,UACtD64S,GAAaN,GAAiBE,IAAe/qH,IAC7C9D,EAAAA,GAAAA,KAACovH,GAAAA,eAAQ,CAACz3S,UAAU,oBAAoBvB,OAAO,OAAOD,MAAM,UAC5D84S,KAAeN,IAAkBE,KAAgB/qH,IACjD9D,EAAAA,GAAAA,KAACqvH,GAAAA,eAAU,CAAC13S,UAAU,sBAAsBvB,OAAO,OAAOD,MAAM,OACpDH,MAAOyC,GAAE,oCAExBqrL,GAAUorH,IACTlvH,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBAAsBwtI,wBAAyB,CAAEC,OAAQ8pK,MAC1EnvH,EAAAA,GAAAA,MAAA,OAAKpoL,UAAY,kBAAkB5B,IAAK24S,EAAmBh8F,gBAhC3C48F,KAChBxrH,GACF4qH,EAAkBtvP,QAAQ7nD,MAAMi2S,YAAY,WAAY,QAC1D,EA6B8Fx4L,SAAA,CACvFA,GACDgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,wBAAwB82I,QAAS4/J,EAAQx8J,UAAYr5I,GAAgB,UAAVA,EAAEjD,KAAmB84S,IAC1Fx9J,SAAS,IAAG77B,SAAkBv8G,GAAhB21S,EAAkB,uBAA4B,6BAIhEtqH,GAAUmrH,IACbjvH,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,oBAAmBq9G,SAC/Bv8G,GAAE,gCAGN,ICzEM82S,GAAmBr2S,GACjB,kBAANA,IACLiD,OAAOigF,MAAMjgF,OAAOjD,KAAOwK,KAAK0vD,MAAMj3D,OAAOjD,MAAQA,EAE5Cs2S,GAAuBt2S,GACrB,kBAANA,GAAmBA,GAAK,GAAKiD,OAAOqgF,cAActjF,GAErD,SAAUggF,GACdu2N,EACAC,GAEA,GAAyB,IAArBA,EAAUr6S,OACZ,OAAOo6S,EAGT,IAAIp9Q,EACJ,MAAMs9Q,EAAc,IAAIF,GAExB,IAAK,IAAIt6S,EAAIw6S,EAAYt6S,OAAS,EAAGiH,EAAI,EAAGrC,EAAI,EAAG9E,EAAI,EAAGA,IAAKmH,IAAK,CAClEA,GAAKozS,EAAUr6S,OAEf4E,GAAKo4B,EAAUq9Q,EAAUpzS,GAAIqlD,YAAY,GACzC,MAAMh8C,GAAK0sB,EAAU/1B,EAAIrC,GAAK9E,EAGxBmE,EAAIq2S,EAAYx6S,GAChBoF,EAAIo1S,EAAYhqS,GACtBgqS,EAAYhqS,GAAKrM,EACjBq2S,EAAYx6S,GAAKoF,EAGnB,OAAOo1S,CACT,CAEO,MAuBMC,GAAeA,CAC1BC,EACAJ,IAEAI,EAAWxtS,QAAmB,CAACytS,EAAOzzR,KACpC,MAAMiL,EAAQmoR,EAActvS,QAAQkc,GACpC,IAAe,IAAXiL,EACF,MAAM,IAAItjB,MACR,oBAAoB6rS,EAAWnwS,KAC7B,iFAC6E+vS,EAAc/vS,KAC3F,QAIN,GAAqB,kBAAVowS,EACT,OAAOA,EAAQC,OAAON,EAAcp6S,QAAU06S,OAAOzoR,GAEvD,MAAMxqB,EAAQgzS,EAAQL,EAAcp6S,OAASiyB,EAE7C,OADoBnrB,OAAOqgF,cAAc1/E,GAEhCA,GAGTkzS,GACE,8GAGKD,OAAOD,GAASC,OAAON,EAAcp6S,QAAU06S,OAAOzoR,GAAM,GAClE,GAEC2oR,GAA0B,WA6BnBC,GAAwB1lO,GACnC,IAAItvE,OACFsvE,EACGnkE,KAAKq4C,GAAS28B,GAAa38B,KAG3BsjB,MAAK,CAAC1oE,EAAGiB,IAAMA,EAAElF,OAASiE,EAAEjE,SAC5BqK,KAAK,MAaN27E,GAAgBh9E,GACpBA,EAAKW,QAAQ,2BAA4B,QAErCgxS,GAA4B,WAGhC,GAAsB,oBAAXD,OACT,MAAM,IAAI5wS,UAHZ/J,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAuB,8CAKzB,ECzIc,MAAO+6S,GASnB5uS,WAAAA,GAIyB,IAHvB6uS,EAAIh7S,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,GACCovD,EAAApvD,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAY,EACpBi7S,EAAQj7S,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,iEACXk7S,EAAIl7S,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,iBAEP,GAJQ,KAAAovD,UAAAA,EAIiB,kBAAdA,EACT,MAAM,IAAIrlD,UACR,+DAA+DqlD,MAGnE,GAAoB,kBAAT4rP,EACT,MAAM,IAAIjxS,UACR,0DAA0DixS,MAG9D,GAAwB,kBAAbC,EACT,MAAM,IAAIlxS,UACR,4DAA4DkxS,MAIhE,MAAMX,EAAYr1S,MAAMkB,KAAK60S,GACvBX,EAAgBp1S,MAAMkB,KAAK80S,GAC3BE,EAAYl2S,MAAMkB,KAAK+0S,GAE7B16S,KAAKw6S,KAAOV,EAEZ,MAAMc,ED1DkD,IACvD,IAAIj3S,ICyD6Bk2S,ID1DR7wL,IAM5B6xL,ECsDE,GAAID,EAAen7S,OA9CK,GA+CtB,MAAM,IAAI2O,MACR,2EAA+FwsS,EAAe9wS,KAC5G,OAMN9J,KAAKy6S,UD/DPI,EC+D+CF,EAAhBC,ED9DZtxS,QAAQw/C,IAAU+xP,EAAen7Q,SAASopB,MCgE3D,MAAMgyP,ED9DeC,EAACnmO,EAAiBomO,IACzCpmO,EAAMtrE,QAAQw/C,GAASkyP,EAAUt7Q,SAASopB,KC6DnBiyP,CAAUJ,EAAWC,GAG1C,IAAIK,EACA7mN,EAHJp0F,KAAK06S,KAAOp3N,GAAQw3N,EAAchB,IAMX,IAArB95S,KAAK06S,KAAKj7S,QACVO,KAAKy6S,SAASh7S,OAASO,KAAK06S,KAAKj7S,OAhEjB,OAkEhBw7S,EAAantS,KAAKwvD,KAAKt9D,KAAKy6S,SAASh7S,OAlErB,KAoEZw7S,EAAaj7S,KAAK06S,KAAKj7S,SACzB20F,EAAO6mN,EAAaj7S,KAAK06S,KAAKj7S,OAC9BO,KAAK06S,KAAK7zS,QAAQ7G,KAAKy6S,SAASh1S,MAAM,EAAG2uF,IACzCp0F,KAAKy6S,SAAWz6S,KAAKy6S,SAASh1S,MAAM2uF,KAIxCp0F,KAAKy6S,SAAWn3N,GAAQtjF,KAAKy6S,SAAUX,GACvC,MAAMoB,EAAaptS,KAAKwvD,KAAKt9D,KAAKy6S,SAASh7S,OA3E7B,IA6EVO,KAAKy6S,SAASh7S,OAAS,GACzBO,KAAKm7S,OAASn7S,KAAK06S,KAAKj1S,MAAM,EAAGy1S,GACjCl7S,KAAK06S,KAAO16S,KAAK06S,KAAKj1S,MAAMy1S,KAE5Bl7S,KAAKm7S,OAASn7S,KAAKy6S,SAASh1S,MAAM,EAAGy1S,GACrCl7S,KAAKy6S,SAAWz6S,KAAKy6S,SAASh1S,MAAMy1S,IAGtCl7S,KAAKo7S,aAAed,GAAqBt6S,KAAKm7S,QAC9Cn7S,KAAKq7S,WAAaf,GAAqBt6S,KAAK06S,MAC5C16S,KAAKs7S,mBDoCiC1mO,IACxC,IAAItvE,OACF,KAAKsvE,EACFnkE,KAAKq4C,GAAS28B,GAAa38B,KAG3BsjB,MAAK,CAAC1oE,EAAGiB,IAAMA,EAAElF,OAASiE,EAAEjE,SAC5BqK,KAAK,UC3CkByxS,CAA0B,IAC/Cv7S,KAAKy6S,YACLz6S,KAAKm7S,UACLn7S,KAAK06S,MAEZ,CAKApxJ,MAAAA,CACE7+D,GAGc,QAAA3jE,EAAAtnB,UAAAC,OAFX+7S,EAAiB,IAAA/2S,MAAAqiB,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAjBy0R,EAAiBz0R,EAAA,GAAAvnB,UAAAunB,GAIpB,IAAI00R,EAAeh3S,MAAMK,QAAQ2lF,GAC7BA,EACA,IAAc,MAATA,EAAgB,CAACA,GAAS,MAAQ+wN,GAE3C,OAAuB,IAAnBC,EAAQh8S,OANA,IAUPg8S,EAAQj8Q,MAAMm6Q,MACjB8B,EAAUA,EAAQhrS,KAAKnN,GACR,kBAANA,GAA+B,kBAANA,EAC5BA,ED5BmBuiB,KAC7B,IAAKw0R,GAAwBxwS,KAAKgc,GAChC,OAAOtf,OAAOmoF,IAGhB,MAAMgtN,EAAQn1S,OAAO2a,SAAS2E,EAAK,IAEnC,OAAItf,OAAOqgF,cAAc80N,GAChBA,GAGTtB,GACE,6IAGKD,OAAOt0R,GAAI,ECcR81R,CAAe/2S,OAAOtB,OAIxBm4S,EAAyBj8Q,MAAMo6Q,IAI9B55S,KAAK47S,QAAQH,GAAqB3xS,KAAK,IAtBlC,GAuBd,CAEAwiD,MAAAA,CAAO1rD,GACL,OAAKA,GAAoB,kBAAPA,GAAiC,IAAdA,EAAGnB,OACjCO,KAAK67S,QAAQj7S,GADyC,EAE/D,CAiBAk7S,SAAAA,CAAUC,GACR,IAAIC,EAAMD,EACV,cAAeC,GACb,IAAK,SACHA,EAAMA,EAAIx2S,SArJE,IAsJZ,MACF,IAAK,SACH,IAAK,gBAAgBqE,KAAKmyS,GAAM,MAAO,GACvC,MACF,QACE,MAAM,IAAI5tS,MACR,8EAA8E4tS,MAIpF,MAAMP,GDxDR51R,ECwDwCm2R,EDvDxCv0N,ECxGyB,GDyGzBh3E,ECsDkE4oB,GAC9D9yB,OAAO2a,SAAS,IAAImY,IAAQ,IDrDhC50B,MAAMkB,KAAe,CAAElG,OAAQqO,KAAKwvD,KAAKz3C,EAAIpmB,OAASgoF,KAAQ,CAAC5iF,EAAG6sB,IAChEjhB,EAAIoV,EAAIpgB,MAAMisB,EAAQ+1D,GAAM/1D,EAAQ,GAAK+1D,OANRw0N,IACnCp2R,EACA4hE,EACAh3E,ECyDE,OAAOzQ,KAAKspJ,OAAOmyJ,EACrB,CAEAS,SAAAA,CAAUt7S,GACR,OAAOZ,KAAKssD,OAAO1rD,GAChB6P,KAAK2rB,GAAWA,EAAO52B,SAxKV,IAwKgCC,MAAM,KACnDqE,KAAK,GACV,CAEAqyS,SAAAA,CAAUv7S,GACR,OAAOZ,KAAKs7S,mBAAmBzxS,KAAKjJ,EACtC,CAEQg7S,OAAAA,CAAQH,GACd,IAAI,SAAEhB,GAAaz6S,KAEnB,MAAMo8S,EAAeX,EAAQhvS,QAC3B,CAACs7D,EAAM3rC,EAAQ78B,IACbwoE,GACmB,kBAAX3rC,EACJ71B,OAAO61B,EAAS+9Q,OAAO56S,EApLf,MAqLR68B,GAAU78B,EArLF,OAsLd,GAGF,IAAIyqD,EAAgB,CAACywP,EAAS2B,EAAe3B,EAASh7S,SACtD,MAAM48S,EAAU,IAAIryP,IAEd,KAAE0wP,GAAS16S,MACX,OAAEm7S,GAAWn7S,KAoBnB,GAlBAy7S,EAAQ7zS,SAAQ,CAACw0B,EAAQ78B,KACvB,MAAM8G,EAASg2S,EAAQ3zS,OAAO1I,KAAKw6S,KAAMC,GAEzCA,EAAWn3N,GAAQm3N,EAAUp0S,GAC7B,MAAM0hE,EDzKcu0O,EACxBr5O,EACA42O,KAEA,MAAMj5S,EAAe,GACrB,IAAIsG,EAAQ+7D,EAEZ,GAAqB,kBAAV/7D,EAAoB,CAC7B,MAAMq1S,EAAiBpC,OAAON,EAAcp6S,QAC5C,GACEmB,EAAG4/G,QAAQq5L,EAActzS,OAAOW,EAAQq1S,KACxCr1S,GAASq1S,QACFr1S,EAAQizS,OAAO,SAExB,GACEv5S,EAAG4/G,QAAQq5L,EAAc3yS,EAAQ2yS,EAAcp6S,SAC/CyH,EAAQ4G,KAAK0vD,MAAMt2D,EAAQ2yS,EAAcp6S,cAClCyH,EAAQ,GAGnB,OAAOtG,CAAE,ECqJQ07S,CAAWlgR,EAAQq+Q,GAIhC,GAFAzwP,EAAInjD,QAAQkhE,GAERxoE,EAAI,EAAIk8S,EAAQh8S,OAAQ,CAC1B,MAAM+8S,EAAWz0O,EAAK,GAAIhc,YAAY,GAAMxsD,EACtCk9S,EACc,kBAAXrgR,EACH71B,OAAO61B,EAAS+9Q,OAAOqC,IACvBpgR,EAASogR,EACfxyP,EAAInjD,KAAK6zS,EAAK+B,EAAc/B,EAAKj7S,aAIjCuqD,EAAIvqD,OAASO,KAAK4uD,UAAW,CAC/B,MAAM8tP,GACHN,EAAepyP,EAAI,GAAI+B,YAAY,IAAOovP,EAAO17S,OAGpD,GAFAuqD,EAAIw2D,QAAQ26L,EAAOuB,IAEf1yP,EAAIvqD,OAASO,KAAK4uD,UAAW,CAC/B,MAAM+tP,GACHP,EAAepyP,EAAI,GAAI+B,YAAY,IAAOovP,EAAO17S,OACpDuqD,EAAInjD,KAAKs0S,EAAOwB,KAIpB,MAAMC,EAAa9uS,KAAK0vD,MAAMi9O,EAASh7S,OAAS,GAChD,KAAOuqD,EAAIvqD,OAASO,KAAK4uD,WAAW,CAClC6rP,EAAWn3N,GAAQm3N,EAAUA,GAC7BzwP,EAAIw2D,WAAWi6L,EAASh1S,MAAMm3S,IAC9B5yP,EAAInjD,QAAQ4zS,EAASh1S,MAAM,EAAGm3S,IAE9B,MAAMr1P,EAASyC,EAAIvqD,OAASO,KAAK4uD,UACjC,GAAIrH,EAAS,EAAG,CACd,MAAMs1P,EAAet1P,EAAS,EAC9ByC,EAAMA,EAAIvkD,MAAMo3S,EAAcA,EAAe78S,KAAK4uD,YAItD,OAAO5E,CACT,CAEQ6xP,OAAAA,CAAQj7S,GACd,IAAKZ,KAAKm8S,UAAUv7S,GAClB,MAAM,IAAIwN,MACR,oBAAoBxN,+EAAgFZ,KAAKm7S,OAAOrxS,KAC9G,MACE9J,KAAK06S,KAAK5wS,KAAK,MAAM9J,KAAKy6S,SAAS3wS,KAAK,QAGhD,MAAMgzS,EAAgBl8S,EAAG+G,MAAM3H,KAAKo7S,cAI9B2B,EAAcD,EAFO,IAAzBA,EAAcr9S,QAAyC,IAAzBq9S,EAAcr9S,OAAe,EAAI,GAGjE,GAA2B,IAAvBs9S,EAAYt9S,OAAc,MAAO,GAErC,MAAMu9S,EAAcD,EAAYx5S,OAAOW,YAAYwK,OAAOxH,MACpD+1S,EAAUF,EAAYt3S,MAAMu3S,EAAYv9S,QAAQkI,MAAM3H,KAAKq7S,YAEjE,IAAI6B,EAAyBl9S,KAAKy6S,SAClC,MAAMl1Q,EAAuB,GAE7B,IAAK,MAAM43Q,KAASF,EAAS,CAC3B,MACMG,EAAe95N,GACnB45N,EAFa,CAACF,KAAgBh9S,KAAKw6S,QAAS0C,GAGrCz3S,MAAM,EAAGy3S,EAAaz9S,SAE/B8lC,EAAO1+B,KAAKmzS,GAAav1S,MAAMkB,KAAKw3S,GAAQC,IAC5CF,EAAeE,EAIjB,OAAIp9S,KAAK47S,QAAQr2Q,GAAQz7B,KAAK,MAAQlJ,EAAW,GAC1C2kC,CACT,ECpSF,MCSM83Q,GAAkB,WAA4B,IAA3B7iB,EAAgBh7R,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC3C,MAAMi7R,UAA2BnvH,IAAAA,UAC/B3/J,WAAAA,CAAarL,GAAQ,IAADg6H,EAClBz1G,MAAMvkB,GAAMg6H,EAAAt6H,KAAA,KAKds9S,YAAc,SAACp2S,GAAgD,IAAzCisB,EAAM3zB,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,GAAI+9S,EAAc/9S,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,IAAAA,UAAA,GAC/C,MAAMg+S,EAAwB,YAAVt2S,OAAsB9E,EAAY8E,EAChDu2S,GAAgBv2S,GAASozH,EAAKh6H,MAAMo9S,SAAS,oBAC/Cv+S,OAAOyT,OAAO0nH,EAAKh6H,MAAMo9S,SAAS,qBAAqBjtS,KAAKwiB,GAAQA,IACpE,GACE0qR,EAAY,CAAE,CAACrjL,EAAKh6H,MAAMM,IAAK,CAAEg9S,SAAU,IAAIH,KAAiBtqR,KACtEmnG,EAAKh6H,MAAMy1I,SAASzb,EAAKh6H,MAAMM,GAAoB,qBAAhB48S,EAAqC,GAAKA,EAAaG,EAAWJ,EACvG,EAXE,MAAMxsQ,EAAQ,IAAIzrC,OAAO,iCAAkC,KAC3DtF,KAAKY,GAAKZ,KAAKM,MAAMM,GAAGwI,QAAQ,QAAS,IAAIA,QAAQ2nC,EAAO,GAC9D,CAWAtnB,MAAAA,GACE,MACMo0R,EADU,IAAItD,GAAQv6S,KAAKY,IACR0oJ,OAAO,EAAG,EAAG,GAEtC,OACE8gC,EAAAA,GAAAA,KAAA,OAAKroL,UAAY,IAAG87S,IAAWz+L,UAC7BgrE,EAAAA,GAAAA,KAACowG,EAAgB,IACXx6R,KAAKM,MACTM,GAAIZ,KAAKY,GACT49I,SAAUx+I,KAAKM,MAAMw9S,SACrB/nK,SAAU/1I,KAAKs9S,eAIvB,EAGF,OAAO7iB,CACT,EAEMsjB,GAAU56S,OAAOi5Q,WAAW3vQ,QAAO,CAAChK,EAAG45Q,KAAG,IAAW55Q,EAAG,CAAC45Q,EAAI3qQ,MAAO2rS,GAAgBhhC,EAAItvI,cAAe,CAAC,GAExGixK,GAAmB1pD,GAAYA,EAAQt2O,WAAWwhB,OAAO5N,IAAcA,EAAS8rR,SAAS,cAAcO,UAkBvGC,GAAmDA,CAACtsR,EAAUmqP,IAC5C,OAAtBnqP,EAASusR,UACTpiC,EAASnqP,EAASxE,UAAYwE,EAASrG,UAAUivB,KAAK,GACpD0jQ,GAAiDtsR,EAASusR,SAAUpiC,GACpEA,EAASnqP,EAASxE,UAAYwE,EAASrG,UAAUivB,KAAK,GAEpD4jQ,GAAWl+S,IAAmE,IAAlE,SAAE0xB,EAAQ,OAAEuB,EAAM,qBAAEkrR,EAAoB,iBAAEC,GAAkBp+S,EAE5E,GACI0xB,EAASusR,UAAYD,GAAiDtsR,EAASusR,SAAUG,KAC1F1sR,EAASusR,SACV,CAEA,MAAMxtC,EAAkBotC,GAAQnsR,EAAS8rR,SAAS,cAClD,OACEvzH,EAAAA,GAAAA,MAAA,OACKpoL,UAAY,iCACL6vB,EAAS8rR,SAAS,cAAcO,QAAU,GAAK,6BAC/C9qR,EAAOvB,EAAShxB,KAAOuyB,EAAOvB,EAAShxB,IAAIuyB,OAAO1zB,QAAU0zB,EAAOvB,EAAShxB,IAAIknM,KAAO,SAAW,qBACpG1oF,SAAA,EACR+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,WAAUq9G,SAAA,EACvB+qE,EAAAA,GAAAA,MAAA,SAAO66C,QAASpzM,EAAShxB,GAAImB,UAAU,YAAWq9G,SAAA,CAC/CxtF,EAASxxB,MACTwxB,EAAS0oB,UACN8vI,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,iBAAgBq9G,SAAC,MACjC,QAGLxtF,EAASw7H,cACR+8B,EAAAA,GAAAA,MAAA,QAAMpoL,UAAU,kBAAiBq9G,SAAA,EACzBgrE,EAAAA,GAAAA,KAAC2e,GAAI,CAACr3L,KAAK,WAAWnR,MAAM,OAAOC,OAAO,OAAOuB,UAAU,YAAY3B,MAAM,MAC7EgqL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,uBAAsBq9G,SAAExtF,EAASw7H,iBAGzDx7H,EAAS0qP,OAAOnwQ,OACfg+K,EAAAA,GAAAA,MAAA,QAAMpoL,UAAU,YAAWq9G,SAAA,CAAC,OACpBgrE,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,eAAewtI,wBAAyB,CAAEC,OAAQ59G,EAAS0qP,OAAOnwQ,eAI9Fi+K,EAAAA,GAAAA,KAACumF,EAAe,CACd4tC,SAAUA,GACVC,YAAa,CAAEhzS,eAAe,mBAC9B5K,GAAIgxB,EAAShxB,GACbm1I,SAAUsoK,EACVl1F,OAAQA,CAACvoN,EAAIsG,EAAOu3S,EAAoBlB,IACtCr2S,GAASm3S,EAAqBz9S,EAAIsG,EAAOu3S,GAAsB,GAAIlB,GAErElsQ,QAASzf,EAAS8rR,SAAS,cAC3BI,SAAUlsR,EAAS8rR,SAAS,eAC5BpjQ,SAAU1oB,EAAS0oB,SACnBzlB,OAAQjD,EAAS8sR,eACjB77S,EAAGA,GACH66S,SAAU9rR,EAAS8rR,SACnBx2S,MAAOo3S,EAAiB1sR,EAAShxB,MAGjCuyB,EAAOvB,EAAShxB,KAChBuyB,EAAOvB,EAAShxB,IAAIuyB,QACpBA,EAAOvB,EAAShxB,IAAIknM,KAChB30K,EAAOvB,EAAShxB,IAAIuyB,OAAO1iB,KAAKrE,IAE9Bg+K,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,YAAWq9G,UACxBgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,aAAYq9G,SAAEhzG,KADA,SAKjC,OApDEwlB,EAAShxB,GAwDvB,CACA,OAAO,IAAI,EAgIb,GAjHoBqS,IAA0G,IAAzG,OAAEkgB,EAAM,oBAAE2oP,EAAmB,SAAEC,EAAQ,SAAEhmI,EAAQ,WAAE/3H,EAAU,cAAE2gS,EAAa,oBAAEC,GAAqB3rS,EACtH,MAAOqrS,EAAkBO,IAAuBj0I,EAAAA,EAAAA,UAASmxG,GAAY,CAAC,IAC/D+iC,EAAavG,IAAkB3tI,EAAAA,EAAAA,UAAS,IACxCh5C,EAAUmtL,IAAen0I,EAAAA,EAAAA,UAAS,KAClCo0I,EAAiBC,IAAsBr0I,EAAAA,EAAAA,UAAS,CAAC,GAClDs0I,GAAc10G,EAAAA,EAAAA,QAAO,CAAC,IAE5B3/B,EAAAA,EAAAA,YAAU,IAAMkxG,GAAY8iC,EAAoB9iC,IAAW,CAACA,KAG5DlxG,EAAAA,EAAAA,YAAU,IAAMk0I,EAlHaI,EAACnhS,EAAYohS,EAAyBJ,KACnE,MAAMptL,EAAWzyH,OAAOyT,OAAOoL,GAAYvR,QAAO,CAAChK,EAAGmvB,KAChDA,EAAS8rR,SAAS,cAAcppD,UAAY7xP,EAAE48S,iBAChD58S,EAAEmvH,SAAS/qH,KAAK,CACd6K,KAAMkgB,EAAS8rR,SAAS,cAAcppD,QACtCt2O,WAAY,CAAC4T,GACb8mR,QAASsG,EAAgBv8S,EAAEmvH,SAASnyH,UAAW,IAEjDgD,EAAE48S,gBAAkBztR,EAAS8rR,SAAS,cAAcppD,SAEpD7xP,EAAEmvH,SAASnvH,EAAEmvH,SAASnyH,OAAS,GAAGue,WAAWnX,KAAK+qB,GAE7CnvB,IACN,CAAEmvH,SAAU,GAAIytL,gBAAiB,OACpC,OAAOztL,EAASA,SAAStoH,QAAQgrP,IAAa0pD,GAAgB1pD,IAAS,EAoG3C6qD,CAAgBnhS,EAAY8gS,EAAaE,KAAmB,CAAChhS,KAEzF6sJ,EAAAA,EAAAA,YAAU,KACR,GAAI8zI,GAAiBA,IAAkBG,EAAa,CAClD,GAAIH,GAAiB,EAAG,CACtB,MAAMW,EA3BoBC,EAAC3tL,EAAUz+F,KAC3C,MAAMqsR,EAAoB5tL,EAASnhH,KAAK6jP,GAC/BA,EAAQt2O,WAAWvR,QAAO,CAAChK,EAAGmvB,IAAanvB,GAAM0wB,EAAOvB,EAAShxB,KAAOuyB,EAAOvB,EAAShxB,IAAIknM,OAAO,KAE5G,IAAK,IAAIvoM,EAAI,EAAGA,EAAIigT,EAAkB//S,OAAQF,IAC5C,GAAIigT,EAAkBjgT,GACpB,OAAOA,EAGX,OAAQ,CAAC,EAkB4BggT,CAA0B3tL,EAAUz+F,GAGnE,OAFAolR,EAAe+G,QACfG,GAAgBP,EAAY11P,QAAQ81P,GAEtC,CACA/G,EAAeoG,EACjB,IAEC,CAACA,IACJ,MAAMN,EAAuB,SAACz9S,EAAIsG,EAAOu3S,GAAgD,IAA5BlB,EAAc/9S,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,IAAAA,UAAA,GACzE,MAAMkgT,EAAe9tL,EAASphF,WAAU8jN,GAAWA,EAAQt2O,WAAW3U,MAAKuoB,GAAYA,EAAShxB,KAAOA,MACvGq+S,EAAmB,IAAKD,EAAiB,CAACU,IAAe,IAEzD,MAAMC,EAAgBxgT,OAAOyH,KAAKusB,GAC/B1mB,QAAO,CAACw5J,EAAK25I,KAAU,IACnB35I,EACH,CAAC25I,GAAcnB,EAAmBmB,IAChCnB,EAAmBmB,GAAYhC,UAAazqR,EAAOysR,GAAYzsR,UAC/D,CAAC,GACP0rR,EAAoB,IACfP,EACH,CAAC19S,GAAKsG,IAGR6uI,EAASn1I,EAAIsG,EAAOy4S,EAAe,CAAC,EAAGpC,EACzC,EAEMsC,EAAgBA,KACpB,MAAMC,EAAeluL,EAASktL,GAAa9gS,WACrC+hS,EAAiBD,EAAarzS,QAAO,CAACw5J,EAAKxkI,KAAI,IAAWwkI,EAAK,CAACxkI,EAAK7gC,IAAK6gC,EAAKv6B,OAAS,MAAO,CAAC,GAChG84S,EAAkBF,EAAarvS,KAAIgxB,GAAQA,EAAK7gC,KACtDi+S,EAAoB,IACfP,KAAqByB,IAE1Bd,EAAmB,IAAKD,EAAiB,CAACF,IAAc,IACxD,MAAMmB,EAAgB9gT,OAAOmF,QAAQ6uB,GAAQ1mB,QAAO,CAACw5J,EAAGjmJ,KAAA,IAAGrgB,EAAKuH,GAAM8Y,EAAA,MAAM,IAAKimJ,EAAK,CAACtmK,GAAMuH,EAAMisB,OAAQ,GAAG,CAAC,GAC/G4iH,EAASiqK,EAAiB,KAAMC,EAAeF,GAAgB,GAC/D,MAAMG,EAAmBpB,EAAc,EACnCoB,EAAmBtuL,EAASnyH,QAC9B84S,EAAe2H,GACfT,GAAgBP,EAAY11P,QAAQ02P,KAEpC3H,GAAgB,EAClB,EAGF,IAAKp5S,OAAOyH,KAAKoX,GAAYve,OAAQ,OAAO,KAE5C,GAAImyH,EAASnyH,OAAS,EAAG,CAAC,IAAD0gT,EACvB,MAAM/yJ,EAAgG,QAArF+yJ,EAAGvB,EAAoBz/S,OAAOyT,OAAOoL,GAAY,GAAG0/R,SAAS,cAAc0C,kBAAU,IAAAD,OAAA,EAAlFA,EAAoF/yJ,YAClGksJ,EAAuBC,KAAansJ,EAAa,CACrDlK,eAAgB,CAAE,IAAK,CAAC,MACxBN,kBAAmB,CAAE,IAAK,CAAC,MAC3BsD,sBAAsB,IAGxB,OACIikC,EAAAA,GAAAA,MAAAstF,GAAAA,SAAA,CAAAr4J,SAAA,CACGguC,IAAeg9B,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBAAsBwtI,wBAAyB,CAACC,OAAQ8pK,KACtFn6S,OAAOyT,OAAOoL,GAAYvN,KAAI,CAACmhB,EAAUF,KACtC04J,EAAAA,GAAAA,KAACg0H,GAAQ,CAAaxsR,SAAUA,EAAUuB,OAAQA,EAAQkrR,qBAAsBA,EAChEC,iBAAkBA,GADnB5sR,OAM3B,CAEA,MAAM2uR,EAAmBA,CAAC/rD,EAAS5iO,IAC7BstR,EAAgBttR,IAAUotR,IAAgBptR,EACrC4iO,EAAQt2O,WAAWvN,KAAKgxB,GAAStO,EAAOsO,EAAK7gC,IAAIuyB,OAAO1zB,OAAS,IAEnE60P,EAAQt2O,WAAWvN,KAAKgxB,GAAStO,EAAOsO,EAAK7gC,IAAIknM,MAAQ30K,EAAOsO,EAAK7gC,IAAIuyB,OAAO1zB,OAAS,IAIlG,OAAOmyH,EAASnhH,KAAI,CAAC6jP,EAAS5iO,KAC5B04J,EAAAA,GAAAA,KAACiuH,GAAO,CAAoBj8Q,OAAQ1K,EAC3B6mR,eAAiB+H,GAAkB/H,EAAe+H,GAClDhsD,QAASA,EAAS1iI,SAAUA,EAC5Bs8D,OAAQ4wH,IAAgBptR,EACxB8mR,cAAe5mL,EAASnyH,OAAS,IAAMiyB,EACvC+mR,OAAQoH,EACRnH,QAASpkD,EAAQokD,QACjBC,kBAAmBmG,EACnBlG,cAAeyH,EAAiB/rD,EAAS5iO,GACzCvxB,IAAMA,GAAQ++S,EAAY11P,QAAQ93B,GAASvxB,EAC3CmwP,SAAU0tD,GAAgB1pD,GAC1BukD,mBAAoB+F,EAAoBtqD,EAAQt2O,WAAW,GAAG0/R,SAAS,cAAc0C,WAAWhhM,SAEtGk1I,EAAQt2O,WAAWvN,KAAKmhB,IACvBw4J,EAAAA,GAAAA,KAACg0H,GAAQ,CAAmBxsR,SAAUA,EAAUuB,OAAQA,EAAQkrR,qBAAsBA,EAC5EC,iBAAkBA,GADb1sR,EAAShxB,OAdd0zP,EAAQ5iP,OAkBtB,EAgCJ,SAAS+tS,GAAiB77P,GACxBjxC,YAAW,KACT,MAAM21L,EAAStjM,SAASm9L,cAAc,WAChCo+G,EAAej4G,EAASA,EAAOjoE,aAAe,GAAK,IA9B7D,SAAuB/gI,EAAMirB,GAA8D,IAA5D,SAAE6/E,EAAW,IAAG,OAAExiD,EAAS,EAAC,UAAEy8E,EAAYr/H,SAAS+H,MAAMwd,EACtF,MAAMi2R,EAAiBlhT,EAAO2rI,UAAYrjF,EACpCq5M,EAAgB58H,EAAUhJ,UAC1BmgE,EAAWglH,EAAiBv/C,EAElC,IAAIz4M,EAAQ,KAEZ,MAAMknM,EAAa+wD,IACZj4P,IAAOA,EAAQi4P,GACpB,MAAMC,EAAcD,EAAcj4P,EAC5BgyN,EAAMmmC,EAAKD,EAAaz/C,EAAezlE,EAAUpxF,GACvDi6B,EAAUhJ,UAAYm/I,EAClBkmC,EAAct2M,GAChB8tB,sBAAsBw3H,EACxB,EAGIixD,EAAOA,CAAC99S,EAAG8B,EAAGV,EAAGhD,KACrB4B,GAAK5B,EAAI,GACD,EAAUgD,EAAI,EAAIpB,EAAIA,EAAI8B,GAE1BV,EAAI,KADZpB,GACsBA,EAAI,GAAK,GAAK8B,EAGtCuzH,sBAAsBw3H,EACxB,CAMIkxD,CAAah9P,EAAS,CAAEgE,OAAQ24P,GAAe,GAE9C,IACL,CC9SA,MCkDA,GAjCuBrgT,IAAqE,IAApE,UAAE6B,EAAS,aAAE6/R,EAAY,UAAEoT,EAAS,aAAE6L,EAAY,SAAEC,GAAU5gT,EACpF,IAAK0hS,GAAqD,IAArCziS,OAAOyH,KAAKg7R,GAAcniS,OAC7C,OAAO,KAGT,MAAMgpI,EAAe,GAAEm5J,EAAa/lR,QAAQ+lR,EAAa/D,cAAgB,MAAQ+D,EAAa/D,cAAgB,KAExG9D,EAAa6H,EAAarD,KAAKnC,SAAWwF,EAAarD,KAAKnC,SAASK,WAAamF,EAAarD,KAAKlC,SAASI,WAC7GyT,EAAWtO,EAAarD,KAAKnC,SAAWwF,EAAarD,KAAKnC,SAASvgR,KAAO+lR,EAAarD,KAAKlC,SAASxgR,KAE3G,OAAOsuK,EAAAA,GAAAA,MAAA,OAAKpoL,UAAY,GAAEA,oBAA4Bq9G,SAAA,EACpDgrE,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,4BAA4Bb,KAAM+wR,KAC7Cx3G,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,eAAewtI,wBAAyB,CAAEC,OAAQ/G,KAChEo4K,IAAgB12H,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,kBAAiBq9G,SAAA,CAC9Cv8G,GAAE,iCAAkC,CACnC+zS,mBAAoBv0H,GAAmBw+H,EAAahK,cAAeiK,MAErE12H,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,eAAe82I,QAASm8J,EAAU51L,SAAEv8G,GAAE,2BAEvD++R,EAAazD,YAAa/zG,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,oBAAmBq9G,UAC3DgrE,EAAAA,GAAAA,KAAC+zG,GAAS,CAACrE,aAAa,EACtB/tL,MAAO61L,EAAazD,UACpBvE,YAAagI,EAAa7D,cAAc9D,SAAS6H,QACjD/H,WAAYA,EACZC,WAAYkW,MAGftO,EAAa3wB,cAAe7mF,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBAAqBq9G,UAC/DgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBAAsBwtI,wBAAyB,CAAEC,OAAQoyJ,EAAa3wB,mBAEnF,EC/BR,MAAM8vC,WAA8Bt8K,EAAAA,UAGlC94H,WAAAA,CAAYrL,GACVukB,MAAMvkB,GAAM,KAHd0gT,gBAAkB,GAAE,KAyBpBC,kBAAoB,CAAC/5S,EAAOwoB,KAC1B,MAAM,iBAAEwxR,GAAqBlhT,KAAKM,MAElCN,KAAK28H,SAAS,CAAEwkL,iBAAkBj6S,IAClCg6S,GAAoBA,EAAiBxxR,GAAOA,EAAI0xR,UAAY,EAAIl6S,EAAOwoB,GAAOA,EAAI0xR,UAAYl6S,EAAQ,KAAK,EAxB3GlH,KAAK+I,MAAQ,CACXo4S,iBAAkB7gT,EAAM+gT,yBAA2B/gT,EAAM+gT,yBAA2B/gT,EAAMghT,sBAE9F,CAEAxzK,iBAAAA,GACE,MAAM,iBAAEozK,EAAgB,sBAAEI,EAAqB,yBAAED,GAA6BrhT,KAAKM,MAEnF4gT,GAAoBA,EAAiBI,EAAuBD,GAA0B,EACxF,CAEApzK,kBAAAA,CAAmBC,EAAWgJ,EAAWmxI,GACvC,MAAM,yBAAEg5B,EAAwB,sBAAEC,GAA0BthT,KAAKM,MAE7D+gT,IAA6BnzK,EAAUmzK,0BAA4BC,IAA0BpzK,EAAUozK,uBAC3GthT,KAAK28H,SAAS,CACZwkL,iBAAkBE,GAAsDC,GAE5E,CASA73R,MAAAA,GACE,MAAM,UAAE1nB,EAAS,aAAE6/R,EAAY,iBAAE2f,GAAqBvhT,KAAKM,MAE3D,IAAKshS,EACH,OAAO,KAGT5hS,KAAKghT,gBAAkB,CACrB,CACEpgT,GAAI,OACJsG,MAAO,EACPojB,MAAOznB,GAAE,oBACT+1L,QAASgpG,EAAa7D,eAAiB6D,EAAa7D,cAAcyjB,UAAY5f,EAAa7D,cAAcyjB,SAASC,SAASC,QAC3HN,WAAW,IAIXG,GAAoBA,EAAiBI,iBAAmBJ,EAAiBI,gBAAgBliT,QAC3F8hT,EAAiBI,gBAAgB/5S,SAASg6S,IACxC5hT,KAAKghT,gBAAgBn6S,KACnB,CACEjG,GAAI,OACJsG,MAAO06S,EAAQtwS,GACfgZ,MAAOs3R,EAAQ/lS,KACf+8K,QAASgpG,EAAa7D,eAAiB6D,EAAa7D,cAAcyjB,UAAY5f,EAAa7D,cAAcyjB,SAASK,QAAQH,QAC1HN,WAAW,GACX,IAIR,MAAMU,EAAiB9hT,KAAKghT,gBAAgB13S,QAAOmd,GAAQA,EAAKmyK,UAEhE,OAAKkpH,GAAkBA,EAAeriT,QAAU,EACvC,MAGF2qL,EAAAA,GAAAA,KAAA,OAAKroL,UAAY,GAAEA,4BAAoCq9G,UAC5D+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,kBAAiBq9G,SAAA,EAC9B+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,wBAAuBq9G,SAAA,EACpCgrE,EAAAA,GAAAA,KAAA,QAAAhrE,SAAOv8G,GAAE,uBAA2BunL,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,qBAAoBq9G,SAAC,UAE3EgrE,EAAAA,GAAAA,KAAC23H,GAAU,CACT70G,UAAU,WACVnrM,UAAW,kBACXsvC,QAASrxC,KAAKghT,gBAAgB13S,QAAOrI,GAAKA,EAAE23L,UAC5CsQ,cAAelpM,KAAK+I,MAAMo4S,iBAC1BprK,SAAU/1I,KAAKihT,wBAIvB,EAGF,YC5BA,IApE4B7/S,EAAAA,EAAAA,aAAW,CAAAlB,EASlCC,KAAS,IAT0B,SACpC6hT,EAAQ,UACRjgT,EAAS,aACT6/R,EAAY,SACZjI,EAAQ,WACRuc,EAAU,mBACVpZ,EAAkB,eAClBmlB,EAAc,cACdC,GACDhiT,EAEC,IAAK0hS,IAAiBsU,IAAetU,EAAavD,YAAmC,OAArB6X,EAAW31R,MAAgB,OAAO,KAElG,MAAM6hR,EAAeR,EAAarD,KAAKnC,SAClC,IAAGzC,KAAoC,MAAxBA,EAASn0R,WAAqBo8R,EAAarD,KAAKnC,SAASvgR,KAAO+lR,EAAarD,KAAKnC,SAASK,cAC3GmF,EAAarD,KAAKlC,SACf,IAAG1C,KAAoC,MAAxBA,EAASn0R,WAAqBo8R,EAAarD,KAAKlC,SAASxgR,KAAO+lR,EAAarD,KAAKlC,SAASI,cAC3G,GAEN,OAAOtyG,EAAAA,GAAAA,MAAA,OAAKpoL,UAAY,GAAEA,0BAAkCq9G,SAAA,EAC1DgrE,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,+BAA+Bb,KAAM+wR,KAChDx3G,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,iBAAgBq9G,SAAEv8G,GAAE,sBAEnCsnL,EAAAA,GAAAA,MAAA,OAAKpoL,UAAY,iBAAiC,IAAlBmgT,EAAsB,gBAAkB,IAAK9iM,SAAA,EAE3E+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,oBAAmBq9G,SAAA,EAChC+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,sBAAqBq9G,SAAA,CAAEv8G,GAAE,6BAA8B,CAAEu/R,iBAAgB,SACxFh4G,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBAAqBq9G,SAAE09K,GAAqB1yG,EAAAA,GAAAA,KAACE,GAAW,IACnE4rH,EAAW9F,gBAAiBhmH,EAAAA,GAAAA,KAAA,QAAAhrE,SAAM,OAAWgrE,EAAAA,GAAAA,KAAC7pK,GAAK,CAACs6Q,cAAc,EACd9uL,MAAO,CAAExrF,MAAO21R,EAAWiM,aAAczhS,IAAK,GAC9Ck6Q,gBAAgB,EAChBE,oBAAqB,iBAG3D,IAAnBmnB,IAAwB73H,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,oBAAmBq9G,UACzDgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBAAqBq9G,SAAEv8G,GAAE,qCAEtB,IAAnBo/S,IAAwB93H,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,oBAAmBq9G,SAAA,EACzDgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBAAqBq9G,SAAEv8G,GAAE,gCACxCunL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBAAqBq9G,SAAE09K,GAAqB1yG,EAAAA,GAAAA,KAACE,GAAW,IACnE4rH,EAAW9F,gBAAiBhmH,EAAAA,GAAAA,KAAA,QAAAhrE,SAAM,OAAWgrE,EAAAA,GAAAA,KAAC7pK,GAAK,CAACs6Q,cAAc,EACd9uL,MAAO,CAAExrF,MAAO21R,EAAWkM,WAAY1hS,IAAK,GAC5Ck6Q,gBAAgB,EAChBE,oBAAqB,kBAG3D,IAAlBonB,GAAyC,IAAlBA,KAAwB/3H,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,oBAAmBq9G,SAAA,EACjFgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBAAqBq9G,SAAEv8G,GAAE,uBACxCunL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,sBAAqBq9G,SAAE09K,GAAqB1yG,EAAAA,GAAAA,KAACE,GAAW,IACnE4rH,EAAW9F,gBAAiBhmH,EAAAA,GAAAA,KAAA,QAAAhrE,SAAM,OAAWgrE,EAAAA,GAAAA,KAAC7pK,GAAK,CAACs6Q,cAAc,EACd9uL,MAAO,CAAExrF,MAAO21R,EAAW31R,MAAMG,IAAKA,IAAK,GAC3Ck6Q,gBAAgB,EAChBE,oBAAqB,kBAG/E3wG,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,8BAA8B5B,IAAKA,EAAIi/G,SAAA,EACpDgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,4BAA2Bq9G,SAAEv8G,GAAE,2BAA4B,CAAEm/S,gBAC5E53H,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,4BAA2Bq9G,SAAE09K,GAAqB1yG,EAAAA,GAAAA,KAACE,GAAW,KACzEF,EAAAA,GAAAA,KAAC7pK,GAAK,CAACs6Q,cAAc,EAAO9uL,MAAOmqM,EAAW31R,MAAOq6Q,eAAgBsb,EAAW9F,0BAIxFhmH,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,+BAA+Bb,KAAM+wR,MAC5C,ICMV,IAvE2BxgS,EAAAA,EAAAA,aAAW,CAAAlB,EAWPC,KAAS,IAXD,WACT+1S,EAAU,iBACVmM,EAAgB,SAChB7jK,EAAQ,QACR3F,EAAO,UACPypK,EAAS,eACTC,EAAc,iBACdC,EAAgB,kBAChBhQ,EAAiB,aACjBiQ,EAAY,gBACZC,GACDxiT,EAC3B,MAAM42I,EAAS07J,GAAqBA,EAAkB1C,YAAc0C,EAAkB1C,WAAWrwS,OAC7F+yS,EAAkB1C,WAAW4S,GAAgC,GAAK,KACtE,OACEv4H,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,uBAAsBq9G,SAAA,EACjC+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,mBAAkBq9G,SAAA,CAC9B03B,IACCszC,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,qBAAqB82I,QAAS4pK,EAAarjM,UACxDgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,eAA+BvB,OAAQ,GAAIgsK,IAAK11B,EAAM2xJ,IAAKn9F,IAAKx0D,EAAMiyJ,aAAlDjyJ,EAAM2xJ,QAI3Ct+G,EAAAA,GAAAA,MAAA,OAAKpoL,UAAY,cAAaugT,EAAY,cAAgB,KAAMpM,EAA8B,GAAjB,iBAAsB92L,SAAA,CAChG82L,GAEE/rH,EAAAA,GAAAA,MAAAstF,GAAAA,SAAA,CAAAr4J,SAAA,EACCgrE,EAAAA,GAAAA,KAAA,QAAMroL,UAAY,IAAEwgT,EAAiB,cAAgB,IAAKnjM,UACxDgrE,EAAAA,GAAAA,KAAC7pK,GAAK,CACJs6Q,cAAY,EACZ9uL,MAAOmqM,EAAW31R,MAClBq6Q,eAAgB4nB,MAEnBD,IAAkBn4H,EAAAA,GAAAA,KAACE,GAAW,KAC/BF,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,cAEf,MAEJooL,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,oCAAmCq9G,SAAA,CACrC,OAAV03B,IACCszC,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,2BAA2B82I,QAASA,IAAO2F,OAA0Cp8I,EAA/By2I,EAAQ,qBAAiCz5B,UAC3GgrE,EAAAA,GAAAA,KAAC2e,GAAI,CAACnoM,GAAG,0BAA0BmB,UAAU,0BAA0B2P,KAAK,kBACtEnR,MAAM,OACNC,OAAO,OACPq4I,QAASA,IAAO2F,OAAwCp8I,EAA7By2I,EAAQ,wBAG/CsxC,EAAAA,GAAAA,MAAA,OACEvpL,GAAG,4BACHmB,UAAW,oDACX82I,QAASA,IAAO2F,OAA0Cp8I,EAA/By2I,EAAQ,qBAAkC14I,IAAKA,EAAIi/G,SAAA,EAC9EgrE,EAAAA,GAAAA,KAAA,QAAMroL,UAAY,IAAEy8I,EAAW,cAAgB,IAAKp/B,SAAEijM,IACrD7jK,IAAY4rC,EAAAA,GAAAA,KAACE,GAAW,gBAMpCxzC,IAEEszC,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,2BAA0Bq9G,UACzCgrE,EAAAA,GAAAA,KAAC2e,GAAI,CAACnoM,GAAG,0BAA0BmB,UAAU,0BAA0B2P,KAAK,kBACtEnR,MAAM,OACNC,OAAO,OACPq4I,QAASA,IAAO2F,OAAwCp8I,EAA7By2I,EAAQ,yBAGzC,ICjEJ8pK,GAAoBziT,IAAA,IAAC,KAAE4nM,GAAM5nM,EAAA,OAAK4nM,IACtC1d,EAAAA,GAAAA,KAACunH,GAAY,CACX5vS,UAAU,yBAAwBq9G,SAAEv8G,GAAE,gCAA8C,EAqCxF,GAnCiCoQ,IAQ1B,IAR2B,kBAChCu/R,EAAiB,YACjBoQ,EAAW,aACXC,EAAY,eACZhZ,EAAc,cACdiZ,EAAa,iBACbpR,EAAgB,oBAChBY,GACDr/R,EAQC,OANA43J,EAAAA,EAAAA,YAAU,KACJ+3I,GACJtQ,GAAqB,GAEpB,CAACsQ,KAGFz4H,EAAAA,GAAAA,MAACigH,GAAK,CAAC/7G,OAAQw0H,EAAc30H,OAAQ00H,EAAa/Y,eAAiB,GAAEA,IAAiBzqL,SAAA,EACpFgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,cAAaq9G,UAC1BgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,YAAY82I,QAASgqK,EAAazjM,SAAC,YAEpDgrE,EAAAA,GAAAA,KAAC0iH,GAAS,CAAA1tL,UACR+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,+BAA8Bq9G,SAAA,EAC3CgrE,EAAAA,GAAAA,KAACu4H,GAAiB,CAAC76G,KAAM4pG,KACzBtnH,EAAAA,GAAAA,KAACusH,GAAO,CACJjF,iBAAkBA,EAClBc,kBAAmBA,EACnBK,sBAAwBjyS,GAAOkiT,EAAcliT,YAI/C,ECfZ,GAjBsBV,IAAuC,IAAtC,UAAE6B,EAAS,SAAEq9G,EAAQ,QAAE2jM,GAAS7iT,EACrD,OAAKk/G,GAIEgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAY,GAAEA,mBAA2Bq9G,UACnD+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAY,iBAAeghT,EAAU,UAAY,UAAW3jM,SAAA,EAC/DgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,OAAMq9G,SAClBA,EAASr+F,MAAMs+F,GAAkC,SAAfA,EAAMv9G,UAE3CsoL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,QAAOq9G,SACnBA,EAASr+F,MAAMs+F,GAAkC,UAAfA,EAAMv9G,cATtC,IAYH,ECAR,IApBcV,EAAAA,EAAAA,aAAW,CAAAlB,EAAkDC,KAAS,IAA1D,MAAEmgB,EAAK,mBAAEw8Q,EAAkB,iBAAE0lB,GAAkBtiT,EACvE,OAAKogB,GAEH8pK,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,yBAAyB5B,IAAKA,EAAIi/G,UAC/CgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,cAAcnB,GAAG,wBAAuBw+G,SACpD09K,IAAuBx8Q,GACpB8pK,EAAAA,GAAAA,KAACE,GAAW,KACZF,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,gBAAeq9G,UAC9BgrE,EAAAA,GAAAA,KAAC44H,GAAY,CACXj3M,MAAOzrF,EAAMC,MACbs6Q,cAAY,EACZD,eAAgB4nB,UAVT,IAeX,ICjBGS,GAA6C,SAACC,GAAkD,IAA/BC,EAAkB3jT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,KAEjG,MAOM4jT,EAPkBjkT,OACrByH,KAAKs8S,EAAkBlnC,WAAW/rO,aAClCm8B,MAAK,CAAC1oE,EAAGiB,IAAMu+S,EAAkBlnC,WAAW/rO,YAAYvsC,GAAG44Q,OAAO+mC,aAAeH,EAAkBlnC,WAAW/rO,YAAYtrC,GAAG23Q,OAAO+mC,eAKxF5yS,KAAKmvS,IAC3C,IACFsD,EAAkBlnC,WAAW/rO,YAAY2vQ,GAC5Ch/S,GAAIg/S,EACJtnQ,QAAS4qQ,EAAkBlnC,WAAW/rO,YAAY2vQ,GAAYtnQ,QAC9DgkO,OAAQ4mC,EAAkBlnC,WAAW/rO,YAAY2vQ,GAAYtjC,OAC7D6hC,SAAUgF,GAAsBhkT,OAAOyH,KAAKu8S,GAAoBzjR,SAASkgR,GAAc0D,GAA2BJ,EAAmBC,EAAoBvD,GAAc,KACvKtlQ,SAAU4oQ,EAAkBlnC,WAAW1hO,SAAS5a,SAASkgR,GACzDj8R,MAAOu/R,EAAkBlnC,WAAW/rO,YAAY2vQ,GAAYtjC,OAAO+mC,aACnE3F,SAAU,IACLwF,EAAkBjnC,SAAS2jC,GAC9B,mBAAoBsD,EAAkBjnC,SAAS2jC,GAAY,qBAE7DlB,eAAgByE,GAChBhkT,OACGyH,KAAKu8S,GACLzjR,SAASkgR,GACR,IACGsD,EACAlnC,WACApyO,aAAazqC,OAAOyT,OAAOuwS,GAAoBhkT,OAAOyH,KAAKu8S,GAAoB54S,QAAQq1S,KACvF/lQ,MACAvwC,QAAQi6S,GAAcpkT,OAAOyH,KAAK28S,EAAUvlS,YAAY0hB,SAASkgR,KAAa,GAC9E5hS,WAAW4hS,MACXsD,EAAkBlnC,WAAW/rO,YAAY2vQ,IAE5C,IACGsD,EAAkBlnC,WAAWh+P,WAAW4hS,MACxCsD,EAAkBlnC,WAAW/rO,YAAY2vQ,IAEhD14S,MAAkD,KAA3Cg8S,EAAkBnnC,SAAS6jC,IAAiE,OAA3CsD,EAAkBnnC,SAAS6jC,QAAuBx9S,EAAY8gT,EAAkBnnC,SAAS6jC,OAI/I4D,EAAmB,CAAC,EAQ1B,OANAJ,EAAuBx7S,SAASgqB,IAC9B4xR,EAAiB5xR,EAAShxB,IAAM,IAC3BgxB,EACJ,IAGI4xR,CACT,EAiFaC,GAAwBA,CAACzlS,EAAY0lS,KAChD,GAAI1lS,EAAWg+P,WAAWpyO,aAAc,CACtC,MAAMu5Q,EAAqB,CAAC,EACtBQ,EAA+B,CAAC,EAsBtC,OApBAxkT,OACGyH,KAAKoX,EAAWg+P,WAAWpyO,cAC3BhiC,SAASg4S,IACR5hS,EACGg+P,WACApyO,aAAag2Q,GACb/lQ,MACAjyC,SAAS27S,IACRpkT,OAAOyH,KAAK28S,EAAUvlS,YACnBpW,SAASg8S,IACJhE,IAAegE,IACjBT,EAAmBS,GAAuBhE,EAC1C+D,EAA6BC,GAAuB,CAClDxiM,UAAWw+L,EACXiE,eAAgBN,EAAUvlS,WAAW4hS,GAAYplQ,MAErD,GACA,GACJ,IAED,CAAE2oQ,qBAAoBQ,+BAC/B,CACA,OAAO,IAAI,EAGPL,GAA6BA,CAACJ,EAAmBC,EAAoBvD,KACzE,GAAIzgT,OAAOyH,KAAKu8S,GAAoBzjR,SAASkgR,GAC3C,MAAO,CACLxyR,OAAQ+1R,EAAmBvD,GAC3Br0R,UAAW23R,EAAkBlnC,WAAWpyO,aAAau5Q,EAAmBvD,IAAa/lQ,MAClFvwC,QAAQi6S,GAAcpkT,OAAOyH,KAAK28S,EAAUvlS,YAAY0hB,SAASkgR,KACjEnvS,KAAK8yS,GAAcA,EAAUvlS,WAAWmlS,EAAmBvD,MAAc,GAC5EzB,SAAUmF,GAA2BJ,EAAmBC,EAAoBA,EAAmBvD,KAAgB,KAEnH,ECjKF,MAAMkE,WAAwBr/K,EAAAA,UAC5B94H,WAAAA,CAAarL,GACXukB,MAAMvkB,GAENN,KAAK+I,MAAQ,CACXo8N,aAAc,IAGhBnlO,KAAK+1I,SAAW/1I,KAAK+1I,SAAS12I,KAAKW,MACnCA,KAAK2hS,0BAA4B3hS,KAAK2hS,0BAA0BtiS,KAAKW,KACvE,CAEA8tI,iBAAAA,GACE,MAAQ8zJ,cAAgB7D,eAAe,SAAE9D,IAAY,WAAE4H,GAAe7hS,KAAKM,MAEtE25R,EAASiC,YAAmC,OAArBjC,EAASgC,SAEnCj8R,KAAK+1I,SAAS,CAAEz2I,OAAQ,CAAE4H,MAAO26R,EAAW5H,UAAYA,EAAS6H,WAAa,EAElF,CAEAH,yBAAAA,CAA2Bz6R,GACzB,MAAQ06R,cAAgB7D,eAAiB9D,UAAU,QAAE6H,EAAO,QAAEC,KAAeH,cAAc,UAAEzD,GAAW,kBAAE4lB,GAAsB/jT,KAAKM,MAE/H+hS,EAAY0hB,GAAqB5lB,EAAYA,EAAUlE,SAAW,KAExE,OAAK/yR,GAASs/E,MAAMt/E,IACXkjL,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,sBAAqBq9G,SAAEv8G,GAAE,qCAG9Ci/R,GAAWv7R,OAAOW,GAAS46R,GACtB13G,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,qBAAoBq9G,SAAEv8G,GAAE,iCAAkC,CAAE05R,gBAAiBuF,MAGlGC,GAAWx7R,OAAOW,GAAS66R,GACtB33G,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,qBAAoBq9G,SAAEv8G,GAAE,iCAAkC,CAAEm/R,gBAAiBD,MAGlGM,GAAa97R,OAAOW,GAASm7R,IAAclE,EAAUtE,yBAChDzvG,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,uBAAsBq9G,SAAEv8G,GAAE,mCAAoC,CAAE2/R,kBAAmBH,MAGrG,IACT,CAEAtsJ,QAAAA,CAAUnzI,GAA2B,IAAxBohT,EAAaxkT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,IAAAA,UAAA,GACxB,MAAM,iBAAEyiS,GAAqBjiS,KAAKM,MAE5B4G,EAAQtE,EAAEtD,OAAO4H,MACjBi+N,EAAenlO,KAAK2hS,0BAA0Bz6R,GAEpDlH,KAAK28H,SAAS,CAAEwoG,iBAGhB88D,EAAiB/6R,EAAOi+N,EAAc6+E,EACxC,CAEAv6R,MAAAA,GACE,MAAQm4Q,cAAgB7D,eAAe,SAAE9D,GAAU,GAAE3oR,EAAE,KAAEitR,GAAM,WAAEsD,GAAe7hS,KAAKM,MAGrF,IAAK25R,IAAa4H,EAAW5H,SAC3B,OAAO,KAET,MAAM6B,EAAsB97R,KAAK+I,MAAMo8N,aAAe,YAAc,GAE9Di9D,EAAe7D,EAAKnC,SACrB,GAAEmC,EAAKnC,SAASK,aACjB8B,EAAKlC,SAAWkC,EAAKlC,SAASI,WAAa,GAEzCwnB,EAAW1lB,EAAKnC,SAAY,KAAIv5R,GAAE,yBACtC,CACE85R,aAAc4B,EAAKnC,SAASvgR,KAC5BygR,aAAciC,EAAKjC,aACnBE,mBAAoB+B,EAAKlC,SAASI,gBAC5B,GAEV,OAAQtyG,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,6BAA4Bq9G,SAAA,EACjDgrE,EAAAA,GAAAA,KAACmxG,GAAY,CACXM,eAAgB5B,EAChB6B,oBAAqBA,EACrBnC,SAAUkI,EAAW5H,SACrBr5R,GAAI0Q,EACJykI,SAAU/1I,KAAK+1I,YAEjBq0C,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,iBAAgBq9G,SAAEgjL,IACjC7D,EAAKnC,WAAYhyG,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,mBAAkBq9G,SAAE6kM,IACrDjkT,KAAK+I,MAAMo8N,eAAiB/6C,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,iBAAgBq9G,SAAEp/G,KAAK+I,MAAMo8N,iBAE9E,EAGF,YCjEA,GAnCqBjlO,IAAyG,IAAxG,KAAE4B,EAAI,IAAE0qK,EAAG,YAAEo2I,EAAW,aAAEC,EAAY,eAAEhZ,EAAiB,sBAAqB,SAAE/K,GAAW,GAAO5+R,EACtH,IAAKssK,EACH,OAAO,KAGT,MAAM03I,EAAsB,oBAATpiT,EAEnB,OACEqoL,EAAAA,GAAAA,MAACigH,GAAK,CAAC/7G,OAAQw0H,EAAc30H,OAAQ00H,EAAa/Y,eAAiB,GAAEA,wBAAqCzqL,SAAA,EACxGgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,cAAaq9G,UAC1BgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,YAAY82I,QAASgqK,EAAazjM,SAAC,YAEpD+qE,EAAAA,GAAAA,MAAC2iH,GAAS,CAAA1tL,SAAA,CACP8kM,IACC95H,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,kBAAiBq9G,UAC9BgrE,EAAAA,GAAAA,KAAA,UAAQv5K,KAAM27J,EAAM,yBAClB1qK,KAAK,kBACLvB,MAAM,OACNC,OAAO,OAAM4+G,UACbgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,uBAAsBq9G,UACnCgrE,EAAAA,GAAAA,KAAA,KAAG3iC,KAAM+kB,EAAIptD,SAAEv8G,GAAE,kCAIvBqhT,IAAeplB,IACf10G,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,oBAAmBq9G,UAACgrE,EAAAA,GAAAA,KAACo+G,GAAS,CAACh8H,IAAKA,OAEnD03I,GAAcplB,IACd10G,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,2BAA0Bq9G,UAACgrE,EAAAA,GAAAA,KAAC2iB,GAAW,CAAChrM,UAAU,QAAQyqK,IAAKA,WAG5E,ECPZ,GA1B2BtsK,IAA2D,IAA1D,WAAEikT,EAAU,SAAEpuK,EAAQ,WAAEquK,EAAU,eAAEpc,GAAgB9nS,EAC9E,MAAOi8I,EAAQkoK,IAAaz5I,EAAAA,EAAAA,UAAS,KAC9BykG,EAAa04B,IAAkBn9H,EAAAA,EAAAA,UAAS,GAY/C,OAXAC,EAAAA,EAAAA,YAAU,KACRw5I,EAAUF,GACVpc,EAAe,EAAE,GACjB,CAACoc,KAEHt5I,EAAAA,EAAAA,YAAU,KACJ90B,GACFA,EAASs5H,EACX,GACC,CAACA,EAAat5H,KAEVq0C,EAAAA,GAAAA,KAAAqtF,GAAAA,SAAA,CAAAr4J,UACE,OAAN+8B,QAAM,IAANA,OAAM,EAANA,EAAQ18I,QAAS,IAChB2qL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,yCAAwCq9G,UACrDgrE,EAAAA,GAAAA,KAACusH,GAAO,CACJjF,iBAAkB0S,EAClBtR,0BAA2BqR,EAC3Bnc,eAAgBA,OAGvB,EClBCsc,GAAsBpkT,IAAA,IAAAqkT,EAAA,IAAC,MAAEzqC,EAAK,OAAE39H,EAAM,eAAE6rJ,EAAc,WAAEoc,GAAYlkT,EAAA,OAAK45Q,GAA0B,IAAjBA,EAAM0qC,SAA2B,QAAXD,EAAAzqC,EAAMk3B,aAAK,IAAAuT,OAAA,EAAXA,EAAa9kT,QAAS,GAAI2qL,EAAAA,GAAAA,KAAA,UAClIv5K,KAAMipQ,EAAMk3B,MAAM,GAAGvI,IAAM,YAC3B3mS,KAAK,kBACLvB,MAAM,OACNC,OAAO,UAGT4pL,EAAAA,GAAAA,KAACq6H,GAAkB,CAACL,WAAYA,EAAYD,WAAYhoK,EAAQ6rJ,eAAgBA,GAAiB,EAE/F0c,GACJzxS,IAA+E,IAA9E,MAAE0xS,EAAK,eAAE3c,EAAc,MAAEluB,EAAK,mBAAE8qC,EAAkB,OAAEzoK,EAAM,WAAEioK,GAAYnxS,EAEvE,OAAI0xS,GACKv6H,EAAAA,GAAAA,KAAAqtF,GAAAA,SAAA,CAAAr4J,SACJ4oL,GAAiB59G,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,0BAAyBq9G,UAACgrE,EAAAA,GAAAA,KAACE,GAAW,OACrEF,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,6CAA6Cy8I,SAAU4lK,EACjEvrK,QAASA,IAAM+rK,EAAmB9qC,EAAMk3B,MAAM,IAAI5xL,SACpDv8G,GAAE,qCAIHunL,EAAAA,GAAAA,KAAAqtF,GAAAA,SAAA,CAAAr4J,UACNgrE,EAAAA,GAAAA,KAACq6H,GAAkB,CAACzc,eAAgBA,EAAgBmc,WAAYhoK,EAAQioK,WAAYA,KACnF,EA6LP,GA3LwBpkS,IAajB,IAbkB,WACvBmkS,EAAU,YACVvB,EAAW,aACXC,EAAY,iBACZgC,EAAgB,iBAChBxC,EAAgB,aAChByC,EAAY,UACZC,EAAS,YACT3X,EAAW,UACX+D,EAAS,UACT6T,EAAS,WACThnS,EAAU,oBACV89P,GACD97P,EAEC,MAAO85P,EAAOmrC,IAAYr6I,EAAAA,EAAAA,UAAS,OAC5Bs6I,EAAUC,IAAev6I,EAAAA,EAAAA,WAAS,IAClCw6I,EAAWC,IAAgBz6I,EAAAA,EAAAA,WAAS,IACpCzuB,EAAQkoK,IAAaz5I,EAAAA,EAAAA,UAAS,KAC9Bo9H,EAAgBsd,IAAqB16I,EAAAA,EAAAA,WAAS,IAC9Cw5I,EAAYmB,IAAiB36I,EAAAA,EAAAA,WAAS,GACvC+5I,EAAQK,GAAaA,EAAUtmO,cAAc6G,SAAS,OACtDigO,GAAeh7G,EAAAA,EAAAA,UACfi7G,GAAqBj7G,EAAAA,EAAAA,WA6B3B3/B,EAAAA,EAAAA,YAAU,KACR,WACE,IACE,GAAI+3I,GAAezR,EAAW,CAAC,IAADuU,EAC5BJ,GAAkB,GAClBG,EAAmBj8P,SAAWyT,aAAawoP,EAAmBj8P,eACxDh+C,GAAAA,eAAeiX,IAAI9I,OAAOc,iBAAiB02R,EAAU7/R,GAAIsqQ,GAAsC59P,UAC/FxS,GAAAA,eAAeiX,IAAI9I,OAAOK,gBAAgBm3R,EAAU7/R,GAAI,IACzD6/R,EACHhC,WAAYnxR,GAAc7e,OAAOyH,KAAKoX,GAAYve,OAASm8Q,GACzD59P,GAEE,OAEN,IAAI87P,QAAc32Q,OAAOqI,eAAeiX,IAAIhR,SAAS0M,YAAYgzR,EAAU7/R,IAC3EwoQ,QA1Cc6rC,EA0Ca7rC,EA1CI,IAAIz2Q,SAAQ,CAACm1B,EAASyqD,KAC3D,MAAM2iO,EAAYl5S,UAChB,GAA4B,IAAxBm5S,EAAa1sC,OAIjB,GAA4B,IAAxB0sC,EAAa1sC,OAcjB3gP,EAAQqtR,OAdR,CACE,IACEA,QAAqB1iT,OAAOqI,eAAeiX,IAAIhR,SAAS0M,YAAYgzR,EAAU7/R,GAChF,CAAE,MAAO1O,GAAI,IAADs3Q,EACV,GAAiC,wBAApB,QAATA,EAAAt3Q,EAAEu3Q,eAAO,IAAAD,OAAA,EAATA,EAAWx7L,eAEb,YADAuE,EAAOrgF,EAGX,CACA6iT,EAAmBj8P,QAAU72C,YAAW,KACtCizS,EAAUC,EAAa,GACtB,IAEL,MAhBI5iO,EAAO,CAACk3L,QAAS,IAiBA,EAGvByrC,EAAUD,EAAa,KAoBjB,MAAMG,EAAYhsC,EAAMk3B,MAAMvgS,KAAKpM,IAAC,CAAQokS,IAAKpkS,EAAEokS,IAAIr/R,QAAQ,oBAAqB,UACpF0wQ,EAAMk3B,MAAQ,GACd,IAAI+U,GAAW,EACf,IAAK,MAAMnkM,KAAQkkM,EAAW,CAC5B,MAAME,QAAiBx6S,GAAAA,eAAeiX,IAAIhR,SAAS2M,cAAc+yR,EAAU7/R,GAAIswG,EAAK6mL,KAChFud,GACFlsC,EAAMk3B,MAAQ,IAAIl3B,EAAMk3B,MAAO,CAC7BvI,IAAK3jL,IAAImhM,gBAAgBD,GACzBjd,YAAalmS,GAAE,oBAAqB,CAAEuT,WAAY0jQ,EAAMk3B,MAAMvxS,OAAS,IACvEqC,KAAuB,IAAjBg4Q,EAAM0qC,OAAe,MAAQ,QACnC0B,SAAUtkM,EAAK6mL,MAEI,IAAjB3uB,EAAM0qC,QACRH,EAAUvqC,EAAMk3B,QAGlB+U,GAAW,CAEf,CACAd,EAASnrC,GACTwrC,GAAkB,GAClBC,EAAcQ,GACM,QAApBL,EAAAF,EAAah8P,eAAO,IAAAk8P,GAApBA,EAAsB1lG,eAAe,CAACmmG,SAAU,UAClD,CACF,CAAE,MACAb,GAAkB,GAClBC,GAAc,EAChB,CAtEkBI,KAuEnB,EA3CD,EA2CI,GAEH,CAACvY,EAAawV,KAEjB/3I,EAAAA,EAAAA,YAAU,KACc,KAAb,OAALivG,QAAK,IAALA,OAAK,EAALA,EAAOX,SACTkrC,EAAUF,EACZ,GACC,CAACA,EAAYrqC,KAEhBjvG,EAAAA,EAAAA,YAAU,KACRl4J,YAAW,KAAO,IAADyzS,EACK,QAApBA,EAAAZ,EAAah8P,eAAO,IAAA48P,GAApBA,EAAsBpmG,eAAe,CAACmmG,SAAU,UAAU,GACzD,GAAG,GAEL,CAACX,EAAah8P,UAWjB,IAAKo5P,EACH,OAAO,EAGT,MAWMyD,EAAqBzjT,IACzB6iT,EAAmBj8P,SAAWyT,aAAawoP,EAAmBj8P,SAC9Dq5P,EAAajgT,EAAE,EAGjB,OACEunL,EAAAA,GAAAA,MAACigH,GAAK,CAAC/7G,OAAQg4H,EAAmBn4H,OAAQ00H,EAAa/Y,eAAe,yBAAwBzqL,SAAA,EAC5FgrE,EAAAA,GAAAA,KAAA,OAAKroL,WAAgC,KAAb,OAAL+3Q,QAAK,IAALA,OAAK,EAALA,EAAO0qC,QAAe,cAAgB,IAAxC,eAAyDplM,UACxEgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,YAAY82I,QAASwtK,EAAkBjnM,SAAC,YAEzD+qE,EAAAA,GAAAA,MAAC2iH,GAAS,CAAA1tL,SAAA,EACRgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAY,wBAAuBq9G,SACrCv8G,GAAE,gCAELunL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,mBAAkBq9G,UAC/BgrE,EAAAA,GAAAA,KAACk6H,GAAmB,CAACF,WAAYA,EAAYtqC,MAAOA,EAAO39H,OAAQA,EAAQ6rJ,eAAgBA,OAE7F59G,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,0BAAyBq9G,UACtCgrE,EAAAA,GAAAA,KAACs6H,GAAkB,CAAOC,QAAO3c,iBAAgBluB,QAAO8qC,mBA7BpC0B,IAC1B,GAAIlC,EACF,OAEF,MAAMmC,EAAevhT,SAASgxH,cAAc,KAC5CuwL,EAAa9+J,KAAO6+J,EAAe7d,IACnC8d,EAAa35S,SAAW05S,EAAeJ,SACvCK,EAAat6K,YAAc,gBAC3Bs6K,EAAaj2H,OAAO,EAqB8Dn0C,SAAQioK,kBAGtFj6H,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,iBAAgBq9G,SAAA,EAC7BgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,yBAAwBq9G,SACpCv8G,GAAE,gCAELunL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,oBAAmBq9G,UAChC+qE,EAAAA,GAAAA,MAAA,SAAA/qE,SAAA,EACEgrE,EAAAA,GAAAA,KAAA,SAAOtoL,KAAK,WAAWi0I,SAAUA,KAAQovK,GAAY1gQ,IAASA,GAAK,KACnE2lI,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,iBAAgBq9G,SAAE0lM,GAAgBjiT,GAAE,mCACpDunL,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,WAAUq9G,SAAC,WAI7BgmM,IAAah7H,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,0BAAyBq9G,UACnDgrE,EAAAA,GAAAA,KAAA,QAAAhrE,SAAO2lM,GAAaliT,GAAE,kCAG1BunL,EAAAA,GAAAA,KAAA,OACEroL,UAAU,2CACV82I,QA/DW2tK,KACftB,GACFG,GAAa,GACbR,KAEAQ,GAAa,EACf,EA0DQllT,IAAKqlT,EAAapmM,SAEjBijM,YAID,EChIZ,GAlFwBniT,IAA4G,IAA3G,KAAE4B,EAAI,YAAE8gT,EAAW,aAAEC,EAAY,IAAEr2I,EAAG,iBAAEq4I,EAAgB,iBAAExC,EAAgB,aAAEyC,EAAY,UAAEC,GAAW7kT,EAC5H,MAAM4+R,EAAW95R,SAAS+H,KAAKowH,YAAcj8G,SAASkpQ,GAAMpV,GAAG5rQ,QAAQ,KAAM,KAEvE86S,EAAsB,oBAATpiT,EACb2kT,EAAU3kT,EAAKmvC,WAAW,WACzBi0Q,EAAUC,IAAev6I,EAAAA,EAAAA,WAAS,IAClCw6I,EAAWC,IAAgBz6I,EAAAA,EAAAA,WAAS,GAW3C,OAAK4B,GAKH2d,EAAAA,GAAAA,MAACigH,GAAK,CAAC/7G,OAAQw0H,EAAc30H,OAAQ00H,EAAa/Y,eAAe,iBAAgBzqL,SAAA,EAC/EgrE,EAAAA,GAAAA,KAAA,OAAKroL,WAAcmiT,EAAa,cAAgB,IAA/B,eAAgD9kM,UAC/DgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,YAAY82I,QAASgqK,EAAazjM,SAAC,YAEpD+qE,EAAAA,GAAAA,MAAC2iH,GAAS,CAAA1tL,SAAA,EACRgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAY,wBAAuBq9G,SACrCv8G,GAAE,+BAEJqhT,IAAeplB,IACd10G,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,oBAAmBq9G,UAChCgrE,EAAAA,GAAAA,KAAA,UAAQv5K,KAAM27J,EAAM,yBAClB1qK,KAAK,kBACLvB,MAAM,OACNC,OAAO,WAKZimT,IACE3nB,GAEG10G,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,gCAA+Bq9G,UAACgrE,EAAAA,GAAAA,KAAA,OAAK5d,IAAKA,EAAK8+B,IAAI,wBADlElhB,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,yBAAwBq9G,UAACgrE,EAAAA,GAAAA,KAACo+G,GAAS,CAACh8H,IAAKA,SAI1Di6I,IAAYvC,GAAgBA,GAAcplB,KAC5C10G,EAAAA,GAAAA,KAAA,OAAKroL,UAAY,sBAAoB+8R,EAAW,SAAW,IAAK1/K,UAE9DgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,uBAAsBq9G,UACnCgrE,EAAAA,GAAAA,KAAA,KAAGx9K,UAAQ,EAAC66I,KAAM+kB,EAAIptD,SAAEv8G,GAAE,gCAIhCsnL,EAAAA,GAAAA,MAAA,OAAKpoL,UAAY,mBAAiB+8R,EAAW,SAAW,IAAK1/K,SAAA,EAC3DgrE,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,yBAAwBq9G,SACpCv8G,GAAE,gCAELunL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,oBAAmBq9G,UAChC+qE,EAAAA,GAAAA,MAAA,SAAA/qE,SAAA,EACEgrE,EAAAA,GAAAA,KAAA,SAAOtoL,KAAK,WAAWi0I,SAAUA,KAAQovK,GAAY1gQ,IAASA,GAAK,KACnE2lI,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,iBAAgBq9G,SAAE0lM,GAAgBjiT,GAAE,mCACpDunL,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,WAAUq9G,SAAC,WAI7BgmM,IAAah7H,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,0BAAyBq9G,UACnDgrE,EAAAA,GAAAA,KAAA,QAAAhrE,SAAO2lM,GAAaliT,GAAE,kCAG1BunL,EAAAA,GAAAA,KAAA,OACEroL,UAAU,2CACV82I,QAhEW2tK,KACftB,GACFG,GAAa,GACbR,KAEAQ,GAAa,EACf,EA0D8BjmM,SAErBijM,aAxDF,IA4DE,ECnBb,GA7D6BniT,IAWtB,IAADwmT,EAAA,IAXwB,QAC5BxrC,EAAO,WACPl9P,EAAU,iBACV6mS,EAAgB,UAChB1T,EAAS,kBACTqB,EAAiB,UACjBmU,EAAS,aACT9D,EAAY,mBACZ+D,EAAkB,IAClBp6I,EAAG,oBACHsvG,GACD57Q,EACC,OAAOg7Q,EAAQzlP,OAASulP,IAAuB5wF,EAAAA,GAAAA,KAACy8H,GAAsB,CACpE7oS,WAAYA,EACZgnS,UAAkB,OAAP9pC,QAAO,IAAPA,GAAc,QAAPwrC,EAAPxrC,EAAS82B,aAAK,IAAA0U,OAAP,EAAPA,EAAgBxU,SAC3B2S,iBAAkBA,IAAMA,GAAiB,GACzC1T,UAAWA,EACXgT,WAAY3R,EAAkB1C,WAC9B8S,YAAa+D,EACb9D,aAAcA,EACdR,iBAAkBuE,EAClB9B,aACE5pC,EAAQ6iB,eACR7iB,EAAQ6iB,cAAciU,OACtB92B,EAAQ6iB,cAAciU,MAAM8U,kBACxB5rC,EAAQ6iB,cAAciU,MAAM8U,kBAC5B,KAEN/B,UACE7pC,EAAQ6iB,eACR7iB,EAAQ6iB,cAAciU,OACtB92B,EAAQ6iB,cAAciU,MAAM+U,+BACxB7rC,EAAQ6iB,cAAciU,MAAM+U,+BAC5B,QAEH38H,EAAAA,GAAAA,KAAC48H,GAAe,CACnBpE,YAAa+D,EACbn6I,IAAKA,EACL1qK,KAAMo5Q,EAAQ82B,OAAS92B,EAAQ82B,MAAME,SAAWh3B,EAAQ82B,MAAME,SAAW,GACzE2Q,aAAcA,EACdgC,iBAAkBA,IAAMA,IACxBxC,iBAAkBuE,EAClB9B,aACE5pC,EAAQ6iB,eACR7iB,EAAQ6iB,cAAciU,OACtB92B,EAAQ6iB,cAAciU,MAAM8U,kBACxB5rC,EAAQ6iB,cAAciU,MAAM8U,kBAC5B,KAEN/B,UACE7pC,EAAQ6iB,eACR7iB,EAAQ6iB,cAAciU,OACtB92B,EAAQ6iB,cAAciU,MAAM+U,+BACxB7rC,EAAQ6iB,cAAciU,MAAM+U,+BAC5B,KAENjrC,oBAAqBA,GACrB,4FCzDJ,MAsRA,GAtRmBmrC,IACjB,MAAO9zR,EAAQ+zR,IAAat8I,EAAAA,EAAAA,UAAS,CAAC,IAC/Bu8I,EAAaC,IAAkBx8I,EAAAA,EAAAA,WAAS,IACxCy8I,EAAoBC,IAAyB18I,EAAAA,EAAAA,WAAS,IACtD28I,EAAqBC,IAA0B58I,EAAAA,EAAAA,WAAS,IACxD68I,EAAmBC,IAAwB98I,EAAAA,EAAAA,WAAS,IAE3DC,EAAAA,EAAAA,YAAU,KACJ1rK,OAAOyH,KAAKqgT,GAAyBxnT,SAAW8nT,IAClDL,EACE/nT,OAAOyH,KAAKqgT,EAAwBjrC,WAAW/rO,aAC5CxjC,QAAO,CAACw5J,EAAK25I,KAAU,IACnB35I,EACH,CAAC25I,GAAa,CACZzsR,OAAQ,GACR20K,MAAM,MAEN,CAAC,IAET0/G,GAAuB,GACzB,GACC,CAACP,EAAyBM,KAE7B18I,EAAAA,EAAAA,YAAU,KACRu8I,EAAeO,KACfL,EAAsBM,IAAuC,GAE5D,CAACz0R,IAEJ,MAAMw0R,EAAgCA,IAAMxoT,OAAOyT,OAAOugB,GACvD9pB,MAAMuoB,MAAgBA,GAAYA,EAASuB,QAAUvB,EAASuB,OAAO1zB,UAElEmoT,EAAuCA,IAAMzoT,OAAOyT,OAAOugB,GAC9D9pB,MAAMuoB,GAAaA,EAASuB,QAAUvB,EAASuB,OAAO1zB,QAAUmyB,EAASk2K,OAgGtE+/G,EAAgBrrC,IACpB,MAAMnqO,EAAM,IAAI1tB,KAAJ,CAAQ,CAAEuP,WAAW,EAAM0X,QAAQ,EAAO/L,aAAa,IAC7DioR,EPrCwBC,EAAClzR,EAAQknP,KACzC,GAAIlnP,EAAO+U,aAAc,CACvB,MAAMo+Q,EAAU7oT,OAAOmF,QAAQuwB,EAAO+U,cAAcn9B,QAAO,CAAChK,EAACvC,KAAkB,IAAfP,EAAKq3L,GAAI92L,EASvE,MAAO,IAAKuC,KARIu0L,EAAIn9I,MAAMppC,KAAIwC,IAAqB,IAApB,WAAE+K,GAAY/K,EAC3C,MAAM6zN,EAAa,GAAEnnO,KAAOqe,EAAWre,GAAK66C,KAAK1wC,KAAK,OAChDm+S,EAAW,IAAKjqS,GAGtB,cAFOiqS,EAAStoT,GAET,CAAEmnO,YAAWmhF,WAAU,IAC7Bx7S,QAAO,CAACw5J,EAAKt8H,KAAI,IAAWs8H,EAAK,CAACt8H,EAAKm9L,WAAYn9L,EAAKs+Q,YAAa,CAAC,GAE9C,GAC1B,CAAC,GACEH,EAAiBvlQ,KAAS1tB,GAE1B5M,EAAeigS,GACZ/oT,OAAOyH,KAAKshT,GAAYz3S,KAAI9Q,GAC7BqoT,EAAS,GAAEroT,KAAOo8Q,EAASp8Q,MACtB,CAAC,CAAE,CAACA,GAAMuoT,EAAWvoT,OAAWsoB,EAAY+/R,EAAS,GAAEroT,KAAOo8Q,EAASp8Q,QAEvE,CAAE,CAACA,GAAMuoT,EAAWvoT,MAE5BwoT,OAGLL,EAAe9pS,WAAaiK,EAAY4M,EAAO7W,YAAYvR,QAAO,CAAChK,EAAGg/B,KAAI,IAAWh/B,KAAMg/B,KAAS,CAAC,GAErG,MAAM2mR,EAAWjpT,OAAOyH,KAAKkhT,EAAe9pS,YAAYvR,QAAO,CAAChK,EAAGxB,KAAC,IAAWwB,EAAG,CAACxB,GAAI,KAAM,CAAC,GAI9F,OAHA6mT,EAAextQ,SAAWwtQ,EAAextQ,SAAShxC,QAAOrI,GAAKmnT,EAASnnT,KACvE6mT,EAAel+Q,aAAe,CAAC,EAExBk+Q,CACT,CACE,OAAOjzR,CACT,EOGyBkzR,CAAmBvrC,EAAiBR,WAAYQ,EAAiBT,UPnD9CA,MOqD1C,OADA1pO,EAAI1a,SAASmwR,GPpD6B/rC,EOoDiBS,EAAiBT,SPpDrB58Q,OACxDyH,KAAKm1Q,GACLtrQ,KAAKmvS,IAAU,CAEZ,CAACA,GAAsC,KAAzB7jC,EAAS6jC,IAA+C,OAAzB7jC,EAAS6jC,QAClDx9S,EACA25Q,EAAS6jC,OAEhBnzS,QAAO,CAACw5J,EAAK/+J,KAAK,IAEZ++J,EACH,CAAC9mK,OAAOmF,QAAQ4C,GAAO,GAAG,GAAG1B,WAAW4D,QAAQ,IAAK,KAAMjK,OAAOmF,QAAQ4C,GAAO,GAAG,MACrF,CAAC,KOyCKmrC,EAAIlf,MAAM,EAIbk1R,EAAgC7rC,IACpC,MAAM8rC,EAAqBA,CAACC,EAAU3I,IACX,aAArB2I,EAAS50R,QACJ40R,EAAS5zR,OAAOuf,kBAAoB0rQ,EAEtC2I,EAASj0R,aAAatmB,UAAU,KAAO4xS,EAE1Cp0Q,EAAYq8Q,EAAarrC,GAE/B,OAAIhxO,EACKrsC,OAAOyH,KAAK41Q,EAAiBR,WAAW/rO,aAC5CxjC,QAAO,CAACw5J,EAAK25I,KAAU,IAEjB35I,EACH,CAAC25I,GAAa,IACTp0Q,EACAliC,QAAQi/S,GAAcD,EAAmBC,EAAU3I,KACnDnvS,KAAK+3S,IACJ,GACEhsC,EAAiBP,SAAS2jC,GAAY,qBACtCzgT,OAAOyH,KAAK41Q,EAAiBP,SAAS2jC,GAAY,qBAAqBngT,QAGrE+8Q,EAAiBP,SAAS2jC,GAAY,oBAAoB4I,EAAS70R,UACnE20R,EAAmBE,EAAU5I,GAE7B,OAAOpjC,EACJP,SAAS2jC,GAAY,oBAAoB4I,EAAS70R,QAIzC,IAEjBrqB,QAAQ8C,QAAoBhK,IAAVgK,QAErB,CAAC,GAEJjN,OAAOyH,KAAKusB,GAAQ1mB,QAAO,CAACw5J,EAAK25I,KAAU,IAC7C35I,EACH,CAAC25I,GAAa,MACZ,CAAC,EAAE,EAGH6I,EAAiCA,CAACjsC,EAAkBksC,EAAYjB,KACpE,MAAMkB,EAAYlB,EAAoBjrC,EAAiBrpP,OAASu1R,EAChE,OAAIlsC,EAAiBrpP,OACZh0B,OAAOyH,KAAK+hT,GAAWl8S,QAAO,CAACw5J,EAAK25I,IACzC8I,EAAW9I,GAAc,IACpB35I,EACH,CAAC25I,IAAa1mO,EAAAA,GAAAA,OAAMsjM,EAAiBrpP,OAAOysR,GAAa8I,EAAW9I,KAClE,IACC35I,EACH,CAAC25I,GAAapjC,EAAiBrpP,OAAOysR,KACrC,CAAC,GAEC8I,CACT,EAGIE,EAAkBA,CAACC,EAAWrsC,EAAkByjC,IAC7C9gT,OAAOyH,KAAK41Q,EAAiBR,WAAW/rO,aAAaxjC,QAAO,CAACw5J,EAAK25I,IAAeiJ,EAAUjJ,GAAc,IAC3G35I,EACH,CAAC25I,GAAa,CACZzsR,OAAQ01R,EAAUjJ,GAClB93G,OAAMm4G,EAAcL,IAAcK,EAAcL,GAAY93G,QACxD00E,EAAiBP,SAAS2jC,GAAY,cAActrD,SAAW,CAAEA,QAASkoB,EAAiBP,SAAS2jC,GAAY,cAActrD,WAElI,IACCruF,EACH,CAAC25I,GAAa,CACZzsR,OAAQ,GACR20K,MAAM,KAEP,CAAC,GAQAghH,EAA0CA,CAACC,EAAgBL,IACxDvpT,OAAOyH,KAAKusB,GAAQ1mB,QAAO,CAACw5J,EAAK25I,IACrCmJ,EAAenJ,IAAemJ,EAAenJ,GAAYngT,OACtD,IACGwmK,EACH,CAAC25I,IAAa1mO,EAAAA,GAAAA,OAAM6vO,EAAenJ,GAAa8I,EAAW9I,KAE3D,IACG35I,EACH,CAAC25I,GAAa8I,EAAW9I,IAAe,KACvC,CAAC,GAmCV,MAAQ,CACNzsR,SACAg0R,cACAE,qBACA2B,2BAhOiC,SAAC9F,GAA0E,IAAvDjD,EAAazgT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,KAAMypT,EAAsBzpT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,GACpG,MAAM0pT,GATwDzsC,EASYymC,EATU/jT,OAAOyH,KAAK61Q,EAAkBR,UACjH5yQ,MAAKu2S,GACJnjC,EAAkBR,SAAS2jC,GAAY,gBACjCnjC,EAAkBT,WAAW/rO,YAAY2vQ,GAAYtjC,OAAO6sC,aAC5D1sC,EAAkBtpP,QAClBh0B,OAAOyH,KAAK61Q,EAAkBtpP,QAAQuM,SAASkgR,MALOnjC,MAU9DirC,EAAqBwB,GACrB,MAAME,EAAoBf,EAA6BnF,GACjDvD,EAAgBiJ,EAAgBH,EAA+BvF,EAAmBgG,EAAa,CAAC,EAAIE,EAAmBF,GAAahG,EAAmBjD,GAAiB9sR,GAoB9K,OAnBAh0B,OAAOyH,KAAK+4S,GAAe/3S,SAASg4S,IAelCD,EAAcC,GAAY93G,KAbpBohH,KACEhG,EAAkB/vR,SAAUh0B,OAAOyH,KAAKs8S,EAAkB/vR,QAAQuM,SAASkgR,OACxEzsR,EAAOysR,IAAczsR,EAAOysR,GAAY93G,OAE1CmhH,EAAuBvpR,SAASkgR,KAC/BK,IACKA,EAAcL,IAAcK,EAAcL,GAAY93G,OAExD30K,EAAOysR,IAAczsR,EAAOysR,GAAY93G,KAKT,IAG9Co/G,EAAUvH,GACHA,CACT,EAwME0J,0BAtMgC,SAACC,EAAmBP,EAAgBvsC,GAAmD,IAAjC+sC,EAAoB/pT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,KAC7G,GAA6B,qBAAzB+pT,EACF,OAEF,MAAMb,EAAaL,EAA6B7rC,GAC1C4sC,EAAoBL,EACtBD,EAAwCC,EAAgBL,GACxDA,EACEc,EAAeZ,EAAgBQ,EAAmB5sC,EAAkBrpP,GAwB1E,GAvBI1uB,MAAMK,QAAQwkT,IAChBA,EAAkB1hT,SAASg4S,IACzB4J,EAAa5J,GAAY93G,OAAS0hH,EAAa5J,GAAYzsR,OAAO1zB,MAAM,IAE1EN,OAAOyH,KAAK41Q,EAAiBR,WAAW/rO,aAAaroC,SAASg4S,IACvD0J,EAAkB5pR,SAASkgR,KAC9B4J,EAAa5J,GAAY93G,OAAQ0hH,EAAa5J,GAAYzsR,OAAO1zB,QAAiB+pT,EAAa5J,GAAY93G,KAC7G,MAIA0hH,EAAaF,GAAmBxhH,OADL,qBAAzByhH,IAA+CR,MAGRS,EAAaF,GAAmBn2R,OAAO1zB,OAElFN,OAAOyH,KAAK41Q,EAAiBR,WAAW/rO,aAAaroC,SAASg4S,IACxDA,IAAe0J,IACjBE,EAAa5J,GAAY93G,OAAQ0hH,EAAa5J,GAAYzsR,OAAO1zB,QAAiB+pT,EAAa5J,GAAY93G,KAC7G,KAKA27G,GAAsBjnC,IAAqBA,EAAiBR,WAAWpyO,cAAgBzqC,OAAOyH,KAAK41Q,EAAiBR,WAAWpyO,cAAclK,SAAS4pR,GAAoB,CAC5K,MAAM,6BAAE3F,GAAiCF,GAAsBjnC,GACvCr9Q,OAAOyH,KAAK+8S,GACjCr6S,QAAO3J,GAAOgkT,EAA6BhkT,GAAKyhH,YAAckoM,GAAqB3F,EAA6BhkT,GAAKkkT,eAAe,KAAO0F,IAC9H3hT,SAAS6uG,IACvB+yM,EAAa/yM,GAAOtjF,OAAS,GAC7Bq2R,EAAa/yM,GAAOqxF,MAAO,CAAK,GAEpC,CAGA,OADAo/G,EAAUsC,GACHA,CACT,EA2JEC,yBAzJgCjtC,IAChC,GAAIA,GAAoBr9Q,OAAOyH,KAAK41Q,GAAkB/8Q,OAAQ,CAC5D,MAAMipT,EAAaL,EAA6B7rC,GAC1CgtC,EAAeZ,EAAgBF,EAAYlsC,EAAkBrpP,GAKnE,OAJAh0B,OAAOyH,KAAK4iT,GAAc5hT,SAASg4S,IACjC4J,EAAa5J,GAAY93G,MAAO,CAAI,IAEtCo/G,EAAUsC,GACHA,CACT,CACA,OAAOr2R,CAAM,EAgJbu2R,WAvCiB,SAACT,GAClB,MAAMU,GADiDnqT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,OACrB2zB,EAC/By2R,EAA4C,IAAlCX,EAAuBxpT,OACjCkgT,EAAgBxgT,OAAOyH,KAAK+iT,GAAal9S,QAAO,CAACw5J,EAAK25I,KAAU,IACjE35I,EACH,CAAC25I,GAAa,CACZzsR,OAAQw2R,EAAY/J,GAAYzsR,OAChC20K,OAAM8hH,GAAiBX,EAAuBvpR,SAASkgR,OAEvD,CAAC,GACLsH,EAAUvH,EACZ,EA6BEkK,WAnBkBC,IAClB,MAAMnK,EAAgBxgT,OAAOyH,KAAKusB,GAAQ1mB,QAAO,CAACw5J,EAAK25I,KAAU,IAC5D35I,EACH,CAAC25I,GAAa,CACZzsR,OAAQA,EAAOysR,GAAYzsR,OAC3B20K,MAAOgiH,EAAuBpqR,SAASkgR,OAEvC,CAAC,GACLsH,EAAUvH,EAAc,EAYxBoK,cA5BoB,WACpB,MAAMP,GAD4BhqT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,OACC2zB,EACtCh0B,OAAOyH,KAAK4iT,GAAc5hT,SAASg4S,IACjC4J,EAAa5J,GAAY93G,OAAS0hH,EAAa5J,GAAYzsR,OAAO1zB,MAAM,IAE1EynT,EAAUsC,EACZ,EAuBE/B,oBACAuC,+BA7DqCA,CAAChsS,EAAYmV,IACjBh0B,OAAOyT,OAAOoL,GAAY1U,QAAQsoB,GAAaA,EAAS0qP,OAAO6sC,cAChE9/S,MAAMuoB,GAAauB,EAAOvB,EAAShxB,IAAIuyB,OAAO1zB,SA4D/E,EC/OH,GAvC4BwqT,KAC1B,MAAOp+I,EAAUq+I,IAAet/I,EAAAA,EAAAA,UAAS,KAClCu/I,EAASC,IAAcx/I,EAAAA,EAAAA,WAAS,GACjCy/I,GAAc7/G,EAAAA,EAAAA,QAAO,MACrB8/G,GAAe9/G,EAAAA,EAAAA,QAAO,MA6B5B,OArBA3/B,EAAAA,EAAAA,YAAU,KAgBJgB,EAASpsK,OAAS,GAfEiN,WACtB09S,GAAW,GACX,IACE,MAAMG,QAAyB1+I,EAAS,GACpCA,EAAS,KAAOw+I,EAAY7gQ,eACxB8gQ,EAAa9gQ,QAAQ+gQ,GAE7BL,GAAazlQ,GAASA,EAAKh/C,MAAM,IACnC,CAAE,MAAO7C,GACP6G,QAAQ2C,MAAMxJ,SACR0nT,EAAa9gQ,QAAQ,KAAM5mD,EACnC,CACAwnT,GAAW,EAAM,EAIjBI,EACF,GACC,CAAC3+I,IAEG,CACL4+I,WA5BiBA,CAACviM,EAASj2C,KAC3Bi4O,GAAazlQ,GAAS,IAAIA,EAAMyjE,KAChCmiM,EAAY7gQ,QAAU0+D,EACtBoiM,EAAa9gQ,QAAUyoB,CAAQ,EA0B/Bk4O,UACD,ECpCUO,GAAYA,CAACC,EAAcC,KACtC,MAAOC,EAAiBC,IAAsBlgJ,EAAAA,EAAAA,WAAS,IAChDmgJ,EAAiBC,IAAsBpgJ,EAAAA,EAAAA,WAAS,IAChDqgJ,EAAoBC,IAAyBtgJ,EAAAA,EAAAA,WAAS,GAEvDugJ,GAAc3gH,EAAAA,EAAAA,QAAO,MACrB4gH,GAAiB5gH,EAAAA,EAAAA,QAAO,OAE9B3/B,EAAAA,EAAAA,YAAU,KACRigJ,GAAoBC,IAAoBE,EAAmB,GAC1D,CAACF,EAAiBE,IAErB,MAAMI,EAAmB/mT,IACvBA,EAAQsD,SAAS04D,IACXqqP,GAAgBrqP,EAAMhhE,SAAWqrT,EAAanhQ,SAChDwhQ,EAAmB1qP,EAAMgpN,gBAEvBshC,GAAmBtqP,EAAMhhE,SAAWsrT,EAAgBphQ,SACtD0hQ,EAAsB5qP,EAAMgpN,eAC9B,GACA,EA4BJ,MAAO,CACLuhC,kBACAS,cA3BoBA,KAChBX,IACFQ,EAAY3hQ,QAAU,IAAI+/N,qBAAqB8hC,EAAiB,CAC9Dp1R,KAAM,KACNs1R,WAAY,MACZhyM,UAAW,KAEb4xM,EAAY3hQ,QAAQ20J,QAAQwsG,EAAanhQ,UAGvCohQ,IACFQ,EAAe5hQ,QAAU,IAAI+/N,qBAAqB8hC,EAAiB,CACjEp1R,KAAM,KACNs1R,WAAY,MACZhyM,UAAW,OAEb6xM,EAAe5hQ,QAAQ20J,QAAQysG,EAAgBphQ,SACjD,EAWAgiQ,iBARuBA,KACvBL,EAAY3hQ,QAAQggK,aACpB4hG,EAAe5hQ,QAAQggK,YAAY,EAOpC,ECTGn1D,GACK,UADLA,GAEc,oBAFdA,GAGK,UAu6BX,GAj6BsBn0J,IAMf,IANgB,YACrBgP,EACAnG,OAAO,gBACLuG,EACAP,cAAc,cAAE08S,EAAa,UAAEzjI,KAElC9nL,EACC,MAAOwrT,EAAWC,IAAgB/gJ,EAAAA,EAAAA,UAASvW,KACpC88I,EAAWya,IAAgBhhJ,EAAAA,EAAAA,UAAS17J,EAAY0tR,kBAAoB,CAAC,IACrE1hB,EAAS2wC,IAAcjhJ,EAAAA,EAAAA,UAAS17J,EAAYyiQ,gBAAkB,CAAC,IAC/D6gC,EAAmBsZ,IAAwBlhJ,EAAAA,EAAAA,UAAS,CAAC,IACrD+uH,EAAUyD,IAAexyH,EAAAA,EAAAA,UAAS,IAClCtqJ,EAAOyrS,IAAYnhJ,EAAAA,EAAAA,UAAS,CAAC,IAC7B5sJ,EAAYguS,IAAiBphJ,EAAAA,EAAAA,UAAS,CAAC,IACvC44I,EAAkByI,IAAuBrhJ,EAAAA,EAAAA,UAAS,CAAC,IACnDkxG,EAAqBowC,IAA0BthJ,EAAAA,EAAAA,WAAS,IACxDuhJ,EAAmBC,IAAwBxhJ,EAAAA,EAAAA,UAAS17J,EAAYm9S,yBAA2B,OAC3FpK,EAAgBqK,IAAqB1hJ,EAAAA,EAAAA,UAAS,OAC9C2hJ,EAAiBC,IAAsB5hJ,EAAAA,EAAAA,UAAS,OAChD6hJ,EAAYC,IAAiB9hJ,EAAAA,EAAAA,UAAS,OACtC2rI,EAAeoW,IAAoB/hJ,EAAAA,EAAAA,UAAS,OAC5CgiJ,EAAUC,IAAejiJ,EAAAA,EAAAA,UAAS,OAClC8nI,EAAgBD,IAAqB7nI,EAAAA,EAAAA,WAAS,IAC9CkiJ,EAAmBC,IAAwBniJ,EAAAA,EAAAA,WAAS,IACpDoiJ,EAAoBC,IAAyBriJ,EAAAA,EAAAA,WAAS,IACtDotI,EAAwBkV,IAA6BtiJ,EAAAA,EAAAA,UAAS,KAC9DuiJ,EAAaC,IAAkBxiJ,EAAAA,EAAAA,UAAS,OACxCyiJ,EAAuBC,IAA4B1iJ,EAAAA,EAAAA,WAAS,IAC5D2iJ,EAA4BC,IAAiC5iJ,EAAAA,EAAAA,WAAS,IACtE6iJ,EAAuBC,IAA4B9iJ,EAAAA,EAAAA,UAAS,OAC5Do9H,EAAgBsd,KAAqB16I,EAAAA,EAAAA,WAAS,IAC9C+nI,GAA8Bgb,KAAmC/iJ,EAAAA,EAAAA,WAAS,IAC1E83I,GAAiBkL,KAAsBhjJ,EAAAA,EAAAA,UAAS,IAChDk0H,GAAUC,KAAen0H,EAAAA,EAAAA,UAAU5lK,SAAS+H,KAAKowH,YAAcj8G,SAASkpQ,GAAMwU,GAAGx1R,QAAQ,KAAM,OAC/Fu1S,GAAekP,KAAoBjjJ,EAAAA,EAAAA,UAAS,IAC5C8S,GAAcK,IAAmBT,MACjCo0H,GAAkBoc,KAAuBljJ,EAAAA,EAAAA,WAAS,GACnD+/I,IAAengH,EAAAA,EAAAA,QAAO,MACtBogH,IAAkBpgH,EAAAA,EAAAA,QAAO,OACzB,gBAAEqgH,GAAe,cAAES,GAAa,iBAAEE,IAAqBd,GAAUC,GAAcC,IAC/EpT,IAAchtG,EAAAA,EAAAA,QAAO,MACrBitG,IAAiBjtG,EAAAA,EAAAA,QAAO,OACxB,WAAEigH,IAAeR,KACjBr0I,GAAWR,KACX,OACJjiJ,GAAM,2BACN61R,GAA0B,0BAC1BK,GAAyB,yBACzBI,GAAwB,cACxBM,GAAa,kBACbtC,GAAiB,+BACjBuC,IACE+D,GAAU/vS,IACPq0R,GAAoB2b,KAAyBpjJ,EAAAA,EAAAA,WAAS,GACvDqjJ,IAAiBzjH,EAAAA,EAAAA,QAAO,MAExBm9G,IAAgCx1H,EAAAA,EAAAA,cAAY,WAAqD,IAApDwtH,EAAangT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,KAAMi9Q,EAAiBj9Q,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,KAC3F,MAAM0uT,EAAgBvO,EAAgB,IAAKA,GAAkB,IAAKxsR,IAC5Dg7R,EAAkB1xC,EAAoBwmC,GAA2CxmC,GAAqB+mC,EAE5G,OAAOrkT,OAAOyH,KAAKsnT,GAChB7kT,MAAMu2S,GACLsO,EAActO,IACdsO,EAActO,GAAYzsR,QAC1B+6R,EAActO,GAAYzsR,OAAO1zB,QACjC0uT,EAAgBvO,GAAYlC,SAAS,cAAcO,SAEzD,GAAG,CAAC9qR,GAAQqwR,IAEN4K,IAA+Bj8H,EAAAA,EAAAA,cAAY,IACxChzL,OAAOyT,OAAOugB,IAAQ9pB,MAAMuoB,GAAaA,EAASuB,OAAO1zB,QAAUmyB,EAASk2K,MAAQl2K,EAAS0iO,WACnG,CAACnhO,KAEEy0R,IAAuCz1H,EAAAA,EAAAA,cAAY,WAA2B,IAA1BwtH,EAAangT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,KACxE,MAAM0uT,EAAgBvO,EAAgB,IAAKA,GAAkB,IAAKxsR,IAClE,OAAOh0B,OAAOyT,OAAOs7S,GAAe7kT,MAAMuoB,GAAaA,EAASuB,OAAO1zB,QAAUmyB,EAASk2K,MAC5F,GAAG,CAAC30K,KAEEk7R,GAAsBrqO,GAAS,KAAKt3E,eAAO4hT,GAA2F,IAA7EC,EAAgB/uT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,KAAMi9Q,EAAiBj9Q,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,KAAMmgT,EAAangT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,KAChI,GAAoB,OAAhB8gB,EAAMC,MAAgB,OAC1BorS,EAAat3J,IACb,MAAMm6J,QVtEwBj0C,EUuE5Bg0C,EAAmBA,EAAiBj9S,GAAK6/R,EAAU7/R,GVvEVoe,EUwEzC,IACK6+R,GAAoBpd,EACvBhC,WAAc1yB,GAAqBt9Q,OAAOyH,KAAK61Q,GAAmBh9Q,QAAaue,GAAc7e,OAAOyH,KAAKoX,GAAYve,OAAUm8Q,GAC7Ha,GAAqBz+P,GAEnB,KACJi8Q,SAAUq0B,GV7ET9iT,GAAAA,eAAeiX,IAAI9I,OAAOO,kBAAkBqgQ,EAAa7qP,IADjCxV,IAACqgQ,EAAa7qP,EUgF3C,GAA2B,OAAvB8+R,EAAajuS,MAGf,OAFAwrS,EAASyC,QACT7C,EAAat3J,IAGf,GAAIsrJ,GAAiBljC,EAAmB,CACtC,MAAM0qC,EAAcQ,GAA8BhI,EAAeljC,GACjE,GAAI0qC,KAA8C,IAA9BqH,EAAajuS,MAAMA,OAAgBiuS,EAAape,gBAClEsc,EAAc,uBACdY,GAAyB,OACpB,KAAKnG,KAA8C,IAA9BqH,EAAajuS,MAAMA,OAAgBiuS,EAAape,gBAK1E,OAJAqe,GAAgB,CACdC,UAAW,0BAEb/C,EAAat3J,IAER,GAAI6mH,EAAQzlP,OAASulP,GAAsB,CAChD,MAAM2zC,EAAYxvT,OAAOmF,QAAQq7S,GAAelzS,QAAO,CAAChK,EAACwQ,KAAkB,IAAD27S,EAAA,IAAdjvT,EAAK+jD,GAAIzwC,EACnE,OAAOxQ,GAAMihD,EAAIokJ,OAAqD,QAAjD8mH,EAAInyC,EAAkBT,WAAW/rO,YAAYtwC,UAAI,IAAAivT,OAAA,EAA7CA,EAA+CtyC,OAAO6sC,YAAY,IAC1F,GACEwF,GACHjC,EAAc,KAElB,MACEA,EAAc,KAChB,CACF,CACAX,EAASyC,GACThjT,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,6BAA8ByoT,GACnE7C,EAAat3J,GACf,IAEM55I,IAAmB03K,EAAAA,EAAAA,cAAYzlL,iBAAiI,IAA1HmiT,EAAiBrvT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,GAA8B8uT,EAAY9uT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,KAAMsvT,IAAgBtvT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,KAAAA,UAAA,GAASmgT,EAAangT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,KAC1J,MAEMuvT,EAAiBxyC,KAH4D/8Q,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,OACjCwe,GAE0B+9P,SAAU/9P,GACzF+wS,EAAeloT,KAAK,CAClBjG,GAAI,0BACJsG,MAAOonT,GAAgB30B,IA2CzB,OALA8wB,GVhK+B/9S,OAAO6tQ,EAAay0C,IAC9CxjT,GAAAA,eAAeiX,IAAI9I,OAAOe,sBAAsB6/P,EAAay0C,GU+JvDC,CACT9d,EAAU7/R,GACVy9S,IArCqBriT,MAAOspQ,EAAUpzQ,KACtC,GAAIA,EAIF,OAHA6G,QAAQ2C,MAAMxJ,GAEd6rT,GAAgB7rT,GACT,CACLssT,yBAA0BlxS,EAAYmxS,wBAAyB3L,GAInE,MAAM2L,EAA0BlM,GAC9BjtC,EACAytC,GAAsBztC,GAAiCytC,GAAsBztC,GAA+BmtC,mBAAqB,MAEnI6I,EAAch2C,GACdi2C,EAAoBkD,GAEpB3jT,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,2BAA4BiwQ,GACjE,MAAMo5C,QAA6BpG,GACjChzC,EACA2pC,GAAiBxsR,GACjB07R,GAWF,OATI3zC,EAAQzlP,OAASulP,KACnB8zC,EAAmBD,EAAkBpiT,QAAO,CAACw5J,EAAK25I,KAAgB,IAADyP,EAC/D,OAAOppJ,IAAkD,QAA/CopJ,EAAIr5C,EAASgG,WAAW/rO,YAAY2vQ,UAAW,IAAAyP,OAAA,EAA3CA,EAA6C/yC,OAAO6sC,YAAW,GAC5E2F,IAGDA,IAAqBlH,GAAqCwH,IAC5Df,GAAoBC,GAAgB30B,EAAU,KAAM3jB,EAAUo5C,GAEzD,CAAEF,yBAA0Bl5C,EAAUm5C,0BAAyB,IAQjE,CAAED,yBAA0BlxS,EAAYmxS,wBAAyB3L,EAC1E,GAAG,CAACiH,GAAY4D,GAAqBzG,GAAsCz0R,GAAQ2oP,EAAqBq1B,EAAU7/R,GAChH03S,GAA4BhrS,EAAYwlS,EAAkB7pB,EAAUze,EAAQzlP,OAExE65R,IAAgBn9H,EAAAA,EAAAA,cAAYzlL,eAAO6iT,GAA6E,IAAlDh1C,EAAW/6Q,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,KAAM0jT,EAAiB1jT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,KAC1GmuT,IAAgC,KAAM,IACtC,MAAM6B,EAAgBjzC,GAAgCp9Q,OAAOyT,OAAO28S,GAA2B9iT,QAAO,CAAChK,EAAG4B,KAAC,IAAU5B,EAAG,CAAC4B,EAAEzD,IAAKyD,EAAE6C,SAAS,CAAC,GAAIg8S,GAAqBllS,GACrKyxS,GAAiBlkH,QAAU,KACzBoiH,IAAgC,KAAM,IACtC8B,GAAiB11C,mBACjB+zC,IAAoB,GACpBxI,IAAkB,EAAM,EAG1BmK,GAAiBz1C,QAAUttQ,UACzBihT,IAAgC,KAAM,IACtC,MAAM7H,EAAYhsC,EAAMk3B,MAAMvgS,KAAKpM,IAAC,CAAOokS,IAAKpkS,EAAEokS,IAAIr/R,QAAQ,oBAAoB,UAClF,IAAIsmT,EAAoB,GACpBC,GAAW,EACXC,GAAa,EACjB,IAAK,MAAMhuM,KAAQkkM,EAAW,CAC5B,MAAME,QAAiBx6S,GAAAA,eAAeiX,IAAIhR,SAASwM,qBAAqBkzR,EAAU7/R,IAAMipQ,EAAaT,EAAMG,UAAWr4J,EAAK6mL,KACvHud,GACE4J,IACFzsT,OAAqB,aAAIA,OAAqB,cAAK,CAAC,EACpDA,OAAqB,aAAEguS,EAAU7/R,IAAMipQ,GAAep3Q,OAAqB,aAAEguS,EAAU7/R,IAAMipQ,IAAgB,GAC7Gp3Q,OAAqB,aAAEguS,EAAU7/R,IAAMipQ,GAAa1zQ,KAAKm/S,GACzD4J,GAAa,GAEfF,EAAoB,IAAIA,EAAmB,CACzCjnB,IAAK3jL,IAAImhM,gBAAgBD,GACzBjd,YAAalmS,GAAE,oBAAqB,CAAEuT,WAAYs5S,EAAkBjwT,OAAS,IAC7EqC,KAAuB,IAAjBg4Q,EAAM0qC,OAAe,QAAU,SAGvCmL,GAAW,CAEf,CACKA,GACH7D,EAAqB,CAAEhc,WAAY4f,IAErCpK,IAAkB,GAClBwI,GAAoB6B,EAAS,GAE3Btd,IAAsB30H,GAAa53K,IAAI,iBACzCw/S,IAAkB,GAEpBwI,IAAoB,GACpB2B,GAAiB5oT,KAAK,CAACsqS,EAAU7/R,IAAMipQ,EAAai1C,GAEtD,GAAE,CAACre,EAAU7/R,GAAI0M,IAEX6xS,IAAmB19H,EAAAA,EAAAA,cAAYzlL,iBAK/B,IAADojT,EAAAC,EAAAC,EAAA,IAJHpQ,EAAUpgT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,KACbywT,EAAazwT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,QAAG4C,EAChB2mT,EAAcvpT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,KACjB0wT,EAAW1wT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,CAAC,EAEfktT,EAAc,MACdyD,KACA,MAAMC,EAA0BpyS,EAC5B7e,OAAOyH,KAAKspT,GAAazwT,OAC3B2wT,EAAwBr0C,SAAW,IAC9B/9P,EAAW+9P,YACXm0C,GAGLE,EAAwBr0C,SAAW,IAC9B/9P,EAAW+9P,SACd,CAAC6jC,GAAaqQ,GAGlB,MAAMtQ,EAAgB0J,GACpBlqT,OAAOyH,KAAKspT,GAAazwT,OAASN,OAAOyH,KAAKspT,GAAetQ,EAC7DmJ,EACAqH,EACAH,GAEII,EAAkB,IACnBryS,EACH+9P,SAAUq0C,EAAwBr0C,UAE9BwzC,EAA4BtM,GAChCoN,EACA5M,GAAsB4M,GAAwC5M,GAAsB4M,GAAsClN,mBAAqB,MAG3ImN,EAAkBJ,IAAgBtQ,EACtCzgT,OAAOmF,QAAQ4rT,GAAazjT,QAAO,CAAChK,EAACud,KAAA,IAAAuwS,EAAAC,EAAA,IAAG7wT,EAAKuH,GAAM8Y,EAAA,OAAKvd,IAAgD,QAA/C8tT,EAAIF,EAAgBr0C,WAAW/rO,YAAYtwC,UAAI,IAAA4wT,GAAQ,QAARC,EAA3CD,EAA6Cj0C,cAAM,IAAAk0C,OAAR,EAA3CA,EAAqDC,YAAY,IAC5E,QAD4EX,EAC9HO,EAAgBr0C,WAAW/rO,YAAY2vQ,UAAW,IAAAkQ,GAAQ,QAARC,EAAlDD,EAAoDxzC,cAAM,IAAAyzC,OAAR,EAAlDA,EAA4DU,aAEzDH,GAAmBp1C,EAAQzlP,OAASulP,IAAyBq3B,KAAuB6d,GAAsD,KAAb,QAA1BF,EAAAjH,EAAenJ,UAAW,IAAAoQ,OAAA,EAA1BA,EAA4BvwT,eAC5H6vT,GAAcC,GAItBtD,EAAoBsD,GACpBvD,EAAc,IACThuS,EACH+9P,SAAUq0C,EAAwBr0C,WAE/Bw6B,KAEGp3S,OAAOyH,KAAKspT,GAAazwT,QAAUkgT,EAAcC,IAAeD,EAAcC,GAAYzsR,OAAO1zB,QAClGN,OAAOyH,KAAKspT,GAAazwT,QAAUkoT,GAA8BhI,GAGpEgM,EAAat3J,IACJszJ,GAA8BhI,GACnC7jC,SACIrhQ,GACJtb,OAAOyH,KAAKspT,GAAazwT,OAASN,OAAOyH,KAAKspT,GAAe,CAACtQ,GAC9DwQ,EACA,MACA,EACAzQ,GAEFgM,EAAat3J,MACHynH,GAAuB8rC,GAAqCjI,UAChEllS,GACJtb,OAAOyH,KAAKspT,GAAazwT,OAASN,OAAOyH,KAAKspT,GAAe,CAACtQ,GAC9DwQ,EACA,MACA,EACAzQ,GAEFgM,EAAat3J,KACHynH,GAAwB8rC,GAAqCjI,WACjEllS,GACJtb,OAAOyH,KAAKspT,GAAazwT,OAASN,OAAOyH,KAAKspT,GAAe,CAACtQ,GAC9DwQ,EACA,MACA,EACAzQ,GAEEqK,GAA+BxG,EAAkB7D,IACnDgM,EAAat3J,IACbq4J,EAAc,uBACdY,GAAyB,WAEnB7yS,GACFtb,OAAOyH,KAAKspT,GAAazwT,OAASN,OAAOyH,KAAKspT,GAAe,CAACtQ,GAC9DwQ,EACA,MACA,EACAzQ,GAEJgM,EAAat3J,aAIX55I,GACJtb,OAAOyH,KAAKspT,GAAazwT,OAASN,OAAOyH,KAAKspT,GAAe,CAACtQ,GAC9DwQ,EACA,MACA,EACAzQ,GAEFgM,EAAat3J,MAGK,YAAlBkiJ,GAA+Br7B,EAAQzlP,OAASulP,IAClD2wC,EAAat3J,GAIjB,GAAG,CAACszJ,GAA+BC,GAAsC9rC,EAAqBZ,EAAQzlP,KACpG4zR,GAA2BrrS,EAAYu4R,EAAe97R,GAAkB60S,GAAejd,KAEnFqe,GAAkBhkT,UACtB,GAAIwuQ,EAAQ5pQ,GAAI,CAAC,IAADq/S,EAAAC,EACdjF,EAAat3J,IACb,MAAMw8J,QAAuBrlT,GAAAA,eAAeiX,IAAIhR,SAASkL,eAAeu+P,EAAQ5pQ,IAChFu6S,EAAWgF,GACX,MAAMC,IAAoC,OAAdD,QAAc,IAAdA,GAA6B,QAAfF,EAAdE,EAAgB9yB,qBAAa,IAAA4yB,GAAO,QAAPC,EAA7BD,EAA+B3e,aAAK,IAAA4e,GAApCA,EAAsCG,qBAAsBF,EAAep7R,OAASulP,GAChHgzC,GAAsB8C,GACtB,MAAME,QAAiCxlT,GAAAA,eAAeiX,IAAIhR,SAASoM,qBAAqBgzS,EAAev/S,IAEvG,IAAI2/S,EADJnF,EAAqBkF,GAEgBC,EAAjCvzI,GAAa73K,IAAI,qBAAyC2F,GAAAA,eAAeiX,IAAI9I,OAAOI,aAAa2jK,GAAa73K,IAAI,sBACxF2F,GAAAA,eAAeiX,IAAI9I,OAAOE,aAAag3S,EAAev/S,IACpFs6S,EAAaqF,GACb7zB,EAAY6zB,EAAiBh3B,UAC7BqyB,EAAkB2E,EAAiBC,gBACnC1E,EAAmByE,EAAiBE,mBACpC,MAAMC,QAAyB5lT,GAAAA,eAAeiX,IAAI9I,OAAOS,aAAay2S,EAAev/S,UAC/E+/S,GAAsBR,EAAgBI,EAAiB3/S,IAC7DggT,GAAoBT,EAAgBI,EAAiB3/S,UAC/CigT,GAAsBN,EAAkBA,EAAiBh3B,SAAU42B,EAAgBC,GACzFtlT,GAAAA,eAAezC,MAAMmG,YAAY+S,QAAQ,CACvCuvS,yBAA0BR,EAC1Bp0B,iBAAkBq0B,EAClBrd,UAAWwd,IAEbzF,EAAat3J,GACf,GAGIo9J,IAAet/H,EAAAA,EAAAA,cAAY,WAC/Bw5H,EAAat3J,IACbw7J,MAAiBrwT,UACnB,GAAG,CAACqwT,KAEE6B,IAA6BlnH,EAAAA,EAAAA,QAAOkmH,KAC1C7lJ,EAAAA,EAAAA,YAAU,KACR6mJ,GAA2BloQ,QAAUknQ,EAAe,KAGtD7lJ,EAAAA,EAAAA,YAAU,KACR,MAEM+iC,EAAY5lF,IAChB+2K,GAAY/5R,SAAS+H,KAAKowH,YAAcj8G,SAASkpQ,GAAMwU,GAAGx1R,QAAQ,KAAM,KAAK,EAH/CxG,MAYhC,OANAO,OAAO6P,iBAAiB,eAAgB2+S,IAAkB,GAC1DxuT,OAAO6P,iBAAiB,SAAU46L,GAAU,GAC5C09G,KACA19G,IATqC8jH,GAA2BloQ,QAAQ5mD,GAYjE,KACL4oT,KACAmG,KACAxuT,OAAOs7H,oBAAoB,eAAgBkzL,IAAkB,GAC7DlC,GAAiB11C,kBAAkB,CACpC,GAEA,KAEHlvG,EAAAA,EAAAA,YAAU,KACRqhJ,EAGa,SAHUhxC,EACpBp6P,WACAC,MAAMmiL,GAAiC,mCAAnBA,EAAUrnL,OAC9BmF,MAAiB,GACnB,CAACk6P,KAEJrwG,EAAAA,EAAAA,YAAU,KACR,MAAM+mJ,EAAY,IAAK5zS,EAAW+9P,UAelC,OAbA54Q,OAAO0uT,0BAA4B,CAACjS,EAAYqQ,KAC9C,GAAIA,GAAiBA,EAAcvwR,UAAYuwR,EAAcvwR,SAAS,sCAAuC,CAC3G,MAAMoyR,EAAa9kT,KAAKxE,MAAMynT,GAAmD,mCACjFwB,GAAa,KAAM,KAAM,KAAMK,EACjC,KAAO,CACDtO,EAAiB5D,KAAagS,EAAUhS,GAAcqQ,GAC1DhzP,aAAawwP,GACb,MAAMsE,EAAuBp/S,YAAW,KACtC8+S,GAAa,KAAM,KAAM,KAAMG,EAAU,GACxC,KACHlE,EAAyBqE,EAC3B,GAEK,KAAQ5uT,OAAO0uT,+BAA4BzvT,CAAS,CAAE,GAE5D,CAAC4b,EAAYwlS,EAAkBrwR,MAElC03I,EAAAA,EAAAA,YAAU,KACJ6gJ,IAAcr3J,IAAiBq3J,IAAcr3J,IAA0Bg5J,IACpEE,IACgB,YAAfd,EACFW,EAAe,aACS,wBAAfX,EACTW,EAAe,4BACS,OAAfX,GACTW,EAAe,OAGnBE,GAAyB,GAC3B,GACC,CACDb,EACAlW,EACAmV,EACA5vC,EACAuxC,EACAE,EACAjtS,KAGFuqJ,EAAAA,EAAAA,YAAU,KACiEyiJ,EAArE5B,IAAcr3J,IAAiBq3J,IAAcr3J,GACb,GACnC,CAACq3J,IAEJ,MAAMiG,GAAmBA,KACvB,CAAC,iBACC,mBACA,qBACA,6BACA,YACA,2BACA,0BACA,0BACA,UACA,2BACA,iBACA/pT,SAASgqB,IACTpmB,GAAAA,eAAezC,MAAMmG,YAAY+J,OAAO2Y,EAAS,GACjD,EAGE68R,GAAmBriT,IACvB,GAAIA,EAAMsiT,WAAiC,qBAApBtiT,EAAMsiT,UAAkC,CAC7D,MAAMF,EAAe,CACnBpe,gBAAgB,EAChBgS,WAAY,EACZ7hS,MAAO,CAAEA,OAAQ,EAAGG,IAAK,GACzByhS,aAAc,GAEhB4J,EAASyC,GACThjT,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,6BAA8ByoT,GACnE9B,EAAc,WACdY,GAAyB,EAC3B,GAGI+D,GAAwB3kT,MAAOmkT,EAAgBt2C,KACnD,GAAIs2C,EAAe9yB,cAAcyjB,SAASK,QAAQH,QAAS,CACzD,MAAMsQ,QAA0BxmT,GAAAA,eAAeiX,IAAI9I,OAAOY,oBAAoBggQ,GAC9E6xC,EAAqB4F,GACrBxmT,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,2BAA4BisT,EACnE,GAGIT,GAAwB7kT,MAAO6hT,EAAkB0D,EAAiB/2C,EAAS41C,KAC/E,IACE,MAAM5N,QAA0B13S,GAAAA,eAAeiX,IAAI9I,OAAOa,cAAc+zS,EAAiBj9S,IACnF69S,EAA0BlM,GAC9BC,EACAO,GAAsBP,GAA0CO,GAAsBP,GAAwCC,mBAAqB,MAGrJ6I,EAAc9I,GACd+I,EAAoBkD,GAChBj0C,EAAQzlP,OAASulP,KACft9F,GAAa73K,IAAI,eACnB8M,YAAW,IAAM28S,GAAcH,EAAyBzxI,GAAa73K,IAAI,eAAgBq9S,IAAoB,GACnG4N,GACVn+S,YAAW,IAAM28S,GAAcH,EAAyBZ,EAAiBj9S,GAAI4xS,IAAoB,IAKrG13S,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,2BAA4B,IAAKm9S,IACtE,MAAMvD,QAAsBqJ,GAA2B9F,EAAmB,MAErE0E,GAAqCjI,GAGxC8O,GAAgB,CACdC,UAAW,2BAHPL,GAAoB4D,EAAiB1D,EAAkBrL,EAAmBvD,EAMpF,CAAE,MAAO/8S,GACP6G,QAAQ2C,MAAMxJ,GAEd6rT,GAAgB7rT,EAClB,GAGI0uT,GAAsBA,CAACT,EAAgBt2C,KAC3CsyC,EAAYgE,EAAe7e,MAAS,GAAE6e,EAAe7e,MAAMvJ,mBAAmBluB,IAAgB,KAAK,EA6D/F23C,GAAkBxlT,iBAAuC,IAAhCylT,EAAkB3yT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,IAAAA,UAAA,GAE/C,MAAM4yT,EAAuBl3C,EAAQijB,WAAajjB,EAAQijB,UAAUlE,SAC9DL,EAAc1e,EAAQ6iB,eAC5B7iB,EAAQ6iB,cAAc9D,UACtB/e,EAAQ6iB,cAAc9D,SAAS6H,QAC3B5mB,EAAQ6iB,cAAc9D,SAAS6H,QAC/B,EACEuwB,EAA0Bn3C,EAAQijB,WAAajjB,EAAQijB,UAAUtE,wBAErE3e,EAAQijB,WACNzE,GACE04B,EACAx4B,EACAy4B,QV9kBuB3lT,iBACzBlB,GAAAA,eAAeiX,IAAI9I,OAAOW,aAAag4S,EAAQ,EUglB3CC,CAAkBphB,EAAU7/R,KAE7B6gT,IACCn0S,GAAc7e,OAAOyH,KAAKoX,GAAYve,aV5kBpBiN,OAAO4lT,EAASt0S,WACtCxS,GAAAA,eAAeiX,IAAI9I,OAAOc,iBAAiB63S,EAASt0S,EAAW,EU4kBvDw0S,CACJrhB,EAAU7/R,GACVsqQ,GACE59P,SVxmBetR,OAAO4lT,EAASnhB,IACpC3lS,GAAAA,eAAeiX,IAAI9I,OAAOK,gBAAgBs4S,EAASnhB,GU4mB9CshB,CAActhB,EAAU7/R,GAAI,IAC7B6/R,EACHhC,WAAYnxR,GAAc7e,OAAOyH,KAAKoX,GAAYve,OAASm8Q,GACzD59P,GAEE,aVtmBUtR,iBAChBlB,GAAAA,eAAeiX,IAAI9I,OAAOU,UAAUi4S,EAAQ,EUwmBxCI,CAASvhB,EAAU7/R,KA/FPqhT,EAAC5qI,EAAWzE,KAChC,GAAkB,IAAdyE,GAAmBzE,EAAS,CAC9B,MAAMsvI,EAAUh1R,mBAAmB0lJ,GACnCngL,OAAO4B,SAAS0iJ,KAAQ,GAAEmrK,IAAUA,EAAQlzR,SAAS,KAAO,IAAM,qBAAqByxQ,EAAUlwR,YACnG,MACE20J,GAASu6F,GAAatqQ,IAAI,CAAE8iL,KAAM,SACpC,EA2FAgqI,CAAc3qI,EAAWnC,GAAahgL,IAAI,WAC5C,EAEMgtT,GAA6BnmT,UACjC,GAAIg/S,IAAcr3J,GAAe,OAEjC,GAAIkiJ,EAIF,OAHAiX,GAA8B,GAC9BJ,EAAe,yBACfE,GAAyB,GAEpB,GAAoB,YAAfb,KAA+BnsS,EAAMC,QAAgC,IAAvBD,EAAMC,MAAMA,OAAiBD,EAAM8vR,iBAAoBqX,GAI/G,OAHA+F,GAA8B,GAC9BJ,EAAe,6BACfE,GAAyB,GAEpB,GAAmB,YAAfb,IAA8BnsS,EAAMC,QAAgC,IAAvBD,EAAMC,MAAMA,OAAiBD,EAAM8vR,gBAIzF,OAHAod,GAA8B,GAC9BJ,EAAe,kBACfE,GAAyB,GAEpB,GAAI3F,KAAiC,CAI1C,GAHA6F,GAA8B,GAC9BF,GAAyB,GACzBvD,KACI7uC,EAAQzlP,OAASulP,IAAwBozC,KAAgC,CAC3E,MAAM0E,EAAmB,IAAI,IAAInvT,IAAIxE,OAAOyT,OAAO4wS,GAAkB/2S,QAAO,CAACw5J,EAAKz8G,IAAY,IAAIy8G,EAAKz8G,EAAQk0P,SAAS,cAAcppD,UAAU,MAEhJ,GAAIw+D,EAAiBrzT,OAAS,EAAG,CAC/B,MACMszT,EAD2B,IAAI,IAAIpvT,IAAIxE,OAAOyT,OAAOugB,IAAQ1mB,QAAO,CAACw5J,EAAKz8G,IAAYA,EAAQs+I,MAAQt+I,EAAQ8qM,QAAU,IAAIruF,EAAKz8G,EAAQ8qM,SAAW,IAAIruF,IAAM,MAAM75F,MAAK,CAAC1oE,EAAGiB,IAAMmuT,EAAiBvoT,QAAQ7G,GAAKovT,EAAiBvoT,QAAQ5F,KAC3K8L,KAAK6jP,GACxEw+D,EAAiBpzR,SAAS40N,GACvB,GAAEw+D,EAAiBvoT,QAAQ+pP,GAAW,MAAkB,6BAAZA,EAAyCzxP,GAAE,4BAA8ByxP,IACtH,KAMJ,OAHAu5D,IAAkB,EAAItoT,KAAK43D,OAC3B+vP,EAA0B6F,QAC1B3F,EAAe,gBAEjB,CACF,CAEA,YADAA,EAAe,mBAEjB,CACA,MAAM3wC,QAA0BhiQ,GAAiBtb,OAAOyH,KAAK48S,IAC7D,GAAIiJ,EAIF,OAHAe,GAA8B,GAC9BJ,EAAe,6BACfE,GAAyB,GAG3B,MAAM3N,QAAsB8J,GAAyBhtC,EAAkByyC,0BACvE,OAAIvH,GAA8BhI,IAChC6N,GAA8B,GAC9BJ,EAAe,yBACfE,GAAyB,KAG3B3B,EAAat3J,IAET6mH,EAAQ6iB,cAAciU,OAAS92B,EAAQ6iB,cAAciU,MAAMghB,sBACzD1yS,GAASA,EAAMC,aAAa8tS,GAAoB10B,EAAU,KAAMld,EAAkByyC,yBAA0BvP,GAChHoN,GAAqB,QACrBpB,EAAat3J,gBAIT69J,KAAiB,EAgCnBe,GAAwB,WAAyB,IAAxBC,EAAU1zT,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,IAAAA,UAAA,GACvC,OACE07Q,EAAQ6iB,cAAciU,OACtB92B,EAAQ6iB,cAAciU,MAAMghB,uBAC3BE,EACMrwT,GAAE,0BAETq4Q,GACEA,EAAQijB,WACRh/R,OAAOyH,KAAKs0Q,EAAQijB,WAAWz+P,SAAS,aACxCvgC,OAAOyH,KAAKs0Q,EAAQijB,WAAWz+P,SAAS,4BACxCg6P,GACExe,EAAQijB,UAAUlE,SAClB/e,EAAQ6iB,cAAc9D,SAAS6H,QAC/B5mB,EAAQijB,UAAUtE,yBAEfh3R,GAAE,0BACJA,GAAE,sBACX,EAEMstT,GAAmBA,KACvB/C,EAAe,MACfI,GAA8B,EAAM,EAGhClb,GAAsB5lS,eAAkB4iT,GAAc9L,GAE5D,OACEr5H,EAAAA,GAAAA,MAACgpI,GAAa,CAACpxT,UAAU,mBACvBghT,QAAS7nC,EAAQzlP,OAASulP,GAAqB57J,SAAA,EAE/CgrE,EAAAA,GAAAA,KAAA,QAAMxpL,GAAG,SAASmB,UAAU,kBAAiBq9G,UAC3CgrE,EAAAA,GAAAA,KAACusH,GAAO,CACJjF,iBAAkBA,GAClBc,kBAAmBA,EACnBxK,eAAgBA,EAChB9sB,QAASA,EACTi2B,UAAWA,EACXsB,kBAAmBA,EACnBC,eAAgBA,EAChBL,mBAAoBA,GACpBC,oBAAqBA,GACrBK,6BAA8BA,GAC9Br5J,WAAY4hI,EAAQzlP,OAASulP,QAGnC7wF,EAAAA,GAAAA,MAAA,SAAOxf,GAAG,SAAQvrD,SAAA,EAChBgrE,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,qBAAqBb,KAAMqqQ,KACtC9wF,EAAAA,GAAAA,KAACgpI,GAAc,CACXrxT,UAAU,mBACV6/R,aAAc1mB,EACdm4C,gBAAiBn4C,EAAQ6iB,cAAgB7iB,EAAQ6iB,cAAc9D,SAAS6H,QAAU,KAClF+e,aAAenjI,GAAa73K,IAAI,WAAiE,KAApD2F,GAAAA,eAAezC,MAAMmG,YAAYrJ,IAAI,aAClFmvS,UA5DYtoS,UACpB,MAAM,UAAEknS,GAAcpoS,GAAAA,eAAezC,MAAMmG,YAAYrJ,MACvD8lT,EAAat3J,IACb,MAAM+hJ,OVnsBgB1pS,UACjBlB,GAAAA,eAAeiX,IAAI9I,OAAOQ,QAAQm5S,GUksBhBC,CAAW3f,EAAU/4B,aAxLpB24C,IAAyBC,EAyL/Bv4C,EAAQj6P,WAAYi6P,EAAQr/P,KAzLG43S,EAyLGrd,EAAS9kS,GAxL7DysK,GAAgB,CAAE21I,YAAaD,EAAYt5S,SAAS,IACpDy7J,GAAS,EAuLuD,EAyDxD+9I,aAAW,EACX7S,SAAUj7H,GAAahgL,IAAI,mBAE/BukL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,iBAAgBq9G,UAC7BgrE,EAAAA,GAAAA,KAACusH,GAAO,CACJjF,iBAAkBA,GAClBc,kBAAmBA,EACnBxK,eAAgBA,EAChB9sB,QAASA,EACTi2B,UAAWA,EACXsB,kBAAmBA,EACnBC,eAAgBA,EAChBL,mBAAoBA,GACpBC,oBAAqBA,GACrBK,6BAA8BA,QAGpCvoH,EAAAA,GAAAA,KAAC7pK,GAAK,CACJpgB,IAAKq3S,GACL1a,mBAAoB4uB,IAAcr3J,IAA0Bq3J,IAAcr3J,GAC1E/zI,MAAOA,EAAOkiS,mBAAoBliS,EAAM8vR,kBAE1ChmH,EAAAA,GAAAA,KAAA,OAAKjqL,IAAKwqT,GAAc5oT,UAAU,sBAClCqoL,EAAAA,GAAAA,KAAA,OAAKroL,UAAU,0BAAyBq9G,UACtC+qE,EAAAA,GAAAA,MAAA,OAAKvpL,GAAG,iBAAiBmB,UAAU,iDAAgDq9G,SAAA,EACjFgrE,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,gCAAgCb,KAAMqqQ,KACjD/wF,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,WAAUq9G,SAAA,EACvBgrE,EAAAA,GAAAA,KAAA,QAAMroL,UAAU,iBAAgBq9G,SAAEv8G,GAAE,uBAC1B,OAATsuS,QAAS,IAATA,OAAS,EAATA,EAAWlX,YAAY7vG,EAAAA,GAAAA,KAAC05H,GAAe,CACtCC,mBAAiB,EACjBniB,aAAc1mB,EACd2mB,WAAYsP,EACZlP,iBA7Qev1R,MAAOknT,EAAaxnT,KAC/C,IACE,GAAIA,EAGF,OAFAugT,EAAiB,gBACG,KAAhBiH,GAAoBx2B,EAAY,KAMtC,GAHEuvB,EAAiB,MAGfhF,OAAoC7rC,EAAqB,CAC3D,GAAI8rC,KACF,OACK,CACL,MAAMiM,EAA2B10T,OAAOyT,OAAO4wS,GAAkBl6S,QAAQsoB,GAAaA,EAAS0qP,OAAO6sC,cAEtG,GADkC0K,EAAyBxqT,MAAMuoB,GAAauB,GAAOvB,EAAShxB,IAAIuyB,OAAO1zB,SAIvG,OAFAitT,EAAc,4BACdY,GAAyB,EAG7B,CACF,CAEI5B,IAAcr3J,WACV55I,GAAiB,CAAC,YAAa,KAAMm5S,GAC3CjI,EAAat3J,IACb+4J,EAAe,MAEnB,CAAE,MAAOxqT,GACP+oT,EAAat3J,IACb5qJ,QAAQ2C,MAAMxJ,GACd6rT,GAAgB7rT,EAClB,CAAC,QACCw6R,EAAYw2B,GACPptO,MAAMtlE,SAAS0yS,KAClBhI,EAAa,IACRza,EACHlX,SAAU25B,GAGhB,SAuOQxpI,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,gCAAgCb,KAAMqqQ,KACjD9wF,EAAAA,GAAAA,KAAC0pI,GAAW,CACV3gS,OAAQA,GACR2oP,oBAAqBA,EACrBC,SAAU/9P,EAAW+9P,SACrB5yD,OA9GgBy2F,IAC1B,MAAMD,EAAgB0J,GAA0BzJ,EAAY,KAAM5hS,GAClEgrS,GACEhrS,EACA2hS,EACA,CAACC,GACF,EAyGS7pK,SAAU07K,GACVzzS,WAAYwlS,EACZ7E,cAAeA,GACfC,oBAAqB5gS,EAAWg+P,YAAch+P,EAAWg+P,WAAWpqJ,iBAI1Ew4D,EAAAA,GAAAA,KAAC22H,GAAqB,CACpBh/S,UAAU,yBACV6/R,aAAc1mB,EACdgmC,iBAtIqBx0S,MAAOqnT,EAAmBC,KACrD1H,EAAkByH,GAClBvH,EAAmBwH,GACnB,MAAMzF,EAAmB,IACpBpd,EACH+f,eAAgB6C,EAChB5C,kBAAmB6C,GAErBpI,EAAa2C,GACb/iT,GAAAA,eAAezC,MAAMmG,YAAYnJ,IAAI,mBAAoBwoT,GACrDpvT,OAAOyH,KAAK0Z,GAAO7gB,QAAU6gB,EAAMC,OAAO8tS,GAAoB10B,EAAU40B,EAAiB,EA6HvFjN,sBAAuBW,EACvBZ,yBAA0BkL,EAC1BhL,iBAAkB4K,KAEpB/hI,EAAAA,GAAAA,KAAC6pI,GAAmB,CAClB9zT,IAAKs3S,GACLuK,SAAyB,OAAf1yS,QAAe,IAAfA,OAAe,EAAfA,EAAiB4nQ,KAC3B+qC,eAAgBA,EAChBlgT,UAAU,uBACV6/R,aAAc1mB,EACdye,SAAUA,EACVuoB,cAAeuJ,EACfvV,WAAY/2S,OAAOyH,KAAK0Z,GAAO7gB,OAAS6gB,EAAQ,KAChDw8Q,mBAAoB4uB,IAAcr3J,IAA0Bq3J,IAAcr3J,MAE5E+1B,EAAAA,GAAAA,KAAA,OAAKjqL,IAAKyqT,GAAiB7oT,UAAU,yBACrCqoL,EAAAA,GAAAA,KAAC8pI,GAAY,CACXrP,iBAAkBgO,GAClBjQ,YAAalQ,EACb7I,eAAe,+BACfr9H,IAAKogJ,EACL9qT,KAAMo5Q,EAAQ82B,OAAS92B,EAAQ82B,MAAME,SAAWh3B,EAAQ82B,MAAME,SAAW,GACzE2Q,aAAcA,IAAMpQ,GAAmBC,GACvC5T,SAAUA,KAEXguB,IAAqB1iI,EAAAA,GAAAA,KAAC+pI,GAAoB,CAACj5C,QAASA,EAASl9P,WAAYA,EAC9B6mS,iBAAkBqN,GAAiB/gB,UAAWA,EAC9CqB,kBAAmBA,EAAmBmU,UAAWmG,EACjDjK,aAAcA,IAAMkK,GAAsBD,GAC1ClG,mBAAoBqM,IAAsB,GAAOzmJ,IAAKogJ,EACtD9wC,oBAAqBA,KACjE3xF,EAAAA,GAAAA,MAAA,OAAKpoL,UAAU,6BAA4Bq9G,SAAA,EACzCgrE,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,mCAAmCb,KAAMqqQ,KACpD9wF,EAAAA,GAAAA,KAAA,OACEroL,UAAU,2CACVnB,GAAG,qBACHi4I,QAASg6K,GACT53K,SAAS,IAAG77B,SAGVssM,IAAcr3J,IACZq3J,IAAcr3J,IACZ+1B,EAAAA,GAAAA,KAACE,GAAW,IACZ2oI,QAER7oI,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,mCAAmCb,KAAMqqQ,QAEtD9wF,EAAAA,GAAAA,KAACmb,GAAM,CACLkyG,eAAgBA,GAChBD,YAAaA,GACbD,cAAe0W,GACfnW,UAAWqV,EACXzV,qBAAsB6V,EACtBxV,WAAYoY,GACZnY,uBAAwBA,KAE1B5tH,EAAAA,GAAAA,KAACimF,GAAI,CAAC3+P,KAAK,wBAAwBb,KAAMqqQ,IACxCA,EAAQzlP,OAASulP,KAChB5wF,EAAAA,GAAAA,KAACgqI,GAAwB,CACvBxR,YAAaoK,EACbnK,aAAcA,IAAMoK,GAAsB,GAC1Cza,kBAAoBt3B,EAAQzlP,OAASulP,IAAwBw3B,EAAqBA,EAAoB,KACtG3I,eAAe,qBACfiZ,cAAgBliT,GAAOgtT,GAAmBhtT,GAC1C8wS,iBAAkBA,GAClBY,oBAAqBA,KAGxBuY,KACCzgI,EAAAA,GAAAA,KAACiqI,GAAkB,CACjB/R,UAA6B,IAAlBmJ,EACX5yK,QAASg6K,GACTxQ,iBAAkB4Q,KAClB/c,WAAY51R,EACZiiS,eAAgBmJ,IAAcr3J,IAAiBq3J,IAAcr3J,GAC7D7V,SAAUktK,IAAcr3J,IAAiBq3J,IAAcr3J,GACvDmuJ,mBAAoBliS,EAAM8vR,eAC1BoC,kBAAoBt3B,EAAQzlP,OAASulP,IAAwBw3B,EAAqBA,EAAoB,KACtGiQ,aAAcA,IAAMwK,GAAsB,GAC1CvK,gBAAiBA,GACjBviT,IAAK8tT,UAKG,ECt8BdqG,GAAeA,KAEjBlqI,EAAAA,GAAAA,KAAA,OAAAhrE,UACE+qE,EAAAA,GAAAA,MAAA,OAAKpoL,UAAW,kBAAkBq9G,SAAA,EAChCgrE,EAAAA,GAAAA,KAACE,GAAW,IACXznL,GAAE,4BAwDX,GAlDkBvC,IAChB,MAAMq0B,EAASwhJ,IAoBf,IAlBAtL,EAAAA,EAAAA,YAAU,KACR,WACE,MAAQjqK,GAAI2zT,EAAmBb,YAAatmB,GAAgBz4Q,EAC5D,IAAK4/R,EAAmB,OAExB,MAAM,eAAE5iD,GAAmBnmQ,GAAAA,eAAezC,MAAMmG,YAAYrJ,MAC5D,GAAI8rQ,GAAkBA,EAAe1wP,aAAeC,SAASqzS,GAE3D,YADA/oT,GAAAA,eAAezC,MAAMmG,YAAY+S,QAAQ,CAAEyxR,mBAAoBtG,GAAe,OAGhF,MAAM3L,QAAkBj2R,GAAAA,eAAeiX,IAAIhR,SAASgL,yBAAyB83S,GACvEr5C,QAAgB1vQ,GAAAA,eAAeiX,IAAIhR,SAASkL,eAAe8kR,GAEjEj2R,GAAAA,eAAezC,MAAMmG,YAAY+S,QAAQ,CAAE0vP,eAAgBuJ,EAAQw4B,mBAAoBtG,GACxF,EAbD,EAaI,GAEH,KAEE9sS,EAAMyI,QAAUzI,EAAM4O,YACzB,OAAOk7K,EAAAA,GAAAA,KAACuuG,GAAM,IAAKr4R,EAAK8+G,SACrBk1M,OAIL,IAAKh0T,EAAM4O,YAAYyiQ,eACrB,OAAOvnF,EAAAA,GAAAA,KAACuuG,GAAM,IAAKr4R,EAAK8+G,SACrBk1M,OAIL,MAAMp5C,EAAU56Q,EAAM4O,YAAYyiQ,eAElC,OAAQuJ,EAAQzlP,MACd,KAAKulP,GACH,OAAO5wF,EAAAA,GAAAA,KAACuuG,GAAM,IAAKr4R,EAAK8+G,UACtBgrE,EAAAA,GAAAA,KAACqpH,GAAU,IAAsBnzS,GAAhB46Q,EAAQ5pQ,MAE7B,KAAK0pQ,GACL,KAAKA,GACH,OAAO5wF,EAAAA,GAAAA,KAACuuG,GAAM,IAAKr4R,EAAK8+G,UACtBgrE,EAAAA,GAAAA,KAACoqI,GAAa,IAAsBl0T,GAAhB46Q,EAAQ5pQ,MAEhC,QACE,OAAO,KACX,EChEF,GAJwBhR,IACf8pL,EAAAA,GAAAA,KAACt/H,GAAM,IAAKxqD,ICGrB,GAJmBA,IACV8pL,EAAAA,GAAAA,KAACt/H,GAAM,IAAKxqD,aC2ELm0T,GAAIroT,8BAAwCnC,EAAW,IAAAxF,MAAAqiB,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAX9c,EAAW8c,EAAA,GAAAvnB,UAAAunB,GAMnE,MAAM,IAAI3Y,MACW,kBAAVhC,EAAkB,6BACUA,GACzBnC,EAAKxK,OAAS,IAAMwK,EAAKwG,IAAI7L,QAAQkF,KAAK,KAAO,IACrD,2GACUsC,EAExB,CCzFA,IAAMsoT,GAAa,CAAC,EAEpB,SAAgB/pT,KACZ,MAA0B,qBAAfzH,WACAA,WAEW,qBAAXC,OACAA,OAEW,qBAAXuH,oBAAAA,EACAA,oBAAAA,EAES,qBAAT1H,KACAA,KAEJ0xT,EACX,CChBA,IAAat1T,GAASD,OAAOC,OAChBu1T,GAAgBx1T,OAAOqO,yBACvBxG,GAAiB7H,OAAO6H,eACxB4tT,GAAkBz1T,OAAOS,UAEzBi1T,GAAc,GAC3B11T,OAAO21T,OAAOD,IAEd,IAAaE,GAAe,CAAC,EAC7B51T,OAAO21T,OAAOC,IAOd,IAAMC,GAA4B,qBAAVjnM,MAClBknM,GAAoB91T,OAAOqG,WAEjC,SAAgB0vT,KACPF,IACDP,GAGU,sBAGlB,CAkBA,SAAgB7xO,GAAKnyD,GACjB,IAAI0kS,GAAU,EACd,OAAO,WACH,IAAIA,EAIJ,OADAA,GAAU,EACF1kS,EAAa1wB,MAAMC,KAAMR,WAEzC,CAEA,IAAa2iD,GAAO,WAAH,EAEjB,SAAgBokB,GAAW0N,GACvB,MAAqB,oBAAPA,CAClB,CAEA,SAIgBmhP,GAAYluT,GAExB,cADiBA,GAEb,IAAK,SACL,IAAK,SACL,IAAK,SACD,OAAO,EAEf,OAAO,CACX,CAEA,SAAgBsmD,GAAStmD,GACrB,OAAiB,OAAVA,GAAmC,kBAAVA,CACpC,CAEA,SAAgBumD,GAAcvmD,GAC1B,IAAKsmD,GAAStmD,GACV,OAAO,EAEX,IAAMs4D,EAAQrgE,OAAOoF,eAAe2C,GACpC,GAAa,MAATs4D,EACA,OAAO,EAEX,IAAM61P,EAAmBl2T,OAAOU,eAAeC,KAAK0/D,EAAO,gBAAkBA,EAAM7zD,YACnF,MACgC,oBAArB0pT,GAAmCA,EAAiB7vT,aAAeyvT,EAElF,CAGA,SAAgBK,GAAY5lS,GACxB,IAAM/jB,EAAiB,MAAH+jB,OAAG,EAAHA,EAAK/jB,YACzB,QAAKA,IAID,sBAAwBA,EAAY+F,MACpC,sBAAwB/F,EAAY88H,YAK5C,CAEA,SAAgB8sL,GAAchnS,EAAagoG,EAAuBrvH,GAC9DF,GAAeunB,EAAQgoG,EAAU,CAC7BtvH,YAAY,EACZyG,UAAU,EACVD,cAAc,EACdvG,MAAAA,GAER,CAEA,SAAgBsuT,GAAmBjnS,EAAagoG,EAAuBrvH,GACnEF,GAAeunB,EAAQgoG,EAAU,CAC7BtvH,YAAY,EACZyG,UAAU,EACVD,cAAc,EACdvG,MAAAA,GAER,CAEA,SAAgBuuT,GACZ/jT,EACAgkT,GAEA,IAAMn/L,EAAW,SAAW7kH,EAE5B,OADAgkT,EAAS91T,UAAU22H,IAAY,EACxB,SAAU90H,GACb,OAAO+rD,GAAS/rD,KAAsB,IAAhBA,EAAE80H,GAEhC,CAEA,SAAgBo/L,GAASC,GACrB,OAAOA,aAAiBnyT,GAC5B,CAEA,SAAgBoyT,GAASD,GACrB,OAAOA,aAAiBjyT,GAC5B,CAEA,IAAMmyT,GAAmE,qBAAjC32T,OAAO2H,sBAoB/C,IAAaopI,GACU,qBAAZ+D,SAA2BA,QAAQ/D,QACpC+D,QAAQ/D,QACR4lL,GACA,SAAApmS,GAAG,OAAIvwB,OAAOqtF,oBAAoB98D,GAAKhnB,OAAOvJ,OAAO2H,sBAAsB4oB,GAAY,EAC5DvwB,OAAOqtF,oBAY5C,SAAgBj/E,GAAYrG,GACxB,OAAiB,OAAVA,EAAiB,KAAwB,kBAAVA,EAAqB,GAAKA,EAAQA,CAC5E,CAEA,SAAgB6uT,GAAQz2T,EAAgBmiC,GACpC,OAAOmzR,GAAgB/0T,eAAeC,KAAKR,EAAQmiC,EACvD,CAGA,IAAa9zB,GACTxO,OAAOwO,2BACP,SAAmCrO,GAE/B,IAAMgoB,EAAW,CAAC,EAKlB,OAHA4oH,GAAQ5wI,GAAQsI,SAAQ,SAAAjI,GACpB2nB,EAAI3nB,GAAOg1T,GAAcr1T,EAAQK,MAE9B2nB,CACX,o+DC1MG,IAAM0uS,GAA0BzyT,OAAO,2BAO9C,SAAgB0yT,GACZ3rM,GASA,OAAOnrH,OAAOC,QAPd,SAAmBE,EAAQsyB,GACvB,GAAIskS,GAAiBtkS,GACjB,OAAO04F,EAAW6rM,gBAAgB72T,EAAQsyB,GAE1CwkS,GAAgB92T,EAAQsyB,EAAU04F,KAGVA,EACpC,CAMA,SAAgB8rM,GAAgBx2T,EAAgBD,EAAkB2qH,GACzDyrM,GAAQn2T,EAAWo2T,KACpBT,GAAc31T,EAAWo2T,GAAuB92T,GAAA,GAEzCU,EAAUo2T,MCXzB,SAA2B1rM,GACvB,OAAOA,EAAW+rM,kBAAoBC,EAC1C,CDwBSC,CAAWjsM,KACZ1qH,EAAUo2T,IAAyBr2T,GAAO2qH,EAElD,CAgCA,SAAgB4rM,GAAiBtqT,GAC7B,MAAyB,iBAAXA,GAAiD,iBAAnBA,EAAc,IAC9D,KEpEa4qT,GAAQjzT,OAAO,uBAOfkzT,GAAI,WAYb,SAAAA,EAAmBC,QAAA,IAAAA,IAAAA,EAA0C,QAAM,KAAhDA,WAAA,OAXnBC,yBAA0B,EAAK,KAC/BC,kBAAmB,EAAK,KACxBzqC,WAAa,IAAIxoR,IAAkB,KAEnCkzT,WAAa,EAAC,KACdC,gBAAkB,EAAC,KACnBC,qBAAuBC,GAAkBC,cAAa,KAQ/CC,WAAK,OAELC,YAAM,EALM,KAAAT,MAAAA,EAEnB,IAAA7oL,EAAA4oL,EAAA72T,UAoCC,OApCDiuI,EAKOupL,KAAA,WACCp3T,KAAKk3T,OACLl3T,KAAKk3T,MAAMtvT,SAAQ,SAAAknK,GAAQ,OAAIA,QAEtCjhC,EAEMwpL,MAAA,WACCr3T,KAAKm3T,QACLn3T,KAAKm3T,OAAOvvT,SAAQ,SAAAknK,GAAQ,OAAIA,QAIxCjhC,EAIOypL,eAAA,WACH,OAAOA,GAAet3T,OAG1B6tI,EAGO0pL,cAAA,WACHC,KACAC,GAAiBz3T,MACjB03T,MACH7pL,EAEDroI,SAAA,WACI,OAAOxF,KAAK02T,OACfD,CAAA,CAlDY,GAqDJkB,GAASlC,GAA0B,OAAQgB,IAExD,SAAgBmB,GACZlmT,EACAmmT,EACAC,QADA,IAAAD,IAAAA,EAAsC11Q,SACtC,IAAA21Q,IAAAA,EAAwC31Q,IAExC,ICrD0C41Q,EDqDpCC,EAAO,IAAIvB,GAAK/kT,GAStB,OAPImmT,IAA4B11Q,ICtDzB81Q,GAAcC,GDuDAF,EAAMH,ECvD2BE,GD0DlDD,IAA8B31Q,IAC9Bg2Q,GAAmBH,EAAMF,GAEtBE,CACX,CEnEA,IAAa7rP,GAAW,CACpB9B,SArBJ,SAA0B3mE,EAAQiB,GAC9B,OAAOjB,IAAMiB,CACjB,EAoBIyzT,WAlBJ,SAA4B10T,EAAQiB,GAChC,OAAO0zT,GAAU30T,EAAGiB,EACxB,EAiBI0C,QAXJ,SAAyB3D,EAAQiB,GAC7B,OAAIxF,OAAOwrK,GACAxrK,OAAOwrK,GAAGjnK,EAAGiB,GAGjBjB,IAAMiB,EAAU,IAANjB,GAAW,EAAIA,IAAM,EAAIiB,EAAIjB,IAAMA,GAAKiB,IAAMA,CACnE,EAMI+tP,QAhBJ,SAAyBhvP,EAAQiB,GAC7B,OAAO0zT,GAAU30T,EAAGiB,EAAG,EAC3B,YCOgB2zT,GAAa5xT,EAAG7B,EAAG6M,GAE/B,OAAI6mT,GAAa7xT,GACNA,EAIPjC,MAAMK,QAAQ4B,GACPmH,GAAW0uB,MAAM71B,EAAG,CAAEgL,KAAAA,IAE7B+7C,GAAc/mD,GACPmH,GAAW0gB,OAAO7nB,OAAGtE,EAAW,CAAEsP,KAAAA,IAEzCikT,GAASjvT,GACFmH,GAAW4C,IAAI/J,EAAG,CAAEgL,KAAAA,IAE3BmkT,GAASnvT,GACFmH,GAAW9H,IAAIW,EAAG,CAAEgL,KAAAA,IAEd,oBAANhL,GAAqB8xT,GAAS9xT,IAAO+xT,GAAO/xT,GAOhDA,EANC4uT,GAAY5uT,GACLg5E,GAAKh5E,GAELgyT,GAAWhnT,EAAMhL,EAIpC,CA6BA,SAAgBiyT,GAAkBltP,GAE9B,OAAOA,CACX,CJvEA,IAAM6qP,GAAW,oBKGDsC,GAAuBlnT,EAAc2/B,GACjD,MAAO,CACHglR,gBAAiB3kT,EACjBmnT,SAAUxnR,EACVynR,MAAAC,GACAC,QAAAC,GACA9C,gBAAA+C,GAER,CAEA,SAASH,GAELI,EACAx5T,EACAw5H,EACAz5H,SAGA,GAAiB,OAAjB05T,EAAIp5T,KAAK64T,WAALO,EAAeC,MACf,OAAqD,OAA9Cr5T,KAAKg5T,QAAQG,EAAKx5T,EAAKw5H,GAAY,GAAe,IAK7D,GAAIz5H,IAAWy5T,EAAIG,QACf,OAAqD,OAA9Ct5T,KAAKg5T,QAAQG,EAAKx5T,EAAKw5H,GAAY,GAAe,IAK7D,GAAIq/L,GAASr/L,EAAWjyH,OAGpB,OAAO,EAEX,IAAMqyT,EAAmBC,GAAuBL,EAAKn5T,KAAML,EAAKw5H,GAAY,GAE5E,OADAnyH,GAAetH,EAAQC,EAAK45T,GACrB,CACX,CAEA,SAASN,GAELE,EACAx5T,EACAw5H,EACAsgM,GAEA,IAAMF,EAAmBC,GAAuBL,EAAKn5T,KAAML,EAAKw5H,GAChE,OAAOggM,EAAIO,gBAAgB/5T,EAAK45T,EAAkBE,EACtD,CAEA,SAASP,GAAkCS,EAAM/tT,GAI7C,IAAQyf,EAA+Bzf,EAA/Byf,KAAM3Z,EAAyB9F,EAAzB8F,KAAMkoT,EAAmBhuT,EAAnBguT,eACdC,EAAM75T,KAMZ,GAAY,SAARqrB,EAAJ,CAOsB,IAAAyuS,EAAtB,GAAY,UAARzuS,EAcA,OAbKmtS,GAASmB,KACVA,EAbc,SAAAzzT,GAAC,IAAA6zT,EAAAC,EAAAC,EAAAC,EAAA,OACnBC,GAA+B,OAAnBJ,EAAa,OAAbC,EAACH,EAAIhB,eAAQ,EAAZmB,EAActoT,MAAIqoT,EAAIroT,EAAMlM,WAAYU,EAA2B,OAA1B+zT,EAAc,OAAdC,EAAEL,EAAIhB,eAAQ,EAAZqB,EAAcxB,aAAUuB,GAYrEG,CAAcT,IAGR,OAAjBG,EAAI95T,KAAK64T,WAALiB,EAAeT,OACfO,GAAe,WACX,IAAM52T,EAAOhD,KACPq5T,EAAQr2T,EAAK0O,GAAMrS,KAAK2D,GAC9Bq2T,EAAMgB,cAAe,EACrBr3T,EAAK0O,GAAQ2nT,KAIdM,EAGXlF,GACI,iBAAiBoF,EAAIxD,gBAAe,SAASzxT,OAAO8M,GAAK,YAAY2Z,EAArE,QACUwuS,EAAIxD,gBAAe,gEAzB7BuD,GAAe,WACXxD,GAAgBp2T,KAAM0R,EAAMmoT,KA0BxC,CAgBA,SAAgBL,GACZL,EACA7uM,EACA3qH,EACAw5H,EAEAmhM,qBAjBgBrnT,OAiBhB,IAAAqnT,IAAAA,EAA2BC,GAAYD,iBAjBvBrnT,EAmB6BkmH,EAAjB7O,EApB1B+rM,gBAEKpjT,EAAL/L,MAmBF,IACgCszT,EAD1BtzT,EAAUiyH,EAAVjyH,MACiB,OAAvBuzT,EAAInwM,EAAWuuM,WAAX4B,EAAqBpB,QACrBnyT,EAAQA,EAAM7H,KAAe,OAAXm7T,EAACrB,EAAIuB,QAAMF,EAAIrB,EAAIG,UAEzC,MAAO,CACHpyT,MAAOizT,GACsB,OADVQ,EACI,OADJC,EACftwM,EAAWuuM,eAAQ,EAAnB+B,EAAqBlpT,MAAIipT,EAAIh7T,EAAI6F,WACjC0B,EAC+B,OAD1B2zT,EACc,OADdC,EACLxwM,EAAWuuM,eAAQ,EAAnBiC,EAAqBpC,aAAUmC,EAEZ,OAAnBE,EAAAzwM,EAAWuuM,WAAXkC,EAAqB1B,MAAkB,OAAb2B,EAAG7B,EAAIuB,QAAMM,EAAI7B,EAAIG,aAAUl3T,GAI7DqL,cAAc6sT,GAAkBnB,EAAI8B,eAEpCh0T,YAAY,EAGZyG,UAAU4sT,EAElB,UCxIgBY,GAAqBxpT,EAAc2/B,GAC/C,MAAO,CACHglR,gBAAiB3kT,EACjBmnT,SAAUxnR,EACVynR,MAAAqC,GACAnC,QAAAoC,GACAjF,gBAAAkF,GAER,CAEA,SAASF,GAELhC,EACAx5T,EACAw5H,EACAz5H,SAGA,GAAIA,IAAWy5T,EAAIG,QACf,OAAqD,OAA9Ct5T,KAAKg5T,QAAQG,EAAKx5T,EAAKw5H,GAAY,GAAe,IAM7D,GAAiB,OAAbigM,EAAAp5T,KAAK64T,WAALO,EAAeC,SAAWtD,GAAQoD,EAAIG,QAAS35T,KAAS84T,GAAOU,EAAIG,QAAQ35T,MACzB,OAA9CK,KAAKg5T,QAAQG,EAAKx5T,EAAKw5H,GAAY,GACnC,OAAO,EAGf,GAAIs/L,GAAOt/L,EAAWjyH,OAGlB,OAAO,EAEX,IAAMo0T,EAAiBC,GAAqBpC,EAAKn5T,KAAML,EAAKw5H,GAAY,GAAO,GAE/E,OADAnyH,GAAetH,EAAQC,EAAK27T,GACrB,CACX,CAEA,SAASF,GAELjC,EACAx5T,EACAw5H,EACAsgM,SAEM6B,EAAiBC,GAAqBpC,EAAKn5T,KAAML,EAAKw5H,EAAyB,OAAf2gM,EAAE95T,KAAK64T,eAAQ,EAAbiB,EAAeT,OACvF,OAAOF,EAAIO,gBAAgB/5T,EAAK27T,EAAgB7B,EACpD,CAEA,SAAS4B,GAAkC1B,EAAM/tT,SAI7C,IAAQ8F,EAAyB9F,EAAzB8F,KAAMkoT,EAAmBhuT,EAAnBguT,eAed,OAbKnB,GAAOkB,KACRA,EAAOj6O,GAAKi6O,IAGC,OAAjB6B,EAAIx7T,KAAK64T,WAAL2C,EAAenC,OACfO,GAAe,WACX,IAAM52T,EAAOhD,KACPq5T,EAAQr2T,EAAK0O,GAAMrS,KAAK2D,GAC9Bq2T,EAAMoC,YAAa,EACnBz4T,EAAK0O,GAAQ2nT,KAIdM,CACX,CAgBA,SAAS4B,GACLpC,EACA7uM,EACA3qH,EACAw5H,EACAkgM,EAEAiB,GArBJ,IAGoBrnT,OAkBhB,IAAAqnT,IAAAA,EAA2BC,GAAYD,iBAlBvBrnT,EAoB2BkmH,EAAjB7O,EArBxB+rM,gBAEKpjT,EAAL/L,MAoBF,IAKWszT,EALLtzT,EAAUiyH,EAAVjyH,OAEDuxT,GAAOvxT,KACRA,EAAQw4E,GAAKx4E,IAEbmyT,MAEAnyT,EAAQA,EAAM7H,KAAe,OAAXm7T,EAACrB,EAAIuB,QAAMF,EAAIrB,EAAIG,UAE/BmC,YAAa,GAEvB,MAAO,CACHv0T,MAAAA,EAGAuG,cAAc6sT,GAAkBnB,EAAI8B,eAEpCh0T,YAAY,EAGZyG,UAAU4sT,EAElB,UC1HgBoB,GAAyBhqT,EAAc2/B,GACnD,MAAO,CACHglR,gBAAiB3kT,EACjBmnT,SAAUxnR,EACVynR,MAAA6C,GACA3C,QAAA4C,GACAzF,gBAAA0F,GAER,CAEA,SAASF,GAELxC,EACAx5T,EACAw5H,GAEA,OAAqD,OAA9Cn5H,KAAKg5T,QAAQG,EAAKx5T,EAAKw5H,GAAY,GAAkB,EAAH,CAC7D,CAEA,SAASyiM,GAELzC,EACAx5T,EACAw5H,EACAsgM,GAGA,OAoCJ,SACIN,EAAmCj5T,EAEnCP,EAAgBsT,GADC/S,EAAfm2T,gBAEGpjT,EAAHpN,IAEE6xB,CAMR,CAjDIokS,CAAyB3C,EAAKn5T,KAAML,EAAKw5H,GAClCggM,EAAI4C,wBACPp8T,EAAGT,GAAA,GAEIc,KAAK64T,SAAQ,CAChBhzT,IAAKszH,EAAWtzH,IAChBE,IAAKozH,EAAWpzH,MAEpB0zT,EAER,CAEA,SAASoC,GAAkCh2T,EAAK+F,GAI5C,IAAMiuT,EAAM75T,KACEL,EAAwBiM,EAA9B8F,KAeR,OAbAkoT,EAFsChuT,EAAnBguT,iBAEJ,WACX,IAAMT,EAAsC6C,GAAmBh8T,MAAMw2T,IAC/DnlR,EAAOnyC,GAAA,GACN26T,EAAIhB,SAAQ,CACfhzT,IAAAA,EACA+F,QAAS5L,OAEbqxC,EAAQ3/B,OAAR2/B,EAAQ3/B,KAC4B,oBACV/R,EAAI6F,YAC9B2zT,EAAI8C,QAAQl2T,IAAIpG,EAAK,IAAIu8T,GAAc7qR,OAGpC,WACH,OAAOrxC,KAAKw2T,IAAO2F,wBAAwBx8T,GAEnD,UC5DgBy8T,GAA2B1qT,EAAc2/B,GACrD,MAAO,CACHglR,gBAAiB3kT,EACjBmnT,SAAUxnR,EACVynR,MAAAuD,GACArD,QAAAsD,GACAnG,gBAAAoG,GAER,CAEA,SAASF,GAELlD,EACAx5T,EACAw5H,GAEA,OAAqD,OAA9Cn5H,KAAKg5T,QAAQG,EAAKx5T,EAAKw5H,GAAY,GAAkB,EAAH,CAC7D,CAEA,SAASmjM,GAELnD,EACAx5T,EACAw5H,EACAsgM,WAGA,OA0EJ,SACIN,EAAmCj5T,EAEnCP,EACAw5H,GAFiBj5H,EAAfm2T,gBAIE3+R,CAMR,CAvFI8kS,CAA2BrD,EAAKn5T,MACzBm5T,EAAIsD,0BACP98T,EACAw5H,EAAWjyH,MACY,OADPw1T,EACH,OADGtD,EAChBp5T,KAAK64T,eAAQ,EAAbO,EAAeuD,UAAQD,EAAIpE,GAC3BmB,EAER,CAEA,SAAS8C,GAELvgN,EACApwG,GAaA,IAAMiuT,EAAM75T,KACJqrB,EAAezf,EAAfyf,KAAM3Z,EAAS9F,EAAT8F,KASRkrT,EAAqB,IAAI94T,QAE/B,SAAS+4T,EAAqBv9T,EAAQ4H,WAC5BiyT,EAAsC6C,GAAmB18T,GAAQk3T,IACjE3oT,EAAa,IAAIivT,GACnB51T,EACsB,OADjB61T,EACO,OADP/C,EACLH,EAAIhB,eAAQ,EAAZmB,EAAc2C,UAAQI,EAAIzE,GACe,oBAAyB5mT,EAAKlM,YACvE,GAEJ2zT,EAAI8C,QAAQl2T,IAAI2L,EAAM7D,GACtB+uT,EAAmB52T,IAAI1G,GAG3B,GAAY,YAAR+rB,EACA,MAAO,CACHxlB,IAAG,WAIC,OAHK+2T,EAAmB92T,IAAI9F,OACxB68T,EAAqB78T,KAAMg8G,EAAKn2G,IAAI/F,KAAKE,OAEtCA,KAAKw2T,IAAO2F,wBAAwBzqT,IAE/C3L,IAAG,SAACmB,GAIA,OAHK01T,EAAmB92T,IAAI9F,OACxB68T,EAAqB78T,KAAMkH,GAExBlH,KAAKw2T,IAAOwG,wBAAwBtrT,EAAMxK,IAErDsb,KAAI,SAACtb,GAID,OAHK01T,EAAmB92T,IAAI9F,OACxB68T,EAAqB78T,KAAMkH,GAExBA,GAMvB,CChGA,IAAM+1T,GAAO,OAEAC,GAA6BC,KAE1C,SAAgBA,GAAqB9rR,GACjC,MAAO,CACHglR,gBAAiB4G,GACjBpE,SAAUxnR,EACVynR,MAAAsE,GACApE,QAAAqE,GACAlH,gBAAAmH,GAER,CAEA,SAASF,GACLjE,EACAx5T,EACAw5H,EACAz5H,WA2BsEo6T,EAC/BV,EAzBvC,GAAIjgM,EAAWtzH,IACX,OAAOo/D,GAAS6zP,MAAMK,EAAKx5T,EAAKw5H,EAAYz5H,GAGhD,GAAIy5H,EAAWpzH,IAAK,CAEhB,IAAMA,EAAMo0T,GAAax6T,EAAI6F,WAAY2zH,EAAWpzH,KAEpD,OAAIrG,IAAWy5T,EAAIG,QAIR,OAHAH,EAAIO,gBAAgB/5T,EAAK,CAC5B8N,cAAc8sT,GAAYD,iBAAkBnB,EAAI8B,eAChDl1T,IAAAA,IACO,KAKfiB,GAAetH,EAAQC,EAAK,CACxB8N,cAAc,EACd1H,IAAAA,IAEG,GAGX,GAAIrG,IAAWy5T,EAAIG,SAAuC,oBAArBngM,EAAWjyH,MAC5C,OAAIouT,GAAYn8L,EAAWjyH,QACa,OAAbkyT,EAAAp5T,KAAK64T,WAALO,EAAemE,SAAW79O,GAAK25O,MAAQ35O,IACxCo5O,MAAMK,EAAKx5T,EAAKw5H,EAAYz5H,IAEhB,OAAbo6T,EAAA95T,KAAK64T,WAALiB,EAAeyD,SAAW7E,GAAWW,MAAQX,IAC9CI,MAAMK,EAAKx5T,EAAKw5H,EAAYz5H,GAKxD,IAEuE86T,EAFnEgD,GAA+C,KAAX,OAAbhC,EAAAx7T,KAAK64T,eAAQ,EAAb2C,EAAeiC,MAAiB5vT,GAAW1N,IAAM0N,GAE5C,oBAArBsrH,EAAWjyH,OAAqC,OAAjBw2T,EAAI19T,KAAK64T,WAAL6E,EAAeH,WACzDpkM,EAAWjyH,MAAQiyH,EAAWjyH,MAAM7H,KAAe,OAAXm7T,EAACrB,EAAIuB,QAAMF,EAAIrB,EAAIG,UAE/D,OAAOkE,EAAqB1E,MAAMK,EAAKx5T,EAAKw5H,EAAYz5H,EAC5D,CAEA,SAAS29T,GACLlE,EACAx5T,EACAw5H,EACAsgM,WAoBuEuB,EAjBvE,GAAI7hM,EAAWtzH,IACX,OAAOo/D,GAAS+zP,QAAQG,EAAKx5T,EAAKw5H,EAAYsgM,GAGlD,GAAItgM,EAAWpzH,IAEX,OAAOozT,EAAIO,gBACP/5T,EACA,CACI8N,cAAc8sT,GAAYD,iBAAkBnB,EAAI8B,eAChDl1T,IAAKo0T,GAAax6T,EAAI6F,WAAY2zH,EAAWpzH,MAEjD0zT,GAKwB,oBAArBtgM,EAAWjyH,OAAqC,OAAjBy2T,EAAI39T,KAAK64T,WAAL8E,EAAeJ,WACzDpkM,EAAWjyH,MAAQiyH,EAAWjyH,MAAM7H,KAAe,OAAX27T,EAAC7B,EAAIuB,QAAMM,EAAI7B,EAAIG,UAG/D,QADmD,KAAX,OAAbsE,EAAA59T,KAAK64T,eAAQ,EAAb+E,EAAeH,MAAiB5vT,GAAW1N,IAAM0N,IAChDmrT,QAAQG,EAAKx5T,EAAKw5H,EAAYsgM,EAC9D,CAEA,SAAS6D,GAAkCthN,EAAMpwG,GAC7C6oT,GAAI,IAAIz0T,KAAKq2T,gBAAe,kCAChC,CC1EO,IAgBMwH,GAA0D,CACnEJ,MAAM,EACN/rT,UAAMtP,EACN07T,sBAAkB17T,EAClBqqR,OAAO,GAIX,SAAgBsxC,GAA0BnI,GACtC,OAAOA,GAASiI,EACpB,CAJA1+T,OAAO21T,OAAO+I,IAMd,IAAML,GAAuBpB,GA5BH,cA6BpB4B,GAA0B5B,GA5BF,iBA4B6C,CACvEO,SAAUhE,KAERsF,GAA8B7B,GA9BF,qBA8BiD,CAC/EO,SNnBJ,SAAgCj2T,EAAG7B,EAAG6M,GAClC,YAAUtP,IAANsE,GAAyB,OAANA,GAGnBw3T,GAAmBx3T,IAAMy3T,GAAkBz3T,IAAM03T,GAAgB13T,IAAM23T,GAAgB33T,GAFhFA,EAKPjC,MAAMK,QAAQ4B,GACPmH,GAAW0uB,MAAM71B,EAAG,CAAEgL,KAAAA,EAAM+rT,MAAM,IAEzChwQ,GAAc/mD,GACPmH,GAAW0gB,OAAO7nB,OAAGtE,EAAW,CAAEsP,KAAAA,EAAM+rT,MAAM,IAErD9H,GAASjvT,GACFmH,GAAW4C,IAAI/J,EAAG,CAAEgL,KAAAA,EAAM+rT,MAAM,IAEvC5H,GAASnvT,GACFmH,GAAW9H,IAAIW,EAAG,CAAEgL,KAAAA,EAAM+rT,MAAM,SAG3C/lS,CAKJ,IMJM4mS,GAA6BlC,GAhCF,oBAgCgD,CAC7EO,SNUJ,SAAkCj2T,EAAG2mO,GAIjC,OAAIgrF,GAAU3xT,EAAG2mO,GACNA,EAEJ3mO,CACX,IMhBM63T,GACFtI,GAAkDuH,IAEtD,SAAgBgB,GAAuBntR,GACnC,OAAwB,IAAjBA,EAAQosR,KACTnF,IACiB,IAAjBjnR,EAAQosR,KACR9E,GAUV,SAA0CruM,WACtC,OAAQA,GAAyD,OAAhCqwM,EAAsB,OAAtBF,EAAGnwM,EAAWuuM,eAAQ,EAAnB4B,EAAqBkC,UAAQhC,EAA5CrC,EACzB,CAXUmG,CAA0BptR,EAAQysR,iBAC5C,CAgBA,SAASY,GAAiBh4T,EAAQi4T,EAAY5G,GAE1C,OAAI7B,GAAiByI,GACVnB,GAAqBrH,gBAAgBzvT,EAAGi4T,GAI/CvJ,GAAYuJ,QACZvI,GAAgB1vT,EAAGi4T,EAAMnB,IAKzBjF,GAAa7xT,GACNA,EAIP+mD,GAAc/mD,GACPmH,GAAW0gB,OAAO7nB,EAAGi4T,EAAM5G,GAIlCtzT,MAAMK,QAAQ4B,GACPmH,GAAW0uB,MAAM71B,EAAGi4T,GAI3BhJ,GAASjvT,GACFmH,GAAW4C,IAAI/J,EAAGi4T,GAIzB9I,GAASnvT,GACFmH,GAAW9H,IAAIW,EAAGi4T,GAIZ,kBAANj4T,GAAwB,OAANA,EAClBA,EAIJmH,GAAW+wT,IAAIl4T,EAAGi4T,EAC7B,CACAv/T,GAAOs/T,GAAkBH,IAkDzB,UAiDW1wT,GAAiCzO,GAAOs/T,GAjDH,CAC5CE,IAAG,SAAU13T,EAAUmqC,GACnB,IAAM7tC,EAAIu6T,GAA0B1sR,GACpC,OAAO,IAAIyrR,GAAgB51T,EAAOs3T,GAAuBh7T,GAAIA,EAAEkO,MAAM,EAAMlO,EAAEq7T,SAEjFtiS,MAAK,SAAUuiS,EAAqBztR,GAChC,IAAM7tC,EAAIu6T,GAA0B1sR,GACpC,QAC+B,IAA3BkpR,GAAYwE,aAAoC,IAAZv7T,EAAEipR,MAChCuyC,GACAC,IACRH,EAAeN,GAAuBh7T,GAAIA,EAAEkO,OAElDjB,IAAG,SACCquT,EACAztR,GAEA,IAAM7tC,EAAIu6T,GAA0B1sR,GACpC,OAAO,IAAI6tR,GAAoBJ,EAAeN,GAAuBh7T,GAAIA,EAAEkO,OAE/E3L,IAAG,SACC+4T,EACAztR,GAEA,IAAM7tC,EAAIu6T,GAA0B1sR,GACpC,OAAO,IAAI8tR,GAAiBL,EAAeN,GAAuBh7T,GAAIA,EAAEkO,OAE5E6c,OAAM,SACFjuB,EACA8+T,EACA/tR,GAEA,OAAOguR,IAAe,kBAClBC,IAC+B,IAA3B/E,GAAYwE,aAA2C,KAAZ,MAAP1tR,OAAO,EAAPA,EAASo7O,OACvCuvC,GAAmB,CAAC,EAAG3qR,GCtJ7C,SACI/xC,EACA+xC,WAIA,OAFA6jR,KACA51T,EAAS08T,GAAmB18T,EAAQ+xC,GACR,OAA5BkuR,GAAQC,EAAAlgU,EAAOk3T,KAAOkE,QAAM6E,EAApBC,EAAc9E,OAAW,IAAI3sM,MAAMzuH,EAAQmgU,GACvD,CDgJsBC,CAA0B,CAAC,EAAGruR,GACpC/wC,EACA8+T,OAIZj/T,IAAK81T,GAA0B+H,IAC/BtrE,QAASujE,GAA0BgI,IACnCR,KAAMc,GACNoB,OAAQ1J,GAA0BqI,ME/NzBsB,GAAW,WAYlBC,GAAqBnE,GAAyBkE,IAC9CE,GAA2BpE,GAZF,kBAY4C,CACvEmD,OAAQ1yP,GAASisP,aAORnzP,GAA6B,SAAkB86P,EAAMpB,GAC9D,GAAIzI,GAAiByI,GAEjB,OAAOkB,GAAmB1J,gBAAgB4J,EAAMpB,GAEpD,GAAIvJ,GAAYuJ,GAEZ,OAAOvI,GAAgB2J,EAAMpB,EAAMkB,IAEvC,GAAIpyQ,GAAcsyQ,GAEd,OAAO9J,GAA0ByF,GAAyBkE,GAAUG,IAcxE,IAAM53T,EAAmCslD,GAAckxQ,GAAQA,EAAO,CAAC,EAIvE,OAHAx2T,EAAKtC,IAAMk6T,EACX53T,EAAKuJ,OAALvJ,EAAKuJ,KAASquT,EAAKruT,MAAQ,IAEpB,IAAIwqT,GAAc/zT,EAC7B,EAEAhJ,OAAOC,OAAO6lE,GAAU46P,IAExB56P,GAAS06P,OAAS1J,GAA0B6J,ICnD5C,OAAIE,GAAkB,EAClBC,GAAe,EACbC,GAA0E,OAAhDC,GAAkC,OAAlCC,GAAGzL,IAAc,cAAU,cAAO,EAA/ByL,GAAiC3yT,eAAY0yT,GAG1EE,GAAwC,CAC1Cn5T,MAAO,SACPuG,cAAc,EACdC,UAAU,EACVzG,YAAY,GAGhB,SAAgBkzT,GACZmG,EACArsP,EACAykP,EACAv4T,GAUA,SAASmnB,IACL,OAAOi5S,GAAcD,EAAY5H,EAAYzkP,EAAI9zE,GAAOH,KAAMR,WAQlE,YApBA,IAAAk5T,IAAAA,GAAsB,GActBpxS,EAAI+yS,cAAe,EACnB/yS,EAAI9hB,SAAW,kBAAMyuE,EAAGzuE,YACpB06T,KACAG,GAAkBn5T,MAAQo5T,EAC1Bt5T,GAAesgB,EAAK,OAAQ+4S,KAEzB/4S,CACX,CAEA,SAAgBi5S,GACZD,EACAE,EACAvsP,EACAjiD,EACA/nB,GAEA,IAAMw2T,EAuBV,SACIH,EACAE,EACAxuS,EACA/nB,GAEA,IAAMy2T,GAAahpS,EACfipS,EAAqB,EACrBjpS,EAUJ,IAAMkpS,EAAkBrG,GAAYsG,mBAC9BC,GAAeN,IAAuBI,EAC5CpJ,KACA,IAAIuJ,EAAyBxG,GAAYyG,kBACrCF,IACAG,KACAF,EAAyBG,IAAuB,IAEpD,IAAMC,EAAuBC,IAAqB,GAC5CX,EAAU,CACZY,aAAcP,EACdF,gBAAAA,EACAG,uBAAAA,EACAI,qBAAAA,EACAT,WAAAA,EACAC,WAAAA,EACAW,UAAWrB,KACXsB,gBAAiBvB,IAGrB,OADAA,GAAkBS,EAAQa,UACnBb,CACX,CA9DoBe,CAAalB,EAAYE,GACzC,IACI,OAAOvsP,EAAGl0E,MAAMiyB,EAAO/nB,GACzB,MAAOgpB,GAEL,MADAwtS,EAAQgB,OAASxuS,EACXA,EACR,SA0DN,SAA2BwtS,GACnBT,KAAoBS,EAAQa,WAC5B7M,GAAI,IAERuL,GAAkBS,EAAQc,qBAEHn/T,IAAnBq+T,EAAQgB,SACRlH,GAAYmH,wBAAyB,GAEzCC,GAAqBlB,EAAQM,wBAC7Ba,GAAmBnB,EAAQU,sBAC3BzJ,KACI+I,EAAQY,cACRQ,GAAapB,EAAQG,iBAErBlpS,EAGJ6iS,GAAYmH,wBAAyB,CACzC,CA5EQI,CAAWrB,GAEnB,CAqFA,SAAgBS,GAAuBF,GACnC,IAAMv8Q,EAAO81Q,GAAYyG,kBAEzB,OADAzG,GAAYyG,kBAAoBA,EACzBv8Q,CACX,CAEA,SAAgBk9Q,GAAqBl9Q,GACjC81Q,GAAYyG,kBAAoBv8Q,CACpC,CChHuBs9Q,GAsIlBx+T,OAAOgK,YApIZ,OAAauvT,GACT,SAAAkF,GASA,SAAAlF,EACI51T,EACOy1T,EACAjG,EACPuL,EACQpD,SAaP,YAfM,IAAAnI,IAAAA,EAAqD,wBACnD,IAATuL,IAAAA,GAAY,QACJ,IAAApD,IAAAA,EAA+B1yP,GAAQ,UAE/CmuD,EAAA0nM,EAAAliU,KAAA,KAAM42T,IAAM,MALLiG,cAAA,IACAjG,WAAA,IAECmI,YAAA,IAXZqD,sBAAuB,EAAK5nM,EAC5B6nM,mBAAa,EAAA7nM,EACb8nM,sBAAgB,EAAA9nM,EAChB+nM,YAAM,EAAA/nM,EACNgoM,cAAQ,EAIGhoM,EAAAqiM,SAAAA,EACAriM,EAAAo8L,MAAAA,EAECp8L,EAAAukM,OAAAA,EAGRvkM,EAAK+nM,OAAS1F,EAASz1T,OAAO9E,EAAWs0T,GAUxCp8L,EA3BLioM,GAAAzF,EAAAkF,GA4BC,IAAAn0L,EAAAivL,EAAAl9T,UAyGA,OAzGAiuI,EAEO20L,aAAA,SAAat7T,GACjB,YAAsB9E,IAAlBpC,KAAKsiU,SACEtiU,KAAKsiU,SAASp7T,GAElBA,GACV2mI,EAEM9nI,IAAA,SAAI0lE,GACUzrE,KAAKqiU,OAEtB,IADA52P,EAAWzrE,KAAKyiU,iBAAiBh3P,MAChB8uP,GAAYmI,UAAW,CAEhChrS,EAUJ13B,KAAK2iU,aAAal3P,KAKzBoiE,EAEO40L,iBAAA,SAAiBh3P,GAErB,GADAm3P,GAAoC5iU,MAChC6iU,GAAgB7iU,MAAO,CACvB,IAAMw4O,EAASsqF,GAAqC9iU,KAAM,CACtDuuB,OAAQvuB,KACR8B,KAAMihU,GACNt3P,SAAAA,IAEJ,IAAK+sK,EACD,OAAO+hF,GAAYmI,UAEvBj3P,EAAW+sK,EAAO/sK,SAItB,OADAA,EAAWzrE,KAAK28T,SAASlxP,EAAUzrE,KAAKqiU,OAAQriU,KAAK02T,OAC9C12T,KAAK6+T,OAAO7+T,KAAKqiU,OAAQ52P,GAAY8uP,GAAYmI,UAAYj3P,GACvEoiE,EAED80L,aAAA,SAAal3P,GACT,IAAM4hK,EAAWrtO,KAAKqiU,OACtBriU,KAAKqiU,OAAS52P,EACdzrE,KAAKu3T,gBACDyL,GAAahjU,OACbijU,GAAgBjjU,KAAM,CAClB8B,KAAMihU,GACNx0S,OAAQvuB,KACRyrE,SAAAA,EACA4hK,SAAAA,KAGXx/F,EAEMhoI,IAAA,WAEH,OADA7F,KAAKs3T,iBACEt3T,KAAKwiU,aAAaxiU,KAAKqiU,SACjCx0L,EAEDq1L,WAAA,SAAWnmL,GACP,OAAOomL,GAAoBnjU,KAAM+8I,IACpClP,EAEDu1L,SAAA,SAASt0J,EAAgDu0J,GAWrD,OAVIA,GACAv0J,EAAS,CACLw0J,eAAgB,QAChBC,gBAAiBvjU,KAAK02T,MACtBnoS,OAAQvuB,KACR8B,KAAMihU,GACNt3P,SAAUzrE,KAAKqiU,OACfh1F,cAAUjrO,IAGXohU,GAAiBxjU,KAAM8uK,IACjCjhC,EAEDvgB,IAAA,WAEI,OAAOttH,KAAKqiU,QACfx0L,EAED5hD,OAAA,WACI,OAAOjsF,KAAK6F,OACfgoI,EAEDroI,SAAA,WACI,OAAUxF,KAAK02T,MAAK,IAAI12T,KAAKqiU,OAAM,KACtCx0L,EAEDznI,QAAA,WACI,OAAOmH,GAAYvN,KAAK6F,QAC3BgoI,EAAAk0L,IAED,WACI,OAAO/hU,KAAKoG,WACf02T,CAAA,CArID,CAAQrG,ICFZgN,GA+QKlgU,OAAOgK,YA5PZ,ICnEYypT,GAoBA0M,GD+CCxH,GAAa,WAqCtB,SAAAA,EAAY7qR,QApCZsyR,mBAAqB3M,GAAkBC,cAAa,KACpD2M,WAA4B,GAAE,KAC9BC,cAAgB,KAAI,KACpBjN,kBAAmB,EAAK,KACxBD,yBAAmC,EAAK,KACxCxqC,WAAa,IAAIxoR,IAAkB,KACnCkzT,WAAa,EAAC,KACdiN,OAAS,EAAC,KACVhN,gBAAkB,EAAC,KACnBC,qBAAuBC,GAAkB+M,YAAW,KACpDC,kBAAoB,EAAC,KACX3B,OAA0C,IAAI4B,GAAgB,MAAK,KAC7EvN,WAAK,OACLwN,kBAAY,OACZC,cAAwB,EAAK,KAC7BC,kBAA4B,EAAK,KACjCC,gBAAU,OACVC,aAAO,OACPC,WAAwBb,GAAUtzC,KAAI,KACtCo0C,YAAM,OACEC,aAAO,OACPC,uBAAiB,OACzBC,gBAAU,OAwCHzN,WAAK,OACLC,YAAM,EA1BJ9lR,EAAQxrC,KACT4uT,GAAI,IAERz0T,KAAKqkU,WAAahzR,EAAQxrC,IAC1B7F,KAAK02T,MAAQrlR,EAAQ3/B,MAAoD,gBACrE2/B,EAAQtrC,MACR/F,KAAKskU,QAAUnK,GACwB,uBACnC9oR,EAAQtrC,MAGhB/F,KAAKykU,QACDpzR,EAAQwtR,SACNxtR,EAAgBuzR,mBAAsBvzR,EAAgBsuR,OAClDxzP,GAASisP,WACTjsP,GAAQ,SAClBnsE,KAAKwkU,OAASnzR,EAAQzlC,QACtB5L,KAAK0kU,kBAAoBrzR,EAAQwzR,iBACjC7kU,KAAK2kU,aAAetzR,EAAQyzR,UAC/B,IAAAj3L,EAAAquL,EAAAt8T,UAqMA,OArMAiuI,EAEDk3L,eAAA,YE4FJ,SAAsCl3T,GAElC,GAAIA,EAAWkpT,uBAAyBC,GAAkB+M,YACtD,OAEJl2T,EAAWkpT,qBAAuBC,GAAkBgO,gBAEpDn3T,EAAWs+Q,WAAWvkR,SAAQ,SAAA3G,GACtBA,EAAE0iU,qBAAuB3M,GAAkB+M,cAC3C9iU,EAAE0iU,mBAAqB3M,GAAkBgO,gBACzC/jU,EAAE8jU,oBAId,CFzGQE,CAAsBjlU,OACzB6tI,EAKMupL,KAAA,WACCp3T,KAAKk3T,OACLl3T,KAAKk3T,MAAMtvT,SAAQ,SAAAknK,GAAQ,OAAIA,QAEtCjhC,EAEMwpL,MAAA,WACCr3T,KAAKm3T,QACLn3T,KAAKm3T,OAAOvvT,SAAQ,SAAAknK,GAAQ,OAAIA,QAIxCjhC,EAIOhoI,IAAA,WAIH,GAHI7F,KAAKmkU,cACL1P,GAAI,GAAIz0T,KAAK02T,MAAO12T,KAAKqkU,YAGD,IAAxB9J,GAAY2K,SAEa,IAAzBllU,KAAKmsR,WAAWzxN,MACf16D,KAAK2kU,YAUN,GADArN,GAAet3T,MACXmlU,GAAcnlU,MAAO,CACrB,IAAIolU,EAAsB7K,GAAY8K,gBAClCrlU,KAAK2kU,aAAeS,IACpB7K,GAAY8K,gBAAkBrlU,MAE9BA,KAAKslU,mBEuBzB,SAAyCz3T,GAErC,GAAIA,EAAWkpT,uBAAyBC,GAAkBuO,OACtD,OAEJ13T,EAAWkpT,qBAAuBC,GAAkBuO,OAEpD13T,EAAWs+Q,WAAWvkR,SAAQ,SAAA3G,GACtBA,EAAE0iU,qBAAuB3M,GAAkBgO,gBAC3C/jU,EAAE0iU,mBAAqB3M,GAAkBuO,OAKzCtkU,EAAE0iU,qBAAuB3M,GAAkB+M,cAE3Cl2T,EAAWkpT,qBAAuBC,GAAkB+M,eAIhE,CF1CoByB,CAAyBxlU,MAE7Bu6T,GAAY8K,gBAAkBD,QAhB9BD,GAAcnlU,QACdA,KAAKylU,0BACLjO,KACAx3T,KAAKqiU,OAASriU,KAAK0lU,eAAc,GACjChO,MAeR,IAAMnyR,EAASvlC,KAAKqiU,OAEpB,GAAIsD,GAAkBpgS,GAClB,MAAMA,EAAOqgS,MAEjB,OAAOrgS,GACVsoG,EAEM9nI,IAAA,SAAImB,GACP,GAAIlH,KAAKskU,QAAS,CACVtkU,KAAKokU,kBACL3P,GAAI,GAAIz0T,KAAK02T,OAEjB12T,KAAKokU,kBAAmB,EACxB,IACIpkU,KAAKskU,QAAQxkU,KAAKE,KAAKwkU,OAAQt9T,GACjC,QACElH,KAAKokU,kBAAmB,QAG5B3P,GAAI,GAAIz0T,KAAK02T,QAEpB7oL,EAEDy3L,gBAAA,WAEI,IAAMj4F,EAAWrtO,KAAKqiU,OAChBwD,EACc7lU,KAAK2jU,qBAAuB3M,GAAkBC,cAC5DxrP,EAAWzrE,KAAK0lU,eAAc,GAE9BhtB,EACFmtB,GACAF,GAAkBt4F,IAClBs4F,GAAkBl6P,KACjBzrE,KAAKykU,QAAQp3F,EAAU5hK,GAiB5B,OAfIitO,IACA14S,KAAKqiU,OAAS52P,GAcXitO,GACV7qK,EAED63L,cAAA,SAAcI,GACV9lU,KAAKmkU,cAAe,EAEpB,IACI78S,EADEm9B,EAAOy8Q,IAAuB,GAEpC,GAAI4E,EACAx+S,EAAMy+S,GAAqB/lU,KAAMA,KAAKqkU,WAAYrkU,KAAKwkU,aAEvD,IAA2C,IAAvCjK,GAAYyL,uBACZ1+S,EAAMtnB,KAAKqkU,WAAWvkU,KAAKE,KAAKwkU,aAEhC,IACIl9S,EAAMtnB,KAAKqkU,WAAWvkU,KAAKE,KAAKwkU,QAClC,MAAO5hU,GACL0kB,EAAM,IAAI28S,GAAgBrhU,GAMtC,OAFA++T,GAAqBl9Q,GACrBzkD,KAAKmkU,cAAe,EACb78S,GACVumH,EAEDo4L,SAAA,WACSjmU,KAAK2kU,aACNuB,GAAelmU,MACfA,KAAKqiU,YAASjgU,IAOrByrI,EAEDu1L,SAAA,SAASt0J,EAAmDu0J,cACpD1zO,GAAY,EACZw2O,OAA2B/jU,EAC/B,OAAOgkU,IAAQ,WAEX,IAAI36P,EAAW6uD,EAAKz0H,MACpB,IAAK8pF,GAAa0zO,EAAiB,CAC/B,IAAMgD,EAAQpF,KACdnyJ,EAAS,CACLw0J,eAAgB,WAChBC,gBAAiBjpM,EAAKo8L,MACtB50T,KAAMihU,GACNx0S,OAAQ+rG,EACR7uD,SAAAA,EACA4hK,SAAU84F,IAEdtE,GAAawE,GAEjB12O,GAAY,EACZw2O,EAAY16P,MAEnBoiE,EAED43L,wBAAA,aAkBC53L,EAEDroI,SAAA,WACI,OAAUxF,KAAK02T,MAAK,IAAI12T,KAAKqkU,WAAW7+T,WAAU,KACrDqoI,EAEDznI,QAAA,WACI,OAAOmH,GAAYvN,KAAK6F,QAC3BgoI,EAAA41L,IAED,WACI,OAAOzjU,KAAKoG,WACf81T,CAAA,CA9PqB,GAiQboK,GAAkB7Q,GAA0B,gBAAiByG,KCpU1E,SAAYlF,GAGRA,EAAAA,EAAA,kCAIAA,EAAAA,EAAA,6BAOAA,EAAAA,EAAA,qCAGAA,EAAAA,EAAA,kBACH,CAlBD,CAAYA,KAAAA,GAAiB,KAoB7B,SAAY0M,GACRA,EAAAA,EAAA,eACAA,EAAAA,EAAA,aACAA,EAAAA,EAAA,gBACH,CAJD,CAAYA,KAAAA,GAAS,KAgCrB,IAAaO,GACT,SAAmB2B,QAAAA,WAAA,OAAAA,MAAAA,CAEnB,EAGJ,SAAgBD,GAAkB/iU,GAC9B,OAAOA,aAAaqhU,EACxB,CAaA,SAAgBkB,GAAcd,GAC1B,OAAQA,EAAWV,oBACf,KAAK3M,GAAkB+M,YACnB,OAAO,EACX,KAAK/M,GAAkBC,cACvB,KAAKD,GAAkBuO,OACnB,OAAO,EACX,KAAKvO,GAAkBgO,gBAMnB,IAJA,IAAMuB,EAAsBnF,IAAqB,GAC3CoF,EAAgBvF,KAChBwF,EAAMpC,EAAWT,WACnBz/T,EAAIsiU,EAAIhnU,OACHF,EAAI,EAAGA,EAAI4E,EAAG5E,IAAK,CACxB,IAAMmwB,EAAM+2S,EAAIlnU,GAChB,GAAI+mU,GAAgB52S,GAAM,CACtB,GAAI6qS,GAAYyL,uBACZt2S,EAAI7pB,WAEJ,IACI6pB,EAAI7pB,MACN,MAAOjD,GAIL,OAFAi/T,GAAa2E,GACb5E,GAAmB2E,IACZ,EAMf,GAAKlC,EAAWV,qBAA+B3M,GAAkBuO,OAG7D,OAFA1D,GAAa2E,GACb5E,GAAmB2E,IACZ,GAOnB,OAHAG,GAA2BrC,GAC3BxC,GAAa2E,GACb5E,GAAmB2E,IACZ,EAGnB,CAMA,SAAgB3D,GAAoC5K,GAkBpD,CAeA,SAAgB+N,GAAwB1B,EAAyB7/T,EAAYoH,GACzE,IAAM26T,EAAsBnF,IAAqB,GAGjDsF,GAA2BrC,GAC3BA,EAAWR,cAAgB,IAAIp/T,MAAM4/T,EAAWT,WAAWnkU,OAAS,KACpE4kU,EAAWL,kBAAoB,EAC/BK,EAAWP,SAAWvJ,GAAYoM,MAClC,IAGIphS,EAHEqhS,EAAerM,GAAYsG,mBAIjC,GAHAtG,GAAYsG,mBAAqBwD,EACjC9J,GAAY2K,WAE+B,IAAvC3K,GAAYyL,uBACZzgS,EAAS/gC,EAAE1E,KAAK8L,QAEhB,IACI25B,EAAS/gC,EAAE1E,KAAK8L,GAClB,MAAOhJ,GACL2iC,EAAS,IAAI0+R,GAAgBrhU,GASrC,OANA23T,GAAY2K,UACZ3K,GAAYsG,mBAAqB+F,EAiCrC,SAA0BvC,GAWtB,IATA,IAAMwC,EAAgBxC,EAAWT,WAC3BkD,EAAazC,EAAWT,WAAaS,EAAWR,cAClDkD,EAAoC/P,GAAkB+M,YAKtDiD,EAAK,EACL7iU,EAAIkgU,EAAWL,kBACVzkU,EAAI,EAAGA,EAAI4E,EAAG5E,IAAK,CACxB,IAAMy3L,EAAM8vI,EAAUvnU,GACC,IAAnBy3L,EAAI6/H,aACJ7/H,EAAI6/H,WAAa,EACbmQ,IAAOznU,IACPunU,EAAUE,GAAMhwI,GAEpBgwI,KAKChwI,EAA2B2sI,mBAAqBoD,IACjDA,EAAqC/vI,EAA2B2sI,oBAGxEmD,EAAUrnU,OAASunU,EAEnB3C,EAAWR,cAAgB,KAK3B1/T,EAAI0iU,EAAcpnU,OAClB,KAAO0E,KAAK,CACR,IAAM8iU,EAAMJ,EAAc1iU,GACH,IAAnB8iU,EAAIpQ,YACJhqC,GAAeo6C,EAAK5C,GAExB4C,EAAIpQ,WAAa,EAMrB,KAAOmQ,KAAM,CACT,IAAME,EAAMJ,EAAUE,GACC,IAAnBE,EAAIrQ,aACJqQ,EAAIrQ,WAAa,EACjBlqC,GAAYu6C,EAAK7C,IAMrB0C,IAAsC/P,GAAkB+M,cACxDM,EAAWV,mBAAqBoD,EAChC1C,EAAWU,iBAEnB,CA5FIoC,CAAiB9C,GAGjBzC,GAAmB2E,GACZhhS,CACX,CAyFA,SAAgB2gS,GAAe7B,GAE3B,IAAMoC,EAAMpC,EAAWT,WACvBS,EAAWT,WAAa,GAExB,IADA,IAAIrkU,EAAIknU,EAAIhnU,OACLF,KACHstR,GAAe45C,EAAIlnU,GAAI8kU,GAG3BA,EAAWV,mBAAqB3M,GAAkBC,aACtD,CAEA,SAAgBmQ,GAAa53P,GACzB,IAAM/qB,EAAOw8Q,KACb,IACI,OAAOzxP,IACT,QACEqyP,GAAap9Q,GAErB,CAEA,SAAgBw8Q,KACZ,IAAMx8Q,EAAO81Q,GAAYsG,mBAEzB,OADAtG,GAAYsG,mBAAqB,KAC1Bp8Q,CACX,CAEA,SAAgBo9Q,GAAap9Q,GACzB81Q,GAAYsG,mBAAqBp8Q,CACrC,CAEA,SAAgB28Q,GAAqBiG,GACjC,IAAM5iR,EAAO81Q,GAAY8M,gBAEzB,OADA9M,GAAY8M,gBAAkBA,EACvB5iR,CACX,CAEA,SAAgBm9Q,GAAmBn9Q,GAC/B81Q,GAAY8M,gBAAkB5iR,CAClC,CAMA,SAAgBiiR,GAA2BrC,GACvC,GAAIA,EAAWV,qBAAuB3M,GAAkB+M,YAAxD,CAGAM,EAAWV,mBAAqB3M,GAAkB+M,YAIlD,IAFA,IAAM0C,EAAMpC,EAAWT,WACnBrkU,EAAIknU,EAAIhnU,OACLF,KACHknU,EAAIlnU,GAAGw3T,qBAAuBC,GAAkB+M,YAExD,CE7UA,IAgBauD,GAAW,gBASpBhtN,QAAU,EAAC,KAKXooN,UAAwB,CAAC,EAAC,KAK1B7B,mBAAyC,KAAI,KAO7CwE,gBAAwD,KAAI,KAK5DsB,MAAQ,EAAC,KAKTY,SAAW,EAAC,KAKZrC,QAAkB,EAAC,KAQnBsC,sBAAuC,GAAE,KAKzCC,iBAA+B,GAAE,KAKjCC,oBAAqB,EAAK,KAO1B1G,mBAAoB,EAAK,KAMzBqG,iBAAkB,EAAI,KAKtBM,gBAAqC,EAAI,KAKzCC,aAA0C,GAAE,KAK5CC,4BAAiF,GAAE,KAKnFC,0BAA2B,EAAK,KAMhCC,4BAA6B,EAAK,KAMlCC,4BAA6B,EAAK,KAMlChC,wBAAyB,EAAK,KAM9BtE,wBAAyB,EAAK,KAE9B3C,YAAa,EAAI,KAIjBkJ,eAAgB,EAAK,KAOrB3N,iBAAkB,CAAI,EAGtB4N,IAAsB,EACtBC,IAAgB,EAET5N,GAA4B,WACnC,IAAI7vT,EAASC,KAQb,OAPID,EAAO09T,oBAAsB,IAAM19T,EAAO29T,gBAC1CH,IAAsB,GAEtBx9T,EAAO29T,eAAiB39T,EAAO29T,cAAc/tN,WAAY,IAAIgtN,IAAchtN,UAC3E4tN,IAAsB,GAGrBA,GASMx9T,EAAO29T,eACd39T,EAAO09T,qBAAuB,EACzB19T,EAAO29T,cAAc3F,YACtBh4T,EAAO29T,cAAc3F,UAAY,CAAC,GAE/Bh4T,EAAO29T,gBAEd39T,EAAO09T,oBAAsB,EACrB19T,EAAO29T,cAAgB,IAAIf,KAdnC30T,YAAW,WACFw1T,IACD1T,GAAI,MAET,GACI,IAAI6S,GAWnB,CA5BuC,GD5FvC,SAAgB36C,GAAY9+Q,EAAyBqhB,GAKjDrhB,EAAWs+Q,WAAWnmR,IAAIkpB,GACtBrhB,EAAWkpT,qBAAuB7nS,EAAKy0S,qBACvC91T,EAAWkpT,qBAAuB7nS,EAAKy0S,mBAK/C,CAEA,SAAgB92C,GAAeh/Q,EAAyBqhB,GAIpDrhB,EAAWs+Q,WAAU,OAAQj9P,GACM,IAA/BrhB,EAAWs+Q,WAAWzxN,MAEtB4tQ,GAAsBz6T,EAI9B,CAEA,SAAgBy6T,GAAsBz6T,IACS,IAAvCA,EAAW8oT,0BAEX9oT,EAAW8oT,yBAA0B,EACrC4D,GAAYiN,sBAAsB3gU,KAAKgH,GAE/C,CAOA,SAAgB2pT,KACZ+C,GAAY2K,SAChB,CAEA,SAAgBxN,KACZ,GAA8B,MAAxB6C,GAAY2K,QAAe,CAC7BqD,KAGA,IADA,IAAMr/M,EAAOqxM,GAAYiN,sBAChBjoU,EAAI,EAAGA,EAAI2pH,EAAKzpH,OAAQF,IAAK,CAClC,IAAMsO,EAAaq7G,EAAK3pH,GACxBsO,EAAW8oT,yBAA0B,EACF,IAA/B9oT,EAAWs+Q,WAAWzxN,OAClB7sD,EAAW+oT,mBAEX/oT,EAAW+oT,kBAAmB,EAC9B/oT,EAAWwpT,SAEXxpT,aAAsBquT,IAGtBruT,EAAWo4T,YAIvB1L,GAAYiN,sBAAwB,GAE5C,CAEA,SAAgBlQ,GAAezpT,GAG3B,IAAMw2T,EAAa9J,GAAYsG,mBAC/B,OAAmB,OAAfwD,GAMIA,EAAWP,SAAWj2T,EAAWipT,kBACjCjpT,EAAWipT,gBAAkBuN,EAAWP,OAExCO,EAAWR,cAAeQ,EAAWL,qBAAuBn2T,GACvDA,EAAW+oT,kBAAoB2D,GAAY8K,kBAC5Cx3T,EAAW+oT,kBAAmB,EAC9B/oT,EAAWupT,SAGZvpT,EAAW+oT,mBACoB,IAA/B/oT,EAAWs+Q,WAAWzxN,MAAc6/P,GAAY2K,QAAU,GACjEoD,GAAsBz6T,IAGnB,EACX,CAyBA,SAAgB4pT,GAAiB5pT,GAEzBA,EAAWkpT,uBAAyBC,GAAkBuO,SAG1D13T,EAAWkpT,qBAAuBC,GAAkBuO,OAGpD13T,EAAWs+Q,WAAWvkR,SAAQ,SAAA3G,GACtBA,EAAE0iU,qBAAuB3M,GAAkB+M,aAI3C9iU,EAAE8jU,iBAEN9jU,EAAE0iU,mBAAqB3M,GAAkBuO,UAGjD,KEtJaiD,GAAQ,WAajB,SAAAA,EACW9R,EACC+R,EACAC,EACDC,QAHA,IAAAjS,IAAAA,EAAsD,YAAU,KAAhEA,WAAA,OACC+R,mBAAA,OACAC,mBAAA,OACDC,yBAAA,OAhBX/E,WAA4B,GAAE,KAC9BC,cAA+B,GAAE,KACjCF,mBAAqB3M,GAAkBC,cAAa,KACpDJ,WAAa,EAAC,KACdiN,OAAS,EAAC,KACVE,kBAAoB,EAAC,KACrB4E,aAAc,EAAK,KACnBC,cAAe,EAAK,KACpBC,iBAAkB,EAAK,KACvBC,YAAa,EAAK,KAClBxE,WAAwBb,GAAUtzC,KAGvB,KAAAsmC,MAAAA,EACC,KAAA+R,cAAAA,EACA,KAAAC,cAAAA,EACD,KAAAC,oBAAAA,EACP,IAAA96L,EAAA26L,EAAA5oU,UAgJH,OAhJGiuI,EAEJk3L,eAAA,WACI/kU,KAAKgpU,aACRn7L,EAEDm7L,UAAA,WACShpU,KAAK6oU,eACN7oU,KAAK6oU,cAAe,EACpBtO,GAAYkN,iBAAiB5gU,KAAK7G,MAClCuoU,OAEP16L,EAEDo7L,YAAA,WACI,OAAOjpU,KAAK6oU,cAGhBh7L,EAGAq7L,aAAA,WACI,IAAKlpU,KAAK4oU,YAAa,CACnBpR,KACAx3T,KAAK6oU,cAAe,EACpB,IAAMpkR,EAAO81Q,GAAY8K,gBAEzB,GADA9K,GAAY8K,gBAAkBrlU,KAC1BmlU,GAAcnlU,MAAO,CACrBA,KAAK8oU,iBAAkB,EAEvB,IACI9oU,KAAKyoU,gBAQP,MAAO7lU,GACL5C,KAAKmpU,6BAA6BvmU,IAG1C23T,GAAY8K,gBAAkB5gR,EAC9BizQ,OAEP7pL,EAEDi4L,MAAA,SAAM7xP,GACF,IAAIj0E,KAAK4oU,YAAT,CAIApR,KAGI9/R,EAOJ13B,KAAK+oU,YAAa,EAClB,IAAMK,EAAe7O,GAAY8K,gBACjC9K,GAAY8K,gBAAkBrlU,KAC9B,IAAMulC,EAASwgS,GAAqB/lU,KAAMi0E,OAAI7xE,GAC9Cm4T,GAAY8K,gBAAkB+D,EAC9BppU,KAAK+oU,YAAa,EAClB/oU,KAAK8oU,iBAAkB,EACnB9oU,KAAK4oU,aAEL1C,GAAelmU,MAEf2lU,GAAkBpgS,IAClBvlC,KAAKmpU,6BAA6B5jS,EAAOqgS,OAO7ClO,OACH7pL,EAEDs7L,6BAAA,SAA6B/8T,cACzB,GAAIpM,KAAK0oU,cACL1oU,KAAK0oU,cAAct8T,EAAOpM,UAD9B,CAKA,GAAIu6T,GAAYyL,uBACZ,MAAM55T,EAGV,IAAMsnB,EAC0G,6BAC7E1zB,KAAI,IAClCu6T,GAAYmH,wBACbj4T,QAAQ2C,MAAMsnB,EAAStnB,GAa3BmuT,GAAYsN,4BAA4BjgU,SAAQ,SAAApD,GAAC,OAAIA,EAAE4H,EAAOkuH,QACjEuT,EAEDw7L,QAAA,WACSrpU,KAAK4oU,cACN5oU,KAAK4oU,aAAc,EACd5oU,KAAK+oU,aAENvR,KACA0O,GAAelmU,MACf03T,QAGX7pL,EAEDy7L,aAAA,SAAaC,cACHF,EAAW,SAAXA,IACF1qM,EAAK0qM,UACM,MAAXE,GAAgC,MAAhCA,EAAa9qM,qBAAb8qM,EAAa9qM,oBAAsB,QAAS4qM,IAKhD,OAHW,MAAXE,GAA6B,MAA7BA,EAAav2T,kBAAbu2T,EAAav2T,iBAAmB,QAASq2T,GACzCA,EAAQ7S,IAASx2T,KAEVqpU,GACVx7L,EAEDroI,SAAA,WACI,MAAO,YAAYxF,KAAK02T,MAAK,KAChC7oL,EAED27L,MAAA,SAAMC,QAAA,IAAAA,IAAAA,GAA2B,IAEhCjB,CAAA,CAlKgB,GAoLrB,IAAMkB,GAA0B,IAE5BC,GAA8C,SAAAnlU,GAAC,OAAIA,GAAG,EAE1D,SAAgB+jU,KAERhO,GAAY2K,QAAU,GAAK3K,GAAYmN,oBAG3CiC,GAAkBC,GACtB,CAEA,SAASA,KACLrP,GAAYmN,oBAAqB,EAOjC,IANA,IAAMmC,EAAetP,GAAYkN,iBAC7BqC,EAAa,EAKVD,EAAapqU,OAAS,GAAG,GACtBqqU,IAAeJ,KACjBjgU,QAAQ2C,MAG+E,6BAChDy9T,EAAa,IAEpDA,EAAax7T,OAAO,IAGxB,IADA,IAAI07T,EAAqBF,EAAax7T,OAAO,GACpC9O,EAAI,EAAG4E,EAAI4lU,EAAmBtqU,OAAQF,EAAI4E,EAAG5E,IAClDwqU,EAAmBxqU,GAAG2pU,eAG9B3O,GAAYmN,oBAAqB,CACrC,CAEA,IAAasC,GAAavU,GAA0B,WAAY+S,IC/PzD,IAAMyB,GAAS,SAETC,GAAa,aAGpBC,GAAsB,mBAEtBC,GAAmBxR,GAAuBqR,IAC1CI,GAAwBzR,GAPF,eAOuC,CAC/DS,OAAO,IAELiR,GAAuB1R,GAAuBsR,GAAY,CAC5DxR,YAAY,IAEV6R,GAA4B3R,GAXF,mBAW2C,CACvEF,YAAY,EACZW,OAAO,IAuBX,SAASmR,GAAoB9R,GAmCzB,OAlC4B,SAAgBqH,EAAMpB,GAE9C,OAAIp4P,GAAWw5P,GACJ5F,GAAa4F,EAAKruT,MAAQy4T,GAAqBpK,EAAMrH,GAG5DnyP,GAAWo4P,GACJxE,GAAa4F,EAAMpB,EAAMjG,GAGhCxC,GAAiByI,IACTjG,EAAa4R,GAAuBF,IAAkBjU,gBAC1D4J,EACApB,GAIJvJ,GAAYuJ,GACLvI,GAAgB2J,EAAMpB,EAAMjG,EAAa4R,GAAuBF,IAGvEhV,GAAY2K,GACL9J,GACH2C,GAAuBF,EAAawR,GAAaD,GAAQ,CACrDv4T,KAAMquT,EACNrH,WAAAA,UAKZhhS,EAKR,CAEA,IAAa83C,GAAyBg7P,IAAoB,GAC1DrrU,OAAOC,OAAOowE,GAAQ46P,IACtB,IAAa1R,GAA6B8R,IAAoB,GAU9D,SAAgBhS,GAAS5C,GACrB,OAAOrvP,GAAWqvP,KAAiC,IAAvBA,EAAMyE,YACtC,CCrEA,SAAgB+L,GACZ16O,EACAvjF,sBAAA,IAAAA,IAAAA,EAAwB4sT,IAWxB,IAGI0V,EAHE/4T,EACQ,OADJg5T,EACF,OADEr+M,EACNlkH,QAAI,EAAJkkH,EAAM36G,MAAIg5T,EAAgE,UAI9E,IAHiBviU,EAAKwiU,YAAcxiU,EAAK8zE,MAKrCwuP,EAAW,IAAIjC,GACX92T,GACA,WACI1R,KAAK8lU,MAAM8E,KAEfziU,EAAKojM,QACLpjM,EAAK0iU,wBAEN,CACH,IAAMF,EAAYG,GAA2B3iU,GAEzC8gU,GAAc,EAElBwB,EAAW,IAAIjC,GACX92T,GACA,WACSu3T,IACDA,GAAc,EACd0B,GAAU,WACN1B,GAAc,EACTwB,EAAS7B,aACV6B,EAAS3E,MAAM8E,SAK/BziU,EAAKojM,QACLpjM,EAAK0iU,oBAIb,SAASD,IACLl/O,EAAK++O,GAMT,OAHQ,OAALM,EAAC5iU,IAAY,OAAR6iU,EAAJD,EAAME,SAAND,EAAcE,SACdT,EAASzB,YAENyB,EAASnB,aAAiB,OAAL6B,EAAChjU,QAAI,EAAJgjU,EAAMF,OACvC,CDDA9rU,OAAOC,OAAOs5T,GAAY4R,IAE1B96P,GAAO6pP,MAAQpD,GAA0BoU,IACzC3R,GAAWW,MAAQpD,GAA0BsU,ICK7C,IAAM/vD,GAAM,SAACh2Q,GAAS,OAAKA,GAAG,EAE9B,SAASsmU,GAA2B3iU,GAChC,OAAOA,EAAKwiU,UACNxiU,EAAKwiU,UACLxiU,EAAK8zE,MACL,SAACz3E,GAAS,OAAKmO,WAAWnO,EAAG2D,EAAK8zE,QAClCu+L,EACV,CnBnGA,IAAM09C,GAAqB,OACrBkT,GAAuB,QAoC7B,SAAgBjT,GAAmBvC,EAAO+I,EAAM5G,GAC5C,OAAOE,GAAcmT,GAAsBxV,EAAO+I,EAAM5G,EAC5D,CAEA,SAASE,GAAcoT,EAAwBzV,EAAO+I,EAAM5G,GACxD,IAAMC,EACc,oBAATD,EAAsBuT,GAAQ1V,EAAO+I,GAAS2M,GAAQ1V,GAC3DhoQ,EAAK2Y,GAAWwxP,GAAQA,EAAO4G,EAC/B4M,EAAkBF,EAAI,IAQ5B,OANIrT,EAAKuT,GACLvT,EAAKuT,GAAevlU,IAAI4nD,GAExBoqQ,EAAKuT,GAAgB,IAAI5nU,IAAY,CAACiqD,IAGnC,WACH,IAAM49Q,EAAgBxT,EAAKuT,GACvBC,IACAA,EAAa,OAAQ59Q,GACM,IAAvB49Q,EAAc9wQ,aACPs9P,EAAKuT,IAI5B,CoBxEA,IAAME,GAAQ,QACRC,GAAS,SACTC,GAAW,WAGjB,SAAgBC,GAAUv6R,IAiBa,IAA/BA,EAAQw6R,oBJmKhB,WASI,IAPItR,GAAYkN,iBAAiBhoU,QAC7B86T,GAAY2K,SACZ3K,GAAYmN,qBAEZjT,GAAI,IAER0T,IAAgB,EACZD,GAAqB,CACrB,IAAIx9T,EAASC,KACwB,MAA/BD,EAAO09T,sBACT19T,EAAO29T,mBAAgBjmU,GAE3Bm4T,GAAc,IAAI+M,GAE1B,CIlLQuE,GAEJ,IAAQ9M,EAA+B1tR,EAA/B0tR,WAAY4I,EAAmBt2R,EAAnBs2R,eAYpB,QAXmBvlU,IAAf28T,IACAxE,GAAYwE,WACRA,IAAe2M,IAET3M,IAAe0M,IAEE,qBAAV19M,OAEF,gBAAfgxM,IACAxE,GAAY0N,eAAgB,QAET7lU,IAAnBulU,EAA8B,CAC9B,IAAMmE,EAAKnE,IAAmB+D,GAASA,GAAS/D,IAAmBgE,GACnEpR,GAAYoN,eAAiBmE,EAC7BvR,GAAYyG,mBAA2B,IAAP8K,GAAeA,IAAOJ,GAEzD,CACG,2BACA,6BACA,6BACA,yBACA,mBACF9jU,SAAQ,SAAAjI,GACFA,KAAO0xC,IACPkpR,GAAY56T,KAAS0xC,EAAQ1xC,OAGrC46T,GAAY8M,iBAAmB9M,GAAYyN,2BAMvC32R,EAAQs4R,mBHmNhB,SAAqC11P,GACjC,IAAM83P,EAAgBpC,GACtBA,GAAoB,SAAAnlU,GAAC,OAAIyvE,GAAG,kBAAM83P,EAAcvnU,MACpD,CGrNQwnU,CAAqB36R,EAAQs4R,kBAErC,UCjDgBrK,GACZhgU,EACA0e,EACAiuT,EACA56R,GAoBA,IAAM+pE,EAAcztG,GAA0BqQ,GAc9C,OAZAqhT,IAAe,WACX,IAAMlG,EAAsC6C,GAAmB18T,EAAQ+xC,GAASmlR,IAChFtmL,GAAQ90B,GAAaxzG,SAAQ,SAAAjI,GACzBw5T,EAAIH,QACAr5T,EACAy7G,EAAYz7G,IAEXssU,MAAqBtsU,KAAOssU,IAAcA,EAAYtsU,WAK5DL,CACX,UC1CgB4sU,GAAkBtW,EAAYhkS,GAC1C,OAAOu6S,GAAqBb,GAAQ1V,EAAOhkS,GAC/C,CAEA,SAASu6S,GAAqBj9S,GAC1B,IAuBeg6F,EAvBT3jF,EAA0B,CAC5B7zB,KAAMwd,EAAKwnS,OAKf,OAHIxnS,EAAK00S,YAAc10S,EAAK00S,WAAWnkU,OAAS,IAC5C8lC,EAAOqE,cAmBIs/E,EAnBkBh6F,EAAK00S,WAoB/Bn/T,MAAMkB,KAAK,IAAIhC,IAAIulH,KApBwBz4G,IAAI07T,KAE/C5mS,CACX,CCPA,IAAI6mS,GAAc,EAElB,SAAgBC,KACZrsU,KAAK0zB,QAAU,gBACnB,CACA24S,GAAsBzsU,UAAYT,OAAOiI,OAAOgH,MAAMxO,WAetD,IAAM0sU,GAAiBpR,GAAqB,QACtCqR,GAAsBrR,GAAqB,aAAc,CAAE7B,OAAO,IAE3D35O,GAAavgF,OAAOC,QAC7B,SAAc2gU,EAAMpB,GAEhB,GAAIzI,GAAiByI,GACjB,OAAO2N,GAAenW,gBAAgB4J,EAAMpB,GAGhD,GAAIvJ,GAAYuJ,GACZ,OAAOvI,GAAgB2J,EAAMpB,EAAM2N,IAMvC,IAAME,EAAYzM,EACZruT,EAAO86T,EAAU96T,MAAQ,iBAGzB4V,EAAM,WACR,IAIImlT,EAHExiU,EAAOzK,UACPmnU,IAAUyF,GACVr5S,EAAMy8C,GAAU99D,EAAI,aAAai1T,EAAK,UAAW6F,GAAWzsU,MAHtDC,KAGiEiK,GAEzEyiU,OAAsDtqU,EAEpD8lH,EAAU,IAAI7kH,SAAQ,SAAUm1B,EAASyqD,GAC3C,IAAI0pP,EAAS,EAGb,SAAS9jN,EAAYvhG,GAEjB,IAAI0iC,EADJ0iR,OAAiBtqU,EAEjB,IACI4nD,EAAMwlB,GACC99D,EAAI,aAAai1T,EAAK,YAAYgG,IACrC55S,EAAIrkB,MACN5O,KAAKizB,EAAKzL,GACd,MAAO1kB,GACL,OAAOqgF,EAAOrgF,GAGlB8L,EAAKs7C,GAGT,SAASw9D,EAAWv0F,GAEhB,IAAI+2B,EADJ0iR,OAAiBtqU,EAEjB,IACI4nD,EAAMwlB,GACC99D,EAAI,aAAai1T,EAAK,YAAYgG,IACrC55S,EAAG,OACLjzB,KAAKizB,EAAKE,GACd,MAAOrwB,GACL,OAAOqgF,EAAOrgF,GAElB8L,EAAKs7C,GAGT,SAASt7C,EAAKs7C,GACV,IAAIuc,GAAc,MAAHvc,OAAG,EAAHA,EAAKx2C,MAKpB,OAAIw2C,EAAImzB,KACG3kD,EAAQwxB,EAAI9iD,QAEvBwlU,EAAiBrpU,QAAQm1B,QAAQwxB,EAAI9iD,QACdsM,KAAKq1G,EAAarB,GAPrCx9D,EAAIx2C,KAAK9E,EAAMu0E,GAlCvBwpP,EAAWxpP,EA4CX4lC,OAAYzmH,MAoBhB,OAjBA8lH,EAAQpsC,OAAStM,GAAU99D,EAAI,aAAai1T,EAAK,aAAa,WAC1D,IACQ+F,GACAE,GAAcF,GAGlB,IAAMG,EAAM95S,EAAG,YAAS3wB,GAElB0qU,EAAiBzpU,QAAQm1B,QAAQq0S,EAAI3lU,OAC3C4lU,EAAet5T,KAAK2uC,GAAMA,IAC1ByqR,GAAcE,GAEdL,EAAS,IAAIJ,IACf,MAAOzpU,GACL6pU,EAAS7pU,OAGVslH,GAGX,OADA5gG,EAAIm0S,YAAa,EACVn0S,CACX,GACAglT,IAKJ,SAASM,GAAc1kN,GACf3hD,GAAW2hD,EAAQpsC,SACnBosC,EAAQpsC,QAEhB,CAYA,SAAgB28O,GAAOxkP,GACnB,OAA0B,KAAjB,MAAFA,OAAE,EAAFA,EAAIwnP,WACf,CCpJA,SAASsR,GAAc7lU,EAAO0qB,GAC1B,QAAK1qB,SAGY9E,IAAbwvB,IAMIssS,GAAmBh3T,IACZA,EAAMsvT,IAAOyF,QAAQn2T,IAAI8rB,GAMpCssS,GAAmBh3T,MACjBA,EAAMsvT,KACRmB,GAAOzwT,IACP8iU,GAAW9iU,IACXo/T,GAAgBp/T,GAExB,CAEA,SAAgBqxT,GAAarxT,GAMzB,OAAO6lU,GAAc7lU,EACzB,CCnCA,SAAgB8lU,GAAex9P,EAAiBjY,QAAO,IAAPA,IAAAA,OAAUn1D,GACtDo1T,KACA,IACI,OAAOhoP,EAAOzvE,MAAMw3D,GACtB,QACEmgQ,KAER,ChBHA,SAASuV,GAAO3tU,GACZ,OAAOA,EAAOk3T,GAClB,Cc6HA92O,GAAK25O,MAAQpD,GAA0BsW,IdzHvC,IAAM9M,GAAsC,CACxC35T,IAAG,SAACxG,EAA6BoS,GAM7B,OAAOu7T,GAAO3tU,GAAQ4tU,KAAKx7T,IAE/B7L,IAAG,SAACvG,EAA6BoS,GAC7B,OAAOu7T,GAAO3tU,GAAQ6tU,KAAKz7T,IAE/B3L,IAAG,SAACzG,EAA6BoS,EAAmBxK,SAChD,QAAKkuT,GAAY1jT,KAS4B,OAA7C07T,EAAOH,GAAO3tU,GAAQ+tU,KAAK37T,EAAMxK,GAAO,KAAKkmU,IAEjDE,eAAc,SAAChuU,EAA6BoS,SAMxC,QAAK0jT,GAAY1jT,KAIwB,OAAzC67T,EAAON,GAAO3tU,GAAQkuU,QAAQ97T,GAAM,KAAK67T,IAE7CvmU,eAAc,SACV1H,EACAoS,EACAynH,SAQA,OAAuD,OAAvDs0M,EAAOR,GAAO3tU,GAAQo6T,gBAAgBhoT,EAAMynH,KAAWs0M,GAE3Dv9L,QAAO,SAAC5wI,GAMJ,OAAO2tU,GAAO3tU,GAAQouU,YAE1BC,kBAAiB,SAACruU,GACdm1T,GAAI,eiBrEIoO,GAAgB+K,GAC5B,YAAuCxrU,IAAhCwrU,EAAczL,eAA+ByL,EAAczL,cAAc1iU,OAAS,CAC7F,CAEA,SAAgB0jU,GACZyK,EACA7wL,GAEA,IAAM8wL,EAAeD,EAAczL,gBAAkByL,EAAczL,cAAgB,IAEnF,OADA0L,EAAahnU,KAAKk2I,GACXn6D,IAAK,WACR,IAAM8rE,EAAMm/K,EAAatjU,QAAQwyI,IACpB,IAAT2R,GACAm/K,EAAax/T,OAAOqgJ,EAAK,KAGrC,CAEA,SAAgBo0K,GACZ8K,EACAp1F,GAEA,IAAM6tF,EAAQpF,KACd,IAGI,IADA,IAAM4M,EAAe,GAAHnlU,OAAQklU,EAAczL,eAAiB,IAChD5iU,EAAI,EAAG4E,EAAI0pU,EAAapuU,OAAQF,EAAI4E,KACzCq0O,EAASq1F,EAAatuU,GAAGi5O,MACTA,EAAe12O,MAC3B2yT,GAAI,IAEHj8E,GALuCj5O,KAShD,OAAOi5O,EACT,QACEqpF,GAAawE,GAErB,UCzCgBrD,GAAa8K,GACzB,YAAuC1rU,IAAhC0rU,EAAW1L,kBAAkC0L,EAAW1L,iBAAiB3iU,OAAS,CAC7F,CAEA,SAAgB+jU,GAAiBsK,EAAyB/wL,GACtD,IAAMh1B,EAAY+lN,EAAW1L,mBAAqB0L,EAAW1L,iBAAmB,IAEhF,OADAr6M,EAAUlhH,KAAKk2I,GACRn6D,IAAK,WACR,IAAM8rE,EAAM3mC,EAAUx9G,QAAQwyI,IACjB,IAAT2R,GACA3mC,EAAU15G,OAAOqgJ,EAAK,KAGlC,CAEA,SAAgBu0K,GAAmB6K,EAAyBt1F,GACxD,IAAM6tF,EAAQpF,KACVl5M,EAAY+lN,EAAW1L,iBAC3B,GAAKr6M,EAAL,CAIA,IAAK,IAAIxoH,EAAI,EAAG4E,GADhB4jH,EAAYA,EAAUtiH,SACQhG,OAAQF,EAAI4E,EAAG5E,IACzCwoH,EAAUxoH,GAAGi5O,GAEjBqpF,GAAawE,GACjB,UCNgB0H,GACZzuU,EACA2sU,EACA56R,GAeA,OAbAguR,IAAe,eACLlG,EAAsC6C,GAAmB18T,EAAQ+xC,GAASmlR,IAOrE,MAAXyV,IAAAA,E/B8BR,SAAyC3sU,GAUrC,OATKy2T,GAAQz2T,EAAQ02T,KAOjBT,GAAcj2T,EAAQ02T,GAAuB92T,GAAA,GAAOI,EAAO02T,MAExD12T,EAAO02T,GAClB,C+BzCwBgY,CAAyB1uU,IAGzC4wI,GAAQ+7L,GAAarkU,SAAQ,SAAAjI,GAAG,OAAIw5T,EAAIL,MAAMn5T,EAAKssU,EAAatsU,UAE7DL,CACX,CCbA,IAAM2uU,GAAS,SACFlL,GAAS,SAiDhBmL,GAAa,CACfroU,IAAG,SAACvG,EAAQoS,GACR,IAAMynT,EAAqC75T,EAAOk3T,IAClD,OAAI9kT,IAAS8kT,GACF2C,EAEE,WAATznT,EACOynT,EAAIgV,kBAEK,kBAATz8T,GAAsB80E,MAAM90E,GAGnCqkT,GAAQqY,GAAiB18T,GAClB08T,GAAgB18T,GAEpBpS,EAAOoS,GALHynT,EAAIgU,KAAKjsT,SAASxP,KAOjC3L,IAAG,SAACzG,EAAQoS,EAAMxK,GACd,IAAMiyT,EAAqC75T,EAAOk3T,IAUlD,MATa,WAAT9kT,GACAynT,EAAIkV,gBAAgBnnU,GAEJ,kBAATwK,GAAqB80E,MAAM90E,GAClCpS,EAAOoS,GAAQxK,EAGfiyT,EAAIkU,KAAKnsT,SAASxP,GAAOxK,IAEtB,GAEXymU,kBAAiB,WACblZ,GAAI,MAIC6Z,GAA6B,WAYtC,SAAAA,EACI58T,EACAirT,EACO4R,EACAC,QAHH,IAAJ98T,IAAAA,EAAoD,mBAAiB,KAE9D68T,YAAA,OACAC,iBAAA,OAbXC,WAAK,OACIxS,QAAiB,GAAE,KAC5BkG,mBAAa,OACbC,sBAAgB,OAChBsM,eAAS,OACTpM,cAAQ,OACR5H,YAAM,OACNiU,iBAAmB,EAKR,KAAAJ,OAAAA,EACA,KAAAC,YAAAA,EAEPxuU,KAAKyuU,MAAQ,IAAIhY,GAAK/kT,GACtB1R,KAAK0uU,UAAY,SAACE,EAAMC,GAAI,OACxBlS,EAASiS,EAAMC,EAAgC,wBACtD,IAAAhhM,EAAAygM,EAAA1uU,UAmQA,OAnQAiuI,EAEDihM,cAAA,SAAc5nU,GACV,YAAsB9E,IAAlBpC,KAAKsiU,SACEtiU,KAAKsiU,SAASp7T,GAElBA,GACV2mI,EAEDkhM,eAAA,SAAen8T,GACX,YAAsBxQ,IAAlBpC,KAAKsiU,UAA0B1vT,EAAOnT,OAAS,EACxCmT,EAAOnC,IAAIzQ,KAAKsiU,UAEpB1vT,GACVi7H,EAEDq1L,WAAA,SAAWnmL,GACP,OAAOomL,GAAmEnjU,KAAM+8I,IACnFlP,EAEDu1L,SAAA,SACIt0J,EACAu0J,GAeA,YAfe,IAAfA,IAAAA,GAAkB,GAEdA,GACAv0J,EAA4B,CACxBw0J,eAAgB,QAChB/0S,OAAQvuB,KAAK06T,OACb6I,gBAAiBvjU,KAAKyuU,MAAM/X,MAC5B50T,KAAM,SACN4vB,MAAO,EACPs9S,MAAOhvU,KAAKi8T,QAAQx2T,QACpBwpU,WAAYjvU,KAAKi8T,QAAQx8T,OACzByvU,QAAS,GACTC,aAAc,IAGf3L,GAAiBxjU,KAAM8uK,IACjCjhC,EAEDsgM,gBAAA,WAEI,OADAnuU,KAAKyuU,MAAMnX,iBACJt3T,KAAKi8T,QAAQx8T,QACvBouI,EAEDwgM,gBAAA,SAAgBe,IACa,kBAAdA,GAA0B5oP,MAAM4oP,IAAcA,EAAY,IACjE3a,GAAI,iBAAmB2a,GAE3B,IAAIC,EAAgBrvU,KAAKi8T,QAAQx8T,OACjC,GAAI2vU,IAAcC,EAEX,GAAID,EAAYC,EAAe,CAElC,IADA,IAAMC,EAAW,IAAI7qU,MAAM2qU,EAAYC,GAC9B9vU,EAAI,EAAGA,EAAI6vU,EAAYC,EAAe9vU,IAC3C+vU,EAAS/vU,QAAK6C,EAElBpC,KAAKuvU,iBAAiBF,EAAe,EAAGC,QAExCtvU,KAAKuvU,iBAAiBH,EAAWC,EAAgBD,IAExDvhM,EAED2hM,mBAAA,SAAmBC,EAAmB39L,GAC9B29L,IAAczvU,KAAK2uU,kBACnBla,GAAI,IAERz0T,KAAK2uU,kBAAoB78L,EACrB9xI,KAAKwuU,aAAe18L,EAAQ,GAC5B49L,GAAmBD,EAAY39L,EAAQ,IAE9CjE,EAED0hM,iBAAA,SAAiB79S,EAAei+S,EAAsBL,cACdtvU,KAAKyuU,MACzC,IAAMhvU,EAASO,KAAKi8T,QAAQx8T,OAsB5B,QApBc2C,IAAVsvB,EACAA,EAAQ,EACDA,EAAQjyB,EACfiyB,EAAQjyB,EACDiyB,EAAQ,IACfA,EAAQ5jB,KAAKgwB,IAAI,EAAGr+B,EAASiyB,IAI7Bi+S,EADqB,IAArBnwU,UAAUC,OACIA,EAASiyB,OACAtvB,IAAhButU,GAA6C,OAAhBA,EACtB,EAEA7hU,KAAKgwB,IAAI,EAAGhwB,KAAK2lC,IAAIk8R,EAAalwU,EAASiyB,SAG5CtvB,IAAbktU,IACAA,EAAWza,IAGXgO,GAAgB7iU,MAAO,CACvB,IAAMw4O,EAASsqF,GAAuC9iU,KAAa,CAC/DuuB,OAAQvuB,KAAK06T,OACb54T,KAAMmsU,GACNv8S,MAAAA,EACAy9S,aAAcQ,EACdX,MAAOM,IAEX,IAAK92F,EACD,OAAOq8E,GAEX8a,EAAcn3F,EAAO22F,aACrBG,EAAW92F,EAAOw2F,MAKtB,GAFAM,EACwB,IAApBA,EAAS7vU,OAAe6vU,EAAWA,EAAS7+T,KAAI,SAAA/J,GAAC,OAAI4zH,EAAKo0M,UAAUhoU,OAAGtE,MACvEpC,KAAKwuU,YAAwB,CAC7B,IAAMoB,EAAcN,EAAS7vU,OAASkwU,EACtC3vU,KAAKwvU,mBAAmB/vU,EAAQmwU,GAEpC,IAAMtoT,EAAMtnB,KAAK6vU,uBAAuBn+S,EAAOi+S,EAAaL,GAK5D,OAHoB,IAAhBK,GAAyC,IAApBL,EAAS7vU,QAC9BO,KAAK8vU,mBAAmBp+S,EAAO49S,EAAUhoT,GAEtCtnB,KAAK+uU,eAAeznT,IAC9BumH,EAEDgiM,uBAAA,SAAuBn+S,EAAei+S,EAAqBL,GAChB,IAAAS,EAAvC,GAAIT,EAAS7vU,OAvOU,IAwOnB,OAAOswU,EAAA/vU,KAAKi8T,SAAQ5tT,OAAMtO,MAAAgwU,EAAA,CAACr+S,EAAOi+S,GAAWjnU,OAAK4mU,IAGlD,IAAMhoT,EAAMtnB,KAAKi8T,QAAQx2T,MAAMisB,EAAOA,EAAQi+S,GAE1CK,EAAWhwU,KAAKi8T,QAAQx2T,MAAMisB,EAAQi+S,GAE1C3vU,KAAKi8T,QAAQx8T,QAAU6vU,EAAS7vU,OAASkwU,EACzC,IAAK,IAAIpwU,EAAI,EAAGA,EAAI+vU,EAAS7vU,OAAQF,IACjCS,KAAKi8T,QAAQvqS,EAAQnyB,GAAK+vU,EAAS/vU,GAEvC,IAAK,IAAI0vF,EAAI,EAAGA,EAAI+gP,EAASvwU,OAAQwvF,IACjCjvF,KAAKi8T,QAAQvqS,EAAQ49S,EAAS7vU,OAASwvF,GAAK+gP,EAAS/gP,GAEzD,OAAO3nE,GAEdumH,EAEDoiM,wBAAA,SAAwBv+S,EAAe+5C,EAAe4hK,GAClD,IAAM40F,GAAajiU,KAAKuuU,SCtRrB72S,EDuRGw4S,EAASlN,GAAahjU,MACtBw4O,EACF03F,GAAUjO,EACH,CACGqB,eAAgB,QAChB/0S,OAAQvuB,KAAK06T,OACb54T,KAAMihU,GACNQ,gBAAiBvjU,KAAKyuU,MAAM/X,MAC5BhlS,MAAAA,EACA+5C,SAAAA,EACA4hK,SAAAA,GAEJ,KAOVrtO,KAAKyuU,MAAMlX,gBACP2Y,GACAjN,GAAgBjjU,KAAMw4O,IAK7B3qG,EAEDiiM,mBAAA,SAAmBp+S,EAAes9S,EAAcE,GAC5C,IAAMjN,GAAajiU,KAAKuuU,SCpTrB72S,EDqTGw4S,EAASlN,GAAahjU,MACtBw4O,EACF03F,GAAUjO,EACH,CACGqB,eAAgB,QAChB/0S,OAAQvuB,KAAK06T,OACb6I,gBAAiBvjU,KAAKyuU,MAAM/X,MAC5B50T,KAAMmsU,GACNv8S,MAAAA,EACAw9S,QAAAA,EACAF,MAAAA,EACAG,aAAcD,EAAQzvU,OACtBwvU,WAAYD,EAAMvvU,QAEtB,KAKVO,KAAKyuU,MAAMlX,gBAEP2Y,GACAjN,GAAgBjjU,KAAMw4O,IAK7B3qG,EAEDs/L,KAAA,SAAKz7S,GACD,KAAI1xB,KAAKwuU,aAAe98S,GAAS1xB,KAAKi8T,QAAQx8T,QAS9C,OADAO,KAAKyuU,MAAMnX,iBACJt3T,KAAK8uU,cAAc9uU,KAAKi8T,QAAQvqS,IARnCjoB,QAAQyC,KAEsG,8BACtEwlB,IAM/Cm8G,EAEDw/L,KAAA,SAAK37S,EAAe+5C,GAChB,IAAM74D,EAAS5S,KAAKi8T,QAKpB,GAJIj8T,KAAKwuU,aAAe98S,EAAQ9e,EAAOnT,QAEnCg1T,GAAI,GAAI/iS,EAAO9e,EAAOnT,QAEtBiyB,EAAQ9e,EAAOnT,OAAQ,CAEaO,KAAKyuU,MACzC,IAAMphG,EAAWz6N,EAAO8e,GACxB,GAAImxS,GAAgB7iU,MAAO,CACvB,IAAMw4O,EAASsqF,GAAuC9iU,KAAa,CAC/D8B,KAAMihU,GACNx0S,OAAQvuB,KAAK06T,OACbhpS,MAAAA,EACA+5C,SAAAA,IAEJ,IAAK+sK,EACD,OAEJ/sK,EAAW+sK,EAAO/sK,UAEtBA,EAAWzrE,KAAK0uU,UAAUjjQ,EAAU4hK,MACPA,IAEzBz6N,EAAO8e,GAAS+5C,EAChBzrE,KAAKiwU,wBAAwBv+S,EAAO+5C,EAAU4hK,QAE/C,CAKH,IADA,IAAMiiG,EAAW,IAAI7qU,MAAMitB,EAAQ,EAAI9e,EAAOnT,QACrCF,EAAI,EAAGA,EAAI+vU,EAAS7vU,OAAS,EAAGF,IACrC+vU,EAAS/vU,QAAK6C,EAElBktU,EAASA,EAAS7vU,OAAS,GAAKgsE,EAChCzrE,KAAKuvU,iBAAiB38T,EAAOnT,OAAQ,EAAG6vU,KAE/ChB,CAAA,CAxRqC,GA2R1C,SAAgBrP,GACZH,EACAnC,EACAjrT,EACAy+T,GAGA,YAJI,IAAJz+T,IAAAA,EAAoD,wBAC/C,IAALy+T,IAAAA,GAAQ,GAERjb,KACOmK,IAAe,WAClB,IAAMlG,EAAM,IAAImV,GAA8B58T,EAAMirT,EAAUwT,GAAO,GACrE3a,GAAmB2D,EAAI8C,QAASzF,GAAO2C,GACvC,IAAM1sC,EAAQ,IAAI1+J,MAAMorM,EAAI8C,QAASiS,IAKrC,OAJA/U,EAAIuB,OAASjuC,EACTqyC,GAAiBA,EAAcr/T,QAC/B05T,EAAIoW,iBAAiB,EAAG,EAAGzQ,GAExBryC,IAEf,CAGA,IAAW2hD,GAAkB,CACzBriU,MAAK,WACD,OAAO/L,KAAKqO,OAAO,IAGvBjF,QAAO,SAACkmU,GACJ,IAAMnW,EAAqCn5T,KAAKw2T,IAChD,OAAO2C,EAAIoW,iBAAiB,EAAGpW,EAAI8C,QAAQx8T,OAAQ6vU,IAIvDrjP,OAAM,WACF,OAAOjsF,KAAKyF,SAShB4I,OAAM,SAACqjB,EAAei+S,8BAAyBL,EAAe,IAAA7qU,MAAAqiB,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAfuoT,EAAevoT,EAAA,GAAAvnB,UAAAunB,GAC1D,IAAMoyS,EAAqCn5T,KAAKw2T,IAChD,OAAQh3T,UAAUC,QACd,KAAK,EACD,MAAO,GACX,KAAK,EACD,OAAO05T,EAAIoW,iBAAiB79S,GAChC,KAAK,EACD,OAAOynS,EAAIoW,iBAAiB79S,EAAOi+S,GAE3C,OAAOxW,EAAIoW,iBAAiB79S,EAAOi+S,EAAaL,IAGpDc,gBAAe,SAAC1+S,EAAei+S,EAAsBL,GACjD,OAAQtvU,KAAKw2T,IAAyC+Y,iBAClD79S,EACAi+S,EACAL,IAIRzoU,KAAI,WACsD,IAAtD,IAAMsyT,EAAqCn5T,KAAKw2T,IAAMpvS,EAAA5nB,UAAAC,OADlDmtB,EAAY,IAAAnoB,MAAA2iB,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAZuF,EAAYvF,GAAA7nB,UAAA6nB,GAGhB,OADA8xS,EAAIoW,iBAAiBpW,EAAI8C,QAAQx8T,OAAQ,EAAGmtB,GACrCusS,EAAI8C,QAAQx8T,QAGvB6K,IAAG,WACC,OAAOtK,KAAKqO,OAAOP,KAAKgwB,IAAI99B,KAAKw2T,IAAOyF,QAAQx8T,OAAS,EAAG,GAAI,GAAG,IAGvEq3G,MAAK,WACD,OAAO92G,KAAKqO,OAAO,EAAG,GAAG,IAG7BmyG,QAAO,WACmD,IAAtD,IAAM24M,EAAqCn5T,KAAKw2T,IAAMvlS,EAAAzxB,UAAAC,OAD/CmtB,EAAY,IAAAnoB,MAAAwsB,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAZtE,EAAYsE,GAAA1xB,UAAA0xB,GAGnB,OADAioS,EAAIoW,iBAAiB,EAAG,EAAG3iT,GACpBusS,EAAI8C,QAAQx8T,QAGvB4+D,QAAO,WAOH,OAJIk8P,GAAYsG,oBACZpM,GAAI,GAAI,WAEZz0T,KAAKoJ,QAAQpJ,KAAKyF,QAAQ44D,WACnBr+D,MAGXosE,KAAI,WAGImuP,GAAYsG,oBACZpM,GAAI,GAAI,QAEZ,IAAM7zQ,EAAO5gD,KAAKyF,QAGlB,OAFAm7C,EAAKwrB,KAAKrsE,MAAM6gD,EAAMphD,WACtBQ,KAAKoJ,QAAQw3C,GACN5gD,MAGXkjF,OAAM,SAACh8E,GACH,IAAMiyT,EAAqCn5T,KAAKw2T,IAC1C9nK,EAAMyqK,EAAI4V,eAAe5V,EAAI8C,SAAS1xT,QAAQrD,GACpD,OAAIwnJ,GAAO,IACP1uJ,KAAKqO,OAAOqgJ,EAAK,IACV,KAwCnB,SAAS2hL,GAAkBt9P,EAAUu9P,GACQ,oBAA9B7rU,MAAM7E,UAAUmzE,KACvBq7P,GAAgBr7P,GAAYu9P,EAAYv9P,GAEhD,CAGA,SAASw9P,GAAWx9P,GAChB,OAAO,WACH,IAAMomP,EAAqCn5T,KAAKw2T,IAChD2C,EAAIsV,MAAMnX,iBACV,IAAMkZ,EAAiBrX,EAAI4V,eAAe5V,EAAI8C,SAC9C,OAAOuU,EAAez9P,GAAUhzE,MAAMywU,EAAgBhxU,WAE9D,CAGA,SAASixU,GAAY19P,GACjB,OAAO,SAAUd,EAAU1a,cACjB4hQ,EAAqCn5T,KAAKw2T,IAGhD,OAFA2C,EAAIsV,MAAMnX,iBACa6B,EAAI4V,eAAe5V,EAAI8C,SACxBlpP,IAAU,SAACnvB,EAASlyB,GACtC,OAAOugD,EAASnyE,KAAKy3D,EAAS3T,EAASlyB,EAAOitG,MAG1D,CAGA,SAAS+xM,GAAe39P,GACpB,OAAO,sBACGomP,EAAqCn5T,KAAKw2T,IAChD2C,EAAIsV,MAAMnX,iBACV,IAAMkZ,EAAiBrX,EAAI4V,eAAe5V,EAAI8C,SAExChqP,EAAWzyE,UAAU,GAI3B,OAHAA,UAAU,GAAK,SAACm4D,EAAasrG,EAAcvxI,GACvC,OAAOugD,EAASta,EAAasrG,EAAcvxI,EAAOuvG,IAE/CuvM,EAAez9P,GAAUhzE,MAAMywU,EAAgBhxU,WAE9D,CAtEA6wU,GAAkB,KAAME,IACxBF,GAAkB,SAAUE,IAC5BF,GAAkB,OAAQE,IAC1BF,GAAkB,WAAYE,IAC9BF,GAAkB,UAAWE,IAC7BF,GAAkB,OAAQE,IAC1BF,GAAkB,cAAeE,IACjCF,GAAkB,QAASE,IAC3BF,GAAkB,WAAYE,IAC9BF,GAAkB,iBAAkBE,IACpCF,GAAkB,WAAYE,IAC9BF,GAAkB,YAAaE,IAC/BF,GAAkB,OAAQE,IAE1BF,GAAkB,QAASI,IAC3BJ,GAAkB,SAAUI,IAC5BJ,GAAkB,OAAQI,IAC1BJ,GAAkB,YAAaI,IAC/BJ,GAAkB,WAAYI,IAC9BJ,GAAkB,gBAAiBI,IACnCJ,GAAkB,UAAWI,IAC7BJ,GAAkB,UAAWI,IAC7BJ,GAAkB,MAAOI,IACzBJ,GAAkB,OAAQI,IAC1BJ,GAAkB,aAAcI,IAEhCJ,GAAkB,SAAUK,IAC5BL,GAAkB,cAAeK,IA6CjC,UAAMC,GAAkClb,GACpC,gCACA6Y,IAGJ,SAAgBnQ,GAAkBvI,GAC9B,OAAOpoQ,GAASooQ,IAAU+a,GAAgC/a,EAAMY,IACpE,CEvlBA,IA8EMoa,GAAsB,CAAC,EAEhB3nT,GAAM,MACN4nT,GAAS,SAStBC,GAgPKvtU,OAAOW,SAAQ6sU,GAuIXxtU,OAAOa,YAtXhB,UAAa86T,GAAa,WAWtB,SAAAA,EACI8R,EACOtC,EACAhY,mBADA,IAAAgY,IAAAA,EAA0BpW,SAC1B,IAAA5B,IAAAA,EAAmD,iBAAe,KADlEgY,eAAA,OACAhY,WAAA,OAXVF,IAASoa,GAAmB,KAC7BK,WAAK,OACLC,aAAO,OACPC,eAAS,OACThP,mBAAa,OACbC,sBAAgB,OAChBE,cAAQ,EAIG,KAAAoM,UAAAA,EACA,KAAAhY,MAAAA,EAEFnwP,GAAW9iE,MACZgxT,GAAI,IAER4K,IAAe,WACX/kM,EAAK62M,UAAYvZ,GAA8C,wBAC/Dt9L,EAAK22M,MAAQ,IAAIxtU,IACjB62H,EAAK42M,QAAU,IAAIztU,IACfutU,GACA12M,EAAKp4G,MAAM8uT,MAGtB,IAAAnjM,EAAAqxL,EAAAt/T,UA6VA,OA7VAiuI,EAEOq/L,KAAA,SAAKvtU,GACT,OAAOK,KAAKixU,MAAMnrU,IAAInG,IACzBkuI,EAED/nI,IAAA,SAAInG,cACA,IAAK46T,GAAYsG,mBACb,OAAO7gU,KAAKktU,KAAKvtU,GAGrB,IAAI2gE,EAAQtgE,KAAKkxU,QAAQrrU,IAAIlG,GAC7B,IAAK2gE,EAAO,CACR,IAAM8wQ,EAAY9wQ,EAAQ,IAAIw8P,GAC1B98T,KAAKktU,KAAKvtU,GACVg5T,GACkD,sBAClD,GAEJ34T,KAAKkxU,QAAQnrU,IAAIpG,EAAKyxU,GACtBjZ,GAAmBiZ,GAAU,kBAAMzyM,EAAKuyM,QAAO,OAAQvxU,MAG3D,OAAO2gE,EAAMz6D,OAChBgoI,EAED9nI,IAAA,SAAIpG,EAAQuH,GACR,IAAMmqU,EAASrxU,KAAKktU,KAAKvtU,GACzB,GAAIkjU,GAAgB7iU,MAAO,CACvB,IAAMw4O,EAASsqF,GAAsC9iU,KAAM,CACvD8B,KAAMuvU,EAAStO,GAAS95S,GACxBsF,OAAQvuB,KACRyrE,SAAUvkE,EACVwK,KAAM/R,IAEV,IAAK64O,EACD,OAAOx4O,KAEXkH,EAAQsxO,EAAO/sK,SAOnB,OALI4lQ,EACArxU,KAAKsxU,aAAa3xU,EAAKuH,GAEvBlH,KAAKuxU,UAAU5xU,EAAKuH,GAEjBlH,MACV6tI,EAAA,OAED,SAAOluI,cAEH,IADoCK,KAAKmxU,UACrCtO,GAAgB7iU,SACD8iU,GAAsC9iU,KAAM,CACvD8B,KAAM+uU,GACNtiT,OAAQvuB,KACR0R,KAAM/R,IAGN,OAAO,EAGf,GAAIK,KAAKktU,KAAKvtU,GAAM,CAChB,IACMuwU,EAASlN,GAAahjU,MACtBwxU,EACFtB,EACM,CACI5M,eAAgB,MAChBC,gBAAiBvjU,KAAK02T,MACtB50T,KAAM+uU,GACNtiT,OAAQvuB,KACRqtO,SAAgBrtO,KAAKixU,MAAMprU,IAAIlG,GAAM0iU,OACrC3wT,KAAM/R,GAEV,KAkBV,OAbAqtU,IAAY,iBACR/rM,EAAKkwM,UAAU5Z,gBACM,OAArBka,EAAAxwM,EAAKiwM,QAAQrrU,IAAIlG,KAAjB8xU,EAAuB9O,cAAa,GACjB1hM,EAAKgwM,MAAMprU,IAAIlG,GACvBgjU,kBAAavgU,GACxB6+H,EAAKgwM,MAAK,OAAQtxU,MAElBuwU,GACAjN,GAAgBjjU,KAAMwxU,IAKnB,EAEX,OAAO,GACV3jM,EAEOyjM,aAAA,SAAa3xU,EAAQ8rE,GACzB,IAAM59D,EAAa7N,KAAKixU,MAAMprU,IAAIlG,GAElC,IADA8rE,EAAY59D,EAAmB40T,iBAAiBh3P,MAC/B8uP,GAAYmI,UAAW,CACpC,IACMwN,EAASlN,GAAahjU,MACtBw4O,EACF03F,EACM,CACI5M,eAAgB,MAChBC,gBAAiBvjU,KAAK02T,MACtB50T,KAAMihU,GACNx0S,OAAQvuB,KACRqtO,SAAWx/N,EAAmBw0T,OAC9B3wT,KAAM/R,EACN8rE,SAAAA,GAEJ,KACN/zC,EAGJ7pB,EAAW80T,aAAal3P,GACpBykQ,GACAjN,GAAgBjjU,KAAMw4O,KAMjC3qG,EAEO0jM,UAAA,SAAU5xU,EAAQ8rE,cACczrE,KAAKmxU,UACzCnE,IAAY,iBACFn/T,EAAa,IAAIivT,GACnBrxP,EACA21D,EAAKstM,UAC4C,qBACjD,GAEJttM,EAAK6vM,MAAMlrU,IAAIpG,EAAKkO,GACpB49D,EAAY59D,EAAmBw0T,OACV,OAArBqP,EAAAtwM,EAAK8vM,QAAQrrU,IAAIlG,KAAjB+xU,EAAuB/O,cAAa,GACpCvhM,EAAK+vM,UAAU5Z,mBAEnB,IACM2Y,EAASlN,GAAahjU,MACtBw4O,EACF03F,EACM,CACI5M,eAAgB,MAChBC,gBAAiBvjU,KAAK02T,MACtB50T,KAAMmnB,GACNsF,OAAQvuB,KACR0R,KAAM/R,EACN8rE,SAAAA,GAEJ,KAINykQ,GACAjN,GAAgBjjU,KAAMw4O,IAK7B3qG,EAEDhoI,IAAA,SAAIlG,GACA,OAAIK,KAAK8F,IAAInG,GACFK,KAAK8uU,cAAc9uU,KAAKixU,MAAMprU,IAAIlG,GAAMkG,OAE5C7F,KAAK8uU,mBAAc1sU,IAC7ByrI,EAEOihM,cAAA,SAAuC5nU,GAC3C,YAAsB9E,IAAlBpC,KAAKsiU,SACEtiU,KAAKsiU,SAASp7T,GAElBA,GACV2mI,EAEDjnI,KAAA,WAEI,OADA5G,KAAKmxU,UAAU7Z,iBACRt3T,KAAKixU,MAAMrqU,QACrBinI,EAEDj7H,OAAA,WACI,IAAM5P,EAAOhD,KACP4G,EAAO5G,KAAK4G,OAClB,OAAO+qU,GAAa,CAChBjjU,KAAI,WACA,IAAAkjU,EAAwBhrU,EAAK8H,OAArByuE,EAAIy0P,EAAJz0P,KAAMj2E,EAAK0qU,EAAL1qU,MACd,MAAO,CACHi2E,KAAAA,EACAj2E,MAAOi2E,OAAQ/6E,EAAoBY,EAAK6C,IAAIqB,QAI3D2mI,EAEDvpI,QAAA,WACI,IAAMtB,EAAOhD,KACP4G,EAAO5G,KAAK4G,OAClB,OAAO+qU,GAAa,CAChBjjU,KAAI,WACA,IAAAmjU,EAAwBjrU,EAAK8H,OAArByuE,EAAI00P,EAAJ10P,KAAMj2E,EAAK2qU,EAAL3qU,MACd,MAAO,CACHi2E,KAAAA,EACAj2E,MAAOi2E,OAAQ/6E,EAAqB,CAAC8E,EAAOlE,EAAK6C,IAAIqB,SAIpE2mI,EAAAijM,IAED,WACI,OAAO9wU,KAAKsE,WACfupI,EAEDjmI,QAAA,SAAQqqE,EAAyD1a,GAC7D,IAAK,IAA0BirG,EAA/BE,EAAAovK,GAA2B9xU,QAAIwiK,EAAAE,KAAAvlF,MAAE,KAAA40P,EAAAvvK,EAAAt7J,MAArBvH,EAAGoyU,EAAA,GAAE7qU,EAAK6qU,EAAA,GAClB9/P,EAASnyE,KAAKy3D,EAASrwD,EAAOvH,EAAKK,QAI3C6tI,EACA3rH,MAAA,SAAMmlD,cAoBF,OAnBI+2P,GAAgB/2P,KAChBA,EAAQ,IAAI5jE,IAAI4jE,IAEpB2lQ,IAAY,WACJv/Q,GAAc4Z,GnC/L9B,SAAmC94C,GAC/B,IAAM3nB,EAAOzH,OAAOyH,KAAK2nB,GAEzB,IAAKunS,GACD,OAAOlvT,EAEX,IAAMwpI,EAAUjxI,OAAO2H,sBAAsBynB,GAC7C,OAAK6hH,EAAQ3wI,OAGN,GAAPiJ,OAAW9B,EAASwpI,EAAQ9mI,QAAO,SAAA1F,GAAC,OAAIgxT,GAAgB7wQ,qBAAqBjkD,KAAKyuB,EAAQ3qB,OAF/EgD,CAGf,CmCqLgBorU,CAAmB3qQ,GAAOz/D,SAAQ,SAACjI,GAAQ,OACvC+hI,EAAK37H,IAAIpG,EAAW0nE,EAAuB1nE,OAExC8E,MAAMK,QAAQuiE,GACrBA,EAAMz/D,SAAQ,SAAA1H,GAAA,IAAEP,EAAGO,EAAA,GAAEgH,EAAKhH,EAAA,UAAMwhI,EAAK37H,IAAIpG,EAAKuH,MACvCyuT,GAAStuP,IACZA,EAAM17D,cAAgBlI,KACtBgxT,GAAI,GAAIptP,GAEZA,EAAMz/D,SAAQ,SAACV,EAAOvH,GAAG,OAAK+hI,EAAK37H,IAAIpG,EAAKuH,OAC3B,OAAVmgE,QAA4BjlE,IAAVilE,GACzBotP,GAAI,GAAIptP,MAGTrnE,MACV6tI,EAED9hI,MAAA,sBACIihU,IAAY,WACR5F,IAAU,WACN,IAAK,IAAwBtkK,EAA7BE,EAAA8uK,GAAkBnwM,EAAK/6H,UAAMk8J,EAAAE,KAAA7lF,MAAE,KAApBx9E,EAAGmjK,EAAA57J,MACVy6H,EAAI,OAAQhiI,WAI3BkuI,EAEDzkI,QAAA,SAAQwJ,cA2EJ,OApEAo6T,IAAY,WASR,IAPA,IAOmC7pK,EAP7B8uK,EA4GlB,SAAsBC,GAClB,GAAIvc,GAASuc,IAAkB9T,GAAgB8T,GAC3C,OAAOA,EACJ,GAAIztU,MAAMK,QAAQotU,GACrB,OAAO,IAAIzuU,IAAIyuU,GACZ,GAAIzkR,GAAcykR,GAAgB,CACrC,IAAMzhU,EAAM,IAAIhN,IAChB,IAAK,IAAM9D,KAAOuyU,EACdzhU,EAAI1K,IAAIpG,EAAKuyU,EAAcvyU,IAE/B,OAAO8Q,EAEP,OAAOgkT,GAAI,GAAIyd,EAEvB,CA1HmCC,CAAav/T,GAC9Bw/T,EAAc,IAAI3uU,IAEpB4uU,GAA0B,EAI9BhvK,EAAAyuK,GAAkBrvM,EAAKwuM,MAAMrqU,UAAMu8J,EAAAE,KAAAlmF,MAAE,KAA1Bx9E,EAAGwjK,EAAAj8J,MAGV,IAAK+qU,EAAensU,IAAInG,GAGpB,GAFgB8iI,EAAI,OAAQ9iI,GAIxB0yU,GAA0B,MACvB,CAEH,IAAMnrU,EAAQu7H,EAAKwuM,MAAMprU,IAAIlG,GAC7ByyU,EAAYrsU,IAAIpG,EAAKuH,IAKjC,IAAK,IAA8CorU,EAAnDC,EAAAT,GAA2BG,EAAe3tU,aAASguU,EAAAC,KAAAp1P,MAAE,KAAAq1P,EAAAF,EAAAprU,MAAzC6f,EAAGyrT,EAAA,GAAEC,EAAKD,EAAA,GAEZE,EAAajwM,EAAKwuM,MAAMnrU,IAAIihB,GAIlC,GAFA07G,EAAK18H,IAAIghB,EAAK0rT,GAEVhwM,EAAKwuM,MAAMnrU,IAAIihB,GAAM,CAIrB,IAAM4rT,EAAQlwM,EAAKwuM,MAAMprU,IAAIkhB,GAC7BqrT,EAAYrsU,IAAIghB,EAAK4rT,GAEhBD,IAEDL,GAA0B,IAKtC,IAAKA,EACD,GAAI5vM,EAAKwuM,MAAMv2Q,OAAS03Q,EAAY13Q,KAEhC+nE,EAAK0uM,UAAU5Z,qBAMf,IAJA,IAAMqb,EAAQnwM,EAAKwuM,MAAMrqU,OACnBisU,EAAQT,EAAYxrU,OACtBksU,EAAQF,EAAMlkU,OACdqkU,EAAQF,EAAMnkU,QACVokU,EAAM31P,MAAM,CAChB,GAAI21P,EAAM5rU,QAAU6rU,EAAM7rU,MAAO,CAC7Bu7H,EAAK0uM,UAAU5Z,gBACf,MAEJub,EAAQF,EAAMlkU,OACdqkU,EAAQF,EAAMnkU,OAK1B+zH,EAAKwuM,MAAQmB,KAEVpyU,MACV6tI,EAODroI,SAAA,WACI,MAAO,0BACVqoI,EAED5hD,OAAA,WACI,OAAOxnF,MAAMkB,KAAK3F,OAOtB6tI,EAKAu1L,SAAA,SAASt0J,EAAkDu0J,GAIvD,OAAOG,GAAiBxjU,KAAM8uK,IACjCjhC,EAEDq1L,WAAA,SAAWnmL,GACP,OAAOomL,GAAoBnjU,KAAM+8I,IACpC7jB,GAAAgmM,EAAA,EAAAv/T,IAAA,OAAAkG,IA/BD,WAEI,OADA7F,KAAKmxU,UAAU7Z,iBACRt3T,KAAKixU,MAAMv2Q,QACrB/6D,IAAAoxU,GAAAlrU,IAUD,WACI,MAAO,UACVq5T,CAAA,CAxXqB,GA4Yfd,GAAkB3I,GAA0B,gBAAiByJ,ICvexE,IAiCM8T,GAAsB,CAAC,EAACC,GA2PzB1vU,OAAOW,SAAQgvU,GAIX3vU,OAAOa,YA/NhB,IAAa+6T,GAAa,WAStB,SAAAA,EACI6R,EACArU,EACOjG,mBADP,IAAAiG,IAAAA,EAAyBrE,SAClB,IAAA5B,IAAAA,EAAmD,iBAAe,KAAlEA,WAAA,OAXVF,IAASwc,GAAmB,KACrB/B,MAAkB,IAAIttU,IAAK,KACnC8qU,WAAK,OACLrM,sBAAgB,OAChBD,mBAAa,OACbG,cAAQ,OACRoM,eAAS,EAKE,KAAAhY,MAAAA,EAEFnwP,GAAW5iE,MACZ8wT,GAAI,IAERz0T,KAAK0uU,UAAY,SAACE,EAAMC,GAAI,OAAKlS,EAASiS,EAAMC,EAAMnY,IACtD2I,IAAe,WACX/kM,EAAKm0M,MAAQ7W,GAAWt9L,EAAKo8L,OACzBsa,GACA12M,EAAKlxH,QAAQ4nU,MAGxB,IAAAnjM,EAAAsxL,EAAAv/T,UAyMA,OAzMAiuI,EAEOihM,cAAA,SAAuC5nU,GAC3C,YAAsB9E,IAAlBpC,KAAKsiU,SACEtiU,KAAKsiU,SAASp7T,GAElBA,GACV2mI,EAED9hI,MAAA,sBACIihU,IAAY,WACR5F,IAAU,WACN,IAAK,IAAkC5kK,EAAvCE,EAAAovK,GAAoBnzM,EAAKsyM,MAAMr+T,YAAQ4vJ,EAAAE,KAAAvlF,MAAE,KAA9Bj2E,EAAKs7J,EAAAt7J,MACZy3H,EAAI,OAAQz3H,WAI3B2mI,EAEDjmI,QAAA,SAAQurU,EAAwD57Q,GAC5D,IAAK,IAAmBurG,EAAxBE,EAAA8uK,GAAoB9xU,QAAI8iK,EAAAE,KAAA7lF,MAAE,KAAfj2E,EAAK47J,EAAA57J,MACZisU,EAAWrzU,KAAKy3D,EAASrwD,EAAOA,EAAOlH,QAE9C6tI,EAOD7nI,IAAA,SAAIkB,cAEA,IADoClH,KAAKyuU,MACrC5L,GAAgB7iU,SACD8iU,GAAmC9iU,KAAM,CACpD8B,KAAMmnB,GACNsF,OAAQvuB,KACRyrE,SAAUvkE,IAGV,OAAOlH,KAKf,IAAKA,KAAK8F,IAAIoB,GAAQ,CAClB8lU,IAAY,WACR/rM,EAAKgwM,MAAMjrU,IAAIi7H,EAAKytM,UAAUxnU,OAAO9E,IACrC6+H,EAAKwtM,MAAMlX,mBAEf,IAAM0K,GAAYvqS,EACZw4S,EAASlN,GAAahjU,MACtBwxU,EACFtB,EACwB,CACd5M,eAAgB,MAChBC,gBAAiBvjU,KAAK02T,MACtB50T,KAAMmnB,GACNsF,OAAQvuB,KACRyrE,SAAUvkE,GAEd,KACN+6T,EAGAiO,GACAjN,GAAgBjjU,KAAMwxU,GAO9B,OAAOxxU,MACV6tI,EAAA,OAED,SAAO3mI,cACH,GAAI27T,GAAgB7iU,QACD8iU,GAAmC9iU,KAAM,CACpD8B,KAAM+uU,GACNtiT,OAAQvuB,KACRqtO,SAAUnmO,IAGV,OAAO,EAGf,GAAIlH,KAAK8F,IAAIoB,GAAQ,CACjB,IACMgpU,EAASlN,GAAahjU,MACtBozU,EACFlD,EACwB,CACd5M,eAAgB,MAChBC,gBAAiBvjU,KAAK02T,MACtB50T,KAAM+uU,GACNtiT,OAAQvuB,KACRqtO,SAAUnmO,GAEd,KAeV,OAVA8lU,IAAY,WACR5rM,EAAKqtM,MAAMlX,gBACXn2L,EAAK6vM,MAAK,OAAQ/pU,MAElBgpU,GACAjN,GAAgBjjU,KAAMozU,IAKnB,EAEX,OAAO,GACVvlM,EAED/nI,IAAA,SAAIoB,GAEA,OADAlH,KAAKyuU,MAAMnX,iBACJt3T,KAAKixU,MAAMnrU,IAAI9F,KAAK8uU,cAAc5nU,KAC5C2mI,EAEDvpI,QAAA,WACI,IAAI0qK,EAAY,EACVpoK,EAAOnC,MAAMkB,KAAK3F,KAAK4G,QACvBgM,EAASnO,MAAMkB,KAAK3F,KAAK4S,UAC/B,OAAO++T,GAAqB,CACxBjjU,KAAI,WACA,IAAMgjB,EAAQs9I,EAEd,OADAA,GAAa,EACNt9I,EAAQ9e,EAAOnT,OAChB,CAAEyH,MAAO,CAACN,EAAK8qB,GAAQ9e,EAAO8e,IAASyrD,MAAM,GAC7C,CAAEA,MAAM,OAGzB0wD,EAEDjnI,KAAA,WACI,OAAO5G,KAAK4S,UACfi7H,EAEDj7H,OAAA,WACI5S,KAAKyuU,MAAMnX,iBACX,IAAMt0T,EAAOhD,KACTgvK,EAAY,EACVqkK,EAAmB5uU,MAAMkB,KAAK3F,KAAKixU,MAAMr+T,UAC/C,OAAO++T,GAAgB,CACnBjjU,KAAI,WACA,OAAOsgK,EAAYqkK,EAAiB5zU,OAC9B,CAAEyH,MAAOlE,EAAK8rU,cAAcuE,EAAiBrkK,MAAe7xF,MAAM,GAClE,CAAEA,MAAM,OAGzB0wD,EAEDzkI,QAAA,SAAQi+D,cAiBJ,OAhBIg3P,GAAgBh3P,KAChBA,EAAQ,IAAI1jE,IAAI0jE,IAGpB2lQ,IAAY,WACJvoU,MAAMK,QAAQuiE,IAGPwuP,GAASxuP,IAFhBq6D,EAAK31H,QACLs7D,EAAMz/D,SAAQ,SAAAV,GAAK,OAAIw6H,EAAK17H,IAAIkB,OAIf,OAAVmgE,QAA4BjlE,IAAVilE,GACzBotP,GAAI,8BAAgCptP,MAIrCrnE,MACV6tI,EACDu1L,SAAA,SAASt0J,EAA+Cu0J,GAKpD,OAAOG,GAAiBxjU,KAAM8uK,IACjCjhC,EAEDq1L,WAAA,SAAWnmL,GACP,OAAOomL,GAAoBnjU,KAAM+8I,IACpClP,EAED5hD,OAAA,WACI,OAAOxnF,MAAMkB,KAAK3F,OACrB6tI,EAEDroI,SAAA,WACI,MAAO,0BACVqoI,EAAAolM,IAED,WACI,OAAOjzU,KAAK4S,UACfsmH,GAAAimM,EAAA,EAAAx/T,IAAA,OAAAkG,IA5KD,WAEI,OADA7F,KAAKyuU,MAAMnX,iBACJt3T,KAAKixU,MAAMv2Q,QACrB/6D,IAAAuzU,GAAArtU,IA2KD,WACI,MAAO,UACVs5T,CAAA,CAjOqB,GAqOfd,GAAkB5I,GAA0B,gBAAiB0J,IClPlEmU,GAAkBn0U,OAAOiI,OAAO,MAoChCmsU,GAAS,SAEFC,GAA8B,WAWvC,SAAAA,EACWla,EACA2C,EACAvF,EAEA+c,QAHA,IAAAxX,IAAAA,EAAU,IAAIx4T,UAGd,IAAAgwU,IAAAA,EAAiCvW,IAAc,KAJ/C5D,aAAA,OACA2C,aAAA,OACAvF,WAAA,OAEA+c,wBAAA,OAbXtC,eAAS,OACT/O,sBAAgB,OAChBD,mBAAa,OACbzH,YAAM,OACNO,oBAAc,OACdyY,yBAAmB,OACXC,kBAAY,EAGT,KAAAra,QAAAA,EACA,KAAA2C,QAAAA,EACA,KAAAvF,MAAAA,EAEA,KAAA+c,mBAAAA,EAEPzzU,KAAKmxU,UAAY,IAAI1a,GAAsC,yBAE3Dz2T,KAAKi7T,eAAiBxtQ,GAAcztD,KAAKs5T,SAQ5C,IAAAzrL,EAAA2lM,EAAA5zU,UA+gBA,OA/gBAiuI,EAEDsuL,wBAAA,SAAwBx8T,GACpB,OAAOK,KAAKi8T,QAAQp2T,IAAIlG,GAAMkG,OACjCgoI,EAEDmvL,wBAAA,SAAwBr9T,EAAkB8rE,GACtC,IAAM59D,EAAa7N,KAAKi8T,QAAQp2T,IAAIlG,GACpC,GAAIkO,aAAsBquT,GAEtB,OADAruT,EAAW9H,IAAI0lE,IACR,EAIX,GAAIo3P,GAAgB7iU,MAAO,CACvB,IAAMw4O,EAASsqF,GAAmC9iU,KAAM,CACpD8B,KAAMihU,GACNx0S,OAAQvuB,KAAK06T,QAAU16T,KAAKs5T,QAC5B5nT,KAAM/R,EACN8rE,SAAAA,IAEJ,IAAK+sK,EACD,OAAO,KAEX/sK,EAAY+sK,EAAe/sK,SAK/B,IAHAA,EAAY59D,EAAmB40T,iBAAiBh3P,MAG/B8uP,GAAYmI,UAAW,CACpC,IAAMwN,EAASlN,GAAahjU,MAEtBwxU,EACFtB,EACM,CACIpuU,KAAMihU,GACNO,eAAgB,SAChBC,gBAAiBvjU,KAAK02T,MACtBnoS,OAAQvuB,KAAK06T,QAAU16T,KAAKs5T,QAC5BjsF,SAAWx/N,EAAmBw0T,OAC9B3wT,KAAM/R,EACN8rE,SAAAA,GAEJ,KAEN/zC,EAGF7pB,EAAoC80T,aAAal3P,GAC/CykQ,GACAjN,GAAgBjjU,KAAMwxU,GAM9B,OAAO,GACV3jM,EAEDs/L,KAAA,SAAKxtU,GAKD,OAJI46T,GAAYsG,qBAAuB9K,GAAQ/1T,KAAKs5T,QAAS35T,IAEzDK,KAAKktU,KAAKvtU,GAEPK,KAAKs5T,QAAQ35T,IAGxBkuI,EAOAw/L,KAAA,SAAK1tU,EAAkBuH,EAAYuyT,GAE/B,YAF+B,IAAAA,IAAAA,GAAqB,GAEhD1D,GAAQ/1T,KAAKs5T,QAAS35T,GAElBK,KAAKi8T,QAAQn2T,IAAInG,GAEVK,KAAKg9T,wBAAwBr9T,EAAKuH,GAClCuyT,EAEAxlL,QAAQluI,IAAI/F,KAAKs5T,QAAS35T,EAAKuH,IAGtClH,KAAKs5T,QAAQ35T,GAAOuH,GACb,GAIJlH,KAAKg5T,QACRr5T,EACA,CAAEuH,MAAAA,EAAOD,YAAY,EAAMyG,UAAU,EAAMD,cAAc,GACzDzN,KAAKyzU,mBACLha,IAKZ5rL,EACAq/L,KAAA,SAAKvtU,GACD,IAAK46T,GAAYsG,mBAEb,OAAOlhU,KAAOK,KAAKs5T,QAEvBt5T,KAAK2zU,eAAL3zU,KAAK2zU,aAAiB,IAAIlwU,KAC1B,IAAI68D,EAAQtgE,KAAK2zU,aAAa9tU,IAAIlG,GAUlC,OATK2gE,IACDA,EAAQ,IAAIw8P,GACRn9T,KAAOK,KAAKs5T,QACZX,GACkD,yBAClD,GAEJ34T,KAAK2zU,aAAa5tU,IAAIpG,EAAK2gE,IAExBA,EAAMz6D,OAGjBgoI,EAIAirL,MAAA,SAAMn5T,EAAkB2qH,GAIpB,IAHmB,IAAfA,IACAA,EAAatqH,KAAKyzU,qBAEH,IAAfnpN,EAAJ,CAIA,GADAspN,GAAgB5zU,KAAMsqH,EAAY3qH,KAC5BA,KAAOK,KAAKs5T,SAAU,KAAAua,EAMxB,GAAyC,OAAzCA,EAAI7zU,KAAKs5T,QAAQtD,MAAb6d,EAAwCl0U,GACxC,OAEA80T,GAAI,EAAGnqM,EAAW+rM,gBAAoBr2T,KAAK02T,MAAK,IAAI/2T,EAAI6F,YAIhE,IADA,IAAI9F,EAASM,KAAKs5T,QACX55T,GAAUA,IAAWk1T,IAAiB,CACzC,IAAMz7L,EAAaw7L,GAAcj1T,EAAQC,GACzC,GAAIw5H,EAAY,CACZ,IAAM26M,EAAUxpN,EAAWwuM,MAAM94T,KAAML,EAAKw5H,EAAYz5H,GACxD,GAAgB,IAAZo0U,EACA,OAEJ,GAAgB,IAAZA,EACA,MAGRp0U,EAASP,OAAOoF,eAAe7E,GAEnCq0U,GAAwB/zU,KAAMsqH,EAAY3qH,KAG9CkuI,EAOAmrL,QAAA,SACIr5T,EACAw5H,EACA7O,EACAmvM,GAKA,QALA,IAAAA,IAAAA,GAAqB,IAEF,IAAfnvM,IACAA,EAAatqH,KAAKyzU,qBAEH,IAAfnpN,EACA,OAAOtqH,KAAK05T,gBAAgB/5T,EAAKw5H,EAAYsgM,GAEjDma,GAAgB5zU,KAAMsqH,EAAY3qH,GAClC,IAAMm0U,EAAUxpN,EAAW0uM,QAAQh5T,KAAML,EAAKw5H,EAAYsgM,GAI1D,OAHIqa,GACAC,GAAwB/zU,KAAMsqH,EAAY3qH,GAEvCm0U,GAGXjmM,EAMA6rL,gBAAA,SACI/5T,EACAw5H,EACAsgM,QAAA,IAAAA,IAAAA,GAAqB,GAEez5T,KAAKmxU,UACzC,IACI3Z,KAGA,IAAMwc,EAAgBh0U,KAAKwtU,QAAQ7tU,GACnC,IAAKq0U,EAED,OAAOA,EAIX,GAAInR,GAAgB7iU,MAAO,CACvB,IAAMw4O,EAASsqF,GAAmC9iU,KAAM,CACpDuuB,OAAQvuB,KAAK06T,QAAU16T,KAAKs5T,QAC5B5nT,KAAM/R,EACNmC,KAAMmnB,GACNwiD,SAAU0tD,EAAWjyH,QAEzB,IAAKsxO,EACD,OAAO,KAEX,IAAQ/sK,EAAa+sK,EAAb/sK,SACJ0tD,EAAWjyH,QAAUukE,IACrB0tD,EAAUj6H,GAAA,GACHi6H,EAAU,CACbjyH,MAAOukE,KAMnB,GAAIguP,GACA,IAAKxlL,QAAQjtI,eAAehH,KAAKs5T,QAAS35T,EAAKw5H,GAC3C,OAAO,OAGXnyH,GAAehH,KAAKs5T,QAAS35T,EAAKw5H,GAItCn5H,KAAKi0U,wBAAwBt0U,EAAKw5H,EAAWjyH,OAC/C,QACEwwT,KAEJ,OAAO,GAGX7pL,EACA4uL,0BAAA,SACI98T,EACAuH,EACAy1T,EACAlD,QAAA,IAAAA,IAAAA,GAAqB,GAEez5T,KAAKmxU,UACzC,IACI3Z,KAGA,IAAMwc,EAAgBh0U,KAAKwtU,QAAQ7tU,GACnC,IAAKq0U,EAED,OAAOA,EAIX,GAAInR,GAAgB7iU,MAAO,CACvB,IAAMw4O,EAASsqF,GAAmC9iU,KAAM,CACpDuuB,OAAQvuB,KAAK06T,QAAU16T,KAAKs5T,QAC5B5nT,KAAM/R,EACNmC,KAAMmnB,GACNwiD,SAAUvkE,IAEd,IAAKsxO,EACD,OAAO,KAEXtxO,EAASsxO,EAAe/sK,SAG5B,IAAMyoQ,EAAmBC,GAAkCx0U,GACrDw5H,EAAa,CACf1rH,cAAc8sT,GAAYD,iBAAkBt6T,KAAKi7T,eACjDh0T,YAAY,EACZpB,IAAKquU,EAAiBruU,IACtBE,IAAKmuU,EAAiBnuU,KAI1B,GAAI0zT,GACA,IAAKxlL,QAAQjtI,eAAehH,KAAKs5T,QAAS35T,EAAKw5H,GAC3C,OAAO,OAGXnyH,GAAehH,KAAKs5T,QAAS35T,EAAKw5H,GAGtC,IAAMtrH,EAAa,IAAIivT,GACnB51T,EACAy1T,EAC8C,wBAC9C,GAGJ38T,KAAKi8T,QAAQl2T,IAAIpG,EAAKkO,GAGtB7N,KAAKi0U,wBAAwBt0U,EAAKkO,EAAWw0T,QAC/C,QACE3K,KAEJ,OAAO,GAGX7pL,EACAkuL,wBAAA,SACIp8T,EACA0xC,EACAooR,QAAA,IAAAA,IAAAA,GAAqB,GAEez5T,KAAKmxU,UACzC,IACI3Z,KAGA,IAAMwc,EAAgBh0U,KAAKwtU,QAAQ7tU,GACnC,IAAKq0U,EAED,OAAOA,EAIX,GAAInR,GAAgB7iU,MAOhB,IANe8iU,GAAmC9iU,KAAM,CACpDuuB,OAAQvuB,KAAK06T,QAAU16T,KAAKs5T,QAC5B5nT,KAAM/R,EACNmC,KAAMmnB,GACNwiD,cAAUrpE,IAGV,OAAO,KAGfivC,EAAQ3/B,OAAR2/B,EAAQ3/B,KAAuD,wBAC/D2/B,EAAQzlC,QAAU5L,KAAK06T,QAAU16T,KAAKs5T,QACtC,IAAM4a,EAAmBC,GAAkCx0U,GACrDw5H,EAAa,CACf1rH,cAAc8sT,GAAYD,iBAAkBt6T,KAAKi7T,eACjDh0T,YAAY,EACZpB,IAAKquU,EAAiBruU,IACtBE,IAAKmuU,EAAiBnuU,KAI1B,GAAI0zT,GACA,IAAKxlL,QAAQjtI,eAAehH,KAAKs5T,QAAS35T,EAAKw5H,GAC3C,OAAO,OAGXnyH,GAAehH,KAAKs5T,QAAS35T,EAAKw5H,GAGtCn5H,KAAKi8T,QAAQl2T,IAAIpG,EAAK,IAAIu8T,GAAc7qR,IAGxCrxC,KAAKi0U,wBAAwBt0U,OAAKyC,GACpC,QACEs1T,KAEJ,OAAO,GAGX7pL,EAMA2/L,QAAA,SAAQ7tU,EAAkB85T,GAGtB,QAHsB,IAAAA,IAAAA,GAAqB,GACPz5T,KAAKmxU,WAEpCpb,GAAQ/1T,KAAKs5T,QAAS35T,GACvB,OAAO,EAIX,GAAIkjU,GAAgB7iU,QACD8iU,GAAmC9iU,KAAM,CACpDuuB,OAAQvuB,KAAK06T,QAAU16T,KAAKs5T,QAC5B5nT,KAAM/R,EACNmC,KAAMyxU,KAIN,OAAO,KAKf,IAAI,IAAAa,EAAAC,EACA7c,KACA,IAM0C4I,EANpC8P,EAASlN,GAAahjU,MAEtB6N,EAAa7N,KAAKi8T,QAAQp2T,IAAIlG,GAEhCuH,OAAQ9E,EAEZ,IAAKyL,GAAeqiU,EAChBhpU,EAAwC,OAAnCk5T,EAAGzL,GAAc30T,KAAKs5T,QAAS35T,SAAI,EAAhCygU,EAAkCl5T,MAG9C,GAAIuyT,GACA,IAAKxlL,QAAQq5L,eAAettU,KAAKs5T,QAAS35T,GACtC,OAAO,cAGJK,KAAKs5T,QAAQ35T,GAwBxB,GAjBIkO,IACA7N,KAAKi8T,QAAO,OAAQt8T,GAEhBkO,aAAsBivT,KACtB51T,EAAQ2G,EAAWw0T,QAGvB5K,GAAiB5pT,IAGrB7N,KAAKmxU,UAAU5Z,gBAIE,OAAjB6c,EAAAp0U,KAAK2zU,eAAsB,OAAVU,EAAjBD,EAAmBvuU,IAAIlG,KAAvB00U,EAA6BtuU,IAAIpG,KAAOK,KAAKs5T,SAGzC4W,EAAqB,CACrB,IAAMkD,EAA2B,CAC7BtxU,KAAMyxU,GACNjQ,eAAgB,SAChB/0S,OAAQvuB,KAAK06T,QAAU16T,KAAKs5T,QAC5BiK,gBAAiBvjU,KAAK02T,MACtBrpF,SAAUnmO,EACVwK,KAAM/R,GAEN+3B,EAGAw4S,GACAjN,GAAgBjjU,KAAMozU,IAMhC,QACE1b,KAEJ,OAAO,GAGX7pL,EAKAu1L,SAAA,SAASnxP,EAA+CoxP,GAIpD,OAAOG,GAAiBxjU,KAAMiyE,IACjC47D,EAEDq1L,WAAA,SAAWnmL,GACP,OAAOomL,GAAoBnjU,KAAM+8I,IACpClP,EAEDomM,wBAAA,SAAwBt0U,EAAkBuH,WAChCgpU,EAASlN,GAAahjU,MAE5B,GAAIkwU,EAAqB,CACrB,IAAM13F,EACF03F,EACO,CACGpuU,KAAMmnB,GACNq6S,eAAgB,SAChBC,gBAAiBvjU,KAAK02T,MACtBnoS,OAAQvuB,KAAK06T,QAAU16T,KAAKs5T,QAC5B5nT,KAAM/R,EACN8rE,SAAUvkE,GAEd,KAENwwB,EAGAw4S,GACAjN,GAAgBjjU,KAAMw4O,GAOb,OAAjB87F,EAAAt0U,KAAK2zU,eAAsB,OAAVY,EAAjBD,EAAmBzuU,IAAIlG,KAAvB40U,EAA6BxuU,KAAI,GAGjC/F,KAAKmxU,UAAU5Z,iBAClB1pL,EAED6/L,SAAA,WAEI,OADA1tU,KAAKmxU,UAAU7Z,iBACRpnL,GAAQlwI,KAAKs5T,UACvBzrL,EAED2mM,MAAA,WAQI,OADAx0U,KAAKmxU,UAAU7Z,iBACRn4T,OAAOyH,KAAK5G,KAAKs5T,UAC3Bka,CAAA,CA3iBsC,GAkjB3C,SAAgBxX,GACZ18T,EACA+xC,SAMA,GAAI0kR,GAAQz2T,EAAQk3T,IAQhB,OAAOl3T,EAOX,IAAMoS,EACW,OADP+iU,EACC,MAAPpjS,OAAO,EAAPA,EAAS3/B,MAAI+iU,EAKP,mBAEJtb,EAAM,IAAIqa,GACZl0U,EACA,IAAImE,IACJmB,OAAO8M,GzBvlBf,SACI2/B,SAEA,OAAOA,EAAkC,OAA3BqjS,EAAGrjS,EAAQysR,kBAAgB4W,EAAIvX,GAAqB9rR,QAAWjvC,CACjF,CyBolBQuyU,CAAyBtjS,IAK7B,OAFAkkR,GAAcj2T,EAAQk3T,GAAO2C,GAEtB75T,CACX,CAEA,IAAMs1U,GAAmCnf,GACrC,iCACA+d,IAGJ,SAASW,GAAkCx0U,GACvC,OACI2zU,GAAgB3zU,KACf2zU,GAAgB3zU,GAAO,CACpBkG,IAAG,WACC,OAAO7F,KAAKw2T,IAAO2F,wBAAwBx8T,IAE/CoG,IAAG,SAACmB,GACA,OAAOlH,KAAKw2T,IAAOwG,wBAAwBr9T,EAAKuH,KAIhE,CAEA,SAAgBg3T,GAAmBtI,GAC/B,QAAIpoQ,GAASooQ,IACFgf,GAAkChf,EAAcY,IAG/D,CAEA,SAAgBud,GACZ5a,EACA7uM,EACA3qH,SAM2C,OAA3Ck1U,EAAO1b,EAAIG,QAAQtD,aAAZ6e,EAAuCl1U,EAClD,CAEA,SAASi0U,GACLza,EACA7uM,EACA3qH,GAkDJ,CClwBA,IAuBiB+tD,GAAM8R,GAvBjBs1Q,GAAUC,GAA2B,GAErCC,GAAuC,WACzC,IAAItuU,GAAI,EACFrC,EAAI,CAAC,EAOX,OANAlF,OAAO6H,eAAe3C,EAAG,IAAK,CAC1B0B,IAAK,WACDW,GAAI,KAGZvH,OAAOiI,OAAO/C,GAAG,GAAO,GACX,IAANqC,CACX,CAV6C,GAiBzCuuU,GAA+B,EAG7BC,GAAS,aACExnR,GASTwnR,GATe11Q,GASJ/6D,MAAM7E,UARjBT,OAAOoiH,eACPpiH,OAAOoiH,eAAe7zD,GAAK9tD,UAAW4/D,SACFp9D,IAA7BsrD,GAAK9tD,UAAU2jH,UACtB71D,GAAK9tD,UAAU2jH,UAAY/jD,GAE3B9R,GAAK9tD,UAAY4/D,GASzB,IAAa21Q,GAAyB,SAAAC,EAAArE,EAAAD,GAClC,SAAAqE,EACIrW,EACAnC,EACAjrT,EACAy+T,SAkBE,YAnBE,IAAJz+T,IAAAA,EAAoD,wBAC/C,IAALy+T,IAAAA,GAAQ,GAER71M,EAAA86M,EAAAt1U,KAAA,OAAO,KACPu/T,IAAe,WACX,IAAMlG,EAAM,IAAImV,GAA8B58T,EAAMirT,EAAUwT,GAAO,GACrEhX,EAAIuB,OAAMlmL,GAAAla,GACVk7L,GAAkBhhL,GAAAla,GAAOk8L,GAAO2C,GAE5B2F,GAAiBA,EAAcr/T,QAE/B66H,EAAK81M,gBAAgB,EAAG,EAAGtR,GAG3BkW,IAGA71U,OAAO6H,eAAcwtI,GAAAla,GAAO,IAAKw6M,OAEvCx6M,EAvB4BioM,GAAA4S,EAAAC,GAwBjC,IAAAvnM,EAAAsnM,EAAAv1U,UAqBA,OArBAiuI,EAEDnlI,OAAA,WACM1I,KAAKw2T,IAAyCiY,MAAMnX,iBAAgB,QAAAxwS,EAAAtnB,UAAAC,OADhEgoE,EAAa,IAAAhjE,MAAAqiB,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAb0gD,EAAa1gD,GAAAvnB,UAAAunB,GAEnB,OAAOtiB,MAAM7E,UAAU8I,OAAO3I,MACzBC,KAAayF,QAEdgiE,EAAOh3D,KAAI,SAAA/M,GAAC,OAAKy6T,GAAkBz6T,GAAKA,EAAE+B,QAAU/B,OAE3DmqI,EAAAijM,GAcD,WACI,IAAM9tU,EAAOhD,KACTgvK,EAAY,EAChB,OAAO2iK,GAAa,CAChBjjU,KAAI,WACA,OAAOsgK,EAAYhsK,EAAKvD,OAClB,CAAEyH,MAAOlE,EAAKgsK,KAAc7xF,MAAM,GAClC,CAAEA,MAAM,EAAMj2E,WAAO9E,OAGtC82H,GAAAi8M,EAAA,EAAAx1U,IAAA,SAAAkG,IAtBD,WACI,OAAQ7F,KAAKw2T,IAAyC2X,mBACzDpoU,IAED,SAAWqpU,GACLpvU,KAAKw2T,IAAyC6X,gBAAgBe,MACnEzvU,IAAAoxU,EAAAlrU,IAED,WACI,MAAO,YACVsvU,CAAA,CA7CiC,CAAQD,GA2CrC3xU,OAAOa,YAIXb,OAAOW,UAmBZ,SAAS6wU,GAA2BrjT,GAChC,MAAO,CACHzqB,YAAY,EACZwG,cAAc,EACd5H,IAAK,WACD,OAAO7F,KAAKw2T,IAAO2W,KAAKz7S,IAE5B3rB,IAAK,SAAUmB,GACXlH,KAAKw2T,IAAO6W,KAAK37S,EAAOxqB,IAGpC,CAEA,SAASmuU,GAAsB3jT,GAC3B1qB,GAAemuU,GAAsBv1U,UAAW,GAAK8xB,EAAOqjT,GAA2BrjT,GAC3F,CAEA,SAAgBg+S,GAAmB5xS,GAC/B,GAAIA,EAAMm3S,GAA8B,CACpC,IAAK,IAAIvjT,EAAQujT,GAA8BvjT,EAAQoM,EAAM,IAAKpM,IAC9D2jT,GAAsB3jT,GAE1BujT,GAA+Bn3S,EAEvC,CAIA,SAAgBkhS,GACZF,EACAnC,EACAjrT,GAEA,OAAO,IAAIyjU,GAAsBrW,EAAenC,EAAUjrT,EAC9D,UCrIgB45T,GAAQ1V,EAAYhkS,GAChC,GAAqB,kBAAVgkS,GAAgC,OAAVA,EAAgB,CAC7C,GAAIuI,GAAkBvI,GAIlB,YAHiBxzT,IAAbwvB,GACA6iS,GAAI,IAEAmB,EAAcY,IAAOiY,MAEjC,GAAIpQ,GAAgBzI,GAChB,OAAOA,EAAM6Y,MAEjB,GAAIrQ,GAAgBxI,GAAQ,CACxB,QAAiBxzT,IAAbwvB,EACA,OAAOgkS,EAAMub,UAEjB,IAAMtjU,EAAa+nT,EAAMqb,MAAMprU,IAAI+rB,IAAagkS,EAAMsb,QAAQrrU,IAAI+rB,GAIlE,OAHK/jB,GACD4mT,GAAI,GAAI7iS,EAAU0jT,GAAa1f,IAE5B/nT,EAKX,GAAIqwT,GAAmBtI,GAAQ,CAC3B,IAAKhkS,EACD,OAAO6iS,GAAI,IAEf,IAAM8gB,EAAc3f,EAAcY,IAAOyF,QAAQp2T,IAAI+rB,GAIrD,OAHK2jT,GACD9gB,GAAI,GAAI7iS,EAAU0jT,GAAa1f,IAE5B2f,EAEX,GAAI5d,GAAO/B,IAAU0Q,GAAgB1Q,IAAUoU,GAAWpU,GACtD,OAAOA,OAER,GAAIrvP,GAAWqvP,IACdoU,GAAWpU,EAAMY,KAEjB,OAAOZ,EAAMY,IAGrB/B,GAAI,GACR,CAEA,SAAgB+gB,GAAkB5f,EAAYhkS,GAI1C,OAHKgkS,GACDnB,GAAI,SAESryT,IAAbwvB,EACO4jT,GAAkBlK,GAAQ1V,EAAOhkS,IAExC+lS,GAAO/B,IAAU0Q,GAAgB1Q,IAAUoU,GAAWpU,IAGtDwI,GAAgBxI,IAAUyI,GAAgBzI,GAFnCA,EAKPA,EAAMY,IACCZ,EAAMY,SAEjB/B,GAAI,GAAImB,EACZ,CAEA,SAAgB0f,GAAa1f,EAAYhkS,GACrC,IAAI6jT,EACJ,QAAiBrzU,IAAbwvB,EACA6jT,EAAQnK,GAAQ1V,EAAOhkS,OACpB,IAAI4mS,GAAS5C,GAChB,OAAOA,EAAMlkT,KAEb+jU,EADOvX,GAAmBtI,IAAUwI,GAAgBxI,IAAUyI,GAAgBzI,GACtE4f,GAAkB5f,GAGlB0V,GAAQ1V,GAEpB,OAAO6f,EAAM/e,KACjB,CAQA,SAAgB2I,GAAkBzxQ,GAC9B,IAAMy2Q,EAAapD,KACbD,EAAoBE,IAAuB,GACjD1J,KACA,IACI,OAAO5pQ,IACT,QACE8pQ,KACAiK,GAAqBX,GACrBa,GAAawC,GAErB,CDJAllU,OAAOmF,QAAQ8pU,IAAiBxmU,SAAQ,SAAA1H,OAAEuhC,EAAIvhC,EAAA,GAAE+zE,EAAE/zE,EAAA,GACjC,WAATuhC,GACA8zR,GAAc4f,GAAsBv1U,UAAW6hC,EAAMwyC,EAE7D,IA4BAy7P,GAAmB,KEtInB,IAAMlqU,GAAWovT,GAAgBpvT,SAEjC,SAAgB6yT,GAAU30T,EAAQiB,EAAQqhE,GACtC,YADsC,IAAAA,IAAAA,GAAiB,GAChDnE,GAAGn+D,EAAGiB,EAAGqhE,EACpB,CAIA,SAASnE,GAAGn+D,EAAQiB,EAAQqhE,EAAe0vQ,EAAgBC,GAGvD,GAAIjyU,IAAMiB,EACN,OAAa,IAANjB,GAAW,EAAIA,IAAM,EAAIiB,EAGpC,GAAS,MAALjB,GAAkB,MAALiB,EACb,OAAO,EAGX,GAAIjB,IAAMA,EACN,OAAOiB,IAAMA,EAGjB,IAAM7C,SAAc4B,EACpB,GAAa,aAAT5B,GAAgC,WAATA,GAAiC,iBAAL6C,EACnD,OAAO,EAIX,IAAM5C,EAAYyD,GAAS1F,KAAK4D,GAChC,GAAI3B,IAAcyD,GAAS1F,KAAK6E,GAC5B,OAAO,EAEX,OAAQ5C,GAEJ,IAAK,kBAEL,IAAK,kBAGD,MAAO,GAAK2B,IAAM,GAAKiB,EAC3B,IAAK,kBAGD,OAAKjB,KAAOA,GACAiB,KAAOA,EAGL,KAANjB,EAAU,GAAKA,IAAM,EAAIiB,GAAKjB,KAAOiB,EACjD,IAAK,gBACL,IAAK,mBAID,OAAQjB,KAAOiB,EACnB,IAAK,kBACD,MACsB,qBAAXpB,QAA0BA,OAAO6C,QAAQtG,KAAK4D,KAAOH,OAAO6C,QAAQtG,KAAK6E,GAExF,IAAK,eACL,IAAK,eAGGqhE,GAAS,GACTA,IAKZtiE,EAAIkyU,GAAOlyU,GACXiB,EAAIixU,GAAOjxU,GAEX,IAAMkxU,EAA0B,mBAAd9zU,EAClB,IAAK8zU,EAAW,CACZ,GAAgB,iBAALnyU,GAA6B,iBAALiB,EAC/B,OAAO,EAKX,IAAMmxU,EAAQpyU,EAAEiI,YACZoqU,EAAQpxU,EAAEgH,YACd,GACImqU,IAAUC,KAENxvQ,GAAWuvQ,IACXA,aAAiBA,GACjBvvQ,GAAWwvQ,IACXA,aAAiBA,IAErB,gBAAiBryU,GACjB,gBAAiBiB,EAEjB,OAAO,EAIf,GAAc,IAAVqhE,EACA,OAAO,EACAA,EAAQ,IACfA,GAAS,GASb2vQ,EAASA,GAAU,GAEnB,IADA,IAAIl2U,GAFJi2U,EAASA,GAAU,IAECj2U,OACbA,KAGH,GAAIi2U,EAAOj2U,KAAYiE,EACnB,OAAOiyU,EAAOl2U,KAAYkF,EASlC,GAJA+wU,EAAO7uU,KAAKnD,GACZiyU,EAAO9uU,KAAKlC,GAGRkxU,EAAW,CAGX,IADAp2U,EAASiE,EAAEjE,UACIkF,EAAElF,OACb,OAAO,EAGX,KAAOA,KACH,IAAKoiE,GAAGn+D,EAAEjE,GAASkF,EAAElF,GAASumE,EAAQ,EAAG0vQ,EAAQC,GAC7C,OAAO,MAGZ,CAEH,IACIh2U,EADEiH,EAAOzH,OAAOyH,KAAKlD,GAIzB,GAFAjE,EAASmH,EAAKnH,OAEVN,OAAOyH,KAAKjC,GAAGlF,SAAWA,EAC1B,OAAO,EAEX,KAAOA,KAGH,IAAMs2T,GAAQpxT,EADdhF,EAAMiH,EAAKnH,MACcoiE,GAAGn+D,EAAE/D,GAAMgF,EAAEhF,GAAMqmE,EAAQ,EAAG0vQ,EAAQC,GAC3D,OAAO,EAOnB,OAFAD,EAAOprU,MACPqrU,EAAOrrU,OACA,CACX,CAEA,SAASsrU,GAAOlyU,GACZ,OAAIy6T,GAAkBz6T,GACXA,EAAE+B,QAETkwT,GAASjyT,IAAM06T,GAAgB16T,IAG/BmyT,GAASnyT,IAAM26T,GAAgB36T,GAFxBe,MAAMkB,KAAKjC,EAAEY,WAKjBZ,CACX,UCtLgBiuU,GAAgBztU,GAE5B,OADAA,EAASX,OAAOW,UAAY8xU,GACrB9xU,CACX,CAEA,SAAS8xU,KACL,OAAOh2U,IACX,CCUA,CAEE,SAAU,MAAO,OAAO4H,SAAQ,SAAA1B,GAEV,qBADZyE,KACKzE,IACTuuT,GAAI,yBAAyBvuT,EAAC,kCAEtC,IA0H6C,kBAAlC+vU,+BAEPA,8BAA8BC,WAAW,CACrCC,IRzFR,SAAoBrnK,GAGZ,OADArlK,QAAQyC,KAAK,8CACN,WAAa,CAO5B,EQgFQkqU,OAAQ,CACJd,aAAAA,IAEJ9e,MAAAA,KCjJR,MAAMziT,GASJpI,WAAAA,CAAWzL,GAcP,IAdS,GACXU,EAAE,UACFy5Q,EAAS,MACTj6Q,EAAK,aACLi2U,EAAY,cACZC,GAAgB,EAAI,wBACpBC,EAA0B,KAAI,+BAC9BC,EAAiC,KAAI,WACrCC,EAAa,KAAI,aACjBC,EAAe,KAAI,YACnBC,GAAc,EAAK,cACnBC,EAAgB,KAAI,YACpBC,EAAc,KAAI,iBAClBC,EAAmB,MACpB52U,EACCF,KAAK+2U,WAAa18D,EAClBr6Q,KAAKg3U,YAAcP,EACnBz2U,KAAKmqT,SAAWwsB,EAChB32U,KAAKY,GAAKA,EACVZ,KAAKI,MAAQA,EACbJ,KAAKq2U,aAAeA,EACpBr2U,KAAKs2U,cAAgBA,EACrBt2U,KAAK42U,cAAgBA,EACrB52U,KAAKu2U,wBAA0BA,IAAwC,OAAbK,QAAa,IAAbA,OAAa,EAAbA,EAAeL,yBACzEv2U,KAAKw2U,+BAAiCA,EACtCx2U,KAAKi3U,cAAgBP,EAAe,CAACQ,YAAY,KAAUR,GAAgB,KAC3E12U,KAAKm3U,aAAc,EACnBn3U,KAAKo3U,sBAAuB,EAC5Bp3U,KAAK62U,YAAcA,EACnB72U,KAAK82U,iBAAmBA,EAGxB92U,KAAKq3U,YAAa,EAClBtJ,GAAe/tU,KAAM,CACnB+2U,WAAYlpU,GACZmpU,YAAanpU,GACbs8S,QAASt8S,GACTjN,GAAIiN,GACJzN,MAAOyN,GACPwoU,aAAcxoU,GACdyoU,cAAezoU,GACf0oU,wBAAyB1oU,GACzBopU,cAAeppU,GACfspU,YAAatpU,GACbupU,qBAAsBvpU,GACtBgpU,YAAahpU,GACbipU,iBAAkBjpU,GAClBwpU,WAAYxpU,GACZ+e,MAAOq4C,GACPo5E,SAAUp5E,GACVqyQ,UAAWryQ,GACXipH,OAAQjpH,GACRwxQ,WAAYxxQ,GACZ4oF,UAAW5oF,GACXsyQ,aAActyQ,GACduyQ,WAAYvyQ,GACZwyQ,sBAAuBxyQ,GACvByyQ,WAAYzyQ,GACZ0yQ,YAAa1yQ,GACb2yQ,gBAAiB3yQ,GACjBkhB,QAASlhB,GACToqI,UAAWpqI,GACX4yQ,gBAAiB5yQ,GACjB6yQ,WAAY7yQ,GACZ8yQ,MAAO9yQ,GACP+yQ,+BAAgC/yQ,GAChCk8K,gBAAiB3xK,GACjByoQ,UAAWzoQ,GACX0oQ,SAAU1oQ,GACV2oQ,cAAe3oQ,GACfrzD,WAAYqzD,GACZ4oQ,kBAAmB5oQ,GACnB6oQ,OAAQ7oQ,GACR8oQ,iBAAkB9oQ,GAClB+oQ,0BAA2B/oQ,GAC3BgpQ,iBAAkBhpQ,GAClBipQ,gBAAiBjpQ,GACjBkpQ,OAAQlpQ,GACRmpQ,UAAWnpQ,IAEf,CAEA,SAAI5iD,GACF,OAAO5sB,KAAK+2U,WAAWnqT,MACpBtjB,QACEmd,GACKzmB,KAAKu2U,wBACA9vT,EAAK8vT,0BAA4Bv2U,KAAKu2U,yBAA2B9vT,EAAKmyT,SAAW54U,KAAKY,GAE9C,OAAxCZ,KAAKw2U,gCAA2Cx2U,KAAKw2U,iCAAoC/vT,EAAK8vT,yBAA4B9vT,EAAKmyT,SAAW54U,KAAKY,KAG3JwrE,MAAK,CAAC1oE,EAAGiB,IAAMjB,EAAE2/S,aAAe1+S,EAAE0+S,cACvC,CAEA,YAAIhlK,GACF,OAAOr+I,KAAK4sB,MAAMtjB,QAAOmd,GAAQA,EAAK6pI,UAAS7/I,KAAIgW,GAAQA,EAAK8zP,aAClE,CAEA,aAAI+8D,GACF,OAAOt3U,KAAKs2U,eAAiBt2U,KAAK4sB,MAAMvjB,MAAKod,GAA+B,MAAvBA,EAAKnG,MAAMu4T,UAAoBpyT,EAAK6pI,SAAW7pI,EAAKqyT,YAC3G,CAEA,UAAI5qJ,GAAW,IAAD6qJ,EACZ,OAAiC,QAA1BA,EAAA/4U,KAAK+2U,WAAWiC,kBAAU,IAAAD,OAAA,EAA1BA,EAA4Bn4U,MAAOZ,KAAKY,EACjD,CAEA,cAAI61U,GACF,OAAIz2U,KAAK+2U,WAAWkC,cAGhBj5U,KAAKkuL,QAA8B,MAApBluL,KAAKg3U,aAAoD,qBAAtBh3U,KAAKg3U,eACzDh3U,KAAKg3U,YAAch3U,KAAK4sB,MAAMntB,QAHvBO,KAAKg3U,WAOhB,CAEA,aAAInpL,GACF,OAAO7tJ,KAAKY,KAAOmT,GAAcmlU,gBAAgBC,OACnD,CAEA,gBAAI5B,GACF,OAAOv3U,KAAKY,KAAOmT,GAAcmlU,gBAAgBE,UACnD,CAEA,cAAI5B,GACF,OAAOx3U,KAAKY,KAAOmT,GAAcmlU,gBAAgBG,SACnD,CAEA,eAAI1B,GACF,OAAO33U,KAAKY,KAAOmT,GAAcmlU,gBAAgBI,UACnD,CAEA,mBAAI1B,GACF,OAAO53U,KAAKY,KAAOmT,GAAcmlU,gBAAgBK,cACnD,CAEA,aAAIlqI,GACF,OAAOrvM,KAAKY,KAAOZ,KAAKw2U,8BAC1B,CAEA,cAAIkB,GACF,QAAS13U,KAAKi3U,aAChB,CAEA,WAAI9wP,GACF,OAA6B,IAAtBnmF,KAAK4sB,MAAMntB,MACpB,CAEA,yBAAIg4U,GACF,IAAKz3U,KAAKi3U,cACR,OAAO,EAET,GAAIj3U,KAAKq3U,WACP,OAAO,EAET,MAAM,WAAEmC,GAAex5U,KAAKi3U,cAC5B,OAAIuC,GAAcx5U,KAAK82U,iBACd2C,KAAOz5U,KAAK82U,kBAAkBjpO,QAAQ4rO,KAAOD,KAE9CA,CACV,CAEA,mBAAI3B,GACF,OAAO73U,KAAK4sB,MAAMvjB,MAAKod,GAAQA,EAAKizT,WAAajzT,EAAKoxT,iBACxD,CAEA,cAAIC,GACF,OAAO93U,KAAK4sB,MAAMvjB,MAAKod,GAAQA,EAAKqxT,YACtC,CAEA,SAAIC,GACF,OAAO/3U,KAAK4sB,MAAMvjB,MAAKod,GAAQA,EAAKsxT,OACtC,CAEA,kCAAIC,GACF,OAAIh4U,KAAKkuL,OACA,IAAI7qL,SAAQ,CAACm1B,EAASyqD,KAC3B,IAGEzqD,EAFsBx4B,KAAK4sB,MACxBtjB,QAAOmd,KAAUA,EAAKizT,WAAajzT,EAAKqxT,YAAcrxT,EAAKsxT,SACxCtrU,QAAO,CAACw5J,EAAKx/I,KAAI,IAAAkzT,EAAAC,EAAA,OAAK3zK,GAAOx/I,EAAKozT,SAASp6U,OAAS,EAAIgnB,EAAKozT,SAASp6U,SAAqB,QAAXk6U,EAAAlzT,EAAK0M,cAAM,IAAAwmT,GAAK,QAALC,EAAXD,EAAc,UAAE,IAAAC,OAAL,EAAXA,EAAkBE,oBAAqB,GAAK,EAAE,GAAE,GACxJ,CAAE,MAAO1tU,IACP62E,EAAO72E,GACT,KAGGpM,KAAK+2U,WAAWgD,uBAAuB/5U,KAAKY,IAAI4S,MAAK,KAC1D,MAAMwmU,EAAiBh6U,KAAK4sB,MACzBtjB,QAAOmd,KAAUA,EAAKizT,WAAcjzT,EAAKqxT,YAAcrxT,EAAKsxT,SAC/D,OAAOiC,EAAcvtU,QAAO,CAACw5J,EAAKx/I,KAAI,IAAAwzT,EAAAC,EAAA,OAAKj0K,GAAOx/I,EAAKozT,SAASp6U,OAAS,EAAIgnB,EAAKozT,SAASp6U,SAAqB,QAAXw6U,EAAAxzT,EAAK0M,cAAM,IAAA8mT,GAAK,QAALC,EAAXD,EAAc,UAAE,IAAAC,OAAL,EAAXA,EAAkBJ,oBAAqB,GAAK,EAAE,GAAE,GAAKE,EAAcvtU,QAAO,CAACytG,EAAOzzF,KAAU,IAAD0zT,EAAAC,EAC9L,OAAOlgO,IAAoB,QAAXigO,EAAA1zT,EAAK0M,cAAM,IAAAgnT,GAAK,QAALC,EAAXD,EAAc,UAAE,IAAAC,OAAL,EAAXA,EAAkBN,oBAAqB,EAAE,GACxD,EAAE,GAET,CAEA,qBAAM34F,GACJ,IACE,MAAM7wF,EAAUtwJ,KAAK4sB,MAAM4S,OAAM/Y,GAAQA,EAAK6pI,gBACxCtwJ,KAAK+2U,WAAWsD,kBAAkBC,iBAAiBt6U,KAAK4sB,MAAMnc,KAAKgW,GAASA,EAAK8zP,eAAejqH,GACtGtwJ,KAAK4sB,MAAMhlB,SAAQ6e,IACjBA,EAAK6pI,SAAWA,CAAO,GAE3B,CAAE,MAAOlkJ,IACP3C,QAAQ2C,MAAMA,GAChB,CACF,CAEA,eAAM6rU,GACJ,IACE,MAAMsC,EAAev6U,KAAK4sB,MAAMnc,KAAIgW,GAAQA,EAAK8zP,cAC7Cv6Q,KAAKY,KAAOmT,GAAcmlU,gBAAgBG,WACxCr5U,KAAKY,KAAOmT,GAAcmlU,gBAAgBC,SAAyD,IAA9Cn5U,KAAK+2U,WAAWyD,mBAAmB/6U,aAEtFO,KAAK+2U,WAAWsD,kBAAkBpC,UAAUj4U,KAAKY,GAAI,YAErDZ,KAAK+2U,WAAWsD,kBAAkBpC,UAAUj4U,KAAKY,GAAI25U,GAE7Dv6U,KAAK+2U,WAAW0D,YAAYF,GAC5Bv6U,KAAKg3U,YAAc,EACfh3U,KAAKqvM,WACPrvM,KAAK+2U,WAAW56T,WAAWnc,KAAKY,GAEpC,CAAE,MAAOwL,IACP3C,QAAQ2C,MAAMA,GAChB,CACF,CAEA,cAAM8rU,CAAUU,GAA8B,IAAtB8B,EAAWl7U,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,IAAAA,UAAA,GACjC,UACQQ,KAAK+2U,WAAWsD,kBAAkBM,aAAa36U,KAAKY,GAAIg4U,EAAQ8B,GAClD16U,KAAK+2U,WAAW6D,MAAM75T,MAAKmoG,GAAQA,EAAKtoH,KAAOg4U,IACvDJ,mBACZx4U,KAAKg3U,YAAch3U,KAAK4sB,MAAMtjB,QAAQmd,IAAUA,EAAK6pI,UAAS7wJ,OAC9DO,KAAK4sB,MACFtjB,QAAOmd,IAAQi0T,GAAcj0T,EAAK6pI,UAClC1oJ,SAAQ6e,GAAQA,EAAKo0T,aAAajC,KACrC,MAAMkC,EAAa96U,KAAK+2U,WAAW6D,MAAM75T,MAAKmoG,GAAQA,EAAKtoH,KAAOg4U,IAC9DkC,IACFA,EAAWtC,mBACXsC,EAAWC,wBACX/6U,KAAK+2U,WAAWiE,SAASF,EAAWl6U,IAExC,CAAE,MAAOwL,IACP3C,QAAQ2C,MAAMA,GAChB,CACF,CAEA,mBAAM+rU,CAAe/3U,GAA6B,IAAtBs6U,EAAWl7U,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,IAAAA,UAAA,GACrC,IACE,MAAM,GAAE8R,SAAatR,KAAK+2U,WAAWsD,kBAAkBY,QAAQ76U,EAC7DJ,KAAK4sB,MAAMtjB,QAAOmd,IAAQi0T,GAAcj0T,EAAK6pI,WACzC4qL,EAAUl7U,KAAK+2U,WAAWkE,QAAQ,CAAErC,OAAQtnU,EAAIlR,QAAOi2U,aAAc,KAAMI,WAAY,EAAGK,iBAAkB2C,OAAS5sP,MAAMqjB,gBACjIlwG,KAAK4sB,MACFtjB,QAAOmd,IAAQi0T,GAAcj0T,EAAK6pI,UAClC1oJ,SAAQ6e,GAAQA,EAAKo0T,aAAavpU,KACrC4pU,EAAQ9C,kBAAkB,CAAE/3D,WAAYrgR,KAAKg3U,cAC7Ch3U,KAAKg3U,YAAc,EACnBkE,EAAQ/wB,SAAU,QACZnqT,KAAK+2U,WAAWp7T,WAAW,CAAEi9T,OAAQtnU,IAC3CtR,KAAK+2U,WAAWiE,SAAS1pU,EAC3B,CAAE,MAAOlF,IACP3C,QAAQ2C,MAAMA,GAChB,CACF,CAEA,gBAAM+P,GACJ,IACMnc,KAAKu3U,oBACDv3U,KAAK+2U,WAAWsD,kBAAkBpC,UAAUj4U,KAAKY,IACvDZ,KAAK+2U,WAAW0D,YAAYz6U,KAAK4sB,MAAMnc,KAAIgW,GAAQA,EAAK8zP,uBAElDv6Q,KAAK+2U,WAAWsD,kBAAkBl+T,WAAWnc,KAAKY,IACxDZ,KAAK+2U,WAAW0D,YAAYz6U,KAAK4sB,MAAMnc,KAAIgW,GAAQA,EAAK8zP,eACxDv6Q,KAAK+2U,WAAW56T,WAAWnc,KAAKY,IAEpC,CAAE,MAAOwL,IACP3C,QAAQ2C,MAAMA,GAChB,CACF,CAEA,YAAMssU,CAAOt4U,GACX,UACQJ,KAAK+2U,WAAWsD,kBAAkB/9T,WAAWtc,KAAKY,GAAIR,GAC5DJ,KAAK+6U,wBACL/6U,KAAKw4U,mBACLx4U,KAAK+2U,WAAWoE,aAChBn7U,KAAKI,MAAQA,CACf,CAAE,MAAOgM,IACP3C,QAAQ2C,MAAMA,GAChB,CACF,CAEA,eAAMusU,GACJ,UACQ34U,KAAK+2U,WAAWsD,kBAAkB79T,cAAcxc,KAAKY,GAC7D,CAAE,MAAOwL,IACP,OAAOA,EACT,CACF,CAEA,YAAMisU,GACJ,IACE,MAAM/wT,QAAYtnB,KAAK+2U,WAAWsD,kBAAkBj+T,WAAWpc,KAAKY,IAChE0mB,GACFtnB,KAAKi3U,cAAgB3vT,EACrBtnB,KAAKo3U,sBAAuB,EAC5Bp3U,KAAKm3U,aAAc,EACnBn3U,KAAKq3U,YAAa,EACd/vT,EAAI8zT,cACNj4U,OAAO4B,SAAS0iJ,KAAOngI,EAAI8zT,eAG7Bp7U,KAAKi3U,cAAgB,KACrBj3U,KAAKm3U,aAAc,EAEvB,CAAE,MAAO/qU,IACP3C,QAAQ2C,MAAMA,GAChB,CACF,CAEAgsU,iBAAAA,CAAmBlvN,GACjBlpH,KAAKg3U,YAAc9tN,EAAKm3J,UAC1B,CAEAi4D,gBAAAA,GACEt4U,KAAKm3U,aAAc,CACrB,CAEAoB,yBAAAA,GACEv4U,KAAKo3U,sBAAuB,CAC9B,CAEAoB,gBAAAA,GACOx4U,KAAKu3U,eACRv3U,KAAK62U,YAAc4C,OAAS5sP,MAAMqjB,cAClClwG,KAAK+2U,WAAWoE,aAEpB,CAEAJ,qBAAAA,GACO/6U,KAAKu3U,eACRv3U,KAAKq3U,YAAa,EAClBr3U,KAAK82U,iBAAmB2C,OAAS5sP,MAAMqjB,cACvClwG,KAAK+2U,WAAWoE,aAEpB,CAEA1C,eAAAA,GACEz4U,KAAKg3U,YAAch3U,KAAK4sB,MAAMntB,MAChC,EAxWIsU,GACGmlU,gBAAkB,CACvBC,QAAS,UACTG,WAAY,YACZD,UAAW,WACXE,eAAgB,gBAChBH,WAAY,cAsWhB,YC7QA,SAhGA,MACEztU,WAAAA,CAAWzL,GAEP,IAFQ,UACVm6Q,GACDn6Q,EACCF,KAAK+2U,WAAa18D,EAClBr6Q,KAAKmqT,SAAU,EACf4jB,GAAe/tU,KAAM,CACnB+2U,WAAYlpU,GACZs8S,QAASt8S,GACTwtU,gBAAiBp2Q,GACjBq2Q,mBAAoBr2Q,GACpBs2Q,wBAAyBt2Q,GACzBu2Q,QAASv2Q,GACTo0O,UAAWp0O,GACXw2Q,YAAax2Q,GACb4zQ,SAAU5zQ,GACVxkD,IAAKwkD,GACLi1C,MAAOj1C,GACPy2Q,kBAAmBz2Q,GACnBgyQ,cAAehyQ,IAEnB,CAEA,iBAAIgyQ,GAAiB,IAAD8B,EAClB,OAAiC,QAAjCA,EAAO/4U,KAAK+2U,WAAWiC,kBAAU,IAAAD,OAAA,EAA1BA,EAA4B9B,aACrC,CAEA,mBAAIoE,GAAmB,IAADM,EACpB,OAAyE,QAAzEA,EAAO37U,KAAK+2U,WAAWnqT,MAAMtjB,QAAQmd,GAASA,EAAKm1T,iBAAgBn8U,cAAM,IAAAk8U,EAAAA,EAAI,CAC/E,CAEA,sBAAIL,GAAsB,IAADO,EAAAC,EAAAC,EACyFC,EAAAC,EAEOC,EAE1EC,EAJ7C,OAAIn8U,KAAK+2U,WAAWqF,cAAyC,QAA1BP,EAAA77U,KAAK+2U,WAAWiC,kBAAU,IAAA6C,OAAA,EAA1BA,EAA4Bj7U,MAAOmT,GAAcmlU,gBAAgBE,WACpD,QAA9C4C,EAAsC,QAAtCC,EAAOj8U,KAAK+2U,WAAWsF,uBAAe,IAAAJ,OAAA,EAA/BA,EAAiCx8U,cAAM,IAAAu8U,EAAAA,EAAI,EACzCh8U,KAAK+2U,WAAWqF,cAAyC,QAA1BN,EAAA97U,KAAK+2U,WAAWiC,kBAAU,IAAA8C,OAAA,EAA1BA,EAA4Bl7U,MAAOmT,GAAcmlU,gBAAgBE,WAC0B,QAAnI8C,EAAOl8U,KAAK+2U,WAAWhjU,GAAcmlU,gBAAgBE,YAAYxsT,MAAMtjB,QAAQmd,GAASA,EAAKm1T,gBAAkBn1T,EAAK6pI,UAAS7wJ,cAAM,IAAAy8U,EAAAA,EAAI,EAC9Hl8U,KAAK+2U,WAAWuF,iBACU,QAAnCH,EAAOn8U,KAAK+2U,WAAWnqT,MAAMntB,cAAM,IAAA08U,EAAAA,EAAI,EAGgD,QAAzFJ,EAAO/7U,KAAK+2U,WAAWnqT,MAAMtjB,QAAQmd,GAASA,EAAKm1T,gBAAkBn1T,EAAK6pI,UAAS7wJ,cAAM,IAAAs8U,EAAAA,EAAI,CAC/F,CAEA,2BAAIR,GAA2B,IAADgB,EAAAC,EAAAC,EAC5B,OAA6E,QAA7EF,EAA8D,QAA9DC,EAAOx8U,KAAK+2U,WAAWhjU,GAAcmlU,gBAAgBwD,iBAAS,IAAAF,GAAO,QAAPC,EAAvDD,EAAyD5vT,aAAK,IAAA6vT,OAAP,EAAvDA,EAAgEh9U,cAAM,IAAA88U,EAAAA,EAAI,CACnF,CAEA,WAAIf,GACF,OAAQx7U,KAAK+2U,WAAWyD,mBAAmBh7S,OAAO0pF,IAAI,IAAAyzN,EAAAC,EAAA,OAAe,QAAfD,EAAKzzN,EAAKt8F,aAAK,IAAA+vT,GAAO,QAAPC,EAAVD,EAAYn9S,aAAK,IAAAo9S,OAAP,EAAVA,EAAA98U,KAAA68U,GAAoBl2T,GAA0B,MAAlBA,EAAKnG,MAAMG,KAAY,GAChH,CAEA,aAAI44R,GACgC,IAADwjC,EAAAC,EAAjC,OAAI98U,KAAK+2U,WAAWqF,YACe,QAAjCS,EAAO78U,KAAK+2U,WAAWiC,kBAAU,IAAA6D,GAAO,QAAPC,EAA1BD,EAA4BjwT,aAAK,IAAAkwT,OAAP,EAA1BA,EAAmCzzU,MAAKod,GAAQA,EAAK0M,OAAO1zB,OAAS,KAAMO,KAAK+2U,WAAWiC,WAAWzB,cAAe9wT,EAAK6pI,WAE5HtwJ,KAAK+2U,WAAWyD,mBAAmBnxU,MAAM6/G,GAASA,EAAKt8F,MAAMvjB,MAAKod,GAAQA,EAAK0M,OAAO1zB,OAAS,GAAKgnB,EAAK6pI,WAClH,CAEA,eAAImrL,GACgC,IAADsB,EAAAC,EAAjC,OAAIh9U,KAAK+2U,WAAWqF,YACe,QAAjCW,EAAO/8U,KAAK+2U,WAAWiC,kBAAU,IAAA+D,GAAO,QAAPC,EAA1BD,EAA4BnwT,aAAK,IAAAowT,OAAP,EAA1BA,EAAmC3zU,MAAKod,GAAQA,EAAKsiG,SAAStpH,OAAS,KAAMO,KAAK+2U,WAAWiC,WAAWzB,cAAe9wT,EAAK6pI,YAE7HtwJ,KAAKq5S,WAAar5S,KAAK+2U,WAAWyD,mBAAmBnxU,MAAM6/G,GAASA,EAAKt8F,MAAMvjB,MAAKod,GAAQA,EAAKsiG,SAAStpH,OAAS,GAAKgnB,EAAK6pI,WACvI,CAEA,YAAIuoL,GAAY,IAADoE,EAAAC,EACgEC,EAAAC,EAEDC,EAAAC,EAF5E,OAAIt9U,KAAK+2U,WAAWqF,aAAyC,QAA9Ba,EAAIj9U,KAAK+2U,WAAWiC,kBAAU,IAAAiE,GAA1BA,EAA4B1F,aAC5B,QAAjC4F,EAAOn9U,KAAK+2U,WAAWiC,kBAAU,IAAAmE,GAAO,QAAPC,EAA1BD,EAA4BvwT,aAAK,IAAAwwT,OAAP,EAA1BA,EAAmC3wU,QAAO,CAACytG,EAAOzzF,IAASA,EAAK6pI,SAAW7pI,EAAKm1T,eAAiB1hO,EAAQzzF,EAAKnG,MAAMu4T,SAAW3+N,GAAO,GACpIl6G,KAAK+2U,WAAWqF,aAAep8U,KAAK+2U,WAAWuF,iBACvB,QAAjCe,EAAOr9U,KAAK+2U,WAAWiC,kBAAU,IAAAqE,GAAO,QAAPC,EAA1BD,EAA4BzwT,aAAK,IAAA0wT,OAAP,EAA1BA,EAAmC7wU,QAAO,CAACytG,EAAOzzF,IAASyzF,EAAQzzF,EAAKnG,MAAMu4T,UAAU,GAErE,QAA5BqE,EAAOl9U,KAAK+2U,WAAWnqT,aAAK,IAAAswT,OAAA,EAArBA,EAAuBzwU,QAAO,CAACytG,EAAOzzF,IAASA,EAAK6pI,SAAW7pI,EAAKm1T,eAAiB1hO,EAAQzzF,EAAKnG,MAAMu4T,SAAW3+N,GAAO,EACnI,CAEA,OAAIz5F,GAAO,IAAD88T,EAAAC,EACqEC,EAAAC,EAEDC,EAAAC,EAF5E,OAAI59U,KAAK+2U,WAAWqF,aAAyC,QAA9BmB,EAAIv9U,KAAK+2U,WAAWiC,kBAAU,IAAAuE,GAA1BA,EAA4BhG,aAC5B,QAAjCkG,EAAOz9U,KAAK+2U,WAAWiC,kBAAU,IAAAyE,GAAO,QAAPC,EAA1BD,EAA4B7wT,aAAK,IAAA8wT,OAAP,EAA1BA,EAAmCjxU,QAAO,CAACytG,EAAOzzF,IAASA,EAAK6pI,SAAW7pI,EAAKm1T,eAAiB1hO,EAAQzzF,EAAKnG,MAAMG,IAAMy5F,GAAO,GAC/Hl6G,KAAK+2U,WAAWqF,aAAep8U,KAAK+2U,WAAWuF,iBACvB,QAAjCqB,EAAO39U,KAAK+2U,WAAWiC,kBAAU,IAAA2E,GAAO,QAAPC,EAA1BD,EAA4B/wT,aAAK,IAAAgxT,OAAP,EAA1BA,EAAmCnxU,QAAO,CAACytG,EAAOzzF,IAASyzF,EAAQzzF,EAAKnG,MAAMG,KAAK,GAEhE,QAA5B+8T,EAAOx9U,KAAK+2U,WAAWnqT,aAAK,IAAA4wT,OAAA,EAArBA,EAAuB/wU,QAAO,CAACytG,EAAOzzF,IAASA,EAAK6pI,SAAW7pI,EAAKm1T,eAAiB1hO,EAAQzzF,EAAKnG,MAAMG,IAAMy5F,GAAO,EAC9H,CAEA,SAAIA,GACF,OAAOl6G,KAAK64U,SAAW74U,KAAKygB,GAC9B,CAEA,qBAAIi7T,GAAqB,IAADmC,EAAAC,EAAAC,EACtB,MAAO,CACLlF,SAAuB,QAAfgF,EAAE79U,KAAK64U,gBAAQ,IAAAgF,OAAA,EAAbA,EAAe1jO,QAAQ,GACjC15F,IAAa,QAAVq9T,EAAE99U,KAAKygB,WAAG,IAAAq9T,OAAA,EAARA,EAAU3jO,QAAQ,GACvBD,MAAiB,QAAZ6jO,EAAE/9U,KAAKk6G,aAAK,IAAA6jO,OAAA,EAAVA,EAAY5jO,QAAQ,GAE/B,GClGF,MAAM6jO,GAwBJryU,WAAAA,CAAWzL,GAKP,IALQ,WACV+9U,EAAU,QACVvqT,EAAO,UACPq5I,EAAS,kBACT+sK,GACD55U,EACCF,KAAKi+U,WAAaA,EAClBj+U,KAAK0zB,QAAUA,EACf1zB,KAAK+sK,UAAYA,EACjB/sK,KAAK85U,kBAAoBA,EACzB/L,GAAe/tU,KAAM,CACnBi+U,WAAYpwU,GACZ6lB,QAAS7lB,GACTk/J,UAAWl/J,GACXisU,kBAAmBjsU,IAEvB,EAxCImwU,GACGE,kBAAoB,CACzBC,QAAS,EACTC,MAAO,GAHLJ,GAMGK,iBAAmB,CACxBC,kBAAmB,EACnBC,oBAAqB,EACrBC,iBAAkB,EAClBC,oBAAqB,EACrBC,6BAA8B,EAC9BC,iBAAkB,EAClBC,mBAAoB,EACpBC,mBAAoB,EACpBC,yBAA0B,EAC1BC,0BAA2B,GAC3BC,sBAAuB,GACvBC,iBAAkB,GAClBC,sBAAuB,GAEvBC,oBAAqB,KAsBzB,YCpCe,MAAMC,GACnBzzU,WAAAA,CAAWzL,GAOP,IAPQ,UACVm/U,EAAY,KAAI,UAChBC,EAAY,KAAI,QAChBrxP,EAAU,KAAI,YACdssL,EAAc,KAAI,SAClBs+D,EAAW,KAAI,IACfp4T,EAAM,MACPvgB,EACCF,KAAKu/U,WAAaF,EAClBr/U,KAAKs/U,UAAYA,EACjBt/U,KAAKiuF,QAAUA,EACfjuF,KAAKu6Q,YAAcA,EACnBv6Q,KAAK64U,SAAWA,EAChB74U,KAAKygB,IAAMA,EACXzgB,KAAKmzB,OAAS,GACd46S,GAAe/tU,KAAM,CACnBs/U,UAAWzxU,GACXogF,QAASpgF,GACT0sQ,YAAa1sQ,GACbgrU,SAAUhrU,GACV4S,IAAK5S,GACLslB,OAAQtlB,GACRqsG,MAAOj1C,GACPu6Q,cAAehwQ,GACfiwQ,oBAAqBjwQ,KAGvBxvE,KAAKy/U,qBACP,CAEA,SAAIvlO,GACF,OAAOl6G,KAAK64U,SAAW74U,KAAKygB,GAC9B,CAEA++T,aAAAA,CAAcE,GAAY,IAADC,EAAAC,EAAAC,EAAAC,EAClBJ,IACL1/U,KAAKs/U,UAA+B,QAAtBK,EAAGD,EAAUK,iBAAS,IAAAJ,EAAAA,EAAI,KACxC3/U,KAAKiuF,QAA2B,QAApB2xP,EAAGF,EAAUM,eAAO,IAAAJ,EAAAA,EAAI,KACpC5/U,KAAK64U,SAA0B,QAAlBgH,EAAGH,EAAUn/T,aAAK,IAAAs/T,EAAAA,EAAI,KACnC7/U,KAAKygB,IAAmB,QAAhBq/T,EAAGJ,EAAUh/T,WAAG,IAAAo/T,EAAAA,EAAI,KAE5B9/U,KAAKy/U,sBACP,CAEAA,mBAAAA,GACMz/U,KAAKs/U,WACPt/U,KAAKu/U,WAAWx2N,SAASliH,KAAK,IAAIm3U,GAAe,CAC/CC,WAAYD,GAAeE,kBAAkBC,QAC7CzqT,QAAS7wB,GAAE,4BACXkqK,UAAWixK,GAAeK,iBAAiBc,sBAGjD,ECkPF,SApSA,MACExzU,WAAAA,CAAWzL,GAqBP,IArBS,UACXm6Q,EAAS,UACT4lE,EAAS,YACT1lE,EAAW,wBACXg8D,EAA0B,KAAI,OAC9BqC,EAAM,QACNtoL,EAAO,SACPqpI,EAAQ,aACRumD,EAAY,QACZC,EAAO,SACPC,EAAQ,qBACRC,EAAoB,cACpBC,EAAa,cACb9pC,EAAa,gBACb+pC,EAAe,QACfrlE,EAAO,WACPl9P,EAAa,GAAE,aACfqlS,EAAe,EAAC,SAChBw2B,EAAW,GAAE,MACb//D,EAAQ,CAAC,EAAC,WACVj3H,EAAa,IACd3iJ,EACCF,KAAK+2U,WAAa18D,EAClBr6Q,KAAKwgV,WAAaP,EAClBjgV,KAAKqjT,aAAeA,EACpBrjT,KAAKu6Q,YAAcA,EACnBv6Q,KAAKu2U,wBAA0BA,EAC/Bv2U,KAAK44U,OAASA,EACd54U,KAAKswJ,QAAUA,EACftwJ,KAAK25R,SAAWA,EAChB35R,KAAKkgV,aAAeA,EACpBlgV,KAAKmgV,QAAUA,EACfngV,KAAKogV,SAAWA,EAChBpgV,KAAKqgV,qBAAuBA,EAC5BrgV,KAAKsgV,cAAgBA,EACrBtgV,KAAKw2S,cAAgBA,EACrBx2S,KAAKugV,gBAAkBA,EACvBvgV,KAAKk7Q,QAAUA,EACfl7Q,KAAKge,WAAaA,EAClBhe,KAAKmzB,OAAS,GACdnzB,KAAK+oH,SAAW,GAChB/oH,KAAKsgB,MAAQ,IAAI8+T,GAAmB,CAAEC,UAAWr/U,OACjDA,KAAK65U,SAAWA,EAChB75U,KAAK85Q,MAAQA,EACb95Q,KAAK6iJ,WAAaA,EAElBkrL,GAAe/tU,KAAM,CACnBwgV,WAAY3yU,GACZ0sQ,YAAa1sQ,GACb0oU,wBAAyB1oU,GACzB+qU,OAAQ/qU,GACRyiJ,QAASziJ,GACT8rR,SAAU9rR,GACVqyU,aAAcryU,GACdsyU,QAAStyU,GACTuyU,SAAUvyU,GACVwyU,qBAAsBxyU,GACtByyU,cAAezyU,GACf2oS,cAAe3oS,GACf0yU,gBAAiB1yU,GACjBqtQ,QAASrtQ,GACTmQ,WAAYnQ,GACZyS,MAAOzS,GACPslB,OAAQtlB,GACRk7G,SAAUl7G,GACVisQ,MAAOjsQ,GACPg1I,WAAYh1I,GACZ4yU,cAAejxQ,GACfqrQ,aAAcrrQ,GACdkxQ,aAAclxQ,GACdv2D,OAAQu2D,GACRmxQ,mBAAoBnxQ,GACpBoxQ,eAAgBpxQ,GAChB0oQ,SAAU1oQ,GACV2oQ,cAAe3oQ,GACfqxQ,eAAgBrxQ,GAChBsxQ,kBAAmBtxQ,GACnBsrM,eAAgBtrM,GAChBmpQ,UAAWnpQ,GACXosQ,eAAgB32Q,GAChB6zQ,WAAY7zQ,GACZ6yQ,WAAY7yQ,GACZ8yQ,MAAO9yQ,GACP4yQ,gBAAiB5yQ,GACjBy0Q,UAAWz0Q,KAEbjlE,KAAK86Q,eAAe,CAAC3B,OAAa,OAALW,QAAK,IAALA,OAAK,EAALA,EAAOinE,YAAaC,aAAchhV,KAAKkgV,cACtE,CAEAO,aAAAA,CAAenuS,GACTA,EAAWlkC,MAAM6yU,QAAUjD,GAAeE,kBAAkBE,OAC9Dp+U,KAAKmzB,OAAOtsB,KAAK,IAAIm3U,GAAe,CAClCC,WAAY3rS,EAAWlkC,MAAM6yU,MAC7BvtT,QAAS4e,EAAWlkC,MAAM+rQ,QAC1BptG,UAAWz6H,EAAWlkC,MAAMqnB,QAG5B6c,EAAWlkC,MAAM6yU,QAAUjD,GAAeE,kBAAkBC,SAC9Dn+U,KAAK+oH,SAASliH,KAAK,IAAIm3U,GAAe,CACpCC,WAAY3rS,EAAWlkC,MAAM6yU,MAC7BvtT,QAAS4e,EAAWlkC,MAAM+rQ,QAC1BptG,UAAWz6H,EAAWlkC,MAAMqnB,OAGlC,CAEAolT,YAAAA,CAAcjC,GACZ54U,KAAK44U,OAASA,CAChB,CAEA,kBAAM8H,GACJ,UACQ1gV,KAAK+2U,WAAWsD,kBAAkB6G,WAAWlhV,KAAKu6Q,YAAa,CAACjqH,SAAUtwJ,KAAKswJ,UACrFtwJ,KAAKswJ,SAAWtwJ,KAAKswJ,OACvB,CAAE,MAAOlkJ,IACP3C,QAAQ2C,MAAMA,GAChB,CACF,CAEA,YAAM6M,GACJ,UACQjZ,KAAK+2U,WAAWsD,kBAAkB8G,WAAWnhV,MACnDA,KAAK+2U,WAAW0D,YAAY,CAACz6U,KAAKu6Q,cAClCv6Q,KAAKwgV,WAAW/H,kBACCz4U,KAAKwgV,WAAW/J,YAE/Bz2U,KAAKwgV,WAAWhI,mBAChBx4U,KAAKwgV,WAAWzF,yBACX/6U,KAAKwgV,WAAWhJ,YAAcx3U,KAAKswJ,eAChCtwJ,KAAK+2U,WAAWp7T,cAEf3b,KAAKwgV,WAAW5I,iBACvB53U,KAAK+2U,WAAW16T,qBAEtB,CAAE,MAAOjQ,IACP3C,QAAQ2C,MAAMA,GAChB,CACF,CAEA,wBAAMu0U,GACJ,UACQ3gV,KAAK+2U,WAAWsD,kBAAkBsG,mBAAmB3gV,KAAKu6Q,YAAav6Q,KAAKswJ,SAClFtwJ,KAAK+2U,WAAWqK,mBAAmBphV,MAC/BA,KAAKswJ,eACDtwJ,KAAK+2U,WAAWp7T,YAE1B,CAAE,MAAOvP,IACP3C,QAAQ2C,MAAMA,GAChB,CACF,CAEA,oBAAMw0U,GACJ,UACQ5gV,KAAK+2U,WAAWsD,kBAAkBuG,eAAe5gV,KAAKu6Q,aAC5Dv6Q,KAAKswJ,SAAU,EAEftwJ,KAAK+2U,WAAW6J,eAAe5gV,YACzBA,KAAK+2U,WAAWp7T,YACxB,CAAE,MAAOvP,IACP3C,QAAQ2C,MAAMA,GAChB,CACF,CAEA,cAAM8rU,CAAUU,GACd,IACE,MAAMyI,EAAezI,IAAW7kU,GAAcmlU,gBAAgBE,WAAa,KAAOR,QAC5E54U,KAAK+2U,WAAWsD,kBAAkBiH,mBAAmBthV,KAAKu6Q,YAAa8mE,GAC7ErhV,KAAK44U,OAASA,EACd54U,KAAKwgV,WAAWpI,kBAAkB,CAAE/3D,WAAYrgR,KAAKwgV,WAAW/J,WAAa,IAC7Ez2U,KAAKwgV,WAAWhI,mBAChBx4U,KAAKwgV,WAAWzF,wBAChB,MAAMD,EAAa96U,KAAK+2U,WAAW6D,MAAM75T,MAAKmoG,GAAQA,EAAKtoH,KAAOg4U,IAC9DkC,IACFA,EAAWtC,mBACXsC,EAAWC,yBAEb/6U,KAAK+2U,WAAWiE,SAASpC,EAC3B,CAAE,MAAOxsU,IACP3C,QAAQ2C,MAAMA,GAChB,CACF,CAEA,mBAAM+rU,CAAe/3U,GACnB,IACE,MAAM,GAAEkR,SAAatR,KAAK+2U,WAAWsD,kBAAkBkH,sBAAsBvhV,KAAKu6Q,YAAan6Q,GAC/FJ,KAAK44U,OAAStnU,EACdtR,KAAKwgV,WAAWzF,wBAChB/6U,KAAK+2U,WAAWkE,QAAQ,CACtBrC,OAAQtnU,EACRlR,QACAq2U,WAAY,EACZE,aAAa,EACbE,YAAa4C,OAAS5sP,MAAMqjB,cAC5B4mO,iBAAkB2C,OAAS5sP,MAAMqjB,gBAEnClwG,KAAK+2U,WAAWiE,SAAS1pU,EAC3B,CAAE,MAAOlF,IACP3C,QAAQ2C,MAAMA,GAChB,CACF,CAEAo1U,IAAAA,GACExhV,KAAK+2U,WAAW0K,WAAW7rK,SAAS51K,KAAKmgV,QAC3C,CAEA,oBAAMU,CAAgBT,GACpB,IACE,MAAMxH,EAAS54U,KAAKwgV,WAAWjJ,cAAgBv3U,KAAKwgV,WAAW3yL,WAAa7tJ,KAAKwgV,WAAWhJ,WAAa,KAAOx3U,KAAKwgV,WAAW5/U,SAC1HZ,KAAK+2U,WAAWsD,kBAAkB6G,WAAWlhV,KAAKu6Q,YAAa,CAAE6lE,WAAUxH,WACjF54U,KAAKwgV,WAAWzF,wBAChB/6U,KAAKwgV,WAAWhI,mBAChBx4U,KAAKogV,SAAWA,CAClB,CAAE,MAAOx9U,GACP6G,QAAQ2C,MAAMxJ,EAChB,CACF,CAEAk+U,iBAAAA,CAAmBY,GAAc,IAADC,EAC9B3hV,KAAKmzB,OACHuuT,EACGp4U,QAAQgpC,GAAeA,EAAWlkC,MAAM6yU,QAAUjD,GAAeE,kBAAkBE,QACnF3tU,KAAI6hC,IAAU,IAAAsvS,EAAA,OAAI,IAAI5D,GAAe,CACpCC,WAAY3rS,EAAWlkC,MAAM6yU,MAC7BvtT,QAAS4e,EAAWlkC,MAAM+rQ,QAC1BptG,UAAWz6H,EAAWlkC,MAAMqnB,KAC5BqkT,kBAAwC,QAAvB8H,EAAEtvS,EAAWlkC,MAAMyzU,YAAI,IAAAD,OAAA,EAArBA,EAAuBE,mBAC1C,IACN,MAAMC,EAAsB/hV,KAAK+oH,SAASz/G,QAAO4oH,GAAWA,EAAQ66C,YAAcixK,GAAeK,iBAAiBc,sBAC5G6C,EAAiBN,EACpBp4U,QAAQgpC,GAAeA,EAAWlkC,MAAM6yU,QAAUjD,GAAeE,kBAAkBC,UACnF1tU,KAAI6hC,GAAc,IAAI0rS,GAAe,CACpCC,WAAY3rS,EAAWlkC,MAAM6yU,MAC7BvtT,QAAS4e,EAAWlkC,MAAM+rQ,QAC1BptG,UAAWz6H,EAAWlkC,MAAMqnB,SAEhCz1B,KAAK+oH,SAAW,IAAIg5N,KAAwBC,GAC5ChiV,KAAK86Q,eAAe,CAAC3B,OAAkB,QAAZwoE,EAAE3hV,KAAK85Q,aAAK,IAAA6nE,OAAA,EAAVA,EAAYZ,YAAaC,aAAchhV,KAAKkgV,cAC3E,CAEAplE,cAAAA,CAAgBxtQ,GACdtN,KAAK85Q,MAAMX,OAAS7rQ,EAAO6rQ,OACL,IAAlB7rQ,EAAO6rQ,SACTn5Q,KAAKkgV,aAAgB5yU,EAAO0zU,aAAa/vS,WAAW,OAAS,GAAEjxC,KAAK+2U,WAAW0K,WAAWQ,eAAe30U,EAAO0zU,eAAgB1zU,EAAO0zU,cAEnH,IAAlB1zU,EAAO6rQ,SAETn5Q,KAAK+oH,SAAW,IAAI/oH,KAAK+oH,SAASz/G,QAAO5E,GAAqB,MAAhBA,EAAEqoK,YAAoB,IAAIixK,GAAe,CACrFC,WAAYD,GAAeE,kBAAkBC,QAC7CzqT,QAAS7wB,GAAE,iCACXkqK,UAAW,OAGjB,CAEA,eAAM4rK,GACJ,UACQ34U,KAAK+2U,WAAWsD,kBAAkB99T,cAAcvc,KAAKu6Q,YAC7D,CAAE,MAAO33Q,GACP,OAAOA,CACT,CACF,CAEA,kBAAIg5U,GACF,OAAO57U,KAAKwgV,WAAWlK,aACzB,CAEA,cAAIwC,GACF,OAAO94U,KAAKk7Q,QAAQ49D,UACtB,CAEA,cAAIhB,GACF,OAAO93U,KAAK6iJ,WAAWx5I,MAAK65L,GAAgC,eAAnBA,EAAUrnL,MAA2D,SAAlCqnL,EAAUliL,MAAM09D,eAC9F,CAEA,SAAIq5P,GACF,OAAO/3U,KAAK6iJ,WAAWx5I,MAAK65L,GAAgC,UAAnBA,EAAUrnL,MAAsD,SAAlCqnL,EAAUliL,MAAM09D,eACzF,CAEA,mBAAIm5P,GACF,OAAO73U,KAAKmzB,OAAO9pB,MAAK4pB,GAAOA,EAAI85I,YAAcixK,GAAeK,iBAAiBK,8BACnF,CAEA,aAAIhF,GACF,OAAO15U,KAAKmzB,OAAO9pB,MAAK4pB,GAAOA,EAAI85I,YAAcixK,GAAeK,iBAAiBI,qBACnF,CAEA,kCAAIzG,GAAkC,IAADkK,EAAAC,EACnC,OAAOniV,KAAK65U,SAASp6U,QAAoB,QAAdyiV,EAAGliV,KAAKmzB,cAAM,IAAA+uT,GAAK,QAALC,EAAXD,EAAc,UAAE,IAAAC,OAAL,EAAXA,EAAkBrI,oBAAqB,CACvE,GC7RF,SAhBA,MACEnuU,WAAAA,CAAWzL,GAMP,IANQ,UACVkiV,EAAS,KACT1wU,EAAI,cACJ8kS,EAAa,KACbjiN,EAAI,WACJukP,GAAa,GACd54U,EACCF,KAAKoiV,UAAYA,EACjBpiV,KAAK0R,KAAOA,EACZ1R,KAAKw2S,cAAgBA,EACrBx2S,KAAKu0F,KAAOA,EACZv0F,KAAK84U,WAAaA,CACpB,GCGF,SAhBA,MACEntU,WAAAA,CAAWzL,GAMP,IANQ,SACVy5R,EAAQ,SACR0oD,EAAQ,OACR5oH,EAAM,aACN6oH,EAAY,WACZC,GACDriV,EACCF,KAAK25R,SAAWA,EAChB35R,KAAKqiV,SAAWA,EAChBriV,KAAKy5N,OAASA,EACdz5N,KAAKsiV,aAAeA,EACpBtiV,KAAKuiV,WAAaA,CACpB,GCsWF,SA9WA,MACE52U,WAAAA,CAAWzL,GAEP,IAFQ,UACVm6Q,GACDn6Q,EACCF,KAAK+2U,WAAa18D,EAClBr6Q,KAAKwiV,WAAa,KAClBxiV,KAAKyiV,gBAAiB,EACtB1U,GAAe/tU,KAAM,CACnB+2U,WAAYlpU,GACZ40U,eAAgB50U,GAChB60U,WAAYlzQ,GACZmzQ,YAAanzQ,GACbozQ,WAAYpzQ,IAEhB,CAEAkzQ,UAAAA,GACO1iV,KAAKwiV,aACRxiV,KAAKwiV,WAAalhN,aAAY,KAC5BthI,KAAK+2U,WAAW5sB,UAAYnqT,KAAKyiV,cAAc,GAC9C,KAEP,CAEAI,SAAAA,GACM7iV,KAAKwiV,aACPzlN,cAAc/8H,KAAKwiV,YACnBxiV,KAAKwiV,WAAa,KAEtB,CAEAG,WAAAA,GAAsD,IAA1C,cAACG,GAActjV,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,CAACsjV,eAAe,GAI5C,OAHA9iV,KAAK+2U,WAAWgM,QAAQ54B,QAAU24B,EAClC9iV,KAAKyiV,gBAAiB,EACtBziV,KAAK0iV,aACEn9U,KAAK43D,KACd,CAEA,gBAAMylR,CAAWzlR,GACfn9D,KAAK+2U,WAAW5sB,SAAU,EAC1BnqT,KAAK+2U,WAAWgM,QAAQ54B,SAAU,EAClCnqT,KAAK+2U,WAAWyD,mBAAmB5yU,SAASshH,IAC1CA,EAAKihM,SAAU,CAAK,IAEtBnqT,KAAKyiV,gBAAiB,EACtBziV,KAAK6iV,YACDt9U,KAAK43D,MAAQA,EAAM,WACf,IAAI95D,SAAQm1B,GAAW7lB,YAAW,KACtC6lB,GAAS,GACR,KAAQjzB,KAAK43D,MAAQA,KAE5B,CAEA,sBAAMm9Q,CAAiBC,EAAcjqL,GACnC,IACEtwJ,KAAK2iV,oBACCt/U,QAAQqQ,IAAI6mU,EAAa9pU,KAAI/D,gBAC3B1M,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO8B,eAC/C8+P,EACA,CACE0oE,UAAW3yL,EACX4yL,SAAU,MAEb,WAEGljV,KAAKmjV,iCACb,CAAE,MAAO/2U,IACP3C,QAAQ2C,MAAMA,GAChB,CAAC,QACCpM,KAAK4iV,YACP,CACF,CAEA,gBAAM1B,CAAW3mE,EAAWtnQ,GAAuD,IAArD,QAACq9I,EAAU,KAAI,SAAE8vL,EAAW,KAAI,OAAExH,EAAS,MAAM3lU,EAC7E,IACEjT,KAAK2iV,oBACC3iV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO8B,eAC/C8+P,EACA,CACEp/P,OAAQy9T,QAAUx2U,EAClB6gV,UAAuB,OAAZ3yL,OAAmBluJ,EAAYkuJ,EAC1C4yL,SAAuB,OAAb9C,OAAoBh+U,EAAYg+U,IAG9B,OAAZ9vL,GAAoBtwJ,KAAK+2U,WAAWqM,sBAChCpjV,KAAKmjV,iCAAiC7yL,EAEhD,CAAE,MAAOlkJ,IACP3C,QAAQ2C,MAAMA,GAChB,CAAC,QACCpM,KAAK4iV,YACP,CACF,CAEA,eAAM3K,CAAUW,GAA0B,IAAlByK,EAAQ7jV,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,GAAAA,UAAA,GAAG,KACjC,IAEE,GADAQ,KAAK2iV,cACD/J,IAAW7kU,GAAcmlU,gBAAgBG,gBACrCr5U,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAOyB,cAAcioU,QAC1D,GAAIzK,IAAW7kU,GAAcmlU,gBAAgBC,cAC5Cn5U,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAOsB,UAAUooU,SACrDrjV,KAAK+2U,WAAWiM,gBAAgBj6U,MAAM+I,MAAMuN,yBAC7C,CACL,IAAKgkU,GAAgC,IAApBA,EAAS5jV,OAAc,CACtC,MAAM,MAAEuxS,SAAgBhxS,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAOmB,YAAY89T,GAC/EyK,EAAWryC,EAAMvgS,KAAIgW,GAAQA,EAAKo0P,aACpC,CACIwoE,EAAS5jV,OAAS,SACdO,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAOsB,UAAUooU,EAAUzK,SAEjE54U,KAAK+2U,WAAWiM,gBAAgBj6U,MAAM+I,MAAMuN,oBACpD,CACF,CAAE,MAAOjT,IACP3C,QAAQ2C,MAAMA,GAChB,CAAC,QACCpM,KAAK4iV,YACP,CACF,CAEA,gBAAMzB,CAAW16T,GACf,MAAM02C,EAAMn9D,KAAK2iV,YAAY,CAACG,gBAAgBr8T,EAAK6pI,UAAmB7pI,EAAK+5T,WAAWhJ,aACtF,UACQx3U,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAOqB,eAAeyL,EAAK8zP,mBAC/Dv6Q,KAAK+2U,WAAWiM,gBAAgBj6U,MAAM+I,MAAMuN,oBACpD,CAAE,MAAOjT,IACP3C,QAAQ2C,MAAMA,GAChB,CAAC,cACOpM,KAAK4iV,WAAWzlR,EACxB,CACF,CAEA,wBAAMwjR,CAAmBpmE,EAAajqH,GACpC,MAAMnzF,EAAMn9D,KAAK2iV,YAAY,CAACG,eAAe,IAC7C,UACQt3U,GAAAA,eAAeiX,IAAI9I,OAAOW,aAAaigQ,SACvCv6Q,KAAK+2U,WAAWiM,gBAAgBj6U,MAAM+I,MAAMuN,oBACpD,CAAE,MAAOjT,IACP3C,QAAQ2C,MAAMA,GAChB,CAAC,cACOpM,KAAK4iV,WAAWzlR,EACxB,CACF,CAEA,oBAAMyjR,CAAermE,GACnB,MAAMp9M,EAAMn9D,KAAK2iV,cACjB,UACQn3U,GAAAA,eAAeiX,IAAI9I,OAAOU,UAAUkgQ,SACpCv6Q,KAAK+2U,WAAWiM,gBAAgBj6U,MAAM+I,MAAMuN,qBAClD,MAAMikU,QAAuBtjV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO0B,cAAa,GACrFrb,KAAK+2U,WAAWwM,qBAAqBD,EACvC,CAAE,MAAOl3U,IACP3C,QAAQ2C,MAAMA,GAChB,CAAC,cACOpM,KAAK4iV,WAAWzlR,EACxB,CACF,CAEA,qCAAMgmR,GAA4D,IAA5BK,EAAiBhkV,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,IAAAA,UAAA,GACrD,IACEQ,KAAK2iV,cACL,MAAMc,QAAoBzjV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO4B,oBAAmB,GAClFmoU,QAA8B1jV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO0B,cAAa,GACtFsoU,EAA0BH,QAA0BxjV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO0B,cAAa,GAAS,GAC3Hrb,KAAK+2U,WAAW6M,kBAAkBH,EAAYzyC,OAC9ChxS,KAAK+2U,WAAWwM,qBAAqB,IAAIG,KAA0BC,GACrE,CAAE,MAAOv3U,IACP3C,QAAQ2C,MAAMA,GAChB,CAAC,QACCpM,KAAK4iV,YACP,CACF,CAEA,gBAAMjnU,GAAiC,IAAtBkoU,IAAYrkV,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,KAAAA,UAAA,GAC3B,IACEQ,KAAK2iV,cACL,MAAMmB,QAAyB9jV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAOmB,cACpEipU,QAA6B/jV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAOoB,kBAC9E,IAAI6R,EAAQ,IAAIk3T,EAAiB9yC,SAAU+yC,EAAqB/yC,OAC5D6yC,IACFj3T,EAAQA,EAAMtjB,QAAOmd,GAAQA,EAAK6pI,WAEpCtwJ,KAAK+2U,WAAWiN,gBAAgBp3T,GAChC,MAAM62T,QAAoBzjV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO4B,oBAAmB,GAClF0oU,QAAwBjkV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO6B,wBAAuB,GAEhG,IAAI0oU,EAAe,GACnB,GAAIL,EACFK,EAAe,IAAIT,EAAYzyC,SAAUizC,EAAgBjzC,WACpD,CACL,MAAMmzC,QAA6BnkV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO4B,oBAAmB,GAC3F6oU,QAAiCpkV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO6B,wBAAuB,GACzG0oU,EAAe,IACVT,EAAYzyC,SACZizC,EAAgBjzC,SAChBmzC,EAAqBnzC,SACrBozC,EAAyBpzC,MAEhC,CACAhxS,KAAK+2U,WAAW6M,kBAAkBM,GAElC,MAAMZ,QAAuBtjV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO0B,cAAa,GAC/EgpU,QAA2BrkV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO2B,kBAAiB,GAC7F,IAAIgpU,EAAkB,GACtB,GAAIT,EACFS,EAAkB,IAAIhB,KAAmBe,OACpC,CACL,MAAME,QAAgCvkV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO0B,cAAa,GACxFmpU,QAAoCxkV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO2B,kBAAiB,GACtGgpU,EAAkB,IACbhB,KACAe,KACAE,KACAC,EAEP,CAEAxkV,KAAK+2U,WAAWwM,qBAAqBe,SAE/BtkV,KAAK+2U,WAAWiM,gBAAgBj6U,MAAM+I,MAAMuN,oBACpD,CAAE,MAAOjT,IACP3C,QAAQ2C,MAAMA,GAChB,CAAC,QACCpM,KAAK4iV,YACP,CACF,CAEA,kBAAMjI,CAAa8J,EAAWC,GAAoC,IAAtBhK,EAAWl7U,UAAAC,OAAA,QAAA2C,IAAA5C,UAAA,IAAAA,UAAA,GACrD,IAAK,IAADmlV,EAAAC,EAAAC,EACF7kV,KAAK2iV,cACL,MAAMzxC,EACkC,QADxByzC,EAAG3kV,KAAK+2U,WAAW6D,MAChC75T,MAAMmoG,GAASA,EAAKtoH,KAAO6jV,WAAU,IAAAE,GAAO,QAAPC,EADrBD,EACuB/3T,aAAK,IAAAg4T,GACQ,QADRC,EAD5BD,EAEft7U,QAAQmd,IAASi0T,GAAcj0T,EAAK6pI,iBAAe,IAAAu0L,OADf,EADrBA,EAGfp0U,KAAKgW,IAAI,CACTo0P,YAAap0P,EAAK8zP,YAClBp/P,OAAQupU,EACRxB,SAAU,eAERljV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAOgC,WAAW,CAC1Dq1R,MAAOE,EACP4zC,aAAa,GAEjB,CAAE,MAAO14U,IACP3C,QAAQ2C,MAAMA,GAChB,CAAC,QACCpM,KAAK4iV,YACP,CACF,CAEA,gBAAMzmU,CAAWy8T,GACf,IACE54U,KAAK2iV,oBACC3iV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAOwC,WAAWy8T,GAC5D54U,KAAK+2U,WAAW0D,YAAYz6U,KAAK+2U,WAAW6D,MAAM75T,MAAKmoG,GAAQA,EAAKtoH,KAAOg4U,IAAQhsT,MAAMnc,KAAIgW,GAAQA,EAAK8zP,cAC5G,CAAE,MAAOnuQ,IACP3C,QAAQ2C,MAAMA,GAChB,CAAC,QACCpM,KAAK4iV,YACP,CACF,CAEA,aAAM3H,CAAQ76U,EAAOwsB,GACnB,IACE5sB,KAAK2iV,cACL,MAAM,GAAErxU,SAAatR,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAOiC,eAAexb,GAO/E,aANMJ,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAOgC,WAAW,CAC1Dq1R,MAAOpkR,EAAMnc,KAAKgW,IAAI,CACpBo0P,YAAap0P,EAAK8zP,YAClBp/P,OAAQ7J,QAGL,CAAEA,KACX,CAAE,MAAOlF,IACP3C,QAAQ2C,MAAMA,GAChB,CAAC,QACCpM,KAAK4iV,YACP,CACF,CAEA,wBAAMtB,CAAmB/mE,EAAamqE,GACpC,IACE1kV,KAAK2iV,oBACC3iV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO8B,eAC/C8+P,EACA,CACEp/P,OAAQupU,GAGd,CAAE,MAAOt4U,IACP3C,QAAQ2C,MAAMA,GAChB,CAAC,QACCpM,KAAK4iV,YACP,CACF,CAEA,2BAAMrB,CAAsBhnE,EAAan6Q,GACvC,IACEJ,KAAK2iV,cACL,MAAM,GAAErxU,SAAatR,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAOiC,eAAexb,GACzEqwI,EAAezwI,KAAK+2U,WAAWnqT,MAAM7L,MAAK0F,GAAQA,EAAK8zP,cAAgBA,IAC7E,GAAgB,OAAZ9pI,QAAY,IAAZA,GAAAA,EAAcmoM,OAAQ,CACxB,MAAMmM,EAAc/kV,KAAK+2U,WAAW6D,MAAM75T,MAAKmoG,GAAQA,EAAKtoH,KAAO6vI,EAAamoM,SACrE,OAAXmM,QAAW,IAAXA,GAAAA,EAAavM,kBACf,CAOA,aANMx4U,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO8B,eAC/C8+P,EACA,CACEp/P,OAAQ7J,IAGL,CAAEA,KACX,CAAE,MAAOlF,IACP3C,QAAQ2C,MAAMA,GAChB,CAAC,QACCpM,KAAK4iV,YACP,CACF,CAEA,gBAAMxmU,CAAWw8T,GACf,IAEE,OADA54U,KAAK2iV,oBACQ3iV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAOyC,WAAWw8T,EACrE,CAAE,MAAOxsU,IACP3C,QAAQ2C,MAAMA,GAChB,CAAC,QACCpM,KAAK4iV,YACP,CACF,CAEA,gBAAMtmU,CAAWs8T,EAAQx4U,GACvB,IAEE,OADAJ,KAAK2iV,oBACQ3iV,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO2C,WAAWs8T,EAAQx4U,EAC7E,CAAE,MAAOgM,IACP3C,QAAQ2C,MAAMA,GAChB,CAAC,QACCpM,KAAK4iV,YACP,CACF,CAEA,mBAAMrmU,CAAcg+P,GAClB,IACEv6Q,KAAK2iV,cACL,MAAM,WAAEtpE,SAAqBr5Q,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO4C,cAAcg+P,GACtFyqE,GAAgBxrE,YAAYH,EAAYkB,GACxCv6Q,KAAK+2U,WAAWz9D,cAAc,CAAC,CAACD,GAAc,CAACI,SAAUc,EAAarB,SAAU,CAACG,aAAYF,OAAQ,KACvG,CAAE,MAAO/sQ,IACP,MAAMA,EACR,CAAC,QACCpM,KAAK4iV,YACP,CACF,CAEA,mBAAMpmU,CAAco8T,GAClB,IACE54U,KAAK2iV,cACL,MAAM,WAACtpE,SAAqBr5Q,KAAK+2U,WAAWiM,gBAAgBvgU,IAAI9I,OAAO6C,cAAc,CAACo8T,IACtFoM,GAAgBxrE,YAAYH,EAAYu/D,GACxC54U,KAAK+2U,WAAWz9D,cAAc,CAAC,CAACD,GAAc,CAACI,SAAUm/D,EAAQ1/D,SAAU,CAACG,aAAYF,OAAQ,KAClG,CAAE,MAAO/sQ,IACP,MAAMA,EACR,CAAC,QACCpM,KAAK4iV,YACP,CACF,GChXa,MAAMqC,GACnBt5U,WAAAA,CAAWzL,GAGP,IAHQ,wBACVq2U,EAAuB,gBACvB2O,GACDhlV,EACCF,KAAKu2U,wBAA0BA,EAC/Bv2U,KAAKklV,gBAAkBA,CACzB,ECeF,SAhBA,MACEv5U,WAAAA,GACE3L,KAAKqc,qBAAsB,EAE3B0xT,GAAe/tU,KAAM,CACnBqc,oBAAqBxO,GACrBs3U,uBAAwB31Q,IAG5B,CACA21Q,sBAAAA,CAAuBj+U,GACrBlH,KAAKqc,oBAAsBnV,CAC7B,GCoUF,MCjVagzR,GAA8BA,CAACh4G,EAAQi4G,KAClD,MAAM,eAAEC,EAAc,OAAEt2O,EAAM,cAAEu2O,EAAa,iBAAEC,GAAqBH,GAE7DI,EAAWvyM,GAAYk6F,EAAO/nE,QAAQkgL,GAAe70R,WAAWmC,MAAM,KAE7E,OAAOyyR,EACJhxR,QAAQ,YAAa06C,GAIrB16C,QAAQ,YAAa64K,GAAkBs4G,EAAWJ,EAAaryG,eAAiB9/F,EAAWsyM,EAAmBtyM,EAAW,IAAI,EAGrHo9P,GAAcC,IACzB,MAAM14P,EAASk5F,GAAahgL,IAAI,gBAChC,OAAOw/U,EAAU5L,KAAO4L,GAASv6S,OAAQ,GDpBbmmE,ECoBmCtkB,ED+TxDskB,EAlVS,CACd,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,WACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,IAAO,aACP,SAAU,aACV,GAAM,aACN,QAAS,aACT,GAAM,aACN,aAAc,aACd,aAAc,aACd,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,GAAM,YACN,QAAS,YACT,GAAM,WACN,QAAS,WACT,QAAS,WACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,aAAc,WACd,aAAc,WACd,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,IAAO,aACP,SAAU,aACV,GAAM,WACN,QAAS,WACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,SAAU,aACV,QAAS,YACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,WACT,QAAS,YACT,QAAS,WACT,QAAS,WACT,QAAS,aACT,QAAS,WACT,QAAS,WACT,QAAS,aACT,QAAS,WACT,GAAM,aACN,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,WACT,QAAS,aACT,QAAS,aACT,GAAM,YACN,QAAS,YACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,IAAO,WACP,SAAU,WACV,GAAM,aACN,QAAS,aACT,GAAM,YACN,QAAS,YACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,IAAO,aACP,SAAU,aACV,GAAM,WACN,QAAS,WACT,GAAM,WACN,aAAc,WACd,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,YACN,QAAS,YACT,QAAS,WACT,IAAO,aACP,SAAU,aACV,GAAM,gBACN,QAAS,gBACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,WACN,QAAS,WACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,QAAS,aACT,GAAM,WACN,aAAc,WACd,aAAc,YACd,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,IAAO,aACP,SAAU,aACV,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,cACN,QAAS,cACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,WACN,QAAS,WACT,aAAc,WACd,IAAO,WACP,SAAU,WACV,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,QAAS,aACT,GAAM,aACN,QAAS,aACT,IAAO,aACP,SAAU,aACV,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,IAAO,WACP,SAAU,WACV,GAAM,WACN,QAAS,WACT,GAAM,WACN,QAAS,WACT,QAAS,aACT,IAAO,aACP,SAAU,aACV,IAAO,aACP,SAAU,aACV,SAAU,aACV,SAAU,aACV,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,IAAO,aACP,SAAU,aACV,GAAM,WACN,QAAS,WACT,QAAS,aACT,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,IAAO,aACP,SAAU,aACV,SAAU,aACV,IAAO,aACP,SAAU,aACV,SAAU,aACV,IAAO,WACP,SAAU,WACV,IAAO,WACP,SAAU,WACV,GAAM,aACN,QAAS,aACT,GAAM,WACN,aAAc,WACd,aAAc,WACd,aAAc,WACd,aAAc,WACd,aAAc,WACd,aAAc,WACd,aAAc,WACd,aAAc,WACd,GAAM,aACN,QAAS,WACT,QAAS,aACT,GAAM,WACN,QAAS,WACT,IAAO,aACP,SAAU,aACV,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,WACN,aAAc,WACd,GAAM,WACN,QAAS,WACT,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,IAAO,aACP,eAAgB,aAChB,GAAM,WACN,QAAS,WACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,aAAc,aACd,aAAc,aACd,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,aACN,QAAS,aACT,GAAM,WACN,QAAS,WACT,GAAM,WACN,QAAS,WACT,SAAU,WACV,QAAS,WACT,QAAS,WACT,QAAS,WACT,QAAS,WACT,GAAM,aACN,QAAS,cAGWA,EAAKvyB,eAAeS,cAAgB,gBAG/B8xB,KACR,CACjB,GAAM,QACN,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,OACN,GAAM,QACN,QAAS,SACT,GAAM,SACN,GAAM,SACN,GAAM,QACN,GAAM,OACN,GAAM,OACN,GAAM,OACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,QAAS,QACT,QAAS,QACT,GAAM,QACN,GAAM,QACN,GAAM,SACN,GAAM,SACN,QAAS,SACT,QAAS,SACT,QAAS,SACT,QAAS,QACT,QAAS,QACT,QAAS,QACT,QAAS,SACT,QAAS,SACT,QAAS,QACT,GAAM,QACN,QAAS,SACT,QAAS,OACT,QAAS,SACT,GAAM,OACN,GAAM,OACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,IAAO,SACP,GAAM,QACN,QAAS,QACT,QAAS,QACT,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,OACN,WAAY,SACZ,WAAY,SACZ,GAAM,SACN,GAAM,QACN,GAAM,SACN,GAAM,OACN,GAAM,OACN,QAAS,QACT,GAAM,QACN,GAAM,OACN,QAAS,QACT,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,SACN,GAAM,SACN,GAAM,QACN,GAAM,QACN,GAAM,OACN,GAAM,QACN,GAAM,QACN,GAAM,QACN,GAAM,OACN,GAAM,QACN,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","sources":["assets/icons/dark_left_arrow.svg","assets/icons/dark_right_arrow.svg","assets/icons/error.svg","assets/icons/left_arrow.svg","assets/icons/pencil_section.svg","assets/icons/proof.svg","assets/icons/right_arrow.svg","assets/icons/tick.svg","../_ustore_core/webpack/universalModuleDefinition","../_ustore_core/node_modules/type-detect/type-detect.js","../_ustore_core/src/buffer.mjs","../_ustore_core/src/detector.mjs","../_ustore_core/src/collection.mjs","../_ustore_core/src/global.mjs","../_ustore_core/src/copy_map.mjs","../_ustore_core/src/copier.mjs","../_ustore_core/src/index.mjs","../_ustore_core/node_modules/logdown/dist/logdown.min.js","../_ustore_core/src/types/assets.js","../_ustore_core/src/types/categories.js","../_ustore_core/src/types/orders.js","../_ustore_core/src/types/products.js","../_ustore_core/src/types/store.js","../_ustore_core/webpack/bootstrap","../_ustore_core/webpack/runtime/compat get default export","../_ustore_core/webpack/runtime/define property getters","../_ustore_core/webpack/runtime/global","../_ustore_core/webpack/runtime/hasOwnProperty shorthand","../_ustore_core/webpack/runtime/make namespace object","../_ustore_core/src/services/context.js","../_ustore_core/src/services/logger.js","../_ustore_core/src/api/http.js","../_ustore_core/node_modules/@babel/runtime/helpers/esm/typeof.js","../_ustore_core/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../_ustore_core/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../_ustore_core/node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../_ustore_core/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../_ustore_core/node_modules/redux/es/redux.js","../_ustore_core/node_modules/@redux-devtools/extension/lib/esm/index.js","../_ustore_core/node_modules/redux-thunk/es/index.js","../_ustore_core/src/redux/defaultState.js","../_ustore_core/src/redux/actionsTypes.js","../_ustore_core/src/utils/utils.js","../_ustore_core/src/redux/reducer.js","../_ustore_core/src/services/providerState.js","../_ustore_core/src/redux/store.js","../_ustore_core/src/services/config.js","../_ustore_core/src/services/binding.js","../_ustore_core/src/api/httpUpload.js","../_ustore_core/src/api/orders.js","../_ustore_core/src/api/categories.js","../_ustore_core/src/api/products.js","../_ustore_core/src/api/store.js","../_ustore_core/src/api/assets.js","../_ustore_core/src/services/api.js","../_ustore_core/src/api/activities.js","../_ustore_core/src/api/httpDeleteFiles.js","../_ustore_core/src/services/orders.js","../_ustore_core/src/services/store.js","../_ustore_core/src/services/culture.js","../_ustore_core/src/services/initialState.js","../_ustore_core/src/services/categories.js","../_ustore_core/src/services/products.js","../_ustore_core/src/services/assets.js","../_ustore_core/src/services/newState.js","../_ustore_core/src/UStoreProvider.js","../node_modules/add-px-to-style/index.js","../node_modules/ajv/lib/ajv.ts","../node_modules/ajv/lib/compile/codegen/code.ts","../node_modules/ajv/lib/compile/codegen/index.ts","../node_modules/ajv/lib/compile/codegen/scope.ts","../node_modules/ajv/lib/compile/errors.ts","../node_modules/ajv/lib/compile/index.ts","../node_modules/ajv/lib/compile/names.ts","../node_modules/ajv/lib/compile/ref_error.ts","../node_modules/ajv/lib/compile/resolve.ts","../node_modules/ajv/lib/compile/rules.ts","../node_modules/ajv/lib/compile/util.ts","../node_modules/ajv/lib/compile/validate/applicability.ts","../node_modules/ajv/lib/compile/validate/boolSchema.ts","../node_modules/ajv/lib/compile/validate/dataType.ts","../node_modules/ajv/lib/compile/validate/defaults.ts","../node_modules/ajv/lib/compile/validate/index.ts","../node_modules/ajv/lib/compile/validate/keyword.ts","../node_modules/ajv/lib/compile/validate/subschema.ts","../node_modules/ajv/lib/core.ts","../node_modules/ajv/lib/runtime/equal.ts","../node_modules/ajv/lib/runtime/ucs2length.ts","../node_modules/ajv/lib/runtime/uri.ts","../node_modules/ajv/lib/runtime/validation_error.ts","../node_modules/ajv/lib/vocabularies/applicator/additionalItems.ts","../node_modules/ajv/lib/vocabularies/applicator/additionalProperties.ts","../node_modules/ajv/lib/vocabularies/applicator/allOf.ts","../node_modules/ajv/lib/vocabularies/applicator/anyOf.ts","../node_modules/ajv/lib/vocabularies/applicator/contains.ts","../node_modules/ajv/lib/vocabularies/applicator/dependencies.ts","../node_modules/ajv/lib/vocabularies/applicator/if.ts","../node_modules/ajv/lib/vocabularies/applicator/index.ts","../node_modules/ajv/lib/vocabularies/applicator/items.ts","../node_modules/ajv/lib/vocabularies/applicator/items2020.ts","../node_modules/ajv/lib/vocabularies/applicator/not.ts","../node_modules/ajv/lib/vocabularies/applicator/oneOf.ts","../node_modules/ajv/lib/vocabularies/applicator/patternProperties.ts","../node_modules/ajv/lib/vocabularies/applicator/prefixItems.ts","../node_modules/ajv/lib/vocabularies/applicator/properties.ts","../node_modules/ajv/lib/vocabularies/applicator/propertyNames.ts","../node_modules/ajv/lib/vocabularies/applicator/thenElse.ts","../node_modules/ajv/lib/vocabularies/code.ts","../node_modules/ajv/lib/vocabularies/core/id.ts","../node_modules/ajv/lib/vocabularies/core/index.ts","../node_modules/ajv/lib/vocabularies/core/ref.ts","../node_modules/ajv/lib/vocabularies/discriminator/index.ts","../node_modules/ajv/lib/vocabularies/discriminator/types.ts","../node_modules/ajv/lib/vocabularies/draft7.ts","../node_modules/ajv/lib/vocabularies/format/format.ts","../node_modules/ajv/lib/vocabularies/format/index.ts","../node_modules/ajv/lib/vocabularies/metadata.ts","../node_modules/ajv/lib/vocabularies/validation/const.ts","../node_modules/ajv/lib/vocabularies/validation/enum.ts","../node_modules/ajv/lib/vocabularies/validation/index.ts","../node_modules/ajv/lib/vocabularies/validation/limitItems.ts","../node_modules/ajv/lib/vocabularies/validation/limitLength.ts","../node_modules/ajv/lib/vocabularies/validation/limitNumber.ts","../node_modules/ajv/lib/vocabularies/validation/limitProperties.ts","../node_modules/ajv/lib/vocabularies/validation/multipleOf.ts","../node_modules/ajv/lib/vocabularies/validation/pattern.ts","../node_modules/ajv/lib/vocabularies/validation/required.ts","../node_modules/ajv/lib/vocabularies/validation/uniqueItems.ts","../node_modules/classnames/index.js","../node_modules/deepcopy/node_modules/type-detect/type-detect.js","../node_modules/deepcopy/src/buffer.mjs","../node_modules/deepcopy/src/detector.mjs","../node_modules/deepcopy/src/collection.mjs","../node_modules/deepcopy/src/global.mjs","../node_modules/deepcopy/src/copy_map.mjs","../node_modules/deepcopy/src/copier.mjs","../node_modules/deepcopy/src/index.mjs","../node_modules/deepmerge/dist/cjs.js","../node_modules/dom-css/index.js","../node_modules/domelementtype/lib/index.js","../https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/decode.ts","../https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/decode_codepoint.ts","../https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/encode.ts","../https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/escape.ts","../https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/decode-data-html.ts","../https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/decode-data-xml.ts","../https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/encode-html.ts","../https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/index.ts","../node_modules/fast-deep-equal/index.js","../node_modules/is-plain-object/dist/is-plain-object.js","../node_modules/json-schema-traverse/index.js","../node_modules/lodash/lodash.js","../node_modules/logdown/dist/logdown.min.js","../node_modules/moment/moment.js","../node_modules/parse-srcset/src/parse-srcset.js","../node_modules/performance-now/src/performance-now.coffee","../node_modules/picocolors/picocolors.browser.js","../node_modules/postcss/lib/at-rule.js","../node_modules/postcss/lib/comment.js","../node_modules/postcss/lib/container.js","../node_modules/postcss/lib/css-syntax-error.js","../node_modules/postcss/lib/declaration.js","../node_modules/postcss/lib/document.js","../node_modules/postcss/lib/fromJSON.js","../node_modules/postcss/lib/input.js","../node_modules/postcss/lib/lazy-result.js","../node_modules/postcss/lib/list.js","../node_modules/postcss/lib/map-generator.js","../node_modules/postcss/lib/no-work-result.js","../node_modules/postcss/lib/node.js","../node_modules/postcss/lib/parse.js","../node_modules/postcss/lib/parser.js","../node_modules/postcss/lib/postcss.js","../node_modules/postcss/lib/previous-map.js","../node_modules/postcss/lib/processor.js","../node_modules/postcss/lib/result.js","../node_modules/postcss/lib/root.js","../node_modules/postcss/lib/rule.js","../node_modules/postcss/lib/stringifier.js","../node_modules/postcss/lib/stringify.js","../node_modules/postcss/lib/symbols.js","../node_modules/postcss/lib/tokenize.js","../node_modules/postcss/lib/warn-once.js","../node_modules/postcss/lib/warning.js","../node_modules/prefix-style/index.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/raf/index.js","../node_modules/react-custom-scrollbars-2/lib/Scrollbars/defaultRenderElements.js","../node_modules/react-custom-scrollbars-2/lib/Scrollbars/index.js","../node_modules/react-custom-scrollbars-2/lib/Scrollbars/styles.js","../node_modules/react-custom-scrollbars-2/lib/index.js","../node_modules/react-custom-scrollbars-2/lib/utils/getInnerHeight.js","../node_modules/react-custom-scrollbars-2/lib/utils/getInnerWidth.js","../node_modules/react-custom-scrollbars-2/lib/utils/getScrollbarWidth.js","../node_modules/react-custom-scrollbars-2/lib/utils/isString.js","../node_modules/react-custom-scrollbars-2/lib/utils/returnFalse.js","../node_modules/react-easy-swipe/lib/index.js","../node_modules/react-easy-swipe/lib/react-swipe.js","../node_modules/react-fast-compare/index.js","../node_modules/react-infinite-scroller/dist/InfiniteScroll.js","../node_modules/react-infinite-scroller/index.js","../node_modules/react-lines-ellipsis/lib/html.js","../node_modules/react-responsive-carousel/lib/js/CSSTranslate.js","../node_modules/react-responsive-carousel/lib/js/components/Carousel/animations.js","../node_modules/react-responsive-carousel/lib/js/components/Carousel/index.js","../node_modules/react-responsive-carousel/lib/js/components/Carousel/utils.js","../node_modules/react-responsive-carousel/lib/js/components/Thumbs.js","../node_modules/react-responsive-carousel/lib/js/cssClasses.js","../node_modules/react-responsive-carousel/lib/js/dimensions.js","../node_modules/react-responsive-carousel/lib/js/index.js","../node_modules/react-responsive-carousel/lib/js/shims/document.js","../node_modules/react-responsive-carousel/lib/js/shims/window.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/jsx-runtime.js","../node_modules/roddeh-i18n/dist/i18n.js","../node_modules/sanitize-html/index.js","../node_modules/sanitize-html/node_modules/dom-serializer/lib/foreignNames.js","../node_modules/sanitize-html/node_modules/dom-serializer/lib/index.js","../node_modules/sanitize-html/node_modules/domhandler/lib/index.js","../node_modules/sanitize-html/node_modules/domhandler/lib/node.js","../https:/raw.githubusercontent.com/fb55/domutils/96c989e159c98218958f375ea04210f2d1b43c0c/src/feeds.ts","../https:/raw.githubusercontent.com/fb55/domutils/96c989e159c98218958f375ea04210f2d1b43c0c/src/helpers.ts","../https:/raw.githubusercontent.com/fb55/domutils/96c989e159c98218958f375ea04210f2d1b43c0c/src/index.ts","../https:/raw.githubusercontent.com/fb55/domutils/96c989e159c98218958f375ea04210f2d1b43c0c/src/legacy.ts","../https:/raw.githubusercontent.com/fb55/domutils/96c989e159c98218958f375ea04210f2d1b43c0c/src/manipulation.ts","../https:/raw.githubusercontent.com/fb55/domutils/96c989e159c98218958f375ea04210f2d1b43c0c/src/querying.ts","../https:/raw.githubusercontent.com/fb55/domutils/96c989e159c98218958f375ea04210f2d1b43c0c/src/stringify.ts","../https:/raw.githubusercontent.com/fb55/domutils/96c989e159c98218958f375ea04210f2d1b43c0c/src/traversal.ts","../node_modules/sanitize-html/node_modules/escape-string-regexp/index.js","../https:/raw.githubusercontent.com/fb55/htmlparser2/c123610e003a1eaebc61febed01cabb6e41eb658/src/Parser.ts","../https:/raw.githubusercontent.com/fb55/htmlparser2/c123610e003a1eaebc61febed01cabb6e41eb658/src/Tokenizer.ts","../https:/raw.githubusercontent.com/fb55/htmlparser2/c123610e003a1eaebc61febed01cabb6e41eb658/src/index.ts","../node_modules/to-camel-case/index.js","../node_modules/to-no-case/index.js","../node_modules/to-space-case/index.js","../node_modules/uri-js/src/util.ts","../node_modules/uri-js/src/regexps-uri.ts","../node_modules/uri-js/src/regexps-iri.ts","../node_modules/uri-js/node_modules/punycode/punycode.es6.js","../node_modules/uri-js/src/uri.ts","../node_modules/uri-js/src/schemes/http.ts","../node_modules/uri-js/src/schemes/https.ts","../node_modules/uri-js/src/schemes/ws.ts","../node_modules/uri-js/src/schemes/wss.ts","../node_modules/uri-js/src/schemes/mailto.ts","../node_modules/uri-js/src/schemes/urn.ts","../node_modules/uri-js/src/schemes/urn-uuid.ts","../node_modules/uri-js/src/index.ts","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../node_modules/use-sync-external-store/shim/index.js","../node_modules/warning/warning.js","assets/icons|lazy|/^/.//.*$/|referencedExports: [[\"ReactComponent\"]]|groupOptions: {}|namespace object","../external var \"React\"","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/node module decorator","../webpack/runtime/publicPath","../webpack/runtime/jsonp chunk loading","../external var \"ReactDOM\"","../node_modules/@remix-run/router/history.ts","../node_modules/@remix-run/router/utils.ts","../node_modules/@remix-run/router/router.ts","../node_modules/react-router/lib/context.ts","../node_modules/react-router/lib/hooks.tsx","../node_modules/react-router/lib/components.tsx","../node_modules/react-router-dom/dom.ts","../node_modules/react-router-dom/index.tsx","reportWebVitals.js","../node_modules/throttle-debounce/throttle.js","../node_modules/throttle-debounce/debounce.js","ui.config.js","routeList.js","ustore-internal/services/logger.js","../node_modules/path-to-regexp/src/index.ts","ustore-internal/services/utils.js","ustore-internal/services/cookies.js","ustore-internal/services/redirect.js","ustore-internal/services/initialLoad.js","services/initThemeState.js","ustore-internal/services/themeContext.js","localizations/index.js","core-components/LoadingDots.js","core-components/Button.js","core-components/ClickOutside.js","../node_modules/reactstrap/esm/utils.js","../node_modules/reactstrap/esm/Input.js","../node_modules/react-popper/lib/esm/Manager.js","../node_modules/reactstrap/esm/DropdownContext.js","../node_modules/reactstrap/esm/InputGroupContext.js","../node_modules/reactstrap/esm/Dropdown.js","../node_modules/react-popper/lib/esm/utils.js","../node_modules/react-popper/lib/esm/Reference.js","../node_modules/reactstrap/esm/CloseButton.js","../node_modules/reactstrap/esm/Button.js","../node_modules/reactstrap/esm/DropdownToggle.js","../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../node_modules/@popperjs/core/lib/utils/math.js","../node_modules/@popperjs/core/lib/utils/userAgent.js","../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../node_modules/@popperjs/core/lib/enums.js","../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../node_modules/@popperjs/core/lib/utils/debounce.js","../node_modules/@popperjs/core/lib/createPopper.js","../node_modules/@popperjs/core/lib/utils/mergeByName.js","../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../node_modules/@popperjs/core/lib/utils/getVariation.js","../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../node_modules/@popperjs/core/lib/modifiers/offset.js","../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../node_modules/@popperjs/core/lib/dom-utils/contains.js","../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../node_modules/@popperjs/core/lib/utils/within.js","../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../node_modules/@popperjs/core/lib/modifiers/arrow.js","../node_modules/@popperjs/core/lib/modifiers/hide.js","../node_modules/@popperjs/core/lib/popper.js","../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../node_modules/@popperjs/core/lib/modifiers/flip.js","../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../node_modules/react-popper/lib/esm/usePopper.js","../node_modules/react-popper/lib/esm/Popper.js","../node_modules/reactstrap/esm/DropdownMenu.js","../node_modules/reactstrap/esm/DropdownItem.js","core-components/DropDown.js","core-components/Gallery.js","core-components/Icon.js","core-components/ImageLoader.js","core-components/ImageZoom.js","core-components/ImageCarousel.js","core-components/RadioGroup.js","core-components/ScrollableGallery.js","core-components/Slider.js","core-components/Tooltip.js","../node_modules/react-swipeable/src/types.ts","../node_modules/react-swipeable/src/index.ts","core-components/Swipeable.js","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/ar-AE.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/bg-BG.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/cs-CZ.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/da-DK.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/de-DE.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/el-GR.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/en-US.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/es-ES.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/et-EE.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/fi-FI.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/fr-FR.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/he-IL.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/hr-HR.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/hu-HU.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/it-IT.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/ja-JP.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/ko-KR.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/lt-LT.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/lv-LV.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/nb-NO.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/nl-NL.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/pl-PL.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/pt-BR.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/pt-PT.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/ro-RO.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/ru-RU.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/sk-SK.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/sl-SI.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/sr-SP.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/sv-SE.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/tr-TR.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/uk-UA.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/zh-CN.json","../node_modules/react-aria-components/dist/packages/react-aria-components/intl/zh-TW.json","../packages/@react-aria/ssr/src/SSRProvider.tsx","../node_modules/clsx/dist/clsx.mjs","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useLayoutEffect.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useEffectEvent.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useValueEffect.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useId.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/chain.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/domHelpers.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/mergeProps.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/mergeRefs.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/filterDOMProps.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/focusWithoutScrolling.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/platform.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/openLink.tsx","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/runAfterTransition.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useGlobalListeners.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useLabels.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useObjectRef.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useResizeObserver.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useSyncRef.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/getScrollParent.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useViewportSize.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useDescription.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useEvent.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/scrollIntoView.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/isVirtualEvent.ts","../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useFormReset.ts","../node_modules/@swc/helpers/esm/_class_extract_field_descriptor.js","../node_modules/@swc/helpers/esm/_class_private_field_init.js","../node_modules/@swc/helpers/esm/_check_private_redeclaration.js","../node_modules/@swc/helpers/esm/_class_private_field_set.js","../node_modules/@swc/helpers/esm/_class_apply_descriptor_set.js","../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/textSelection.ts","../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/context.ts","../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/usePress.ts","../node_modules/@swc/helpers/esm/_class_apply_descriptor_get.js","../node_modules/@swc/helpers/esm/_class_private_field_get.js","../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/Pressable.tsx","../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/PressResponder.tsx","../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/utils.ts","../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/useFocus.ts","../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/useFocusVisible.ts","../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/useFocusWithin.ts","../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/useHover.ts","../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/useInteractOutside.ts","../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/createEventHandler.ts","../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/useKeyboard.ts","../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/useLongPress.ts","../node_modules/@react-aria/focus/dist/packages/@react-aria/focus/src/focusSafely.ts","../node_modules/@react-aria/focus/dist/packages/@react-aria/focus/src/isElementVisible.ts","../node_modules/@react-aria/focus/dist/packages/@react-aria/focus/src/FocusScope.tsx","../node_modules/@react-aria/focus/dist/packages/@react-aria/focus/src/useFocusRing.ts","../node_modules/@react-aria/focus/dist/packages/@react-aria/focus/src/useFocusable.tsx","../node_modules/@react-aria/link/dist/packages/@react-aria/link/src/useLink.ts","../node_modules/@react-aria/button/dist/packages/@react-aria/button/src/useButton.ts","../node_modules/@react-aria/separator/dist/packages/@react-aria/separator/src/useSeparator.ts","../node_modules/@internationalized/string/dist/packages/@internationalized/string/src/LocalizedStringDictionary.ts","../node_modules/@internationalized/string/dist/packages/@internationalized/string/src/LocalizedStringFormatter.ts","../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/utils.ts","../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/useDefaultLocale.ts","../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/context.tsx","../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/useLocalizedStringFormatter.ts","../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/useCollator.ts","../node_modules/@react-aria/selection/dist/packages/@react-aria/selection/src/utils.ts","../node_modules/@react-aria/selection/dist/packages/@react-aria/selection/src/useTypeSelect.ts","../node_modules/@react-aria/selection/dist/packages/@react-aria/selection/src/useSelectableCollection.ts","../node_modules/@react-aria/selection/dist/packages/@react-aria/selection/src/useSelectableItem.ts","../node_modules/@react-aria/selection/dist/packages/@react-aria/selection/src/ListKeyboardDelegate.ts","../node_modules/@react-aria/selection/dist/packages/@react-aria/selection/src/useSelectableList.ts","../node_modules/@react-aria/label/dist/packages/@react-aria/label/src/useLabel.ts","../node_modules/@react-aria/label/dist/packages/@react-aria/label/src/useField.ts","../node_modules/@react-stately/collections/dist/packages/@react-stately/collections/src/Item.ts","../node_modules/@react-stately/collections/dist/packages/@react-stately/collections/src/Section.ts","../node_modules/@react-stately/collections/dist/packages/@react-stately/collections/src/CollectionBuilder.ts","../node_modules/@react-stately/collections/dist/packages/@react-stately/collections/src/useCollection.ts","../node_modules/@react-stately/collections/dist/packages/@react-stately/collections/src/getChildNodes.ts","../node_modules/@react-stately/collections/dist/packages/@react-stately/collections/src/getItemCount.ts","../node_modules/@react-aria/listbox/dist/packages/@react-aria/listbox/src/utils.ts","../node_modules/@react-aria/listbox/dist/packages/@react-aria/listbox/src/useListBox.ts","../node_modules/@react-aria/listbox/dist/packages/@react-aria/listbox/src/useOption.ts","../node_modules/@react-aria/listbox/dist/packages/@react-aria/listbox/src/useListBoxSection.ts","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/ar-AE.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/bg-BG.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/cs-CZ.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/da-DK.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/de-DE.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/el-GR.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/en-US.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/es-ES.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/et-EE.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/fi-FI.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/fr-FR.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/he-IL.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/hr-HR.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/hu-HU.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/it-IT.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/ja-JP.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/ko-KR.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/lt-LT.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/lv-LV.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/nb-NO.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/nl-NL.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/pl-PL.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/pt-BR.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/pt-PT.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/ro-RO.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/ru-RU.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/sk-SK.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/sl-SI.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/sr-SP.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/sv-SE.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/tr-TR.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/uk-UA.json","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/zh-CN.json","../node_modules/@react-stately/utils/dist/packages/@react-stately/utils/src/useControlledState.ts","../node_modules/@react-stately/utils/dist/packages/@react-stately/utils/src/number.ts","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/intl/zh-TW.json","../node_modules/@react-aria/visually-hidden/dist/packages/@react-aria/visually-hidden/src/VisuallyHidden.tsx","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/src/calculatePosition.ts","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/src/useCloseOnScroll.ts","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/src/useOverlayPosition.ts","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/src/useOverlay.ts","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/src/useOverlayTrigger.ts","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/src/usePreventScroll.ts","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/src/DismissButton.tsx","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/src/*.js","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/src/ariaHideOutside.ts","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/src/usePopover.ts","../node_modules/@react-aria/overlays/dist/packages/@react-aria/overlays/src/Overlay.tsx","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/src/useMenuTrigger.ts","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/src/*.js","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/ar-AE.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/bg-BG.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/cs-CZ.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/da-DK.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/de-DE.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/el-GR.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/en-US.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/es-ES.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/et-EE.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/fi-FI.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/fr-FR.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/he-IL.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/hr-HR.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/hu-HU.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/it-IT.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/ja-JP.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/ko-KR.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/lt-LT.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/lv-LV.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/nb-NO.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/nl-NL.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/pl-PL.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/pt-BR.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/pt-PT.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/ro-RO.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/ru-RU.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/sk-SK.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/sl-SI.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/sr-SP.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/sv-SE.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/tr-TR.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/uk-UA.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/zh-CN.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/intl/zh-TW.json","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/src/useMenu.ts","../node_modules/@react-aria/menu/dist/packages/@react-aria/menu/src/useSafelyMouseToSubmenu.ts","../node_modules/@react-aria/form/dist/packages/@react-aria/form/src/useFormValidation.ts","../node_modules/@react-aria/select/dist/packages/@react-aria/select/src/useSelect.ts","../node_modules/@react-aria/select/dist/packages/@react-aria/select/src/HiddenSelect.tsx","../node_modules/@react-stately/selection/dist/packages/@react-stately/selection/src/Selection.ts","../node_modules/@react-stately/selection/dist/packages/@react-stately/selection/src/useMultipleSelectionState.ts","../node_modules/@react-stately/selection/dist/packages/@react-stately/selection/src/SelectionManager.ts","../node_modules/@react-stately/list/dist/packages/@react-stately/list/src/ListCollection.ts","../node_modules/@react-stately/list/dist/packages/@react-stately/list/src/useListState.ts","../node_modules/@react-stately/list/dist/packages/@react-stately/list/src/useSingleSelectListState.ts","../node_modules/@react-stately/overlays/dist/packages/@react-stately/overlays/src/useOverlayTriggerState.ts","../node_modules/@react-stately/menu/dist/packages/@react-stately/menu/src/useMenuTriggerState.ts","../node_modules/@react-stately/form/dist/packages/@react-stately/form/src/useFormValidationState.ts","../node_modules/@react-stately/select/dist/packages/@react-stately/select/src/useSelectState.ts","../node_modules/@react-stately/grid/dist/packages/@react-stately/grid/src/GridCollection.ts","../node_modules/@react-stately/table/dist/packages/@react-stately/table/src/TableCollection.ts","../node_modules/@react-stately/table/dist/packages/@react-stately/table/src/TableHeader.ts","../node_modules/@react-stately/table/dist/packages/@react-stately/table/src/TableBody.ts","../node_modules/@react-stately/table/dist/packages/@react-stately/table/src/Column.ts","../node_modules/@react-stately/table/dist/packages/@react-stately/table/src/Row.ts","../node_modules/@react-stately/table/dist/packages/@react-stately/table/src/Cell.ts","../node_modules/react-aria-components/dist/packages/react-aria-components/src/Collection.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/utils.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/Link.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/Button.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/Heading.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/Text.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/Calendar.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/FieldError.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/Label.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/Group.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/Input.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/useDragAndDrop.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/Header.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/Separator.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/ListBox.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/OverlayArrow.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/Popover.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/Dialog.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/*.js","../node_modules/react-aria-components/dist/packages/react-aria-components/src/Keyboard.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/Menu.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/SearchField.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/Select.tsx","../node_modules/react-aria-components/dist/packages/react-aria-components/src/Table.tsx","hooks/useClickOutside.js","core-components/Switcher.js","../node_modules/react-zoom-pan-pinch/src/utils/calculations.utils.ts","../node_modules/react-zoom-pan-pinch/src/utils/callback.utils.ts","../node_modules/react-zoom-pan-pinch/src/core/animations/animations.constants.ts","../node_modules/react-zoom-pan-pinch/src/core/animations/animations.utils.ts","../node_modules/react-zoom-pan-pinch/src/core/bounds/bounds.utils.ts","../node_modules/react-zoom-pan-pinch/src/core/zoom/zoom.utils.ts","../node_modules/react-zoom-pan-pinch/src/core/pan/panning.utils.ts","../node_modules/react-zoom-pan-pinch/src/core/pan/velocity.utils.ts","../node_modules/react-zoom-pan-pinch/src/core/pan/velocity.logic.ts","../node_modules/react-zoom-pan-pinch/src/core/pan/panning.logic.ts","../node_modules/react-zoom-pan-pinch/src/core/zoom/zoom.logic.ts","../node_modules/react-zoom-pan-pinch/node_modules/tslib/tslib.es6.js","../node_modules/react-zoom-pan-pinch/src/constants/state.constants.ts","../node_modules/react-zoom-pan-pinch/src/utils/state.utils.ts","../node_modules/react-zoom-pan-pinch/src/core/handlers/handlers.utils.ts","../node_modules/react-zoom-pan-pinch/src/core/handlers/handlers.logic.ts","../node_modules/react-zoom-pan-pinch/src/utils/context.utils.ts","../node_modules/react-zoom-pan-pinch/src/utils/event.utils.ts","../node_modules/react-zoom-pan-pinch/src/utils/helpers.utils.ts","../node_modules/react-zoom-pan-pinch/src/utils/styles.utils.ts","../node_modules/react-zoom-pan-pinch/src/core/wheel/wheel.utils.ts","../node_modules/react-zoom-pan-pinch/src/core/pinch/pinch.utils.ts","../node_modules/react-zoom-pan-pinch/src/core/wheel/wheel.logic.ts","../node_modules/react-zoom-pan-pinch/src/core/pinch/pinch.logic.ts","../node_modules/react-zoom-pan-pinch/src/core/double-click/double-click.logic.ts","../node_modules/react-zoom-pan-pinch/src/core/instance.core.ts","../node_modules/react-zoom-pan-pinch/src/components/transform-wrapper/transform-wrapper.tsx","../node_modules/react-zoom-pan-pinch/src/components/keep-scale/keep-scale.tsx","../node_modules/react-zoom-pan-pinch/src/utils/ref.utils.ts","../node_modules/react-zoom-pan-pinch/node_modules/style-inject/dist/style-inject.es.js","../node_modules/react-zoom-pan-pinch/src/components/transform-component/transform-component.tsx","../node_modules/react-zoom-pan-pinch/src/hooks/use-transform-context.tsx","../node_modules/react-zoom-pan-pinch/src/hooks/use-transform-effect.tsx","core-components/Zoom.js","../node_modules/react-zoom-pan-pinch/src/hooks/use-controls.tsx","core-components/ImageView.js","ustore-internal/services/urlGenerator.js","core-components/Slot.js","components/layout/HeadSEO.js","ustore-internal/services/cssVariables.js","components/layout/Header/switchers/Flag.js","styles/_theme.scss","ustore-internal/services/legacyIframeHandler.js","components/layout/Header/switchers/utils.js","components/layout/Header/switchers/CultureSwitcher.js","components/layout/Header/switchers/CurrencySwitcher.js","services/activityMonitor.js","services/fastProof.js","services/proofThumbnailUpdater.js","services/utils.js","components/layout/Header/SignIn.js","components/layout/Header/SignOut.js","components/layout/Header/switchers/ProfileSwitcher.js","components/layout/Header/switchers/MobileMenuSwitcher.scss","components/layout/Header/switchers/MobileMenuSwitcher.js","components/layout/Header/Cart.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/react-transition-group/esm/config.js","../node_modules/react-transition-group/esm/TransitionGroupContext.js","../node_modules/react-transition-group/esm/utils/reflow.js","../node_modules/react-transition-group/esm/Transition.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/reactstrap/esm/Fade.js","../node_modules/reactstrap/esm/PopperContent.js","../node_modules/reactstrap/esm/TooltipPopoverWrapper.js","../node_modules/reactstrap/esm/Popover.js","../node_modules/reactstrap/esm/PopoverBody.js","components/layout/Header/NavigationMenu.js","components/layout/Header/CategoriesNavbar.js","components/layout/Header/MobileMenu.js","ustore-internal/services/hooks.js","components/layout/Header/Search.js","components/layout/Header/index.js","components/layout/Footer.js","components/layout/CookiesRibbon/CrossCloseButton.js","components/layout/CookiesRibbon/CookiesConsent.js","components/layout/CookiesRibbon/CookiesPolicy.js","components/layout/CookiesRibbon/index.js","../node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","../node_modules/css-selector-generator/src/utilities-iselement.ts","../node_modules/css-selector-generator/src/types.ts","../node_modules/css-selector-generator/src/utilities-messages.ts","../node_modules/css-selector-generator/src/utilities-options.ts","../node_modules/css-selector-generator/src/utilities-typescript.ts","../node_modules/css-selector-generator/src/utilities-data.ts","../node_modules/css-selector-generator/src/utilities-dom.ts","../node_modules/css-selector-generator/src/constants.ts","../node_modules/css-selector-generator/src/selector-attribute.ts","../node_modules/css-selector-generator/src/selector-class.ts","../node_modules/css-selector-generator/src/selector-id.ts","../node_modules/css-selector-generator/src/selector-nth-child.ts","../node_modules/css-selector-generator/src/selector-tag.ts","../node_modules/css-selector-generator/src/selector-nth-of-type.ts","../node_modules/css-selector-generator/src/utilities-powerset.ts","../node_modules/css-selector-generator/src/utilities-selectors.ts","../node_modules/css-selector-generator/src/utilities-cartesian.ts","../node_modules/css-selector-generator/src/utilities-element-data.ts","../node_modules/css-selector-generator/src/selector-fallback.ts","../node_modules/css-selector-generator/src/index.ts","components/layout/RouteChangeListener.js","components/layout/index.js","webpack://StandardV17/./src/components/category/CategoryItem.scss?6486","components/category/CategoryItem.js","components/products/Inventory.js","ustore-internal/services/withState.js","components/products/Price.js","components/products/BaseQuantity.js","components/products/ProductItemQuantity.js","components/products/UnitsOfMeasure.js","components/products/ProductItem.js","components/products/PromotionItem.js","routes/Home.js","webpack://StandardV17/./src/routes/Category.scss?4bf0","routes/Category.js","routes/Legacy.js","routes/Product.js","components/products/kit/KitQuantity.js","../node_modules/reactstrap/esm/Tooltip.js","components/products/kit/KitItemQuantity.js","../node_modules/reactstrap/esm/CarouselContext.js","../node_modules/reactstrap/esm/CarouselItem.js","../node_modules/reactstrap/esm/Carousel.js","components/products/DotCarousel.js","webpack://StandardV17/./src/components/products/MultiItemsCarousel.scss?9c7b","components/products/MultiItemsCarousel.js","webpack://StandardV17/./src/components/products/ImageCarousel.scss?e4f6","components/products/ImageCarousel.js","ustore-internal/services/withRouter.js","../node_modules/reactstrap/esm/Portal.js","../node_modules/reactstrap/esm/Modal.js","../node_modules/reactstrap/esm/ModalHeader.js","../node_modules/reactstrap/esm/ModalBody.js","../node_modules/reactstrap/esm/ModalFooter.js","components/products/kit/consts.js","components/products/kit/KitItem.js","components/products/kit/KitItemsList.js","components/products/ErrorBalloon.js","components/products/static/PreviewErrorBalloon.js","components/products/static/Proof.js","components/products/static/RefreshPreviewButton.js","components/products/Preview.js","components/products/kit/KitProduct.js","webpack://StandardV17/./src/components/products/static/Popper.scss?8722","components/products/static/Popper.js","components/products/Section.js","../node_modules/hashids/src/util.ts","../node_modules/hashids/src/hashids.ts","webpack://StandardV17/./src/components/products/DynamicForm.scss?e683","components/products/DynamicForm.js","webpack://StandardV17/./src/components/products/ProductDetails.scss?5cdb","components/products/ProductDetails.js","components/products/ProductDeliveryMethod.js","components/products/ProductOrderSummary.js","components/products/ProductStickyPrice.js","components/products/dynamic/ProductThumbnailsPreview.js","components/products/ProductLayout.js","components/products/static/Price.js","components/products/static/utils.js","components/products/ProductQuantity.js","components/products/ProductProof.js","components/products/dynamic/DynamicImageViewer.js","components/products/dynamic/DynamicProductApproval.js","components/products/static/ProductApproval.js","components/products/ProductApprovalModal.js","components/products/static/useErrors.js","components/products/static/useUpdateProperties.js","components/products/static/useSticky.js","components/products/static/StaticProduct.js","routes/Products.js","routes/OrderFinalStep.js","routes/Addresses.js","../node_modules/mobx/src/errors.ts","../node_modules/mobx/src/utils/global.ts","../node_modules/mobx/src/utils/utils.ts","../node_modules/mobx/src/api/decorators.ts","../node_modules/mobx/src/types/overrideannotation.ts","../node_modules/mobx/src/core/atom.ts","../node_modules/mobx/src/api/become-observed.ts","../node_modules/mobx/src/utils/comparer.ts","../node_modules/mobx/src/types/modifiers.ts","../node_modules/mobx/src/types/actionannotation.ts","../node_modules/mobx/src/types/flowannotation.ts","../node_modules/mobx/src/types/computedannotation.ts","../node_modules/mobx/src/types/observableannotation.ts","../node_modules/mobx/src/types/autoannotation.ts","../node_modules/mobx/src/api/observable.ts","../node_modules/mobx/src/types/dynamicobject.ts","../node_modules/mobx/src/api/computed.ts","../node_modules/mobx/src/core/action.ts","../node_modules/mobx/src/types/observablevalue.ts","../node_modules/mobx/src/core/computedvalue.ts","../node_modules/mobx/src/core/derivation.ts","../node_modules/mobx/src/core/observable.ts","../node_modules/mobx/src/core/globalstate.ts","../node_modules/mobx/src/core/reaction.ts","../node_modules/mobx/src/api/action.ts","../node_modules/mobx/src/api/autorun.ts","../node_modules/mobx/src/api/configure.ts","../node_modules/mobx/src/api/extendobservable.ts","../node_modules/mobx/src/api/extras.ts","../node_modules/mobx/src/api/flow.ts","../node_modules/mobx/src/api/isobservable.ts","../node_modules/mobx/src/api/transaction.ts","../node_modules/mobx/src/types/intercept-utils.ts","../node_modules/mobx/src/types/listen-utils.ts","../node_modules/mobx/src/api/makeObservable.ts","../node_modules/mobx/src/types/observablearray.ts","../node_modules/mobx/src/core/spy.ts","../node_modules/mobx/src/types/observablemap.ts","../node_modules/mobx/src/types/observableset.ts","../node_modules/mobx/src/types/observableobject.ts","../node_modules/mobx/src/types/legacyobservablearray.ts","../node_modules/mobx/src/types/type-utils.ts","../node_modules/mobx/src/utils/eq.ts","../node_modules/mobx/src/utils/iterable.ts","../node_modules/mobx/src/mobx.ts","components/cart/model/CartListModel.js","components/cart/model/CartSummaryModel.js","components/cart/model/CartErrorModel.js","components/cart/model/CartItemPriceModel.js","components/cart/model/CartItemModel.js","components/cart/model/CartProductModel.js","components/cart/model/CartProductUnitModel.js","components/cart/model/CartActionsModel.js","components/cart/model/CartOrderApprovalModel.js","components/cart/model/CartDialogsModel.js","ustore-internal/services/locale.js","components/cart/model/utils.js","components/cart/model/CartModel.js","../node_modules/mobx-react-lite/src/utils/assertEnvironment.ts","../node_modules/mobx-react-lite/src/utils/observerBatching.ts","../node_modules/mobx-react-lite/src/utils/printDebugValue.ts","../node_modules/mobx-react-lite/src/staticRendering.ts","../node_modules/mobx-react-lite/src/utils/UniversalFinalizationRegistry.ts","../node_modules/mobx-react-lite/src/utils/observerFinalizationRegistry.ts","../node_modules/mobx-react-lite/src/useObserver.ts","../node_modules/mobx-react-lite/src/observer.ts","../node_modules/mobx-react-lite/src/index.ts","webpack://StandardV17/./src/components/cart/CartSummary/CartSummaryPriceBlock.scss?d88e","components/cart/CartSummary/CartSummaryPriceBlock.js","components/cart/CartSummary/CartSummaryContent.js","components/cart/CartSummary/CartSummaryTooltip.js","components/cart/CartSummary/CartSummaryButton.js","components/cart/CartSummary/CartSummaryError.js","components/cart/CartSummary/CartSummaryExportSuccess.js","components/cart/CartSummary/CartSummaryExportError.js","components/cart/CartList/AssignToListModal.js","components/cart/CartSummary/index.js","components/cart/CartSummary/CartSummaryStickyBlock.js","components/cart/CartSummary/CartSummaryContainer.js","../node_modules/react-router-hash-link/node_modules/tslib/tslib.es6.js","../node_modules/react-router-hash-link/src/HashLink.jsx","webpack://StandardV17/./src/components/cart/CartList/CartCheckbox.scss?96ab","components/cart/CartList/CartCheckbox.js","components/cart/CartList/EditListNameModal.js","components/cart/ConfirmationDialog.js","components/cart/duplucate/ConfirmDuplicationModal.js","components/cart/duplucate/ItemDuplicateTooltip.js","components/cart/duplucate/DuplicateItemsDialogError.js","components/cart/duplucate/DuplicateButton.js","components/cart/duplucate/DuplicateAction.js","components/cart/CartList/CustomListActions.js","components/cart/CartList/ListBar.js","components/cart/CartItem/DisplayPrice.js","components/cart/CartItem/CartItemActions.js","components/cart/CartItem/PromptDialog.js","components/cart/CartItem/Nickname.js","components/cart/CartItem/ProductName.js","components/cart/CartItem/ExpandableList.js","components/cart/CartItem/ProductProperties.js","../node_modules/react-lazy-load/dist/LazyLoad.js","../node_modules/react-loading-skeleton/dist/index.js","webpack://StandardV17/./src/components/cart/CartItem/CartItemThumbnail.scss?0c8c","components/cart/CartItem/CartItemThumbnail.js","components/cart/CartItem/CartItemAlert.js","components/cart/CartItem/InfoMessage.js","components/cart/CartItem/ItemQuantity.js","components/cart/CartItem/IncludedProductsDetails.js","components/cart/CartItem/index.js","components/cart/CartSummary/InListsCartSummary.js","components/cart/CartList/List.js","components/cart/CartList/index.js","components/cart/CartList/WishList.js","components/cart/CartItem/CartItemSkeleton.js","components/cart/CartList/ListContainerSkeleton.js","components/cart/global-cart-dialogs/RevertModificationDialog.js","components/cart/LoadingDialog.js","components/cart/duplucate/DuplicateProgressDialog.js","components/cart/global-cart-dialogs/index.js","components/cart/CartList/ListContainer.js","components/cart/EmptyPage.js","components/cart/CartNG.js","routes/Cart.js","routes/CheckoutComplete.js","routes/CheckoutFinal.js","routes/FileSubmission.js","routes/CheckoutPaymentSubmission.js","routes/MyRecipientLists.js","routes/OrderHistory.js","routes/PersonalInformation.js","routes/Customization.js","routes/uEditCustomization.js","routes/SplitShippingAddresses.js","routes/OrderDetails.js","routes/SplitShippingItems.js","routes/Recipient.js","routes/ProductUnavailable.js","routes/Drafts.js","routes/EmptyPage.js","routes/ErrorPage.js","routes/Search.js","routes/OrderApprovalList.js","routes/CustomMain.js","routes/ClearingUnknownOrder.js","routes/ProductDetails.js","components/Layout/HeadSEO.js","components/Layout/Header/switchers/Flag.js","components/Layout/Header/switchers/utils.js","components/Layout/Header/switchers/CultureSwitcher.js","components/Layout/Header/switchers/CurrencySwitcher.js","components/Layout/Header/SignIn.js","components/Layout/Header/SignOut.js","components/Layout/Header/switchers/ProfileSwitcher.js","webpack://StandardV17/./src/components/Layout/Header/switchers/MobileMenuSwitcher.scss?64e0","components/Layout/Header/switchers/MobileMenuSwitcher.js","components/Layout/Header/Cart.js","components/Layout/Header/NavigationMenu.js","components/Layout/Header/CategoriesNavbar.js","components/Layout/Header/MobileMenu.js","components/Layout/Header/Search.js","components/Layout/Header/index.js","components/Layout/Footer.js","components/Layout/CookiesRibbon/CrossCloseButton.js","components/Layout/CookiesRibbon/CookiesConsent.js","components/Layout/CookiesRibbon/CookiesPolicy.js","components/Layout/CookiesRibbon/index.js","components/Layout/RouteChangeListener.js","components/Layout/index.js","routes/AdvancedOrderReport/DatePicker.js","routes/AdvancedOrderReport/index.js","assets/images/xmpieLogo.svg","routes/index.js","routes/ConnectLoggedOut.js","generic.js","index.js"],"sourcesContent":["var _desc, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgDarkLeftArrow = (_ref, ref) => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"7px\",\n height: \"12px\",\n viewBox: \"0 0 7 12\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: ref,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Arrowleft/7x12/dark-\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0.594129609,12 C0.436295689,12.0006917 0.284818042,11.9418159 0.173908243,11.8366637 C-0.0579694142,11.6192731 -0.0579694142,11.2670999 0.173908243,11.0497092 L5.56542766,6.00132212 L0.173908243,0.952934998 C-0.0579694142,0.735544361 -0.0579694142,0.383371172 0.173908243,0.165980535 C0.284345427,0.0598546899 0.435882591,0 0.594129609,0 C0.752376627,0 0.903913791,0.0598546899 1.01435098,0.165980535 L6.82609176,5.60784488 C7.05796941,5.82523552 7.05796941,6.17740871 6.82609176,6.39479935 L1.01435098,11.8366637 C0.903441176,11.9418159 0.751963529,12.0006917 0.594129609,12 L0.594129609,12 Z\",\n id: \"Arrowleft/12x20/dark\",\n fill: \"#484848\",\n fillRule: \"nonzero\",\n transform: \"translate(3.500000, 6.000000) rotate(-180.000000) translate(-3.500000, -6.000000) \"\n }))));\n};\nconst ForwardRef = /*#__PURE__*/forwardRef(SvgDarkLeftArrow);\nexport { ForwardRef as ReactComponent };\nexport default __webpack_public_path__ + \"static/media/dark_left_arrow.60062dfb51b8c8c060e58f01a669d7a6.svg\";","var _desc, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgDarkRightArrow = (_ref, ref) => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"7px\",\n height: \"12px\",\n viewBox: \"0 0 7 12\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: ref,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Arrowright/7x12/dark\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0.594129609,12 C0.436295689,12.0006917 0.284818042,11.9418159 0.173908243,11.8366637 C-0.0579694142,11.6192731 -0.0579694142,11.2670999 0.173908243,11.0497092 L5.56542766,6.00132212 L0.173908243,0.952934998 C-0.0579694142,0.735544361 -0.0579694142,0.383371172 0.173908243,0.165980535 C0.284345427,0.0598546899 0.435882591,0 0.594129609,0 C0.752376627,0 0.903913791,0.0598546899 1.01435098,0.165980535 L6.82609176,5.60784488 C7.05796941,5.82523552 7.05796941,6.17740871 6.82609176,6.39479935 L1.01435098,11.8366637 C0.903441176,11.9418159 0.751963529,12.0006917 0.594129609,12 L0.594129609,12 Z\",\n id: \"Arrowright/12x20/dark\",\n fill: \"#484848\",\n fillRule: \"nonzero\",\n transform: \"translate(3.500000, 6.000000) scale(-1, 1) rotate(-180.000000) translate(-3.500000, -6.000000) \"\n }))));\n};\nconst ForwardRef = /*#__PURE__*/forwardRef(SvgDarkRightArrow);\nexport { ForwardRef as ReactComponent };\nexport default __webpack_public_path__ + \"static/media/dark_right_arrow.ce1f21bc57103c3c7774c72b7ff78610.svg\";","var _style, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgError = (_ref, ref) => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 15 13\",\n style: {\n enableBackground: \"new 0 0 15 13\"\n },\n xmlSpace: \"preserve\",\n ref: ref,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _style || (_style = /*#__PURE__*/React.createElement(\"style\", {\n type: \"text/css\"\n }, \"\\n\\t.st0{fill:#FF625A;}\\n\")), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M14.3,11l-2.8-4.9L8.6,1.2c-0.5-0.9-1.8-0.9-2.3,0L3.5,6.1L0.7,11c-0.5,0.9,0.1,2,1.1,2h5.7h5.7 C14.2,13,14.8,11.9,14.3,11z M6.9,4.1c0.3-0.3,0.8-0.3,1.1,0c0.2,0.2,0.2,0.4,0.2,0.6L8.2,8.6c0,0.4-0.3,0.7-0.7,0.7 C7.1,9.3,6.8,9,6.8,8.6L6.7,4.7C6.7,4.5,6.8,4.3,6.9,4.1z M7.5,11.2c-0.5,0-0.8-0.4-0.8-0.8S7,9.5,7.5,9.5s0.8,0.4,0.8,0.8 S8,11.2,7.5,11.2z\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/forwardRef(SvgError);\nexport { ForwardRef as ReactComponent };\nexport default __webpack_public_path__ + \"static/media/error.539c18d23caf6ad6eba73d60ad666df0.svg\";","var _desc, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgLeftArrow = (_ref, ref) => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"40px\",\n height: \"40px\",\n viewBox: \"0 0 40 40\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: ref,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Symbols\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\",\n opacity: 0.9\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Arrowbutton/left/40px\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Arrowbutton/left/36px\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(20.000000, 20.000000) rotate(-180.000000) translate(-20.000000, -20.000000) \"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20,40 C8.954305,40 0,31.045695 0,20 C0,8.954305 8.954305,0 20,0 C31.045695,0 40,8.954305 40,20 C39.9900302,31.0415627 31.0415627,39.9900302 20,40 Z\",\n id: \"Shape\",\n fillOpacity: 0.8,\n fill: \"#FFFFFF\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.0185079,30 C15.7479355,30.0011528 15.4882595,29.9030265 15.2981284,29.7277728 C14.9006239,29.3654551 14.9006239,28.7784998 15.2981284,28.4161821 L24.5407331,20.0022035 L15.2981284,11.588225 C14.9006239,11.2259073 14.9006239,10.638952 15.2981284,10.2766342 C15.4874493,10.0997578 15.7472273,10 16.0185079,10 C16.2897885,10 16.5495665,10.0997578 16.7388874,10.2766342 L26.7018716,19.3464081 C27.0993761,19.7087259 27.0993761,20.2956812 26.7018716,20.6579989 L16.7388874,29.7277728 C16.5487563,29.9030265 16.2890803,30.0011528 16.0185079,30 L16.0185079,30 Z\",\n id: \"Shape\",\n fill: \"#000000\",\n fillRule: \"nonzero\"\n })))))));\n};\nconst ForwardRef = /*#__PURE__*/forwardRef(SvgLeftArrow);\nexport { ForwardRef as ReactComponent };\nexport default __webpack_public_path__ + \"static/media/left_arrow.8e4f6f8b496e2c263b19b35b1e688087.svg\";","var _desc, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgPencilSection = (_ref, ref) => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"24px\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: ref,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"Edit/24x24/ultradark\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Edit/24x24/ultradark\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n stroke: \"#000000\",\n strokeWidth: 0.8\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.3698783,2.484 L2.44883478,16.3476522 C2.45196522,16.356 2.45092174,16.3653913 2.44883478,16.3737391 L7.62448696,21.5493913 L7.62657391,21.5493913 C7.63492174,21.5493913 7.64222609,21.5514783 7.64848696,21.5556522 L21.5737043,7.68678261 L16.3698783,2.484 Z\",\n id: \"Stroke-1\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.44090435,16.3661217 C2.43881739,16.3629913 2.43464348,16.3640348 2.4336,16.3671652 L0.5376,22.7271652 C0.4896,22.9327304 0.551165217,23.1497739 0.701426087,23.2989913 C0.850643478,23.4482087 1.06664348,23.5108174 1.2722087,23.4628174 L7.62386087,21.5689043 C7.63116522,21.5668174 7.63325217,21.5584696 7.62803478,21.5532522 L2.44090435,16.3661217 Z\",\n id: \"Stroke-3\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.5736,7.6872 L22.3833391,6.82006957 C23.323513,5.89241739 23.6939478,4.5338087 23.3548174,3.2565913 C23.015687,1.98041739 22.0191652,0.983895652 20.7429913,0.644765217 C19.4668174,0.306678261 18.1071652,0.677113043 17.179513,1.61728696 L16.3697739,2.48441739 L21.5736,7.6872 Z\",\n id: \"Stroke-5\"\n })))));\n};\nconst ForwardRef = /*#__PURE__*/forwardRef(SvgPencilSection);\nexport { ForwardRef as ReactComponent };\nexport default __webpack_public_path__ + \"static/media/pencil_section.cfcaeafc66548e53bea7fa91027b988c.svg\";","var _desc, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgProof = (_ref, ref) => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"21px\",\n height: \"25px\",\n viewBox: \"0 0 21 25\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: ref,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"Group 6\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Symbols\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Proof/16x16/ultra-dark\",\n transform: \"translate(0.000000, 1.000000)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group\",\n transform: \"translate(1.000000, 0.000000)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group-6\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"document\",\n transform: \"translate(2.727273, 8.888889)\",\n fill: \"#000000\",\n fillRule: \"nonzero\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.47035573,0.865700483 L0.509881423,0.865700483 C0.272727273,0.865700483 0.0592885375,1.05120773 0.0592885375,1.30628019 C0.0592885375,1.53816425 0.249011858,1.7468599 0.509881423,1.7468599 L4.47035573,1.7468599 C4.70750988,1.7468599 4.92094862,1.56135266 4.92094862,1.30628019 C4.92094862,1.07439614 4.70750988,0.865700483 4.47035573,0.865700483 Z\",\n id: \"Path\"\n })), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.58838142,21.3333333 L1.45239158,21.3333333 C0.650261296,21.3333333 0,20.7036495 0,19.9269025 L0,1.40643088 C0,0.629683881 0.650261296,0 1.45239158,0 L15.8203702,0 C16.622466,0 17.2727273,0.629683881 17.2727273,1.40643088 L17.2727273,12.6975065\",\n id: \"Stroke-1\",\n stroke: \"#000000\",\n strokeLinecap: \"round\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.72727273,4.88888889 C2.72727273,5.12280702 2.92261458,5.33333333 3.19120962,5.33333333 L14.0815177,5.33333333 C14.325695,5.33333333 14.5454545,5.14619883 14.5454545,4.88888889 C14.5454545,4.65497076 14.3501127,4.44444444 14.0815177,4.44444444 L3.19120962,4.44444444 C2.94703231,4.44444444 2.72727273,4.63157895 2.72727273,4.88888889 Z\",\n id: \"Path\",\n fill: \"#000000\",\n fillRule: \"nonzero\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.0815177,7.11111111 L3.19120962,7.11111111 C2.94703231,7.11111111 2.72727273,7.29824561 2.72727273,7.55555556 C2.72727273,7.78947368 2.92261458,8 3.19120962,8 L14.0815177,8 C14.325695,8 14.5454545,7.8128655 14.5454545,7.55555556 C14.5454545,7.29824561 14.3501127,7.11111111 14.0815177,7.11111111 Z\",\n id: \"Path\",\n fill: \"#000000\",\n fillRule: \"nonzero\"\n }), /*#__PURE__*/React.createElement(\"g\", {\n id: \"Search/16x16/ultradark\",\n transform: \"translate(9.090909, 13.333333)\",\n stroke: \"#000000\"\n }, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"circle\", {\n id: \"Oval\",\n fillRule: \"nonzero\",\n cx: 4.05263158,\n cy: 4.05263158,\n r: 4.05263158\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.11999791,6.92411236 L9.19894528,6.92411236 L9.11999791,6.84516499 L9.11999791,6.42411236 L8.90947159,6.63463868 L8.69894528,6.42411236 L8.69894528,6.84516499 L8.61999791,6.92411236 L8.69894528,6.92411236 L8.69894528,10.8948308 L8.61999791,10.8948308 L8.69894528,10.9737782 L8.69894528,11.3948308 L8.90947159,11.1843045 L9.11999791,11.3948308 L9.11999791,10.9737782 L9.19894528,10.8948308 L9.11999791,10.8948308 L9.11999791,6.92411236 Z\",\n id: \"Rectangle-4\",\n fill: \"#000000\",\n fillRule: \"nonzero\",\n transform: \"translate(8.909472, 8.909472) rotate(-45.000000) translate(-8.909472, -8.909472) \"\n })))))))));\n};\nconst ForwardRef = /*#__PURE__*/forwardRef(SvgProof);\nexport { ForwardRef as ReactComponent };\nexport default __webpack_public_path__ + \"static/media/proof.bb89def73ccd4e0e457c69db9c6eff48.svg\";","var _desc, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgRightArrow = (_ref, ref) => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"40px\",\n height: \"40px\",\n viewBox: \"0 0 40 40\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: ref,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Symbols\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\",\n opacity: 0.9\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Arrowbutton/right/40px\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Arrowbutton/left/36px\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(20.000000, 20.000000) rotate(-180.000000) translate(-20.000000, -20.000000) \"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20,40 C8.954305,40 0,31.045695 0,20 C0,8.954305 8.954305,0 20,0 C31.045695,0 40,8.954305 40,20 C39.9900302,31.0415627 31.0415627,39.9900302 20,40 Z\",\n id: \"Shape\",\n fillOpacity: 0.8,\n fill: \"#FFFFFF\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.0185079,30 C13.7479355,30.0011528 13.4882595,29.9030265 13.2981284,29.7277728 C12.9006239,29.3654551 12.9006239,28.7784998 13.2981284,28.4161821 L22.5407331,20.0022035 L13.2981284,11.588225 C12.9006239,11.2259073 12.9006239,10.638952 13.2981284,10.2766342 C13.4874493,10.0997578 13.7472273,10 14.0185079,10 C14.2897885,10 14.5495665,10.0997578 14.7388874,10.2766342 L24.7018716,19.3464081 C25.0993761,19.7087259 25.0993761,20.2956812 24.7018716,20.6579989 L14.7388874,29.7277728 C14.5487563,29.9030265 14.2890803,30.0011528 14.0185079,30 L14.0185079,30 Z\",\n id: \"Shape\",\n fill: \"#000000\",\n fillRule: \"nonzero\",\n transform: \"translate(19.000000, 20.000000) scale(-1, 1) translate(-19.000000, -20.000000) \"\n })))))));\n};\nconst ForwardRef = /*#__PURE__*/forwardRef(SvgRightArrow);\nexport { ForwardRef as ReactComponent };\nexport default __webpack_public_path__ + \"static/media/right_arrow.09d0a47865f763699d925da14c12dc3a.svg\";","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgTick = (_ref, ref) => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n id: \"Layer_1\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 512 512\",\n style: {\n enableBackground: \"new 0 0 512 512\"\n },\n xmlSpace: \"preserve\",\n ref: ref,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M504.502,75.496c-9.997-9.998-26.205-9.998-36.204,0L161.594,382.203L43.702,264.311c-9.997-9.998-26.205-9.997-36.204,0 c-9.998,9.997-9.998,26.205,0,36.203l135.994,135.992c9.994,9.997,26.214,9.99,36.204,0L504.502,111.7 C514.5,101.703,514.499,85.494,504.502,75.496z\",\n fill: \"#a7a7a7\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/forwardRef(SvgTick);\nexport { ForwardRef as ReactComponent };\nexport default __webpack_public_path__ + \"static/media/tick.c5b7ea54a6beac59eb4550ff5929d694.svg\";","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"_ustore_core\"] = factory();\n\telse\n\t\troot[\"_ustore_core\"] = factory();\n})(self, () => {\nreturn ","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.typeDetect = factory());\n}(this, (function () { 'use strict';\n\n/* !\n * type-detect\n * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\nvar promiseExists = typeof Promise === 'function';\n\n/* eslint-disable no-undef */\nvar globalObject = typeof self === 'object' ? self : global; // eslint-disable-line id-blacklist\n\nvar symbolExists = typeof Symbol !== 'undefined';\nvar mapExists = typeof Map !== 'undefined';\nvar setExists = typeof Set !== 'undefined';\nvar weakMapExists = typeof WeakMap !== 'undefined';\nvar weakSetExists = typeof WeakSet !== 'undefined';\nvar dataViewExists = typeof DataView !== 'undefined';\nvar symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined';\nvar symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined';\nvar setEntriesExists = setExists && typeof Set.prototype.entries === 'function';\nvar mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function';\nvar setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries());\nvar mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries());\nvar arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function';\nvar arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]());\nvar stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function';\nvar stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]());\nvar toStringLeftSliceLength = 8;\nvar toStringRightSliceLength = -1;\n/**\n * ### typeOf (obj)\n *\n * Uses `Object.prototype.toString` to determine the type of an object,\n * normalising behaviour across engine versions & well optimised.\n *\n * @param {Mixed} object\n * @return {String} object type\n * @api public\n */\nfunction typeDetect(obj) {\n /* ! Speed optimisation\n * Pre:\n * string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled)\n * boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled)\n * number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled)\n * undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled)\n * function x 2,556,769 ops/sec ±1.73% (77 runs sampled)\n * Post:\n * string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled)\n * boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled)\n * number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled)\n * undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled)\n * function x 31,296,870 ops/sec ±0.96% (83 runs sampled)\n */\n var typeofObj = typeof obj;\n if (typeofObj !== 'object') {\n return typeofObj;\n }\n\n /* ! Speed optimisation\n * Pre:\n * null x 28,645,765 ops/sec ±1.17% (82 runs sampled)\n * Post:\n * null x 36,428,962 ops/sec ±1.37% (84 runs sampled)\n */\n if (obj === null) {\n return 'null';\n }\n\n /* ! Spec Conformance\n * Test: `Object.prototype.toString.call(window)``\n * - Node === \"[object global]\"\n * - Chrome === \"[object global]\"\n * - Firefox === \"[object Window]\"\n * - PhantomJS === \"[object Window]\"\n * - Safari === \"[object Window]\"\n * - IE 11 === \"[object Window]\"\n * - IE Edge === \"[object Window]\"\n * Test: `Object.prototype.toString.call(this)``\n * - Chrome Worker === \"[object global]\"\n * - Firefox Worker === \"[object DedicatedWorkerGlobalScope]\"\n * - Safari Worker === \"[object DedicatedWorkerGlobalScope]\"\n * - IE 11 Worker === \"[object WorkerGlobalScope]\"\n * - IE Edge Worker === \"[object WorkerGlobalScope]\"\n */\n if (obj === globalObject) {\n return 'global';\n }\n\n /* ! Speed optimisation\n * Pre:\n * array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled)\n * Post:\n * array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled)\n */\n if (\n Array.isArray(obj) &&\n (symbolToStringTagExists === false || !(Symbol.toStringTag in obj))\n ) {\n return 'Array';\n }\n\n // Not caching existence of `window` and related properties due to potential\n // for `window` to be unset before tests in quasi-browser environments.\n if (typeof window === 'object' && window !== null) {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/browsers.html#location)\n * WhatWG HTML$7.7.3 - The `Location` interface\n * Test: `Object.prototype.toString.call(window.location)``\n * - IE <=11 === \"[object Object]\"\n * - IE Edge <=13 === \"[object Object]\"\n */\n if (typeof window.location === 'object' && obj === window.location) {\n return 'Location';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#document)\n * WhatWG HTML$3.1.1 - The `Document` object\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * WhatWG HTML states:\n * > For historical reasons, Window objects must also have a\n * > writable, configurable, non-enumerable property named\n * > HTMLDocument whose value is the Document interface object.\n * Test: `Object.prototype.toString.call(document)``\n * - Chrome === \"[object HTMLDocument]\"\n * - Firefox === \"[object HTMLDocument]\"\n * - Safari === \"[object HTMLDocument]\"\n * - IE <=10 === \"[object Document]\"\n * - IE 11 === \"[object HTMLDocument]\"\n * - IE Edge <=13 === \"[object HTMLDocument]\"\n */\n if (typeof window.document === 'object' && obj === window.document) {\n return 'Document';\n }\n\n if (typeof window.navigator === 'object') {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray)\n * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray\n * Test: `Object.prototype.toString.call(navigator.mimeTypes)``\n * - IE <=10 === \"[object MSMimeTypesCollection]\"\n */\n if (typeof window.navigator.mimeTypes === 'object' &&\n obj === window.navigator.mimeTypes) {\n return 'MimeTypeArray';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)\n * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray\n * Test: `Object.prototype.toString.call(navigator.plugins)``\n * - IE <=10 === \"[object MSPluginsCollection]\"\n */\n if (typeof window.navigator.plugins === 'object' &&\n obj === window.navigator.plugins) {\n return 'PluginArray';\n }\n }\n\n if ((typeof window.HTMLElement === 'function' ||\n typeof window.HTMLElement === 'object') &&\n obj instanceof window.HTMLElement) {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)\n * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement`\n * Test: `Object.prototype.toString.call(document.createElement('blockquote'))``\n * - IE <=10 === \"[object HTMLBlockElement]\"\n */\n if (obj.tagName === 'BLOCKQUOTE') {\n return 'HTMLQuoteElement';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#htmltabledatacellelement)\n * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement`\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * Test: Object.prototype.toString.call(document.createElement('td'))\n * - Chrome === \"[object HTMLTableCellElement]\"\n * - Firefox === \"[object HTMLTableCellElement]\"\n * - Safari === \"[object HTMLTableCellElement]\"\n */\n if (obj.tagName === 'TD') {\n return 'HTMLTableDataCellElement';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#htmltableheadercellelement)\n * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement`\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * Test: Object.prototype.toString.call(document.createElement('th'))\n * - Chrome === \"[object HTMLTableCellElement]\"\n * - Firefox === \"[object HTMLTableCellElement]\"\n * - Safari === \"[object HTMLTableCellElement]\"\n */\n if (obj.tagName === 'TH') {\n return 'HTMLTableHeaderCellElement';\n }\n }\n }\n\n /* ! Speed optimisation\n * Pre:\n * Float64Array x 625,644 ops/sec ±1.58% (80 runs sampled)\n * Float32Array x 1,279,852 ops/sec ±2.91% (77 runs sampled)\n * Uint32Array x 1,178,185 ops/sec ±1.95% (83 runs sampled)\n * Uint16Array x 1,008,380 ops/sec ±2.25% (80 runs sampled)\n * Uint8Array x 1,128,040 ops/sec ±2.11% (81 runs sampled)\n * Int32Array x 1,170,119 ops/sec ±2.88% (80 runs sampled)\n * Int16Array x 1,176,348 ops/sec ±5.79% (86 runs sampled)\n * Int8Array x 1,058,707 ops/sec ±4.94% (77 runs sampled)\n * Uint8ClampedArray x 1,110,633 ops/sec ±4.20% (80 runs sampled)\n * Post:\n * Float64Array x 7,105,671 ops/sec ±13.47% (64 runs sampled)\n * Float32Array x 5,887,912 ops/sec ±1.46% (82 runs sampled)\n * Uint32Array x 6,491,661 ops/sec ±1.76% (79 runs sampled)\n * Uint16Array x 6,559,795 ops/sec ±1.67% (82 runs sampled)\n * Uint8Array x 6,463,966 ops/sec ±1.43% (85 runs sampled)\n * Int32Array x 5,641,841 ops/sec ±3.49% (81 runs sampled)\n * Int16Array x 6,583,511 ops/sec ±1.98% (80 runs sampled)\n * Int8Array x 6,606,078 ops/sec ±1.74% (81 runs sampled)\n * Uint8ClampedArray x 6,602,224 ops/sec ±1.77% (83 runs sampled)\n */\n var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]);\n if (typeof stringTag === 'string') {\n return stringTag;\n }\n\n var objPrototype = Object.getPrototypeOf(obj);\n /* ! Speed optimisation\n * Pre:\n * regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled)\n * regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled)\n * Post:\n * regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled)\n * regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled)\n */\n if (objPrototype === RegExp.prototype) {\n return 'RegExp';\n }\n\n /* ! Speed optimisation\n * Pre:\n * date x 2,130,074 ops/sec ±4.42% (68 runs sampled)\n * Post:\n * date x 3,953,779 ops/sec ±1.35% (77 runs sampled)\n */\n if (objPrototype === Date.prototype) {\n return 'Date';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag)\n * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be \"Promise\":\n * Test: `Object.prototype.toString.call(Promise.resolve())``\n * - Chrome <=47 === \"[object Object]\"\n * - Edge <=20 === \"[object Object]\"\n * - Firefox 29-Latest === \"[object Promise]\"\n * - Safari 7.1-Latest === \"[object Promise]\"\n */\n if (promiseExists && objPrototype === Promise.prototype) {\n return 'Promise';\n }\n\n /* ! Speed optimisation\n * Pre:\n * set x 2,222,186 ops/sec ±1.31% (82 runs sampled)\n * Post:\n * set x 4,545,879 ops/sec ±1.13% (83 runs sampled)\n */\n if (setExists && objPrototype === Set.prototype) {\n return 'Set';\n }\n\n /* ! Speed optimisation\n * Pre:\n * map x 2,396,842 ops/sec ±1.59% (81 runs sampled)\n * Post:\n * map x 4,183,945 ops/sec ±6.59% (82 runs sampled)\n */\n if (mapExists && objPrototype === Map.prototype) {\n return 'Map';\n }\n\n /* ! Speed optimisation\n * Pre:\n * weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled)\n * Post:\n * weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled)\n */\n if (weakSetExists && objPrototype === WeakSet.prototype) {\n return 'WeakSet';\n }\n\n /* ! Speed optimisation\n * Pre:\n * weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled)\n * Post:\n * weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled)\n */\n if (weakMapExists && objPrototype === WeakMap.prototype) {\n return 'WeakMap';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag)\n * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be \"DataView\":\n * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))``\n * - Edge <=13 === \"[object Object]\"\n */\n if (dataViewExists && objPrototype === DataView.prototype) {\n return 'DataView';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag)\n * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be \"Map Iterator\":\n * Test: `Object.prototype.toString.call(new Map().entries())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (mapExists && objPrototype === mapIteratorPrototype) {\n return 'Map Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag)\n * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be \"Set Iterator\":\n * Test: `Object.prototype.toString.call(new Set().entries())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (setExists && objPrototype === setIteratorPrototype) {\n return 'Set Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag)\n * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be \"Array Iterator\":\n * Test: `Object.prototype.toString.call([][Symbol.iterator]())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) {\n return 'Array Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag)\n * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be \"String Iterator\":\n * Test: `Object.prototype.toString.call(''[Symbol.iterator]())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (stringIteratorExists && objPrototype === stringIteratorPrototype) {\n return 'String Iterator';\n }\n\n /* ! Speed optimisation\n * Pre:\n * object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled)\n * Post:\n * object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled)\n */\n if (objPrototype === null) {\n return 'Object';\n }\n\n return Object\n .prototype\n .toString\n .call(obj)\n .slice(toStringLeftSliceLength, toStringRightSliceLength);\n}\n\nreturn typeDetect;\n\n})));\n","const isBufferExists = typeof Buffer !== 'undefined';\nconst isBufferFromExists = isBufferExists && typeof Buffer.from !== 'undefined';\n\nexport const isBuffer = isBufferExists\n ? /**\n * is value is Buffer?\n *\n * @param {*} value\n * @return {boolean}\n */\n function isBuffer(value) {\n return Buffer.isBuffer(value);\n }\n : /**\n * return false\n *\n * NOTE: for Buffer unsupported\n *\n * @return {boolean}\n */\n function isBuffer() {\n return false;\n };\n\nexport const copy = isBufferFromExists\n ? /**\n * copy Buffer\n *\n * @param {Buffer} value\n * @return {Buffer}\n */\n function copy(value) {\n return Buffer.from(value);\n }\n : isBufferExists\n ? /**\n * copy Buffer\n *\n * NOTE: for old node.js\n *\n * @param {Buffer} value\n * @return {Buffer}\n */\n function copy(value) {\n return new Buffer(value);\n }\n : /**\n * shallow copy\n *\n * NOTE: for Buffer unsupported\n *\n * @param {*}\n * @return {*}\n */\n function copy(value) {\n return value;\n };\n","import typeDetect from 'type-detect';\n\nimport { isBuffer } from './buffer.mjs';\n\n/**\n * detect type of value\n *\n * @param {*} value\n * @return {string}\n */\nexport function detectType(value) {\n // NOTE: isBuffer must execute before type-detect,\n // because type-detect returns 'Uint8Array'.\n if (isBuffer(value)) {\n return 'Buffer';\n }\n\n return typeDetect(value);\n}\n","import { detectType } from './detector.mjs';\n\n/**\n * collection types\n */\nconst collectionTypeSet = new Set([\n 'Arguments',\n 'Array',\n 'Map',\n 'Object',\n 'Set'\n]);\n\n/**\n * get value from collection\n *\n * @param {Array|Object|Map|Set} collection\n * @param {string|number|symbol} key\n * @param {string} [type=null]\n * @return {*}\n */\nexport function get(collection, key, type = null) {\n const valueType = type || detectType(collection);\n\n switch (valueType) {\n case 'Arguments':\n case 'Array':\n case 'Object':\n return collection[key];\n case 'Map':\n return collection.get(key);\n case 'Set':\n // NOTE: Set.prototype.keys is alias of Set.prototype.values\n // it means key is equals value\n return key;\n default:\n }\n}\n\n/**\n * check to type string is collection\n *\n * @param {string} type\n */\nexport function isCollection(type) {\n return collectionTypeSet.has(type);\n}\n\n/**\n * set value to collection\n *\n * @param {Array|Object|Map|Set} collection\n * @param {string|number|symbol} key\n * @param {*} value\n * @param {string} [type=null]\n * @return {Array|Object|Map|Set}\n */\nexport function set(collection, key, value, type = null) {\n const valueType = type || detectType(collection);\n\n switch (valueType) {\n case 'Arguments':\n case 'Array':\n case 'Object':\n collection[key] = value;\n break;\n case 'Map':\n collection.set(key, value);\n break;\n case 'Set':\n collection.add(value);\n break;\n default:\n }\n\n return collection;\n}\n","const freeGlobalThis =\n typeof globalThis !== 'undefined' &&\n globalThis !== null &&\n globalThis.Object === Object &&\n globalThis;\n\nconst freeGlobal =\n typeof global !== 'undefined' &&\n global !== null &&\n global.Object === Object &&\n global;\n\nconst freeSelf =\n typeof self !== 'undefined' &&\n self !== null &&\n self.Object === Object &&\n self;\n\nexport const globalObject =\n freeGlobalThis || freeGlobal || freeSelf || Function('return this')();\n","import { copy as cloneBuffer } from './buffer.mjs';\nimport { globalObject } from './global.mjs';\n\n/**\n * copy ArrayBuffer\n *\n * @param {ArrayBuffer} value\n * @return {ArrayBuffer}\n */\nfunction copyArrayBuffer(value) {\n return value.slice(0);\n}\n\n/**\n * copy Boolean\n *\n * @param {Boolean} value\n * @return {Boolean}\n */\nfunction copyBoolean(value) {\n return new Boolean(value.valueOf());\n}\n\n/**\n * copy DataView\n *\n * @param {DataView} value\n * @return {DataView}\n */\nfunction copyDataView(value) {\n // TODO: copy ArrayBuffer?\n return new DataView(value.buffer);\n}\n\n/**\n * copy Buffer\n *\n * @param {Buffer} value\n * @return {Buffer}\n */\nfunction copyBuffer(value) {\n return cloneBuffer(value);\n}\n\n/**\n * copy Date\n *\n * @param {Date} value\n * @return {Date}\n */\nfunction copyDate(value) {\n return new Date(value.getTime());\n}\n\n/**\n * copy Number\n *\n * @param {Number} value\n * @return {Number}\n */\nfunction copyNumber(value) {\n return new Number(value);\n}\n\n/**\n * copy RegExp\n *\n * @param {RegExp} value\n * @return {RegExp}\n */\nfunction copyRegExp(value) {\n return new RegExp(value.source, value.flags);\n}\n\n/**\n * copy String\n *\n * @param {String} value\n * @return {String}\n */\nfunction copyString(value) {\n return new String(value);\n}\n\n/**\n * copy TypedArray\n *\n * @param {*} value\n * @return {*}\n */\nfunction copyTypedArray(value, type) {\n const typedArray = globalObject[type];\n\n if (typedArray.from) {\n return globalObject[type].from(value);\n }\n\n return new globalObject[type](value);\n}\n\n/**\n * shallow copy\n *\n * @param {*} value\n * @return {*}\n */\nfunction shallowCopy(value) {\n return value;\n}\n\n/**\n * get empty Array\n *\n * @return {Array}\n */\nfunction getEmptyArray() {\n return [];\n}\n\n/**\n * get empty Map\n *\n * @return {Map}\n */\nfunction getEmptyMap() {\n return new Map();\n}\n\n/**\n * get empty Object\n *\n * @return {Object}\n */\nfunction getEmptyObject() {\n return {};\n}\n\n/**\n * get empty Set\n *\n * @return {Set}\n */\nfunction getEmptySet() {\n return new Set();\n}\n\nexport default new Map([\n // deep copy\n ['ArrayBuffer', copyArrayBuffer],\n ['Boolean', copyBoolean],\n ['Buffer', copyBuffer],\n ['DataView', copyDataView],\n ['Date', copyDate],\n ['Number', copyNumber],\n ['RegExp', copyRegExp],\n ['String', copyString],\n\n // typed arrays\n // TODO: pass bound function\n ['Float32Array', copyTypedArray],\n ['Float64Array', copyTypedArray],\n ['Int16Array', copyTypedArray],\n ['Int32Array', copyTypedArray],\n ['Int8Array', copyTypedArray],\n ['Uint16Array', copyTypedArray],\n ['Uint32Array', copyTypedArray],\n ['Uint8Array', copyTypedArray],\n ['Uint8ClampedArray', copyTypedArray],\n\n // shallow copy\n ['Array Iterator', shallowCopy],\n ['Map Iterator', shallowCopy],\n ['Promise', shallowCopy],\n ['Set Iterator', shallowCopy],\n ['String Iterator', shallowCopy],\n ['function', shallowCopy],\n ['global', shallowCopy],\n // NOTE: WeakMap and WeakSet cannot get entries\n ['WeakMap', shallowCopy],\n ['WeakSet', shallowCopy],\n\n // primitives\n ['boolean', shallowCopy],\n ['null', shallowCopy],\n ['number', shallowCopy],\n ['string', shallowCopy],\n ['symbol', shallowCopy],\n ['undefined', shallowCopy],\n\n // collections\n // NOTE: return empty value, because recursively copy later.\n ['Arguments', getEmptyArray],\n ['Array', getEmptyArray],\n ['Map', getEmptyMap],\n ['Object', getEmptyObject],\n ['Set', getEmptySet]\n\n // NOTE: type-detect returns following types\n // 'Location'\n // 'Document'\n // 'MimeTypeArray'\n // 'PluginArray'\n // 'HTMLQuoteElement'\n // 'HTMLTableDataCellElement'\n // 'HTMLTableHeaderCellElement'\n\n // TODO: is type-detect never return 'object'?\n // 'object'\n]);\n","import copyMap from './copy_map.mjs';\nimport { detectType } from './detector.mjs';\n\n/**\n * no operation\n */\nfunction noop() {}\n\n/**\n * copy value\n *\n * @param {*} value\n * @param {string} [type=null]\n * @param {Function} [customizer=noop]\n * @return {*}\n */\nexport function copy(value, type = null, customizer = noop) {\n if (arguments.length === 2 && typeof type === 'function') {\n customizer = type;\n type = null;\n }\n\n const valueType = type || detectType(value);\n const copyFunction = copyMap.get(valueType);\n\n if (valueType === 'Object') {\n const result = customizer(value, valueType);\n\n if (result !== undefined) {\n return result;\n }\n }\n\n // NOTE: TypedArray needs pass type to argument\n return copyFunction ? copyFunction(value, valueType) : value;\n}\n","import { detectType } from './detector.mjs';\nimport { get, isCollection, set } from './collection.mjs';\nimport { copy } from './copier.mjs';\n\n/**\n * deepcopy function\n *\n * @param {*} value\n * @param {Object|Function} [options]\n * @return {*}\n */\nexport default function deepcopy(value, options = {}) {\n if (typeof options === 'function') {\n options = {\n customizer: options\n };\n }\n\n const {\n // TODO: before/after customizer\n customizer\n // TODO: max depth\n // depth = Infinity,\n } = options;\n\n const valueType = detectType(value);\n\n if (!isCollection(valueType)) {\n return recursiveCopy(value, null, null, null, customizer);\n }\n\n const copiedValue = copy(value, valueType, customizer);\n\n const references = new WeakMap([[value, copiedValue]]);\n const visited = new WeakSet([value]);\n\n return recursiveCopy(value, copiedValue, references, visited, customizer);\n}\n\n/**\n * recursively copy\n *\n * @param {*} value target value\n * @param {*} clone clone of value\n * @param {WeakMap} references visited references of clone\n * @param {WeakSet} visited visited references of value\n * @param {Function} customizer user customize function\n * @return {*}\n */\nfunction recursiveCopy(value, clone, references, visited, customizer) {\n const type = detectType(value);\n const copiedValue = copy(value, type);\n\n // return if not a collection value\n if (!isCollection(type)) {\n return copiedValue;\n }\n\n let keys;\n\n switch (type) {\n case 'Arguments':\n case 'Array':\n keys = Object.keys(value);\n break;\n case 'Object':\n keys = Object.keys(value);\n keys.push(...Object.getOwnPropertySymbols(value));\n break;\n case 'Map':\n case 'Set':\n keys = value.keys();\n break;\n default:\n }\n\n // walk within collection with iterator\n for (let collectionKey of keys) {\n const collectionValue = get(value, collectionKey, type);\n\n if (visited.has(collectionValue)) {\n // for [Circular]\n set(clone, collectionKey, references.get(collectionValue), type);\n } else {\n const collectionValueType = detectType(collectionValue);\n const copiedCollectionValue = copy(collectionValue, collectionValueType);\n\n // save reference if value is collection\n if (isCollection(collectionValueType)) {\n references.set(collectionValue, copiedCollectionValue);\n visited.add(collectionValue);\n }\n\n set(\n clone,\n collectionKey,\n recursiveCopy(\n collectionValue,\n copiedCollectionValue,\n references,\n visited,\n customizer\n ),\n type\n );\n }\n }\n\n // TODO: isSealed/isFrozen/isExtensible\n\n return clone;\n}\n","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.logdown=e():t.logdown=e()}(window,function(){return function(r){var n={};function o(t){if(n[t])return n[t].exports;var e=n[t]={i:t,l:!1,exports:{}};return r[t].call(e.exports,e,e.exports,o),e.l=!0,e.exports}return o.m=r,o.c=n,o.d=function(t,e,r){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},o.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var n in e)o.d(r,n,function(t){return e[t]}.bind(null,n));return r},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,\"a\",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p=\"\",o(o.s=0)}([function(t,e,r){var n,o=r(1)(),i=r(3),s=r(5),f=r(8)();o.prefixColors=[\"#F2777A\",\"#F99157\",\"#FFCC66\",\"#99CC99\",\"#66CCCC\",\"#6699CC\",\"#CC99CC\"],o._setPrefixRegExps=function(){try{f.localStorage&&\"string\"==typeof f.localStorage.getItem(\"debug\")&&(o._prefixRegExps=[],f.localStorage.getItem(\"debug\").split(\",\").forEach(function(t){var e=\"enable\";\"-\"===(t=t.trim())[0]&&(t=t.substr(1),e=\"disable\");var r=o._prepareRegExpForPrefixSearch(t);o._prefixRegExps.push({type:e,regExp:r})}))}catch(t){}},o._getNextPrefixColor=(n=0,function(){return n+=1,o.prefixColors[n%o.prefixColors.length]}),o.prototype._getDecoratedPrefix=function(){var t=[];return s()?(t.push(\"%c\"+this.opts.prefix+\"%c \"),t.push(\"color:\"+this.opts.prefixColor+\"; font-weight:bold;\",\"\")):t.push(\"[\"+this.opts.prefix+\"] \"),t},o.prototype._prepareOutput=function(t){var e,r=this._getDecoratedPrefix();return\"string\"==typeof t[0]?this.opts.markdown&&s()?(e=i.parse(t[0]),r[0]=r[0]+e.text,r=r.concat(e.styles)):r[0]=r[0]+t[0]:r.push(t[0]),1<t.length&&(r=r.concat(t.slice(1))),r},o._setPrefixRegExps(),t.exports=o},function(t,e,r){var f=r(2);t.exports=function(){function s(t,e){return this instanceof s?s._isPrefixAlreadyInUse(t)?s._getInstanceByPrefix(t):(this.opts=s._normalizeOpts(t,e),this.state=s._getInitialState(this.opts),s._decorateLoggerMethods(this),s._instances.push(this),this):new s(t,e)}return s.transports=[],s._instances=[],s._prefixRegExps=[],s._prepareRegExpForPrefixSearch=function(t){return new RegExp(\"^\"+t.replace(/\\*/g,\".*?\")+\"$\")},s._isPrefixAlreadyInUse=function(e){return s._instances.some(function(t){return t.opts.prefix===e})},s._getInstanceByPrefix=function(e){return s._instances.filter(function(t){return t.opts.prefix===e})[0]},s._normalizeOpts=function(t,e){if(\"string\"!=typeof t)throw new TypeError(\"prefix must be a string\");var r=void 0===(e=e||{}).markdown||Boolean(e.markdown),n=e.prefixColor||s._getNextPrefixColor();return{logger:e.logger||console,markdown:r,plaintext:Boolean(e.plaintext),prefix:t,prefixColor:n}},s._getInitialState=function(t){return{isEnabled:s._getEnableState(t)}},s._getEnableState=function(e){var r=!1;return s._prefixRegExps.forEach(function(t){\"enable\"===t.type&&t.regExp.test(e.prefix)?r=!0:\"disable\"===t.type&&t.regExp.test(e.prefix)&&(r=!1)}),r},s._decorateLoggerMethods=function(t){var i=t.opts.logger,e=Object.keys(i).filter(function(t){return\"function\"==typeof i[t]});0===e.length&&(e=[\"debug\",\"log\",\"warn\",\"error\",\"info\"]),e.forEach(function(o){t[o]=function(){var e=f(arguments),r=this.opts.prefix;if(s.transports.length){var n=\"[\"+r+\"] \"+e.filter(function(t){return\"object\"!=typeof t}).join(\" \");s.transports.forEach(function(t){t({state:this.state,instance:r,level:o,args:e,msg:n})}.bind(this))}if(this.state.isEnabled){var t=this._prepareOutput(e,o);i[o].apply(i,t)}}})},s}},function(t,e){t.exports=function(t){return Array.prototype.slice.call(t,0)}},function(t,e,r){var n=[];function o(e){return function(t){return n.push(e),n.push(\"\"),\"%c\"+t+\"%c\"}}var i=new(r(4))({renderer:{\"*\":o(\"font-weight:bold;\"),_:o(\"font-style:italic;\"),\"`\":o(\"background-color:rgba(255,204,102, 0.1);color:#FFCC66;padding:2px 5px;border-radius:2px;\")}});t.exports={parse:function(t){var e={text:i.parse(t),styles:[].concat(n)};return n.length=0,e}}},function(t,e){var x=/([_*`\\\\]|[^_*`\\\\]+)/g,r=/[_*`]/;function n(t){this.renderer=t.renderer}function d(t){return r.test(t)}n.prototype.parse=function(t){if(\"\"===t)return\"\";var r,e,n,o=t.match(x),i=this.renderer,s=\"\",f=[],u={},a=0;function p(t){for(var e=\"\";r&&r.tag!==t;)e=r.tag+r.text+e,u[r.tag]=!1,r=f.pop();return e}for(;n=o[a];){if(e=\"\",a++,d(n))if(u[n])e=p(n),e=i[r.tag](r.text+e),u[n]=!1,r=f.pop();else{var c=\"\";if(\"`\"===n){var l=o.indexOf(n,a);-1!==l&&(s+=p(),c=o.slice(a,l).join(\"\"),a=l)}r&&f.push(r),u[n]=!0,r={tag:n,text:c}}else if(\"\\\\\"===(e=n)){var g=o[a];(d(g)||\"\\\\\"===g)&&(e=g,a++)}e&&(r?r.text+=e:s+=e,e=\"\")}return s+p()},t.exports=n},function(t,e,r){var n=r(6),o=r(7);t.exports=function(){return n()||o()}},function(t,e){t.exports=function(){try{return\"WebkitAppearance\"in document.documentElement.style&&!/Edge/.test(navigator.userAgent)}catch(t){return!1}}},function(t,e){t.exports=function(){try{return/firefox\\/(\\d+)/i.test(navigator.userAgent)}catch(t){return!1}}},function(r,t,e){(function(t){function e(t,e){return\"object\"==typeof t&&t.self===t&&t||\"object\"==typeof e&&e.global===e&&e||this}r.exports=e.bind(this,self,t),r.exports.getGlobal=e}).call(this,e(9))},function(ob,pb){var qb;qb=function(){return this}();try{qb=qb||Function(\"return this\")()||eval(\"this\")}catch(ob){\"object\"==typeof window&&(qb=window)}ob.exports=qb}])});\n","\n/**\n * globally unique identifier\n * @typedef {string} GUID\n */\n\n/**\n * Provides graphic asset DTO.\n * @typedef {Object} AssetListItemResponseModel\n * @property {string} ThumbnailUrl Graphic asset thumbnail URL.\n * @property {string} AssetID Graphic asset ID.\n * @property {string} DisplayName Graphic asset name.\n * @property {boolean} IsUploaded Flag that use to distinguish user uploaded asset from PE asset.\n * @property {string} FileName Graphic asset name with extension.\n * @property {Date} ModificationDate Graphic asset modification date.\n */\n\n/**\n * Provides graphic asset DTO.\n * @typedef {Object} AssetResponseModel\n * @property {string} AssetID Graphic asset ID.\n * @property {string} DisplayName Graphic asset name.\n * @property {boolean} IsUploaded Flag that use to distinguish user uploaded asset from PE asset.\n * @property {string} FileName Graphic asset name with extension.\n * @property {string} Url Graphic asset URL to the original content.\n * @property {string} ThumbnailUrl Graphic asset thumbnail URL.\n * @property {number} Width Graphic asset width in pixels.\n * @property {number} Height Graphic asset height in pixels.\n * @property {number} SizeKB Graphic asset size in kilobyte.\n */\n\nexport const AssetsTypes = {}","/**\n * globally unique identifier\n * @typedef {string} GUID\n */\n\n/**\n * Provides information about a category of products.\n * @typedef {Object} CategoryModel\n * @property {GUID} ID The unique ID of the category.\n * @property {number} FriendlyID The friendly ID of the category.\n * @property {string} Name The name of the category.\n * @property {string} Description The description of the category.\n * @property {boolean} HasProducts Indicates whether the category contains at least one online product.\n * @property {boolean} HasSubCategories Indicates whether the category contains at least one sub-category, of any level, that has an online product.\n * @property {string} ImageUrl The URL of the category image.\n */\n\n/**\n * Provides a list of product categories according to the pagination.\n * @typedef {Object} CategoryListModel\n * @property {CategoryModel[]} Categories The list of the product categories according to the pagination.\n * @property {number} Count The total number of product categories without pagination.\n */\n\n/**\n * Provides information about the SEO configuration of a category or product.\n * @typedef {Object} SeoConfigurationModel\n * @property {string} Title The title of a webpage.\n * @property {string} Description The description of a webpage.\n */\n\n/**\n * Provides information about a category, including additional data such as SEO configuration.\n * @typedef {Object} CategoryExtendedModel\n * @property {SeoConfigurationModel} SeoConfiguration The SEO configuration.\n * @property {GUID} ID The unique ID of the category.\n * @property {number} FriendlyID The friendly ID of the category.\n * @property {string} Name The name of the category.\n * @property {string} Description The description of the category.\n * @property {boolean} HasProducts Indicates whether the category contains at least one online product.\n * @property {boolean} HasSubCategories Indicates whether the category contains at least one sub-category, of any level, that has an online product.\n * @property {string} ImageUrl The URL of the category image.\n */\n\n/**\n * Node representation in a product category tree.\n * @typedef {Object} CategoryTreeNodeModel\n * @property {CategoryModel} Category The product category of the node.\n * @property {CategoryTreeNodeModel[]} SubCategories The sub-categories (child nodes) of the node.\n */\n\n/**\n * Node representation in a product category tree.\n * @typedef {Object} CategoryTreeModel\n * @property {CategoryTreeNodeModel} Categories The list of top level (root) categories.\n */\n\nexport const CategoriesTypes = {}\n","\n/**\n * globally unique identifier\n * @typedef {string} GUID\n */\n\n/**\n * Added/updated Dial Value\n * @typedef {Object} OrderItemPropertyModel\n * @property {GUID} ID The unique ID of the property.\n * @property {Object} Value The value of the property.\n */\n\n/**\n * Delivery methods\n * @enum {number}\n */\nconst DeliveryMethod = {\n /** Shipping delivery method */\n Shipping: 1,\n /** Mailing delivery method */\n Mailing: 2,\n};\n\n/**\n * Provides information about a component order item.\n * @typedef {Object} SubOrderItemModel\n * @property {boolean} IsIncluded TIndicates whether the component order item is included in the parent order item.\n * @property {GUID} ID The unique ID of the order item.\n * @property {number} FriendlyID The friendly ID of the order item.\n * @property {GUID} ProductID The unique ID of the order item's product.\n * @property {number} Quantity The number of units of the product to be purchased in the order item.\n * @property {SubOrderItemModel} Items The component order items of the order item.\n * @property {DeliveryMethod} DeliveryMethod The selected delivery method of the order item.\n * @property {GUID} DeliveryServiceID The selected delivery service id of the order item.\n * @property {OrderItemPropertyModel} Properties The order item's property values.\n */\n\n/**\n * Provides information about an order item.\n * @typedef {Object} OrderItemModel\n * @property {GUID} ID The unique ID of the order item.\n * @property {number} FriendlyID The friendly ID of the order item.\n * @property {GUID} ProductID The unique ID of the order item's product.\n * @property {number} Quantity The number of units of the product to be purchased in the order item.\n * @property {SubOrderItemModel} Items The component order items of the order item.\n * @property {DeliveryMethod} DeliveryMethod The selected delivery method of the order item.\n * @property {GUID} DeliveryServiceID The selected delivery service id of the order item.\n * @property {OrderItemPropertyModel} Properties The order item's property values.\n */\n\n/**\n * Provides information about a product's price and tax.\n * @typedef {Object} ProductPriceModel\n * @property {number} Price The price of the product excluding tax, in the store's primary currency.\n * @property {number} Tax The tax of the product, in the store's primary currency.\n */\n\n/**\n * Provides information about an order item's price and tax.\n * @typedef {Object} OrderItemPriceModel\n * @property {ProductPriceModel} Price The price of the order item. Includes delivery price. The value is undefined (equals null) if the user does not have permission to view the product price.\n * @property {boolean} IsMinimumPrice Indicates whether the price is the product's minimum price and not the actual price. The minimum price is returned when the actual price cannot be calculated. For an example, when a property does not have a valid value.\n * @property {number} MailingFee The price of mailing delivery of the order item.\n * @property {number} ProductPrice The price of the product. Does not include the delivery price.\n */\n\n/**\n * Provides information about an order item's submission status.\n * @typedef {Object} OrderItemStatusModel\n * @property {string} OrderItemID The unique ID of the order item.\n * @property {date} SubmittedDate The date when the order item was submitted.\n */\n\n/**\n * Provides the order approval information.\n * @typedef {Object} OrderApprovalModel\n * @property {number} OriginalOrderFriendlyID The friendly ID of the original order.\n * @property {string} OriginalOrderID The ID of the original order.\n */\n\n/**\n * Provides information about a product's property for cart.\n * @typedef {Object} CartItemPropertyModel\n * @property {string} Name The property name.\n * @property {string} Value The property value.\n * @property {string} ComponentRange Represents the page range when using a composite product.\n * @property {string} ComponentName The name of the component of the composite product.\n */\n\n/**\n * Provides information about a product unit type.\n * @typedef {Object} ProductUnitTypeModel\n * @property {string} Name The singular form of the product unit name (e.g. \"Box\", \"Item\", \"Pack\", \"Piece\").\n * @property {string} PluralName The plural form of the product unit name (e.g. \"Boxes\", \"Items\", \"Packs\", \"Pieces\").\n */\n\n/**\n * Provides information about a product unit.<br/> The unit can be a single item, multiple items or a pack of items.\n * @typedef {Object} ProductUnitModel\n * @property {number} ItemQuantity The number of items that make up the unit.\n * @property {ProductUnitTypeModel} ItemType The type of item.\n * @property {ProductUnitTypeModel} PackType The type of pack. The value is undefined (equals null) for units that are not sold in packs.\n */\n\n/**\n * Provides information about a product.\n * @typedef {Object} CartProductModel\n * @property {GUID} ProductID The unique ID of the product.\n * @property {string} Name The name of the product.\n * @property {string} CatalogNumber The catalog number of the product. The value is undefined (equals null) if the user does not have permission to view the catalog number.\n * @property {ProductUnitModel} Unit Provides information about a product unit. The unit can be a single item, multiple items or a pack of items.\n * @property {boolean} HasPricing Indicates whether a price was defined for the product.\n */\n\n/**\n * Provides information about the subitem of the cart item.\n * @typedef {Object} CartSubItemModel\n * @property {CartProductModel} Product The product of the cart subitem.\n * @property {number} Quantity The quantity of units of the product per parent container.\n */\n\n/**\n * Provides information about the thumbnail of the cart item.\n * @typedef {Object} CartItemThumbnailModel\n * @property {string} Url The URL for providing file content of the image of the cart item.\n */\n\n/**\n * Enum values present async activity status.\n * @enum {number}\n */\nconst ActivityStatus = {\n InProgress: 1,\n Completed: 2,\n Failed: 3,\n PartiallyFailed: 4\n};\n\n/**\n * Provides information about an attribute.\n * @typedef {Object} AttributeModel\n * @property {string} Name The name of the attribute.\n * @property {string} Value The value of the attribute.\n */\n\n/**\n * Provides information about the cart item.\n * @typedef {Object} CartItemModel\n * @property {string} OrderItemID The unique ID of the order item.\n * @property {CartProductModel} Product The product of the cart item.\n * @property {string} Nickname The nickname of the cart item.\n * @property {boolean} Checked Indicates whether the cart item is checked.\n * @property {number} OriginalOrderFriendlyID The friendly ID of original order. Can be null. It contains EncryptedOrderID (can be displayed in the UI) in case the orderItem was duplicated from an existing order.\n * @property {string} EditUrl The URL for editing the order item.\n * @property {number} QuantityPerRecipient The quantity of units of the product per recipient. Can be null in case of the dynamic product configured: Copies per record are based on \"Value Defined in Process Job\"\n * @property {number} NumRecipients The total number of the recipients.\n * @property {number} Quantity The number of units of the product to be purchased in the cart item.\n * @property {CartItemPropertyModel[]} Properties The cart item's property values.\n * @property {CartSubItemModel[]} SubItems The list of cart subitems of the cart item.\n * @property {CartItemThumbnailModel} Thumbnail The cart item thumbnail information.\n * @property {ActivityStatus} ProofStatus The cart item's proof status.\n * @property {AttributeModel[]} Attributes The cart item's attributes.\n */\n\n/**\n * Provides information about the cart of the user.\n * @typedef {Object} CartModel\n * @property {OrderApprovalModel} OrderApproval The order approval information. Can be null if there is no approval.\n * @property {string} CheckoutUrl The URL to the first page of the checkout wizard.\n * @property {CartItemModel[]} Items The list of the items in the cart.\n * @property {string} Description The text that will be displayed in the Shopping Cart.\n * @property {Array} Activities Active background tasks of the current user, related to the shopping cart\n */\n\n/**\n * Error type indication.\n * @enum {number}\n */\nconst ErrorType = {\n /** Indicates whether inventory for the selected product have been exceeded */\n InventoryExceeded: 1,\n /** Indicates whether inventory for the selected product is Out Of Stock */\n InventoryOutOfStock: 2,\n /** Indicates whether inventory for the selected product have been exceeded and delivery might be delayed */\n InventoryDelayed: 3,\n /** Indicates whether the selected product is not available */\n ProductNotAvailable: 4,\n /** Indicates whether one of the selected product components is not available */\n ProductComponentNotAvailable: 5,\n /** Indicates whether maximum quantity for the selected product have been exceeded */\n MaxUnitsExceeded: 6,\n /** Indicates whether minimum quantity for the selected product is not reached */\n MinUnitsNotReached: 7,\n /** Indicates whether product units have been changed */\n MinUnitsNotReached: 8,\n /** Indicates whether maximum quantity for the selected product have been exceeded */\n MaxUnitsExceededForOrder: 9,\n /** Indicates whether the selected recipient list model in not available */\n RecipientListModelInvalid: 10,\n /** Indicates whether the selected delivery method in not available */\n DeliveryMethodInvalid: 11,\n /** Indicates whether order item files have been deleted by GDPR */\n GdprFilesDeleted: 12,\n /** Indicates whether product properties options have been changed */\n ProductOptionsChanged: 13,\n /** Indicates whether inventory of the selected product components is Out Of Stock */\n InventoryComponentOutOfStock: 14,\n /** Indicates whether split shipping is forced by property selection */\n ForcedSplitShipping: 15,\n};\n\n/**\n * Indicates error level.\n * @enum {number}\n */\nconst ErrorLevel = {\n /** Low error level. */\n Warning: 1,\n /** High error level. */\n Error: 2,\n}\n\n/**\n * Provides information about an error.\n * @typedef {Object} ErrorModel\n * @property {ErrorType} Type The type of the error\n * @property {ErrorLevel} Level The level of the error\n * @property {string} Message The message of the error\n */\n\n/**\n * Provides information about an error of the order item.\n * @typedef {Object} CartItemValidationModel\n * @property {string} OrderItemID The unique ID of the order item.\n * @property {string} Error The error details.\n */\n\n/**\n * Provides pricing information for a Shopping Cart item.\n * @typedef {Object} CartItemPriceModel\n * @property {GUID} OrderItemID The unique ID of the order item.\n * @property {number} Price The price of the order item.\n * @property {number} Tax The tax of the order item.\n * @property {boolean} IsChanged Indicates whether the product price configuration has been changed\n * @property {boolean} IsValid Indicates whether the order item price is valid\n */\n\n/**\n * Provides pricing information for the Shopping Cart.\n * @typedef {Object} CartPriceModel\n * @property {CartItemPriceModel[]} Items Provides pricing information for the Shopping Cart items.\n */\n\n/**\n * Provides information that can be updated for the cart item.\n * @typedef {Object} CartItemUpdateModel\n * @property {GUID} OrderItemID The unique ID of the order item.\n * @property {boolean} IsChecked Indicates whether the item is marked in the cart. If null is specified, the value does not change, the original value is preserved.\n * @property {string} Nickname The nickname of the cart item. If null is specified, the value does not change, the original value is preserved.\n * @property {GUID} ListID The unique ID of the submission list.\n */\n\n/**\n * Provides information that can be updated for the wish list item.\n * @typedef {Object} WishListItemUpdateModel\n * @property {string} Nickname The nickname of the wish list item. If null is specified, the value does not change, the original value is preserved.\n */\n\n/**\n * Provides cart list DTO.\n * @typedef {Object} CartListCreateResponseModel\n * @property {GUID} ID Cart list ID.\n * @property {string} ExternalID Cart list external ID.\n * @property {string} Name Cart name.\n * @property {string} ExternalUrl Cart list external URL.\n * @property {Date} ExportDate Cart list export date.\n * @property {Date} ModificationDate Cart list modification date.\n * @property {Date} SortingDate Cart list sorting date.\n */\n\n/**\n * Provides cart list DTO.\n * @typedef {Object} CartListDetailsModel\n * @property {GUID} ID Cart list ID.\n * @property {string} ExternalID Cart list external ID.\n * @property {string} Name Cart list name.\n * @property {string} ExternalUrl Cart list external URL.\n * @property {boolean} IsDeleted Flag that indicate is cart list was deleted.\n * @property {Date} ExportDate Cart list export date.\n * @property {Date} ModificationDate Cart list modification date.\n * @property {Date} SortingDate Cart list sorting date.\n * @property {CartItemValidationModel[]} ItemValidations Cart list's validation summary for the assigned order product(s).\n * @property {CartItemPriceModel[]} ItemPrices Cart list's pricing info for the assigned order product(s).\n */\n\n/**\n * Provides cart list model for create.\n * @typedef {Object} CartListCreateModel\n * @property {string} Name Cart list name. Required. Unique.\n * @property {string} ExternalID Cart list external ID. Optional.\n * @property {string} ExternalUrl Cart list external URL. Optional.\n */\n\n/**\n * Provides cart list DTO.\n * @typedef {Object} CartListModel\n * @property {GUID} ID Cart list ID.\n * @property {string} ExternalID Cart list external ID.\n * @property {string} Name Cart list name.\n * @property {string} ExternalUrl Cart list external URL.\n * @property {Date} ExportDate Cart list export date.\n * @property {Date} ModificationDate Cart list modification date.\n * @property {Date} SortingDate Cart list sorting date.\n * @property {number} ItemsCount Amount of the order products assigned to the cart list.\n */\n\n/**\n * Provides information that was took from the export cart web-hook.\n * @typedef {Object} CartListExportResponseModel\n * @property {string} ExternalUrl External URL from the cart export web-hook.\n * @property {string} RedirectUrl Redirect URL from the cart export web-hook.\n * @property {Date} ExportDate Export date from the cart export web-hook.\n */\n\n/**\n * Provides the result of the activity creation.\n * @typedef {Object} ActivityCreateResponseModel\n * @property {GUID} ActivityID The unique ID of the activity\n */\n\n/**\n * Provides a user's summary of orders.\n * @typedef {Object} UserOrdersSummaryModel\n * @property {number} RejectedOrderCount The number of rejected orders of the user.\n * @property {number} PendingApprovalOrderCount The number of orders pending for approval by the user.\n */\n\n/**\n * A representation of the file entity\n * @typedef {Object} FileInfoModel\n * @property {string} FileName The name of the file.\n * @property {number} Size The size of the file in KB, rounded up to the smallest following integer value.\n */\n\n/**\n * Added/updated Dial Value for FileAttachment.\n * @typedef {Object} OrderItemFileAttachmentPropertyModel\n * @property {FileInfoModel[]} FileInfoList Additional information on the file.\n * @property {string} ID The unique ID of the property.\n * @property {Object} Value The value of the property.\n */\n\n/**\n * @typedef {Object} DeliveryServicesModel\n * @property {GUID} ID\n * @property {string} Name\n */\n\nexport const OrdersTypes = {}","/**\n * globally unique identifier\n * @typedef {string} GUID\n */\n\n/**\n * Product types.\n * @enum {number}\n */\nconst ProductType = {\n /** Dynamic product. */\n Dynamic: 1,\n /** Static product. */\n Static: 2,\n /** Email product */\n Email: 3,\n /** Uploaded product. */\n Uploaded: 4,\n /** Composite product. */\n Composite: 5,\n /** Dynamic product with PURL. */\n DynamicWithPurl: 6,\n /** Email product with PURL. */\n EmailWithPurl: 7,\n /** Circle project's product. */\n CircleProject: 8,\n /** Print touchpoint's product. */\n PrintTouchPoint: 9,\n /** Email touchpoint's product. */\n EmailTouchPoint: 10,\n /** Web touchpoint's product. */\n WebTouchPoint: 11,\n /** PDF on-demand touchpoint's product. */\n PdfOnDemandTouchPoint: 12,\n /** Triggered email touchpoint's product. */\n TriggeredEmailTouchPoint: 13,\n /** Kit product. */\n Kit: 14,\n};\n\n/**\n * Enum values present async activity status\n * @enum {number}\n */\nconst ActivityStatus = {\n InProgress: 1,\n Completed: 2,\n Failed: 3,\n PartiallyFailed: 4,\n};\n\n/**\n * Enum values present uProduce job output format.\n * @enum {number}\n */\nconst OutputFormat = {\n Undefined: 0,\n PDF: 1,\n JPG: 2,\n};\n\n/**\n * Provides information about a product inventory.\n * @typedef {Object} ProductInventoryModel\n * @property {number} Quantity The number of units available in the inventory.\n * @property {boolean} AllowOutOfStockPurchase Indicates whether ordering is allowed, despite the inventory being out-of-stock.\n */\n\n/**\n * Provides information about a product unit type.\n * @typedef {Object} ProductUnitTypeModel\n * @property {string} Name The singular form of the product unit name (e.g. \"Box\", \"Item\", \"Pack\", \"Piece\").\n * @property {string} PluralName The plural form of the product unit name (e.g. \"Boxes\", \"Items\", \"Packs\", \"Pieces\").\n */\n\n/**\n * Provides information about a product unit.<br/> The unit can be a single item, multiple items or a pack of items.\n * @typedef {Object} ProductUnitModel\n * @property {number} ItemQuantity The number of items that make up the unit.\n * @property {ProductUnitTypeModel} ItemType The type of item.\n * @property {ProductUnitTypeModel} PackType The type of pack. The value is undefined (equals null) for units that are not sold in packs.\n */\n\n/**\n * Provides information about a product's price and tax.\n * @typedef {Object} ProductPriceModel\n * @property {number} Price The price of the product excluding tax, in the store's primary currency.\n * @property {number} Tax The tax of the product, in the store's primary currency.\n */\n\n/**\n * Provides information about the SEO configuration of a category or product.\n * @typedef {Object} SeoConfigurationModel\n * @property {string} Title The title of a webpage.\n * @property {string} Description The description of a webpage.\n */\n\n/**\n * Provides information about a product's quantity option.\n * @typedef {Object} ProductQuantityItemModel\n * @property {string} Name The quantity option name.\n * @property {number} Value The quantity option value.\n */\n\n/**\n * Provides information about a product's quantity configuration.\n * @typedef {Object} ProductQuantityModel\n * @property {number} Minimum The minimum number of units that can be purchased.\n * @property {number} Maximum The maximum number of units that can be purchased.\n * @property {boolean} Changeable Indicates whether the shopper can select the number of units to be purchased.\n * @property {ProductQuantityItemModel[]} Options The list of the available quantities.\n */\n\n/**\n * Provides information about a product's configuration.\n * @typedef {Object} ProductConfigurationModel\n * @property {boolean} AllowQuickAddToCart Indicates whether the shopper can quick add product to cart from list\n * @property {ProductQuantityModel} Quantity The configuration of the product's quantity.\n * @property {ProductQuantityModel[]} Properties The properties of the product.\n */\n\n/**\n * Provides information about a product.\n * @typedef {Object} ProductModel\n * @property {GUID} ID The unique ID of the product.\n * @property {number} FriendlyID The friendly ID of the product.\n * @property {string} Name The name of the product.\n * @property {string} ShortDescription The short description of the product.\n * @property {string} Description The full description of the product.\n * @property {string} ExternalID The ID of the product in an external application.\n * @property {string} CatalogNumber The catalog number of the product. The value is undefined (equals null) if the user does not have permission to view the catalog number.\n * @property {boolean} HasPricing Indicates whether a price was defined for the product.\n * @property {string} ImageUrl The URL of the product image.\n * @property {string[]} Thumbnails The product thumbnails.\n * @property {ProductInventoryModel} Inventory The inventory of the product. The value is undefined (equals null) if the user does not have permission to view the product inventory.\n * @property {ProductUnitModel} Unit The unit of the product.\n * @property {number} MinimumQuantity The minimum number of units that can be purchased.\n * @property {ProductPriceModel} MinimumPrice The minimum price of the product. The value is undefined (equals null) if the user does not have permission to view the product price.\n * @property {ProductType} Type The type of the product.\n * @property {ProductConfigurationModel} Configuration The configuration of the product.\n */\n\n/**\n * Provides information about a product, including additional data such as SEO configuration.\n * @typedef {Object} ProductDetailsModel\n * @property {SeoConfigurationModel} SeoConfiguration The SEO configuration.\n * @property {GUID} ID The unique ID of the product.\n * @property {number} FriendlyID The friendly ID of the product.\n * @property {string} Name The name of the product.\n * @property {string} ShortDescription The short description of the product.\n * @property {string} Description The full description of the product.\n * @property {string} ExternalID The ID of the product in an external application.\n * @property {string} CatalogNumber The catalog number of the product. The value is undefined (equals null) if the user does not have permission to view the catalog number.\n * @property {boolean} HasPricing Indicates whether a price was defined for the product.\n * @property {string} ImageUrl The URL of the product image.\n * @property {string[]} Thumbnails The product thumbnails.\n * @property {ProductInventoryModel} Inventory The inventory of the product. The value is undefined (equals null) if the user does not have permission to view the product inventory.\n * @property {ProductUnitModel} Unit The unit of the product.\n * @property {number} MinimumQuantity The minimum number of units that can be purchased.\n * @property {ProductPriceModel} MinimumPrice The minimum price of the product. The value is undefined (equals null) if the user does not have permission to view the product price.\n * @property {ProductType} Type The type of the product.\n * @property {ProductConfigurationModel} Configuration The configuration of the product.\n */\n\n/**\n * Provides a list of products according to the pagination.\n * @typedef {Object} ProductListModel\n * @property {ProductModel[]} Products The list of the products according to the pagination.\n * @property {number} Count The total number of products without pagination.\n */\n\n/**\n * Provides information about thumbnail.\n * @typedef {Object} ThumbnailModel\n * @property {string} Url The URL of the thumbnail.\n * @property {string} DisplayName The name of the thumbnail.\n */\n\n/**\n * Provides information about thumbnails.\n * @typedef {Object} ThumbnailsModel\n * @property {ThumbnailModel[]} Thumbnails A thumbnail list representation.\n */\n\n/**\n * Added/updated Dial Value\n * @typedef {Object} OrderItemPropertyModel\n * @property {string} ID The unique ID of the property.\n * @property {Object} Value The value of the property.\n */\n\n/**\n * Request model with the data for the preview (fast-proof or immediate) uProduce job.\n * @typedef {Object} CreatePreviewRequestModel\n * @property {OrderItemPropertyModel[]} Properties Customization values\n */\n\n/**\n * Provides DTO for preview files.\n * @typedef {Object} OutputItemModel\n * @property {string} Url Preview file URL.\n * @property {string} Title Localized title for the proof output file\n */\n\n/**\n * Provides preview DTO.\n * @typedef {Object} PreviewResponseModel\n * @property {GUID} PreviewID Preview ID.\n * @property {ActivityStatus} Status Production status.\n * @property {OutputFormat} Format Preview format.\n * @property {OutputItemModel[]} Items Collection of the preview files.\n */\n\n/**\n * Provides proof DTO.\n * @typedef {Object} ProofResponseModel\n * @property {GUID} ProofID Preview ID.\n * @property {ActivityStatus} Status Production status.\n * @property {OutputFormat} Format Preview format.\n * @property {OutputItemModel[]} Items Collection of the preview files.\n */\n\n/**\n * Provides information about proof status\n * @typedef {Object} ProofStatusModel\n * @property {GUID} OrderItemID The unique ID of the order item\n * @property {ActivityStatus} Status The status of the proof\n * @property {string} ThumbnailUrl The thumbnail url of the proof\n */\n\nexport const ProductTypes = {}","/**\n * globally unique identifier\n * @typedef {string} GUID\n */\n\n/**\n * The types of title tags.\n * @enum {number}\n */\nconst SeoTitleTagType = {\n /** Do not add tag to titles of webpages. */\n NotIncluded: 1,\n /** Add tag as the suffix to the webpage title. */\n Suffix: 2,\n /** Add tag as the prefix to the webpage title. */\n Prefix: 3,\n};\n\n/**\n * Defines whether the tax appears as part of the price.\n * @enum {number}\n */\nconst TaxFormatType = {\n /** Price does not include tax. */\n Exclude: 1,\n /** Price includes tax. */\n Include: 2,\n /** Custom tax format built using the following placeholders: {Price}, {Tax} and {PriceIncludingTax}.<br/> E.g. \"{Price} + {Tax} VAT = {PriceIncludingTax}\" */\n Custom: 3,\n};\n\n/**\n * Store types.\n * @enum {number}\n */\nconst StoreType = {\n /** Business to business store. */\n B2B: 1,\n /** Business to customer store. */\n B2C: 2,\n /** In this store type uStore integrates with external e-commerce systems. */\n uStoreConnect: 3,\n /** In this store type uStore integrates with external e-commerce systems with extended functionality. */\n uStoreConnectEnterprise: 4,\n};\n\n/**\n * Gender options.\n * @enum {number}\n */\nconst GenderType = {\n /** Male. */\n Male: 1,\n /** Female. */\n Female: 2,\n};\n\n/**\n * Provides information about the SEO configuration of a store.\n * @typedef {Object} StoreSeoConfigurationModel\n * @property {string} TitleTag The tag that is added to the titles of all webpages of the store.\n * @property {SeoTitleTagType} TitleTagType The type of title tag.\n * @property {string} Title The title of a webpage.\n * @property {string} Description The description of a webpage.\n */\n\n/**\n * Provides information about a store.\n * @typedef {Object} StoreModel\n * @property {GUID} ID The unique ID of the store.\n * @property {number} FriendlyID The friendly ID of the store.\n * @property {string} Name The name of the store.\n * @property {string} Description The description of the store.\n * @property {string} ExternalID The ID of the store in an external application.\n * @property {GUID} PrimaryCurrencyID The unique ID of the primary currency in the store. The billing will always be performed using the primary currency. Secondary currencies are used for display only.\n * @property {boolean} ShowCurrencyCode Determines whether to show currency abbreviation.\n * @property {boolean} RequireOrderApproval Indicates if orders in the store should be approved prior to submission.\n * @property {TaxFormatType} TaxFormatType Defines whether the tax appears as part of the price in the store products.\n * @property {string} TaxFormat The tax display format built using the following placeholders: {Price}, {Tax} and {PriceIncludingTax}.\n * @property {StoreSeoConfigurationModel} SeoConfiguration The SEO configuration of the store.\n * @property {StoreType} StoreType The store type.\n */\n\n/**\n * Provides information about a user's role in a store.\n * @typedef {Object} UserRolesModel\n * @property {boolean} Shopper Indicates if the user has permission to purchase products in the store.\n * @property {boolean} Approver Indicated whether the user has permissions to approve or disapprove purchases in the store.\n */\n\n/**\n * Provides information about a user group.\n * @typedef {Object} UserGroupModel\n * @property {string} Name The name of the user group.\n */\n\n/**\n * Provides information about a custom user property.\n * @typedef {Object} CustomUserPropertyModel\n * @property {number} ID The ID of the custom user property.\n * @property {string} Name The name of the custom user property.\n * @property {string} Value The value of the custom user property.\n */\n\n/**\n * Provides information about a user.\n * @typedef {Object} UserModel\n * @property {GUID} ID The unique ID of the user.\n * @property {number} FriendlyID The friendly ID of the user.\n * @property {string} FirstName The user's first name.\n * @property {string} LastName The user's last name.\n * @property {string} Email The user's email address.\n * @property {string} ExternalID The ID of the user in an external application.\n * @property {UserRolesModel} Roles The user's role(s) in the store.\n * @property {UserGroupModel[]} Groups The list of user groups to which the user belongs.\n * @property {string} PhoneNumber The user's phone number.\n * @property {string} MobileNumber The user's mobile number.\n * @property {string} FaxNumber The user's fax number.\n * @property {string} CompanyName The user's company name.\n * @property {string} Department The user's department.\n * @property {string} JobTitle The user's job title.\n * @property {GenderType} Gender The user's gender.\n * @property {Date} Birthday The user's birthday.\n * @property {CustomUserPropertyModel[]} CustomProperties The user's custom properties.\n * @property {boolean} IsAnonymous Indicates whether the user is anonymous.\n * @property {string} Preferences User's preferences for UI based on the store.\n */\n\n/**\n * Provides information about a culture.\n * @typedef {Object} CultureModel\n * @property {GUID} ID The unique ID of the culture.\n * @property {number} FriendlyID The friendly ID of the culture.\n * @property {string} Name The name of the culture as written in the culture's language (e.g. \"Español\").\n * @property {string} LanguageCode The language code according to the ISO 3166-1 standard (e.g. \"en-US\").\n * @property {string} CountryCode The country code according to the ISO 3166-1 standard (e.g. \"US\").\n * @property {string} CurrencyFormat The currency display format built using the following placeholders:\n * {Amount} and {Symbol}.\n * E.g.: \"{Symbol}{Amount}\" will be shown as $100\n * \"{Amount}{Symbol}\" will be shown as 100$\n * @property {string} DecimalSeparator The character used as the decimal separator in the prices. Usually it is a comma or a period.\n * @property {number} DecimalPlaces The number of decimal places in the price after the decimal separator.\n E.g.: $2.50 will be shown if the value is 2 and $2.5 will be shown if the value is 1.\n */\n\n/**\n * Provides information about a currency.\n * @typedef {Object} CurrencyModel\n * @property {GUID} ID The unique ID of the currency.\n * @property {number} FriendlyID The friendly ID of the currency.\n * @property {string} Name The name of the currency.\n * @property {string} Symbol The symbol of the currency.\n * @property {string} Code The currency code according to the ISO 4217 standard (e.g. \"USD\").\n * @property {number} ConversionRate The conversion rate from the store's primary currency to this currency. E.g. If the primary currency is USD, this currency is EUR and the conversion rate is 0.886285, then 1 USD = 0.886285 EUR.\n */\n\n/**\n * Provides information about the cart items count.\n * @typedef {Object} CartIndicatorModel\n * @property {number} ItemsCount The total number of items in the cart.\n */\n\n/**\n * Provides information about a security token (a unique and non-guessable value) that is used for user authentication.\n * @typedef {Object} SecurityTokenModel\n * @property {string} Token The security token.\n */\n\nexport const StoreTypes = {}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","class Context {\n constructor () {\n this.context = {}\n }\n\n set (obj) {\n this.context = Object.assign({}, this.context, obj)\n }\n\n getValue (key) {\n return this.context[key]\n }\n\n setValue (key, value) {\n this.context[key] = value\n }\n\n clear () {\n this.context = {}\n }\n\n get () {\n return this.context\n }\n}\n\nexport default new Context()\n","\nclass Logger {\n get logger () {\n if (!this._logger) {\n this._logger = require('logdown')('ustore')\n this._logger.isEnabled = process.env.NODE_ENV !== 'production'\n }\n return this._logger\n }\n\n log (...args) {\n this.logger.log(...args)\n }\n\n warn (...args) {\n this.logger.warn(...args)\n }\n\n info (...args) {\n this.logger.info(...args)\n }\n\n error (...args) {\n this.logger.error(...args)\n }\n}\n\nexport default new Logger()\n","import contextService from '../services/context'\nimport logger from '../services/logger'\n\nfunction createHeaders (options) {\n // get parameters from coreStateParams to init data in header\n const token = contextService.getValue('securityToken')\n const contentLanguage = contextService.getValue('languageCode')\n\n if (!options.static) {\n const headers = Object.assign({}, {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'Accept-Language': contentLanguage\n })\n\n if (options.auth) {\n Object.assign(headers, { 'Authorization': `uStore ${token}` })\n }\n\n return headers\n }\n\n return {}\n}\n\nasync function formatResponse (callOptions, response) {\n try {\n if (callOptions.download) {\n return response.blob()\n }\n\n if (callOptions.json) {\n return await response.json()\n }\n return await response.text()\n } catch (e) {\n logger.error('Error on formatting response : ', callOptions, response)\n return response\n }\n}\n\nconst http = ['get', 'post', 'put', 'delete'].reduce(function (map, method) {\n map[method] = async function (url, requestBody, options) {\n const callOptions = Object.assign({\n auth: true,\n json: true,\n static: false,\n download: false\n }, options)\n\n const reqOptions = {\n headers: createHeaders(callOptions),\n method,\n body: requestBody ? JSON.stringify(requestBody) : undefined\n }\n\n const res = await fetch(`${url}`, reqOptions)\n logger.info('Request to API : ', url, reqOptions)\n\n const formattedResponse = await formatResponse(callOptions, res)\n logger.info('Response from API : ', JSON.stringify(formattedResponse))\n\n if (!res.ok) {\n if (formattedResponse.TypeName === 'OperationFailed') {\n throw formattedResponse\n }\n try {\n logger.error('Error in request : ', url, reqOptions)\n if (res.status === 404 && options.download) {\n return null\n }\n if (formattedResponse.TypeName === 'AccessDenied') {\n contextService.getValue('onAccessDenied')()\n } else if (formattedResponse.TypeName === 'ResourceNotAvailable.Store') {\n contextService.getValue('onStoreNotAvailable')()\n } else contextService.getValue('onGeneralError')()\n throw formattedResponse\n } catch (error) {\n // logger.info('General Error')\n if (!error || !error.TypeName) contextService.getValue('onGeneralError')()\n\n throw formattedResponse\n }\n }\n return formattedResponse\n }\n\n return map\n}, {})\n\nexport default http\n","export default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nexport default function _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\n\n/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nfunction formatProdErrorMessage(code) {\n return \"Minified Redux error #\" + code + \"; visit https://redux.js.org/Errors?code=\" + code + \" for the full message or \" + 'use the non-minified dev environment for full errors. ';\n}\n\n// Inlined version of the `symbol-observable` polyfill\nvar $$observable = (function () {\n return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n})();\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n INIT: \"@@redux/INIT\" + randomString(),\n REPLACE: \"@@redux/REPLACE\" + randomString(),\n PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n var proto = obj;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\n// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nfunction miniKindOf(val) {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n var type = typeof val;\n\n switch (type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'function':\n {\n return type;\n }\n }\n\n if (Array.isArray(val)) return 'array';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n var constructorName = ctorName(val);\n\n switch (constructorName) {\n case 'Symbol':\n case 'Promise':\n case 'WeakMap':\n case 'WeakSet':\n case 'Map':\n case 'Set':\n return constructorName;\n } // other\n\n\n return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\n\nfunction ctorName(val) {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isError(val) {\n return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\n\nfunction isDate(val) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\n\nfunction kindOf(val) {\n var typeOfVal = typeof val;\n\n if (process.env.NODE_ENV !== 'production') {\n typeOfVal = miniKindOf(val);\n }\n\n return typeOfVal;\n}\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n }\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : \"Expected the enhancer to be a function. Instead, received: '\" + kindOf(enhancer) + \"'\");\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : \"Expected the root reducer to be a function. Instead, received: '\" + kindOf(reducer) + \"'\");\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : \"Expected the listener to be a function. Instead, received: '\" + kindOf(listener) + \"'\");\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n currentListeners = null;\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changedâ€. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : \"Actions must be plain objects. Instead, the actual type was: '\" + kindOf(action) + \"'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.\");\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : 'Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : \"Expected the nextReducer to be a function. Instead, received: '\" + kindOf(nextReducer));\n }\n\n currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n\n dispatch({\n type: ActionTypes.REPLACE\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : \"Expected the observer to be an object. Instead, received: '\" + kindOf(observer) + \"'\");\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nvar legacy_createStore = createStore;\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return \"The \" + argumentName + \" has unexpected type of \\\"\" + kindOf(inputState) + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n\n if (unexpectedKeys.length > 0) {\n return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n }\n\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle '\" + ActionTypes.INIT + \"' or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n // keys multiple times.\n\n var unexpectedKeyCache;\n\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination(state, action) {\n if (state === void 0) {\n state = {};\n }\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : \"When called with an action of type \" + (actionType ? \"\\\"\" + String(actionType) + \"\\\"\" : '(unknown type)') + \", the slice reducer for key \\\"\" + _key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\");\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(this, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : \"bindActionCreators expected an object or a function, but instead received: '\" + kindOf(actionCreators) + \"'. \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n }\n\n var boundActionCreators = {};\n\n for (var key in actionCreators) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function () {\n var store = createStore.apply(void 0, arguments);\n\n var _dispatch = function dispatch() {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch() {\n return _dispatch.apply(void 0, arguments);\n }\n };\n var chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(void 0, chain)(store.dispatch);\n return _objectSpread(_objectSpread({}, store), {}, {\n dispatch: _dispatch\n });\n };\n };\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore, legacy_createStore };\n","import { compose } from 'redux';\nfunction extensionComposeStub() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n if (funcs.length === 0) return undefined;\n if (typeof funcs[0] === 'object') return compose;\n return compose(...funcs);\n}\nexport const composeWithDevTools = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : extensionComposeStub;\nexport const devToolsEnhancer = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function () {\n return function (noop) {\n return noop;\n };\n};\nexport { composeWithDevTools as composeWithDevToolsDevelopmentOnly, devToolsEnhancer as devToolsEnhancerDevelopmentOnly } from './developmentOnly';\nexport { composeWithDevTools as composeWithDevToolsLogOnly, devToolsEnhancer as devToolsEnhancerLogOnly } from './logOnly';\nexport { composeWithDevTools as composeWithDevToolsLogOnlyInProduction, devToolsEnhancer as devToolsEnhancerLogOnlyInProduction } from './logOnlyInProduction';","/** A function that accepts a potential \"extra argument\" value to be injected later,\r\n * and returns an instance of the thunk middleware that uses that value\r\n */\nfunction createThunkMiddleware(extraArgument) {\n // Standard Redux middleware definition pattern:\n // See: https://redux.js.org/tutorials/fundamentals/part-4-store#writing-custom-middleware\n var middleware = function middleware(_ref) {\n var dispatch = _ref.dispatch,\n getState = _ref.getState;\n return function (next) {\n return function (action) {\n // The thunk middleware looks for any functions that were passed to `store.dispatch`.\n // If this \"action\" is really a function, call it and return the result.\n if (typeof action === 'function') {\n // Inject the store's `dispatch` and `getState` methods, as well as any \"extra arg\"\n return action(dispatch, getState, extraArgument);\n } // Otherwise, pass the action down the middleware chain as usual\n\n\n return next(action);\n };\n };\n };\n\n return middleware;\n}\n\nvar thunk = createThunkMiddleware(); // Attach the factory function so users can create a customized version\n// with whatever \"extra arg\" they want to inject into their thunks\n\nthunk.withExtraArgument = createThunkMiddleware;\nexport default thunk;","export default {\n currentStore: null,\n currentUser: null,\n initState: true,\n customState: {},\n cultures: [],\n currentCulture: null,\n currencies: [],\n currentCurrency: null,\n assets: [],\n}\n","export const LOAD_CURRENT_STORE = 'LOAD_CURRENT_STORE'\nexport const LOAD_CURRENT_USER = 'LOAD_CURRENT_USER'\nexport const LOAD_USER_ORDERS_SUMMARY = 'LOAD_USER_ORDERS_SUMMARY'\nexport const LOAD_PRODUCTS = 'LOAD_PRODUCTS'\nexport const SET_CUSTOM_VAR = 'SET_CUSTOM_VAR'\nexport const DELETE_CUSTOM_VAR = 'DELETE_CUSTOM_VAR'\nexport const MERGE_CUSTOM_STATE = 'MERGE_CUSTOM_STATE'\nexport const LOAD_CATEGORIES = 'LOAD_CATEGORIES'\nexport const LOAD_CATEGORIES_TREE = 'LOAD_CATEGORIES_TREE'\nexport const LOAD_SUB_CATEGORIES = 'LOAD_SUB_CATEGORIES'\nexport const LOAD_CULTURES = 'LOAD_CULTURES'\nexport const LOAD_CURRENT_CATEGORY = 'LOAD_CURRENT_CATEGORY'\nexport const LOAD_CART_ITEMS_COUNT = 'LOAD_CART_ITEMS_COUNT'\nexport const LOAD_CURRENCIES = 'LOAD_CURRENCIES'\nexport const SET_CURRENT_CURRENCY = 'SET_CURRENT_CURRENCY'\nexport const SET_CURRENT_CULTURE = 'SET_CURRENT_CULTURE'\nexport const SET_CURRENT_CULTURE_BY_LANGUAGE = 'SET_CURRENT_CULTURE_BY_LANGUAGE'\nexport const CLEAR_STATE = 'CLEAR_STATE'\nexport const GET_ASSETS = 'GET_ASSETS'\nexport const GET_ASSET = 'GET_ASSET'\nexport const DELETE_ASSET = 'DELETE_ASSET'\nexport const UPLOAD_ASSET = 'UPLOAD_ASSET'\n","import deepcopy from 'deepcopy'\n\nexport const convertObjectToQueryString = (obj) =>\n Object.entries(obj).map(\n ([key, value]) => key && value ? `${key}=${encodeURIComponent(value)}` : ''\n ).filter(s => !!s).join('&')\n\nexport const merge = (o1, o2) => {\n const o = deepcopy(o1)\n for (let n in o2) {\n if (typeof o2[n] !== 'object' || o2[n] === null) {\n o[n] = o2[n]\n } else if (Array.isArray(o2[n])) {\n o[n] = [...o2[n]]\n } else {\n o[n] = o[n] ? merge(o[n], o2[n]) : merge({}, o2[n])\n }\n }\n return o\n}\n\nexport const parseStorePreferences = (storePreferences) => {\n let parsedStorePreferences = {}\n try {\n parsedStorePreferences = (storePreferences || 'cartSorting=date').split(';').reduce((acc, curr) => {\n const [key, value] = curr.split('=')\n acc[key] = value\n return acc\n }, {})\n } catch (e) {\n console.error(e)\n }\n return parsedStorePreferences\n}\n\nexport const stringifyStorePreferences = (storePreferences = {}) => {\n let stringifiedStorePreferences = ''\n try {\n stringifiedStorePreferences = Object.entries(storePreferences).map(\n ([key, value]) => `${key}=${value}`\n ).join(';')\n } catch (e) {\n console.error(e)\n }\n return stringifiedStorePreferences\n}\n","\nimport * as types from './actionsTypes'\nimport defaultState from './defaultState'\nimport { merge, parseStorePreferences } from '../utils/utils'\n\n\n// REDUCERS\nexport default (state = defaultState, action) => {\n switch (action.type) {\n case '@@INIT_STATE':\n return Object.assign({}, state, action.data, { initState: false })\n case types.LOAD_CURRENT_STORE:\n return Object.assign({}, state, { currentStore: action.data })\n case types.LOAD_CURRENT_USER:\n const currentUser = action.data\n currentUser.Preferences = parseStorePreferences(currentUser?.Preferences)\n return Object.assign({}, state, { currentUser })\n case types.LOAD_USER_ORDERS_SUMMARY:\n return Object.assign({}, state, { userOrdersSummary: action.data })\n case types.LOAD_CATEGORIES:\n return Object.assign({}, state, { categories: action.data })\n case types.LOAD_CATEGORIES_TREE:\n const categoriesTree = action.data\n const firstLevelCategories = categoriesTree.map((node) => node.Category)\n return Object.assign({}, state, { categoriesTree: categoriesTree, categories: firstLevelCategories })\n case types.LOAD_SUB_CATEGORIES:\n return Object.assign({}, state, { subCategories: action.data })\n case types.LOAD_CULTURES:\n return Object.assign({}, state, { cultures: action.data })\n case types.LOAD_CURRENCIES:\n return Object.assign({}, state, { currencies: action.data })\n case types.LOAD_CART_ITEMS_COUNT:\n return Object.assign({}, state, { cartItemsCount: action.data })\n case types.SET_CURRENT_CULTURE:\n return Object.assign({}, state, { currentCulture: action.data })\n case types.SET_CURRENT_CULTURE_BY_LANGUAGE:\n const culture = action.data && state.cultures.length > 0 ? state.cultures.filter(c => c.LanguageCode === action.data)[0] : null\n return Object.assign({}, state, { currentCulture: culture })\n case types.SET_CURRENT_CURRENCY:\n const currency = action.data ? action.data : (state.currencies.length > 0 ? state.currencies.filter(c => c.ID === state.currentStore.PrimaryCurrencyID)[0] : null)\n return Object.assign({}, state, { currentCurrency: currency })\n case types.LOAD_CURRENT_CATEGORY:\n return Object.assign({}, state, { currentCategory: action.data, subCategories: null })\n case types.LOAD_PRODUCTS:\n return Object.assign({}, state, { products: action.data.products })\n case types.SET_CUSTOM_VAR:\n const mergedCustomState = Object.assign(state.customState, action.data)\n return Object.assign({}, state, { customState: mergedCustomState })\n case types.DELETE_CUSTOM_VAR:\n const customStateDup = Object.assign({}, state.customState)\n delete customStateDup[action.data.name]\n return Object.assign({}, state, { customState: customStateDup })\n case types.MERGE_CUSTOM_STATE:\n return Object.assign({}, state, { customState: merge(state.customState, action.data) })\n case types.CLEAR_STATE:\n return Object.assign({}, state, defaultState)\n case types.GET_ASSETS:\n return Object.assign({}, state, { assets: action.data })\n case types.GET_ASSET:\n return Object.assign({}, state, { selectedAsset: action.data })\n case types.DELETE_ASSET:\n return Object.assign({}, state, { assets: state.assets.filter(a => a.AssetID !== action.data) })\n case types.UPLOAD_ASSET:\n return Object.assign({}, state, { assets: [action.data, ...state.assets] })\n }\n\n return state\n}\n","import { initStore } from '../redux/store'\nimport { CLEAR_STATE, SET_CUSTOM_VAR, DELETE_CUSTOM_VAR, MERGE_CUSTOM_STATE } from '../redux/actionsTypes'\n\n/**\n * Represents the state management for the provider.\n * This class provides methods to interact with the state store.\n * @class\n */\nclass ProviderState {\n /**\n * Constructs a new ProviderState instance.\n * Initializes the state store.\n */\n constructor () {\n this.store = initStore()\n }\n\n /**\n * Retrieves the current state from the store.\n * @returns {Object} The current state object.\n */\n get () {\n return this.store.getState()\n }\n\n /**\n * Sets the state in the store.\n * @param {Object} state - The new state to set.\n */\n set (state) {\n this.store.dispatch({ type: '@@INIT_STATE', data: state })\n }\n\n /**\n * Sets the initial state in the store.\n */\n setInitState () {\n this.store.dispatch({ type: '@@INIT_STATE' })\n }\n\n /**\n * Retrieves the dispatch function from the store.\n * @returns {Function} The dispatch function.\n */\n get dispatch () {\n return this.store.dispatch\n }\n\n /**\n * Retrieves the subscribe function from the store.\n * @returns {Function} The subscribe function.\n */\n get subscribe () {\n return this.store.subscribe\n }\n\n /**\n * Sets a custom state variable in the store.\n * @param {string} name - The name of the custom variable.\n * @param {*} value - The value to set for the custom variable.\n */\n setCustomState (name, value) {\n this.store.dispatch({ type: SET_CUSTOM_VAR, data: { [name]: value } })\n }\n\n /**\n * Sets multiple custom state variables in the store.\n * @param {Object} obj - An object containing key-value pairs of custom variable names and values.\n */\n setBulkCustomState (obj) {\n this.store.dispatch({ type: SET_CUSTOM_VAR, data: obj })\n }\n\n /**\n * Deletes a custom state variable from the store.\n * @param {string} name - The name of the custom variable to delete.\n */\n deleteCustomState (name) {\n this.store.dispatch({ type: DELETE_CUSTOM_VAR, data: { name } })\n }\n\n /**\n * Merges new state into the custom state in the store.\n * @param {Object} newState - The new state object to merge.\n */\n mergeCustomState (newState) {\n this.store.dispatch({ type: MERGE_CUSTOM_STATE, data: newState })\n }\n\n /**\n * Clears the state in the store.\n */\n clear () {\n this.store.dispatch({ type: CLEAR_STATE, data: {} })\n }\n}\n\nexport default new ProviderState()\n","import { createStore, applyMiddleware } from 'redux'\nimport { composeWithDevTools } from '@redux-devtools/extension'\nimport thunkMiddleware from 'redux-thunk'\nimport defaultState from './defaultState'\nimport reducer from './reducer'\n\nexport const initStore = (initialState = defaultState) => {\n // the following lines are not duplicate\n // the build will select the correct line according to the type of the build\n // ==== DO NOT DELETE ====\n return createStore(reducer, initialState, composeWithDevTools(applyMiddleware(thunkMiddleware)))\n return createStore(reducer, initialState, applyMiddleware(thunkMiddleware))\n}\n","\nclass Config {\n set (obj) {\n this.config = obj\n this.configInit = true\n }\n\n getValue (key) {\n return this.config[key]\n }\n\n isInit () {\n return this.configInit\n }\n\n get () {\n return this.config\n }\n}\n\nexport default new Config()\n","import providerState from './providerState'\n\nclass Binding {\n constructor () {\n this.webComponents = {}\n this.componentId = 1\n this.state = providerState\n\n // subscribe to store changes and set model attribute on all\n // connected components\n this.state.store.subscribe(() => {\n setTimeout(() => {\n const model = JSON.stringify(this.state.get())\n Object.values(this.webComponents).forEach(c => c.setAttribute('model', model))\n }, 0)\n })\n }\n\n // register a new component set an binding id to allow removing the\n // component when unregistering\n // listening to the action event and dispatching it to redux store.\n register (component) {\n const model = JSON.stringify(this.state.get())\n component.ustoreBindingId = this.componentId\n component.addEventListener('action', ({ data }) => this.state.dispatch(data))\n this.webComponents[this.componentId] = component\n component.setAttribute('model', model)\n this.componentId++\n }\n\n unregister (ustoreBindingId) {\n delete this.webComponents[ustoreBindingId]\n }\n}\n\nexport default new Binding()\n","import contextService from '../services/context'\n\nconst httpUpload = async (url, uploadedValue) => {\n const token = contextService.getValue('securityToken')\n const contentLanguage = contextService.getValue('languageCode')\n\n const myHeaders = new Headers()\n const formData = new FormData()\n myHeaders.append('Authorization', `uStore ${token}`)\n myHeaders.append('Accept-Language', contentLanguage)\n\n uploadedValue.map((item) => formData.append(encodeURIComponent(item.name), item, item.name))\n\n const requestOptions = {\n method: 'POST',\n headers: myHeaders,\n body: formData,\n redirect: 'follow'\n }\n\n const promises = await fetch(url, requestOptions)\n .then(response => response.json())\n .catch(error => console.log('error uploading', error))\n return Promise.all([promises])\n}\n\nexport default httpUpload\n","import http from './http'\nimport httpUpload from './httpUpload'\nimport httpDeleteFiles from './httpDeleteFiles'\nimport config from '../services/config'\n\nconst {\n GUID,\n CartModel,\n CartListModel,\n CartItemModel,\n OrderItemModel,\n CartPriceModel,\n CartItemUpdateModel,\n OrderItemPriceModel,\n CartListDetailsModel,\n UserOrdersSummaryModel,\n CartItemValidationModel,\n WishListItemUpdateModel,\n CartListCreateResponseModel,\n ActivityCreateResponseModel,\n OrderItemFileAttachmentPropertyModel,\n } = require('./../types/orders.js')\n\n/**\n * Gets the summary of orders of the currently logged-in user, who is identified by the provided security token.\n * @returns {Promise<UserOrdersSummaryModel>} The summary of the orders of the currently logged in user.\n */\nexport const getUserOrdersSummary = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/summary`)\n}\n\n/**\n * Creates a draft order item of a product.\n * @method\n * @param {string} productID The unique ID of the product.\n * @returns {Promise<OrderItemModel>} Returns the created order item.\n */\nexport const addOrderItem = async (productID) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/draft/items?productID=${productID}`)\n}\n\n/**\n * Gets the order item that has not been submitted by its unique ID.\n * @method\n * @param {GUID} orderItemID The unique ID of the order item.\n * @returns {Promise<OrderItemModel>} Returns the requested order item.\n */\nexport const getOrderItem = async (orderItemID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}`)\n}\n\n/**\n * Updates the order item that has not been submitted.\n * @method\n * @param {GUID} orderItemID The unique ID of the order item.\n * @param {OrderItemModel} orderItem The order item model.\n * @returns {Promise<OrderItemModel>} Returns the requested order item.\n */\nexport const updateOrderItem = async (orderItemID, orderItem) => {\n return await http.put(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}`, orderItem)\n}\n\n/**\n * Gets the price of the order item that has not been submitted.\n * @method\n * @param {string} orderItemID The unique ID of the order item.\n * @param {OrderItemModel} orderItem Provides information about an order item.\n * @returns {Promise<OrderItemPriceModel>} Returns the price of the provided order item model.\n */\nexport const getPriceOrderItem = async (orderItemID, orderItem) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/price/calculate`, orderItem)\n}\n/**\n * Reorders the submitted order item.\n * @method\n * @param {string} orderItemID The unique ID of the submitted order item.\n * @returns {Promise<OrderItemModel>} Returns order item.\n */\nexport const reorder = async (orderItemID) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/submitted/items/${orderItemID}/reorder`)\n}\n\n/**\n * Gets the information about the last submitted order item of a product.\n * @method\n * @param {string} productID The unique ID of the product.\n * @returns {Promise<OrderItemPriceModel>} Returns the requested information about the last submitted order item.\n */\nexport const getLastOrder = async (productID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/submitted/items/last/status?productID=${productID}`)\n}\n\n/**\n * Moves the order item to the user's shopping cart.\n * @method\n * @param {string} orderItemID The unique ID of the order item.\n * @returns {Promise<void>}\n */\nexport const addToCart = async (orderItemID) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/addToCart`)\n}\n\n/**\n * Moves the order item to the user's wish list\n * @method\n * @param {string} orderItemID The unique ID of the order item.\n * @returns {Promise<void>}\n */\nexport const saveForLater = async (orderItemID) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/saveForLater`)\n}\n\n/**\n * Gets collection of delivery services\n * @typedef MailingServicesModel\n * @property {DeliveryServicesModel[]} MailingServices Collection of delivery services\n */\n\n/**\n * Gets collection of delivery services\n * @param {string} orderItemID The unique ID of the order item.\n * @returns {Promise<MailingServicesModel>} Returns collection of delivery services\n */\nexport const getDeliveryServices = async (orderItemID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/deliveryServices`)\n}\n\nexport const getProperties = async (orderItemID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/properties/form`)\n}\n\nexport const updateProperties = async (orderItemID, data) => {\n return await http.put(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/properties/form`, data)\n}\n\nexport const updatePropertiesState = async (orderItemID, data) => {\n return await http.put(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/properties/form/state`, data)\n}\n\n/**\n * Appends files to the order item property.\n * @param {GUID} orderItemID The unique ID of the order item.\n * @param {GUID} propertyID The unique ID of the property.\n * @param {File} data\n * @returns {Promise<OrderItemFileAttachmentPropertyModel>}\n */\nexport const uploadFile = async (orderItemID, propertyID, data) => {\n return await httpUpload(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/properties/${propertyID}/files`, data)\n}\n\n/**\n * Delete files of the order item property\n * @param {GUID} orderItemID The unique ID of the order item.\n * @param {GUID} propertyID The unique ID of the property.\n * @param {string[]} names File names collection.\n * @returns {Promise<OrderItemFileAttachmentPropertyModel>}\n */\nexport const deleteFiles = async (orderItemID, propertyID, names) => {\n return await httpDeleteFiles(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/properties/${propertyID}/files?${names}`)\n}\n\n/**\n * @typedef FilesTypeModel\n * @property {string} MimeType The MIME type of the file.\n * @property {string} Path The path to the file.\n */\n\n/**\n * @typedef FileRepositoriesDetails\n * @property {FilesTypeModel[]} Files The array of files belonging to the repository.\n * @property {GUID} ID The unique identifier of the repository.\n * @property {string} Name The name of the repository.\n */\n\n/**\n * Gets repository details\n * @param {GUID} guid The unique ID\n * @returns {Promise<FileRepositoriesDetails>}\n */\nexport const getRepositoryDetails = async (guid) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/system/fileRepositories/${guid}`)\n}\n\n/**\n * Gets the general cart information of the current user.\n * @method\n * @param {string} listId The unique identifier.\n * @returns {Promise<CartModel>} Returns the general cart information of the current user.\n */\nexport const getCartInfo = async (listId = null) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart?ListID=${listId}`)\n}\n\n/**\n * The wish list information\n * @typedef {CartItemModel[]} CartItemModelArray\n */\n\n/**\n * Gets the wish list information of the current user.\n * @method\n * @returns {Promise<CartItemModelArray>} Returns the wish list information of the current user.\n */\nexport const getWishListInfo = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/wishList`)\n}\n\n/**\n * Deletes the order item from the Cart, Wish list or Drafts.\n * @method\n * @param {string} orderItemID The unique ID of the order item. !!!globally unique identifier\n */\nexport const deleteCartItem = async (orderItemID) => {\n return await http.delete(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}`)\n}\n\n/**\n * Clears the cart of the current user.\n * @method\n * @param {GUID[]} orderItemIds The list of the cart item identifiers. Can be null. If it is null then all cart items will be removed.\n * @param {string} listId The unique ID of the submission list. !!!globally unique identifier\n * @returns {Promise<void>}\n */\nexport const clearCart = async (orderItemIds = null, listId = null) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/clear`, {\n OrderItemIDs: orderItemIds,\n ListID: listId,\n })\n}\n\n/**\n * Clears the wish list of the current user.\n * @method\n * @param {GUID[]} orderItemIds The list of the wish list item identifiers. Can be null. If it is null then all wish list items will be removed.\n * @returns {Promise<void>}\n */\nexport const clearWishlist = async (orderItemIds = null) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/wishList/clear`, {\n OrderItemIDs: orderItemIds\n })\n}\n\n/**\n * Collection of CartItemValidationModel\n * @typedef {CartItemValidationModel[]} CartItemValidationModelArray\n */\n\n/**\n * Validates the cart of the current user.\n * @method\n * @param {boolean} isChecked\n * @param {GUID} listId\n * @returns {Promise<CartItemValidationModelArray>} Collection of CartItemValidationModel\n */\nexport const validateCart = async (isChecked = null, listId = null) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/validations?isChecked=${isChecked}&ListID=${listId}`)\n}\n\n/**\n * Validates the wish list of the current user.\n * @method\n * @returns {Promise<CartItemValidationModelArray>} Collection of CartItemValidationModel\n */\nexport const validateWishList = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/wishList/validations`)\n}\n\n/**\n * Gets the cart pricing information of the current user.\n * @method\n * @param {boolean} isChecked\n * @param {GUID} listId\n * @returns {Promise<CartPriceModel>} Returns cart pricing information of the current user.\n */\nexport const getCartPricingInfo = async (isChecked = null, listId = null) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/price?isChecked=${isChecked}&ListID=${listId}`)\n}\n\n/**\n * Gets the wish list pricing information of the current user.\n * @method\n * @returns {Promise<CartPriceModel>} Returns wish list pricing information.\n */\nexport const getWishListPricingInfo = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/wishList/price`)\n}\n\n/**\n * Updates the item of the cart of the current user.\n * @method\n * @param {GUID} orderItemID The unique ID of the cart item.\n * @param {CartItemUpdateModel} orderItem The cart item update model.\n * @returns {Promise<void>}\n */\nexport const updateCartItem = async (orderItemID, orderItem) => {\n return await http.put(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/${orderItemID}`, orderItem)\n}\n\n/**\n * Updates the item of the wish list of the current user.\n * @method\n * @param {GUID} orderItemID The unique ID of the wish list item.\n * @param {WishListItemUpdateModel} orderItem The wish list item update model.\n * @returns {Promise<void>}\n */\nexport const updateWishListItem = async (orderItemID, orderItem) => {\n return await http.put(`${config.getValue('apiUrl')}/v1/store/login/user/orders/wishList/${orderItemID}`, orderItem)\n}\n\n/**\n * Updates the items of the cart of the current user.\n * @method\n * @param {CartItemUpdateModel[]} cartItem The list of the cart items.\n * @returns {Promise<void>}\n */\nexport const updateCart = async (cartItem) => {\n return await http.put(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart`, cartItem)\n}\n\n/**\n * Creates new cart list.\n * @method\n * @param {string} name Cart list name. Required. Unique.\n * @param {string} externalId Cart list external ID. Optional.\n * @param {string} externalUrl Cart list external URL. Optional.\n * @returns {Promise<CartListCreateResponseModel>} Returns created cart list data.\n */\nexport const createCartList = async (name, externalId = null, externalUrl = null) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/lists`, {\n Name: name,\n ExternalID: externalId,\n ExternalUrl: externalUrl\n })\n}\n\n/**\n * Gets cart list ID be the external ID.\n * @method\n * @param {string} externalId Cart list's external ID.\n * @returns {Promise<GUID>} Returns cart list ID.\n */\nexport const getListId = async (externalId) => {\n return http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/lists/id?externalID=${externalId}`)\n}\n\n/**\n * Gets detailed information about cart list by cart list ID.\n * @method\n * @param {GUID} listId Cart list's ID.\n * @returns {Promise<CartListDetailsModel>} Returns detailed cart list data.\n */\nexport const getListInfo = async (listId) => {\n return http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/lists/${listId}/details`)\n}\n\n/**\n * A collection of the cart list items.\n * @typedef {CartListModel[]} CartListModelArray\n */\n\n/**\n * Creates new cart list.\n * @method\n * @returns {Promise<CartListModelArray>} Returns collection of the cart list items.\n */\nexport const getLists = async () => {\n return http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/lists`)\n}\n\n/**\n * Deletes cart list by ID.\n * @method\n * @param {GUID} listId Cart list's ID.\n * @returns {Promise<void>}\n */\nexport const deleteList = async (listId) => {\n return http.delete(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/lists/${listId}`)\n}\n\n/**\n * Exports cart list data by ID to the 3rd party service that was assigned to the store.\n * @method\n * @param {GUID} listId Cart list's ID.\n * @returns {Promise<CartListExportResponseModel>} Returns export results.\n */\nexport const exportList = async (listId) => {\n return http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/lists/${listId}/export`)\n}\n\n/**\n * Update cart name data by ID.\n * @method\n * @param {GUID} listId Cart list's ID.\n * @param {string} title Cart name.\n * @returns {Promise<void>}\n */\nexport const renameList = async (listId, title) => {\n return http.put(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/lists/${listId}`, { Name: title })\n}\n\n/**\n * Reverts user's cart modification.\n * @method\n * @returns {Promise<void>}\n */\nexport const revertModifications = async () => {\n return http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/approval/revert`, {})\n}\n\n/**\n * Duplicates the cart item.\n * @method\n * @param {GUID} orderItemID The unique ID of the cart item.\n * @returns {Promise<ActivityCreateResponseModel>} Returns the result of the activity creation.\n */\nexport const duplicateItem = async (orderItemID) => {\n return http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/${orderItemID}/duplicate`, {})\n}\n\n/**\n * Duplicates cart list by ID.\n * @method\n * @param {GUID} listId Cart list's ID.\n * @returns {Promise<ActivityCreateResponseModel>} Returns the result of the activity creation.\n */\nexport const duplicateList = async (listId) => {\n return http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/lists/${listId}/duplicate`, {})\n}\n","import http from './http'\nimport config from '../services/config'\nimport { convertObjectToQueryString } from '../utils/utils'\n\nconst {\n GUID,\n CategoryModel,\n CategoryTreeModel,\n CategoryListModel,\n CategoryExtendedModel,\n } = require('./../types/categories.js')\n\n/**\n * A list of product categories.\n * @typedef {CategoryModel[]} CategoryModelArray\n */\n\n/**\n * Gets the top level product categories of a store, using pagination. Categories that do not contain online products on any level are filtered out.\n * @method\n * @param {number} pageNumber The requested page number.\n * @param {number} pageSize The number of categories on a single page. The maximum is 200.\n * @returns {Promise<CategoryModelArray>} Returns a list of product categories according the requested parameters.\n */\nexport const getTopCategories = async (pageNumber, pageSize) => {\n const params = convertObjectToQueryString({ pageNumber, pageSize })\n return await http.get(`${config.getValue('apiUrl')}/v1/store/categories${params.length ? `?${params}` : ''}`)\n}\n\n/**\n * Gets the sub-categories of a specific product category, using pagination. Categories that do not contain online products on any level are filtered out.\n * @method\n * @param {GUID} categoryID The unique ID of the parent category.\n * @param {number} pageNumber The requested page number.\n * @param {number} pageSize The number of categories on a single page. The maximum is 200.\n * @returns {Promise<CategoryListModel>} Returns a list of sub-categories according the requested parameters.\n */\nexport const getSubCategories = async (categoryID, pageNumber, pageSize) => {\n const params = convertObjectToQueryString({ pageNumber, pageSize })\n return await http.get(`${config.getValue('apiUrl')}/v1/store/categories/${categoryID}/categories${params.length ? `?${params}` : ''}`)\n}\n\n/**\n * Gets the category's unique ID by its friendly ID.\n * @method\n * @param {number} categoryFriendlyID The friendly ID of the category.\n * @returns {Promise<GUID>} Returns a unique ID for the requested category.\n */\nexport const getCategoryIDByFriendlyID = async (categoryFriendlyID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/categories/id?friendlyID=${categoryFriendlyID}`)\n}\n\n/**\n * Gets the category by its unique ID.\n * @method\n * @param {GUID} categoryID The unique ID of the category.\n * @returns {Promise<CategoryExtendedModel>} Returns a category for the requested unique ID. Throws an exception if the requested category does not contain online products on any level.\n */\nexport const getCategory = async (categoryID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/categories/${categoryID}`)\n}\n\n/**\n * Gets the tree of product categories of a store.\n * @method\n * @param {number} depth The tree depth.\n * @returns {Promise<CategoryTreeModel>} Returns a tree of product categories according the requested parameters.\n */\nexport const getCategoryTree = async (depth) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/categories/tree?depth=${depth}`)\n}\n","import http from './http'\nimport config from '../services/config'\nimport { convertObjectToQueryString } from '../utils/utils'\n\nconst {\n GUID,\n ProductListModel,\n ProductModel,\n ThumbnailsModel,\n CreatePreviewRequestModel,\n PreviewResponseModel,\n ProofResponseModel,\n ProofStatusModel,\n } = require('./../types/products.js')\n\n/**\n * Gets the product's unique ID by its friendly ID.\n * @method\n * @param {number} friendlyID The friendly ID of the product.\n * @returns {Promise<GUID>} Returns a unique ID for the requested product.\n */\nexport const getProductIDByFriendlyID = async (friendlyID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/products/id?friendlyID=${friendlyID}`)\n}\n\n/**\n * Gets the online products of a specific product category, using pagination.\n * @method\n * @param {GUID} categoryID The unique ID of the parent category.\n * @param {number} pageNumber The requested page number.\n * @param {number} pageSize The number of products on a single page. The maximum is 200.\n * @returns {Promise<ProductListModel>} Returns a list of online products according the requested parameters.\n */\nexport const getProducts = async (categoryID, pageNumber, pageSize) => {\n const params = convertObjectToQueryString({ pageNumber, pageSize })\n return await http.get(`${config.getValue('apiUrl')}/v1/store/categories/${categoryID}/products${params.length ? `?${params}` : ''}`)\n}\n\n/**\n * A list of the products\n * @typedef {ProductModel[]} ProductModelArray\n */\n\n/**\n * Gets the products by their unique IDs.\n * @method\n * @param {GUID[]} IDs The list of unique IDs of the products.\n * @returns {Promise<ProductModelArray>} Returns a list of the requested products.\n */\nexport const getProductsByIDs = async (IDs) => {\n const sIDs = IDs.map((val, ind) => `productIDs[${ind}]=${val}`).join('&')\n return await http.get(`${config.getValue('apiUrl')}/v1/store/products?${sIDs}`)\n}\n\n/**\n * Gets the product by its unique ID.\n * @method\n * @param {GUID} productID The unique ID of the product.\n * @param {boolean} retrieveTypeSpecificData Indicates if the model should be basic, or with specific data. For instance, kitting has the Items property, which is unique to this product type.\n * @returns {Promise<void>}\n */\nexport const getProductByID = async (productID, retrieveTypeSpecificData) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/products/${productID}?retrieveTypeSpecificData=${retrieveTypeSpecificData}`)\n}\n\n/**\n * Gets product thumbnails.\n * @method\n * @param {GUID} productID The unique ID of the product.\n * @returns {Promise<ThumbnailsModel>} Returns a product thumbnails.\n */\nexport const getProductThumbnails = async (productID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/products/${productID}/thumbnails`)\n}\n\n/**\n * Creates preview for the dynamic product by order product ID.\n * @method\n * @param {GUID} orderItemID order product ID\n * @param {CreatePreviewRequestModel} properties Customization values\n * @returns {Promise<PreviewResponseModel>} Returns DTO with created preview details.\n */\nexport const createProofPreview = async (orderItemID, properties) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/preview`, {properties})\n}\n\n/**\n * Gets preview status.\n * @method\n * @param {GUID} orderItemID order product ID\n * @param {GUID} previewID preview ID\n * @returns {Promise<PreviewResponseModel>} Returns DTO about preview.\n */\nexport const getProofPreview = async (orderItemID, previewID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/preview/${previewID}`)\n}\n\n/**\n * Returns binary content of the preview file by file name.\n * @method\n * @param {GUID} orderItemID order product ID\n * @param {GUID} previewID preview ID\n * @param {string} fileName preview file name\n * @returns {Promise<Buffer>} Returns binary content of the preview file.\n */\nexport const downloadProofPreview = async (orderItemID, previewID, fileName) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/preview/${previewID}/download?fileName=${fileName}`, undefined, { download: true })\n}\n\n/**\n * Creates proof for the dynamic product by order product ID.\n * @method\n * @param {GUID} orderItemID order product ID\n * @returns {Promise<ProofResponseModel>} Returns DTO with created proof details.\n */\nexport const createProof = async (orderItemID) => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/proof`, {})\n}\n\n/**\n * Returns binary content of the proof file by file name.\n * @method\n * @param {GUID} orderItemID order product ID\n * @param {string} fileName proof file name\n * @returns {Promise<Buffer>} Returns binary content of the proof file.\n */\nexport const downloadProof = async (orderItemID, fileName) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/${orderItemID}/proof/download?fileName=${fileName}`, undefined, { download: true })\n}\n\n/**\n * Gets the products using a search string.\n * @method\n * @param {string} search The search string.\n * @param {number} pageNumber The requested page number.\n * @param {number} pageSize The number of products on a single page. The maximum is 200.\n * @returns {Promise<ProductListModel>} Returns a list of online products according the requested parameters.\n */\nexport const search = async (search, pageNumber, pageSize) => {\n const params = convertObjectToQueryString({ search, pageNumber, pageSize })\n return await http.get(`${config.getValue('apiUrl')}/v1/store/products/search${params.length ? `?${params}` : ''}`)\n}\n\n/**\n * A collection of information about proof status.\n * @typedef {ProofStatusModel[]} ProofStatusModelArray\n */\n\n/**\n * Gets information about proof status\n * @method\n * @param {GUID[]} orderItemIds The collections os orders.\n * @returns {Promise<ProofStatusModelArray>} Returns a collection of information about proof status.\n */\nexport const checkProofStatus = async (orderItemIds) => {\n const params = orderItemIds.map(id => `orderItemIds=${id}`).join('&')\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/unsubmitted/items/proof${params.length ? `?${params}` : ''}`)\n}\n\nexport const productType = {\n Undefined: -1,\n Dynamic: 1,\n Static: 2,\n Email: 3,\n Uploaded: 4,\n Composite: 5,\n DynamicWithPurl: 6,\n EmailWithPurl: 7,\n CircleProject: 8,\n PrintTouchPoint: 9,\n EmailTouchPoint: 10,\n WebTouchPoint: 11,\n PdfOnDemandTouchPoint: 12,\n TriggeredEmailTouchPoint: 13,\n Kit: 14\n}\n","import http from './http'\nimport config from '../services/config'\n\nconst {\n StoreModel,\n UserModel,\n CurrencyModel,\n CartIndicatorModel,\n SecurityTokenModel,\n CultureModel,\n} = require('./../types/store.js')\n\n/**\n * Gets the store to which the user is currently logged in. The store unique ID and the currently logged-in user are identified by the provided security token.\n * @method\n * @returns {Promise<StoreModel>} Returns information about a store to which the user currently logged in.\n */\nexport const getCurrentStore = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store`)\n}\n\n/**\n * Gets the currently logged-in user, who is identified by the provided security token.\n * @method\n * @returns {Promise<UserModel>} Returns information about a user that is currently logged-in to the store\n */\nexport const getCurrentUser = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user`)\n}\n\n/**\n * Update or create preferences for user that is currentlly logged-in to the store.\n * @method\n * @param {string} value The string value.\n * @returns {Promise<boolean>} Returns information about a user that is currently logged-in to the store.\n */\nexport const updateUserPreferences = async (value) => {\n return await http.put(`${config.getValue('apiUrl')}/v1/store/login/user/preferences`, { value })\n}\n\n/**\n * A list of the store's cultures\n * @typedef {CultureModel[]} CultureModelArray\n */\n\n/**\n * Gets the cultures of the store.\n * @method\n * @returns {Promise<CultureModel[]>} Returns a list of the store's cultures.\n */\nexport const getCultures = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/cultures`, null)\n // Use this for mock data from cultures.json\n // return await http.get(`${config.getValue('baseUrl')}/config/stores/store-a/cultures.json`)\n}\n\n/**\n * A list of the store's currencies\n * @typedef {CurrencyModel[]} CurrencyModelArray\n */\n\n/**\n * Gets the currencies of the store.\n * @method\n * @returns {Promise<CurrencyModelArray>} Returns a list of the store's currencies.\n */\nexport const getCurrencies = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/currencies`)\n // Use this for mock data from currencies.json\n // return await http.get(`${config.getValue('baseUrl')}/config/stores/store-a/currencies.json`)\n}\n\n/**\n * Gets the information about the cart items count.\n * @method\n * @returns {Promise<CartIndicatorModel>} Returns the information about the cart items count.\n */\nexport const getCartItemsCount = async () => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/orders/cart/items/count`)\n}\n\n/**\n * Renews the user session.\n * @method\n * @returns {Promise<SecurityTokenModel>} Returns information about a security token.\n */\nexport const renewToken = async () => {\n return await http.post(`${config.getValue('apiUrl')}/v1/store/login/renew`)\n}\n\n/**\n * Logs the user into the store using temporary SSO token.\n * @method\n * @param {string} Token The SSO token\n * @returns {Promise<SecurityTokenModel>} Returns information about a security token.\n */\nexport const loginBySSOToken = async (Token) => {\n return await http.post(`/uStoreRestApi/v1/store/sso/login`, { Token })\n}\n","import http from './http'\nimport config from '../services/config'\nimport httpUpload from './httpUpload'\n\nconst {\n AssetListItemResponseModel,\n AssetResponseModel,\n GUID,\n } = require('./../types/assets.js')\n\n/**\n * Collection of the assets.\n * @typedef {AssetListItemResponseModel[]} AssetListItemResponseModelArray\n */\n\n/**\n * Gets collection of the graphic assets by dial ID.\n * @method\n * @param {GUID} propertyID Graphic dial ID\n * @returns {Promise<AssetListItemResponseModelArray>} Returns collection of the assets.\n */\nexport const getAssets = async (propertyID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/assets/?propertyID=${propertyID}`)\n}\n\n/**\n * Gets graphic asset detailed data by asset ID.\n * @method\n * @param {string} assetID Graphic asset ID.\n * @returns {Promise<AssetResponseModel>} Returns graphic assets detailed info.\n */\nexport const getAsset = async (assetID) => {\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/assets/${assetID}`)\n}\n\n/**\n * Deletes uploaded graphic asset by ID.\n * @method\n * @param {GUID} assetID Graphic asset ID.\n * @returns {string} Returns deleted graphic asset ID.\n */\nexport const deleteAsset = async (assetID) => {\n await http.delete(`${config.getValue('apiUrl')}/v1/store/login/user/assets/${assetID}`)\n return assetID\n}\n\n/**\n * Uploads graphic asset.\n * @method\n * @param {GUID} propertyID Graphic dial ID\n * @param {File} data File to upload\n * @param {boolean} replaceIfExists When value 'true' and dial has asset with the same name the asset should be replaced by uploaded file\n * @returns {AssetListItemResponseModel} Returns uploaded asset.\n */\nexport const uploadAsset = async (propertyID, data, replaceIfExists = false) => {\n const r = await httpUpload(`${config.getValue('apiUrl')}/v1/store/login/user/assets/?propertyID=${propertyID}${replaceIfExists ? '&replaceIfExists=true' : ''}`, [data])\n return r[0]\n}\n","import {\n getUserOrdersSummary,\n addOrderItem,\n getOrderItem,\n updateOrderItem,\n getPriceOrderItem,\n reorder,\n getLastOrder,\n addToCart,\n saveForLater,\n getDeliveryServices,\n getProperties,\n updateProperties,\n updatePropertiesState,\n getRepositoryDetails,\n uploadFile,\n deleteFiles,\n getCartInfo,\n getWishListInfo,\n deleteCartItem,\n clearCart,\n clearWishlist,\n validateCart,\n validateWishList,\n getCartPricingInfo,\n getWishListPricingInfo,\n updateCartItem,\n updateWishListItem,\n updateCart,\n createCartList,\n getListId,\n getListInfo,\n getLists,\n deleteList,\n exportList,\n revertModifications,\n renameList,\n duplicateItem,\n duplicateList,\n} from '../api/orders'\nimport { getTopCategories, getSubCategories, getCategoryIDByFriendlyID, getCategory, getCategoryTree } from '../api/categories'\nimport {\n getProductThumbnails,\n getProductIDByFriendlyID,\n getProducts,\n getProductByID,\n productType,\n getProductsByIDs,\n search,\n createProofPreview,\n downloadProofPreview,\n getProofPreview,\n createProof,\n downloadProof,\n checkProofStatus,\n} from '../api/products'\nimport { getCurrentStore, getCurrentUser, getCultures, getCurrencies, renewToken, getCartItemsCount, loginBySSOToken, } from '../api/store'\nimport { getAssets, getAsset, deleteAsset, uploadAsset } from '../api/assets'\nimport {getActivities} from '../api/activities'\n\nexport default {\n activities: {\n getActivities\n },\n categories: {\n getTopCategories,\n getSubCategories,\n getCategoryIDByFriendlyID,\n getCategory,\n getCategoryTree\n },\n orders: {\n getUserOrdersSummary,\n addOrderItem,\n getOrderItem,\n updateOrderItem,\n getPriceOrderItem,\n reorder,\n getLastOrder,\n addToCart,\n saveForLater,\n getDeliveryServices,\n getProperties,\n updateProperties,\n updatePropertiesState,\n getRepositoryDetails,\n uploadFile,\n deleteFiles,\n getCartInfo,\n getWishListInfo,\n deleteCartItem,\n clearCart,\n clearWishlist,\n validateCart,\n validateWishList,\n getCartPricingInfo,\n getWishListPricingInfo,\n updateCartItem,\n updateWishListItem,\n updateCart,\n createCartList,\n getListId,\n getListInfo,\n getLists,\n deleteList,\n exportList,\n revertModifications,\n renameList,\n duplicateItem,\n duplicateList,\n },\n products: {\n getProductIDByFriendlyID,\n getProducts,\n getProductByID,\n productType,\n getProductsByIDs,\n getProductThumbnails,\n search,\n createProofPreview,\n downloadProofPreview,\n getProofPreview,\n createProof,\n downloadProof,\n checkProofStatus,\n },\n store: {\n getCurrentStore,\n getCurrentUser,\n getCultures,\n getCurrencies,\n renewToken,\n getCartItemsCount,\n loginBySSOToken,\n },\n assets: {\n getAssets,\n getAsset,\n deleteAsset,\n uploadAsset\n }\n\n}\n","import http from './http'\nimport config from '../services/config'\n\nconst duplicateItemMocks = [\n {Name: 'Test',\n Output: null,\n Progress: null,\n Status: 1,\n Total: 1,\n Type: 1},\n {Name: 'Test',\n Output: null,\n Progress: null,\n Status: 2,\n Total: 1,\n Type: 1}\n]\n\nconst duplicateKitItemMocks = [\n {Name: 'Kit item',\n Output: null,\n Progress: 1,\n Status: 1,\n Total: 3,\n Type: 2},\n {Name: 'Kit item',\n Output: null,\n Progress: 2,\n Status: 1,\n Total: 3,\n Type: 2},\n {Name: 'Kit item',\n Output: null,\n Progress: 3,\n Status: 1,\n Total: 3,\n Type: 2},\n {Name: 'Kit item',\n Output: null,\n Progress: 3,\n Status: 2,\n Total: 3,\n Type: 2}\n]\n\n\n\nconst duplicateListMocks = [\n {Name: 'My list to check length',\n Output: null,\n Progress: 1,\n Status: 1,\n Total: 3,\n Type: 2},\n {Name: 'My list to check length',\n Output: null,\n Progress: 2,\n Status: 1,\n Total: 3,\n Type: 2},\n {Name: 'My list to check length',\n Output: null,\n Progress: 3,\n Status: 1,\n Total: 3,\n Type: 2},\n {Name: 'My list to check length',\n Output: {\n CompletedCount: 2,\n },\n Progress: 3,\n Status: 4,\n Total: 3,\n Type: 3}\n]\n\n\nlet mockIndex = 0\n\n/**\n * Enum values present async activity status\n * @enum {number}\n */\nconst ActivityStatus = {\n InProgress: 1,\n Completed: 2,\n Failed: 3,\n PartiallyFailed: 4,\n};\n\n/**\n * Enum values activity type\n * @enum {number}\n */\nconst ActivityType = {\n OrderItemDuplication: 1,\n KitOrderItemDupliction: 2,\n CartListDuplication: 3,\n OrderItemReordering: 4,\n KitOrderItemReordering: 5,\n OrderReordering: 6,\n};\n\n/**\n * Provides information about asynchronous activity.\n * @typedef ActivityModel\n * @property {GUID} ActivityID The unique ID of the activity\n * @property {ActivityStatus} Status The status of the activity\n * @property {ActivityType} Type Activity type\n * @property {string} Name The name of the activity\n * @property {number} Total The total number of sub-items of the activity\n * @property {number} Progress Activity progress\n * @property {null} Output The output of the activity\n */\n\n/**\n * Collection of information about asynchronous activity.\n * @typedef {ActivityModel[]} ActivityModelArray\n */\n\n/**\n * Provides active tasks of the current user\n * @method\n * @param {GUID[]} activitiesIDs Collection of globally unique identifier\n * @returns {Promise<ActivityModelArray>} Returns a collection of information about asynchronous activity.\n */\nexport const getActivities = async (activitiesIDs) => {\n // const mock = duplicateListMocks[mockIndex++]\n // mock.ActivityID = activitiesIDs[0]\n // return Promise.resolve(mock)\n const params = activitiesIDs.map(id => `activityIDs=${id}`).join('&')\n return await http.get(`${config.getValue('apiUrl')}/v1/store/login/user/activities?${params}`)\n}\n","import contextService from '../services/context'\n\nconst httpDeleteFiles = async (url, name) => {\n const token = contextService.getValue('securityToken')\n\n const myHeaders = new Headers()\n myHeaders.append('Authorization', `uStore ${token}`)\n\n const requestOptions = {\n method: 'DELETE',\n headers: myHeaders,\n body: name,\n redirect: 'follow'\n }\n\n return fetch(url, requestOptions)\n .then(response => response.json())\n .catch(error => console.log('error', error))\n}\n\nexport default httpDeleteFiles\n","import providerState from './providerState'\nimport { LOAD_USER_ORDERS_SUMMARY, LOAD_CART_ITEMS_COUNT } from '../redux/actionsTypes'\nimport { getUserOrdersSummary } from '../api/orders'\nimport {getCartItemsCount} from '../api/store'\n\n/**\n * Provides information about the cart items count.\n * @typedef {Object} CartIndicatorModel\n * @property {number} ItemsCount The total number of items in the cart.\n */\n\n\n/**\n * Provides a user's summary of orders.\n * @typedef {Object} UserOrdersSummaryModel\n * @property {number} RejectedOrderCount The number of rejected orders of the user.\n * @property {number} PendingApprovalOrderCount The number of orders pending for approval by the user.\n */\n\n/**\n * Represent the orders logic and API in the system\n * @class\n */\n\nclass Orders {\n /**\n * Sets the summary of orders of the currently logged-in user.\n * @returns {UserOrdersSummaryModel|null} - if the store require order approval then the summary else null\n * @description Set **state.userOrdersSummary** with the summary of the orders of the currently logged in user.\n */\n async loadUserOrdersSummary () {\n const state = providerState.get()\n const requireOrderApproval = state.currentStore && state.currentStore.RequireOrderApproval\n if (requireOrderApproval) {\n const userOrdersSummary = await getUserOrdersSummary()\n providerState.dispatch({ type: LOAD_USER_ORDERS_SUMMARY, data: userOrdersSummary })\n return userOrdersSummary\n }\n return null\n }\n\n /**\n * Sets information about the cart items count.\n * @returns {CartIndicatorModel} Returns the cart items count.\n * @description Set **state.cartItemsCount** information about the cart items count.\n */\n async loadCartItemsCount () {\n const cartItemsCount = await getCartItemsCount()\n providerState.dispatch({ type: LOAD_CART_ITEMS_COUNT, data: cartItemsCount })\n return cartItemsCount\n }\n}\n\nexport default new Orders()\n","import providerState from './providerState'\nimport { LOAD_CURRENT_STORE, LOAD_CURRENT_USER, LOAD_CULTURES, LOAD_CURRENCIES, LOAD_CART_ITEMS_COUNT } from '../redux/actionsTypes'\nimport {\n getCurrentStore,\n getCurrentUser,\n getCultures,\n getCurrencies,\n getCartItemsCount,\n updateUserPreferences\n} from '../api/store'\nimport Orders from './orders';\nimport { stringifyStorePreferences } from '../utils/utils'\n\nconst {\n UserModel,\n StoreModel,\n CultureModel,\n CartIndicatorModel\n} = require('./../types/store.js')\n\n\n/**\n * Represent the store logic and API in the system\n * @class\n */\n\nclass Store {\n /**\n * Sets the store which the user is currently logged in, that is associated with the security token and culture.\n * @returns {StoreModel} - the store data.\n * @description Set **state.currentStore** with the data of the store, that is associated with the security token and culture in the request headers.\n */\n async loadCurrentStore () {\n const currentStore = await getCurrentStore()\n providerState.dispatch({ type: LOAD_CURRENT_STORE, data: currentStore })\n return currentStore\n }\n\n /**\n * Sets the currently logged-in user.\n * @returns {UserModel} - the user data\n * @description Set **state.currentUser** with the user, that is logged-in to the store\n */\n async loadCurrentUser () {\n const currentUser = await getCurrentUser()\n providerState.dispatch({ type: LOAD_CURRENT_USER, data: currentUser })\n return currentUser\n }\n\n /**\n * Sets the list of the cultures, that are set for the store.\n * @returns {CultureModel[]} - list of the cultures\n * @description Set **state.cultures** with the list of the cultures {@link CultureModel[]}, that are set for the store.\n */\n async loadStoreCultures () {\n const cultures = await getCultures()\n providerState.dispatch({ type: LOAD_CULTURES, data: cultures })\n return cultures\n }\n\n /**\n * Sets the list of the currencies, that are set for the store.\n * @returns {CurrencyModel[]} - list of the currencies\n * @description Set **state.currencies** with the list of the currencies {@link CurrencyModel[]}, that are set for the store.\n */\n async loadStoreCurrencies () {\n const currencies = await getCurrencies()\n providerState.dispatch({ type: LOAD_CURRENCIES, data: currencies })\n return currencies\n }\n\n /**\n * Get the cart items count.\n * @returns {CartIndicatorModel} Returns the cart items count.\n */\n async loadCartItemsCount () {\n const cartItemsCount = await Orders.loadCartItemsCount()\n return cartItemsCount\n }\n\n /**\n * Update or create user preferences\n * @param {object} preferences Preferences\n * @returns {Error|boolean} Returns information about a user that is currently logged-in to the store.\n * @description Set **state.currentUser.Preferences** with the user preferences\n */\n async updateUserPreferences (preferences) {\n const newPreferences = {...providerState.get().currentUser?.StorePreferences, ...preferences}\n const Preferences = stringifyStorePreferences(newPreferences)\n if (Preferences.length > 1000) {\n throw new Error('StorePreferences size is more the 1000 characters')\n }\n providerState.dispatch({ type: LOAD_CURRENT_USER, data: {...providerState.get().currentUser, ...{Preferences} } })\n return await updateUserPreferences(Preferences)\n }\n}\n\nexport default new Store()\n","import providerState from './providerState'\nimport { SET_CURRENT_CURRENCY, SET_CURRENT_CULTURE_BY_LANGUAGE } from '../redux/actionsTypes'\n\n/**\n * globally unique identifier\n * @typedef {string} GUID\n */\n\n/**\n * Provides information about a currency.\n * @typedef {Object} CurrencyModel\n * @property {GUID} ID The unique ID of the currency.\n * @property {number} FriendlyID The friendly ID of the currency.\n * @property {string} Name The name of the currency.\n * @property {string} Symbol The symbol of the currency.\n * @property {string} Code The currency code according to the ISO 4217 standard (e.g. \"USD\").\n * @property {number} ConversionRate The conversion rate from the store's primary currency to this currency. E.g. If the primary currency is USD, this currency is EUR and the conversion rate is 0.886285, then 1 USD = 0.886285 EUR.\n */\n\n/**\n * Provides information about a product's price and tax.\n * @typedef {Object} ProductPriceModel\n * @property {number} Price The price of the product excluding tax, in the store's primary currency.\n * @property {number} Tax The tax of the product, in the store's primary currency.\n */\n\n/**\n * Represents the culture logic in the system\n * @class\n */\nclass Culture {\n /**\n * Sets requested currency model\n * @param {CurrencyModel} currentCurrency - the requested currency to set as the current currency\n * @description Set **state.currentCurrency** with the requested currency model as {@link CurrencyModel}\n */\n setCurrentCurrency (currentCurrency) {\n providerState.dispatch({ type: SET_CURRENT_CURRENCY, data: currentCurrency })\n }\n\n /**\n * Sets the requested language code\n * @param {string} languageCode - the requested language code\n * @description Set **state.currentCurrency** according the the language code requested\n */\n setCurrentCultureByLanguage (languageCode) {\n providerState.dispatch({ type: SET_CURRENT_CULTURE_BY_LANGUAGE, data: languageCode })\n }\n\n /**\n * @typedef {Object} PriceModel\n * @property {number} price Price\n * @property {number} tax Tax\n * @property {number} priceIncludingTax priceIncludingTax that are converted by the current currency\n */\n\n /**\n * Get the converted price according to the current currency in the state\n * @param {ProductPriceModel} priceModel - the price model to be converted\n * @returns {PriceModel} - price, tax and priceIncludingTax that are converted by the current currency\n */\n getConvertedPrices (priceModel) {\n const { currentCurrency } = providerState.get()\n return {\n price: priceModel.Price * currentCurrency.ConversionRate,\n tax: priceModel.Tax * currentCurrency.ConversionRate,\n priceIncludingTax: (priceModel.Price + priceModel.Tax) * currentCurrency.ConversionRate\n }\n }\n}\n\nexport default new Culture()\n","import storeService from './store'\nimport cultureService from './culture'\nimport providerState from './providerState'\nimport contextService from './context'\n\nclass InitialState {\n async loadInitialState () {\n // get initialState from API and set it in redux if needed\n // if state already has data these actions will override it\n const currentStore = await storeService.loadCurrentStore()\n\n await storeService.loadStoreCultures()\n\n cultureService.setCurrentCultureByLanguage(contextService.getValue('languageCode'))\n\n await storeService.loadStoreCurrencies()\n\n if (currentStore?.Attributes?.find((attr) => attr.Name === 'ForceCartAspx' && attr.Value === 'False')) {\n await storeService.loadCartItemsCount()\n }\n\n const currencyFriendlyID = contextService.getValue('currencyFriendlyID')\n let currentCurrency = providerState.get().currencies.filter(c => c.FriendlyID === parseInt(currencyFriendlyID))[0]\n\n const currencyID = contextService.getValue('currencyID')\n\n if (currencyID) {\n currentCurrency = providerState.get().currencies.filter(c => c.ID === currencyID)[0]\n }\n cultureService.setCurrentCurrency(currentCurrency)\n\n await storeService.loadCurrentUser()\n\n // raise flag that initial state was loaded in order not to do it again\n providerState.setInitState()\n }\n}\n\nexport default new InitialState()\n","import providerState from './providerState'\nimport { LOAD_CATEGORIES_TREE, LOAD_SUB_CATEGORIES, LOAD_CURRENT_CATEGORY } from '../redux/actionsTypes'\nimport {\n getCategoryIDByFriendlyID,\n getCategoryTree,\n getSubCategories,\n getCategory\n} from '../api/categories'\n\nconst {\n CategoryTreeModel,\n CategoryModel,\n CategoryExtendedModel\n} = require('./../types/categories.js')\n\n/**\n * Represent the categories logic and API in the system\n * @class\n */\n\nclass Categories {\n /**\n * Gets the sub-categories of a specific product category, using pagination.\n * @param {number} [depth] - Indicates the maximum depth of the tree to return. By default (1), returns root categories only.\n * @returns {CategoryTreeModel} - The tree of categories\n * @description Set **state.categoriesTree** with the categories tree model as {@link CategoryTreeModel}\n * @description Set **state.categories** with the first level categories group.\n */\n async loadCategoriesTree (depth = 1) {\n const { Categories } = await getCategoryTree(depth)\n providerState.dispatch({ type: LOAD_CATEGORIES_TREE, data: Categories })\n return Categories\n }\n\n /**\n * Sets sub-categories of the given category.\n * @method\n * @param {string} categoryFriendlyID - the category friendly ID\n * @param {number} [pageNumber] - The 1-based number of the page.\n * @param {number} [pageSize] - The amount of the categories in one page.\n * @returns {CategoryModel[]} Array of sub categories in a specific page\n * @description Set **state.subCategories** with the sub-categories of the given category model as {@link CategoryModel} in the store, using paging.\n */\n async loadSubCategories (categoryFriendlyID, pageNumber = null, pageSize = null) {\n const categoryID = await getCategoryIDByFriendlyID(categoryFriendlyID)\n const { Categories } = await getSubCategories(categoryID, pageNumber, pageSize)\n providerState.dispatch({ type: LOAD_SUB_CATEGORIES, data: Categories })\n return Categories\n }\n\n /**\n * Set state.currentCategory with the requested category by friendlyID.\n * @param {string} categoryFriendlyID - the category friendly ID\n * @returns {CategoryExtendedModel} - A category model\n * @description Set state.currentCategory with the requested category by friendlyID using model {@link CategoryExtendedModel}\n */\n async loadCurrentCategory (categoryFriendlyID) {\n const categoryID = await getCategoryIDByFriendlyID(categoryFriendlyID)\n const currentCategory = await getCategory(categoryID)\n providerState.dispatch({ type: LOAD_CURRENT_CATEGORY, data: currentCategory })\n return currentCategory\n }\n}\n\nexport default new Categories()\n","/**\n * Represent the products logic and API in the system\n */\nclass Products {\n\n}\n\nexport default new Products()\n","import providerState from './providerState'\nimport { GET_ASSETS, GET_ASSET, DELETE_ASSET, UPLOAD_ASSET } from '../redux/actionsTypes'\nimport { getAssets, getAsset, deleteAsset, uploadAsset } from '../api/assets'\n\nconst { AssetListItemResponseModel, AssetResponseModel, GUID } = require('./../types/assets.js')\n\n/**\n * Represent the assets logic in the system\n * @class\n */\n\nclass Assets {\n\n /**\n * Gets collection of the graphic assets by dial ID.\n * @param {string} propertyID Graphic dial ID\n * @returns {AssetListItemResponseModel[]} Returns collection of the assets.\n * @description Set *state.assets* with the requested model as {@link AssetListItemResponseModel}\n */\n async getAssets (propertyID) {\n const assets = await getAssets(propertyID)\n providerState.dispatch({ type: GET_ASSETS, data: assets })\n return assets\n }\n\n /**\n * Gets graphic asset detailed data by asset ID.\n * @param {string} assetID Graphic asset ID.\n * @returns {AssetResponseModel} Returns graphic assets detailed info.\n * @description Set *state.selectedAsset* with the requested assets model as {@link AssetResponseModel}\n */\n async getAsset (assetID) {\n const asset = await getAsset(assetID)\n providerState.dispatch({ type: GET_ASSET, data: asset })\n return asset\n }\n\n /**\n * Deletes uploaded graphic asset by ID.\n * @param {string} assetID Graphic asset ID.\n * @returns {string} Returns deleted graphic asset ID.\n * @description Filters the list of assets, removing the asset with the specified identifier.\n */\n async deleteAsset (assetID) {\n await deleteAsset(assetID)\n providerState.dispatch({ type: DELETE_ASSET, data: assetID })\n return assetID\n }\n\n /**\n * Uploads graphic asset.\n * @param {string} propertyID Graphic dial ID\n * @param {File} data File to upload\n * @param {boolean} replaceIfExists Show if asset should be replaced\n * @returns {AssetListItemResponseModel} Returns uploaded asset.\n * @description Updates *state.assets* collection with the new graphic asset model as {@link AssetListItemResponseModel2}\n */\n async uploadAsset (propertyID, data, replaceIfExists) {\n const asset = await uploadAsset(propertyID, data, replaceIfExists)\n providerState.dispatch({ type: UPLOAD_ASSET, data: asset })\n return asset\n }\n}\n\nexport default new Assets()\n","import culture from './culture'\nimport store from './store'\nimport categories from './categories'\nimport products from './products'\nimport providerState from './providerState'\nimport assets from './assets'\n\nexport default {\n assets,\n culture,\n store,\n categories,\n products,\n get: () => providerState.get(),\n set: (state) => providerState.set(state),\n dispatch: providerState.dispatch,\n subscribe: providerState.subscribe,\n customState: {\n set: (name, value) => providerState.setCustomState(name, value),\n setBulk: (obj) => providerState.setBulkCustomState(obj),\n get: (name) => name ? providerState.get().customState[name] : providerState.get().customState,\n delete: (name) => providerState.deleteCustomState(name),\n merge: (customState) => providerState.mergeCustomState(customState)\n }\n}\n","import stateService from './services/providerState'\nimport configService from './services/config'\nimport bindingService from './services/binding'\nimport contexService from './services/context'\nimport api from './services/api'\nimport initialStateService from './services/initialState'\nimport newState from './services/newState'\n\n/**\n * UStoreProvider is an independent entity that facilitates connectivity to the uStore API and also manages the state of your application.\n *\n * {{links}}\n */\nclass Provider {\n constructor () {\n this.stateService = stateService\n this.binding = bindingService\n this.initialState = initialStateService\n this.configService = configService\n this.contextService = contexService\n }\n\n async init (runtimeConfig, params) {\n if (runtimeConfig) {\n this.configService.set(runtimeConfig)\n }\n if (params) {\n this.contextService.set(params)\n\n if (this.stateService.get().initState) {\n await this.initialState.loadInitialState()\n }\n }\n }\n\n get api () {\n return api\n }\n\n get state () {\n return newState\n }\n}\n\n\nexport const UStoreProvider = new Provider()\n// expose UStoreProvider on window so standalone component will have access to it\n// which will allow them to register and let the provider add model binding and\n// action changing\nif (typeof window !== 'undefined') {\n window.UStoreProvider = UStoreProvider\n}\n","/* The following list is defined in React's core */\nvar IS_UNITLESS = {\n animationIterationCount: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n gridRow: true,\n gridColumn: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n\n // SVG-related properties\n fillOpacity: true,\n stopOpacity: true,\n strokeDashoffset: true,\n strokeOpacity: true,\n strokeWidth: true\n};\n\nmodule.exports = function(name, value) {\n if(typeof value === 'number' && !IS_UNITLESS[ name ]) {\n return value + 'px';\n } else {\n return value;\n }\n};","import type {AnySchemaObject} from \"./types\"\nimport AjvCore from \"./core\"\nimport draft7Vocabularies from \"./vocabularies/draft7\"\nimport discriminator from \"./vocabularies/discriminator\"\nimport * as draft7MetaSchema from \"./refs/json-schema-draft-07.json\"\n\nconst META_SUPPORT_DATA = [\"/properties\"]\n\nconst META_SCHEMA_ID = \"http://json-schema.org/draft-07/schema\"\n\nclass Ajv extends AjvCore {\n _addVocabularies(): void {\n super._addVocabularies()\n draft7Vocabularies.forEach((v) => this.addVocabulary(v))\n if (this.opts.discriminator) this.addKeyword(discriminator)\n }\n\n _addDefaultMetaSchema(): void {\n super._addDefaultMetaSchema()\n if (!this.opts.meta) return\n const metaSchema = this.opts.$data\n ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA)\n : draft7MetaSchema\n this.addMetaSchema(metaSchema, META_SCHEMA_ID, false)\n this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID\n }\n\n defaultMeta(): string | AnySchemaObject | undefined {\n return (this.opts.defaultMeta =\n super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined))\n }\n}\n\nmodule.exports = exports = Ajv\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default Ajv\n\nexport {\n Format,\n FormatDefinition,\n AsyncFormatDefinition,\n KeywordDefinition,\n KeywordErrorDefinition,\n CodeKeywordDefinition,\n MacroKeywordDefinition,\n FuncKeywordDefinition,\n Vocabulary,\n Schema,\n SchemaObject,\n AnySchemaObject,\n AsyncSchema,\n AnySchema,\n ValidateFunction,\n AsyncValidateFunction,\n SchemaValidateFunction,\n ErrorObject,\n ErrorNoParams,\n} from \"./types\"\n\nexport {Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions} from \"./core\"\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\nexport {default as ValidationError} from \"./runtime/validation_error\"\nexport {default as MissingRefError} from \"./compile/ref_error\"\n","export abstract class _CodeOrName {\n abstract readonly str: string\n abstract readonly names: UsedNames\n abstract toString(): string\n abstract emptyStr(): boolean\n}\n\nexport const IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i\n\nexport class Name extends _CodeOrName {\n readonly str: string\n constructor(s: string) {\n super()\n if (!IDENTIFIER.test(s)) throw new Error(\"CodeGen: name must be a valid identifier\")\n this.str = s\n }\n\n toString(): string {\n return this.str\n }\n\n emptyStr(): boolean {\n return false\n }\n\n get names(): UsedNames {\n return {[this.str]: 1}\n }\n}\n\nexport class _Code extends _CodeOrName {\n readonly _items: readonly CodeItem[]\n private _str?: string\n private _names?: UsedNames\n\n constructor(code: string | readonly CodeItem[]) {\n super()\n this._items = typeof code === \"string\" ? [code] : code\n }\n\n toString(): string {\n return this.str\n }\n\n emptyStr(): boolean {\n if (this._items.length > 1) return false\n const item = this._items[0]\n return item === \"\" || item === '\"\"'\n }\n\n get str(): string {\n return (this._str ??= this._items.reduce((s: string, c: CodeItem) => `${s}${c}`, \"\"))\n }\n\n get names(): UsedNames {\n return (this._names ??= this._items.reduce((names: UsedNames, c) => {\n if (c instanceof Name) names[c.str] = (names[c.str] || 0) + 1\n return names\n }, {}))\n }\n}\n\nexport type CodeItem = Name | string | number | boolean | null\n\nexport type UsedNames = Record<string, number | undefined>\n\nexport type Code = _Code | Name\n\nexport type SafeExpr = Code | number | boolean | null\n\nexport const nil = new _Code(\"\")\n\ntype CodeArg = SafeExpr | string | undefined\n\nexport function _(strs: TemplateStringsArray, ...args: CodeArg[]): _Code {\n const code: CodeItem[] = [strs[0]]\n let i = 0\n while (i < args.length) {\n addCodeArg(code, args[i])\n code.push(strs[++i])\n }\n return new _Code(code)\n}\n\nconst plus = new _Code(\"+\")\n\nexport function str(strs: TemplateStringsArray, ...args: (CodeArg | string[])[]): _Code {\n const expr: CodeItem[] = [safeStringify(strs[0])]\n let i = 0\n while (i < args.length) {\n expr.push(plus)\n addCodeArg(expr, args[i])\n expr.push(plus, safeStringify(strs[++i]))\n }\n optimize(expr)\n return new _Code(expr)\n}\n\nexport function addCodeArg(code: CodeItem[], arg: CodeArg | string[]): void {\n if (arg instanceof _Code) code.push(...arg._items)\n else if (arg instanceof Name) code.push(arg)\n else code.push(interpolate(arg))\n}\n\nfunction optimize(expr: CodeItem[]): void {\n let i = 1\n while (i < expr.length - 1) {\n if (expr[i] === plus) {\n const res = mergeExprItems(expr[i - 1], expr[i + 1])\n if (res !== undefined) {\n expr.splice(i - 1, 3, res)\n continue\n }\n expr[i++] = \"+\"\n }\n i++\n }\n}\n\nfunction mergeExprItems(a: CodeItem, b: CodeItem): CodeItem | undefined {\n if (b === '\"\"') return a\n if (a === '\"\"') return b\n if (typeof a == \"string\") {\n if (b instanceof Name || a[a.length - 1] !== '\"') return\n if (typeof b != \"string\") return `${a.slice(0, -1)}${b}\"`\n if (b[0] === '\"') return a.slice(0, -1) + b.slice(1)\n return\n }\n if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name)) return `\"${a}${b.slice(1)}`\n return\n}\n\nexport function strConcat(c1: Code, c2: Code): Code {\n return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str`${c1}${c2}`\n}\n\n// TODO do not allow arrays here\nfunction interpolate(x?: string | string[] | number | boolean | null): SafeExpr | string {\n return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n ? x\n : safeStringify(Array.isArray(x) ? x.join(\",\") : x)\n}\n\nexport function stringify(x: unknown): Code {\n return new _Code(safeStringify(x))\n}\n\nexport function safeStringify(x: unknown): string {\n return JSON.stringify(x)\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\")\n}\n\nexport function getProperty(key: Code | string | number): Code {\n return typeof key == \"string\" && IDENTIFIER.test(key) ? new _Code(`.${key}`) : _`[${key}]`\n}\n\n//Does best effort to format the name properly\nexport function getEsmExportName(key: Code | string | number): Code {\n if (typeof key == \"string\" && IDENTIFIER.test(key)) {\n return new _Code(`${key}`)\n }\n throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`)\n}\n\nexport function regexpCode(rx: RegExp): Code {\n return new _Code(rx.toString())\n}\n","import type {ScopeValueSets, NameValue, ValueScope, ValueScopeName} from \"./scope\"\nimport {_, nil, _Code, Code, Name, UsedNames, CodeItem, addCodeArg, _CodeOrName} from \"./code\"\nimport {Scope, varKinds} from \"./scope\"\n\nexport {_, str, strConcat, nil, getProperty, stringify, regexpCode, Name, Code} from \"./code\"\nexport {Scope, ScopeStore, ValueScope, ValueScopeName, ScopeValueSets, varKinds} from \"./scope\"\n\n// type for expressions that can be safely inserted in code without quotes\nexport type SafeExpr = Code | number | boolean | null\n\n// type that is either Code of function that adds code to CodeGen instance using its methods\nexport type Block = Code | (() => void)\n\nexport const operators = {\n GT: new _Code(\">\"),\n GTE: new _Code(\">=\"),\n LT: new _Code(\"<\"),\n LTE: new _Code(\"<=\"),\n EQ: new _Code(\"===\"),\n NEQ: new _Code(\"!==\"),\n NOT: new _Code(\"!\"),\n OR: new _Code(\"||\"),\n AND: new _Code(\"&&\"),\n ADD: new _Code(\"+\"),\n}\n\nabstract class Node {\n abstract readonly names: UsedNames\n\n optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n return this\n }\n\n optimizeNames(_names: UsedNames, _constants: Constants): this | undefined {\n return this\n }\n\n // get count(): number {\n // return 1\n // }\n}\n\nclass Def extends Node {\n constructor(private readonly varKind: Name, private readonly name: Name, private rhs?: SafeExpr) {\n super()\n }\n\n render({es5, _n}: CGOptions): string {\n const varKind = es5 ? varKinds.var : this.varKind\n const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`\n return `${varKind} ${this.name}${rhs};` + _n\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (!names[this.name.str]) return\n if (this.rhs) this.rhs = optimizeExpr(this.rhs, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return this.rhs instanceof _CodeOrName ? this.rhs.names : {}\n }\n}\n\nclass Assign extends Node {\n constructor(readonly lhs: Code, public rhs: SafeExpr, private readonly sideEffects?: boolean) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `${this.lhs} = ${this.rhs};` + _n\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (this.lhs instanceof Name && !names[this.lhs.str] && !this.sideEffects) return\n this.rhs = optimizeExpr(this.rhs, names, constants)\n return this\n }\n\n get names(): UsedNames {\n const names = this.lhs instanceof Name ? {} : {...this.lhs.names}\n return addExprNames(names, this.rhs)\n }\n}\n\nclass AssignOp extends Assign {\n constructor(lhs: Code, private readonly op: Code, rhs: SafeExpr, sideEffects?: boolean) {\n super(lhs, rhs, sideEffects)\n }\n\n render({_n}: CGOptions): string {\n return `${this.lhs} ${this.op}= ${this.rhs};` + _n\n }\n}\n\nclass Label extends Node {\n readonly names: UsedNames = {}\n constructor(readonly label: Name) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `${this.label}:` + _n\n }\n}\n\nclass Break extends Node {\n readonly names: UsedNames = {}\n constructor(readonly label?: Code) {\n super()\n }\n\n render({_n}: CGOptions): string {\n const label = this.label ? ` ${this.label}` : \"\"\n return `break${label};` + _n\n }\n}\n\nclass Throw extends Node {\n constructor(readonly error: Code) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `throw ${this.error};` + _n\n }\n\n get names(): UsedNames {\n return this.error.names\n }\n}\n\nclass AnyCode extends Node {\n constructor(private code: SafeExpr) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `${this.code};` + _n\n }\n\n optimizeNodes(): this | undefined {\n return `${this.code}` ? this : undefined\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this {\n this.code = optimizeExpr(this.code, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return this.code instanceof _CodeOrName ? this.code.names : {}\n }\n}\n\nabstract class ParentNode extends Node {\n constructor(readonly nodes: ChildNode[] = []) {\n super()\n }\n\n render(opts: CGOptions): string {\n return this.nodes.reduce((code, n) => code + n.render(opts), \"\")\n }\n\n optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n const {nodes} = this\n let i = nodes.length\n while (i--) {\n const n = nodes[i].optimizeNodes()\n if (Array.isArray(n)) nodes.splice(i, 1, ...n)\n else if (n) nodes[i] = n\n else nodes.splice(i, 1)\n }\n return nodes.length > 0 ? this : undefined\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n const {nodes} = this\n let i = nodes.length\n while (i--) {\n // iterating backwards improves 1-pass optimization\n const n = nodes[i]\n if (n.optimizeNames(names, constants)) continue\n subtractNames(names, n.names)\n nodes.splice(i, 1)\n }\n return nodes.length > 0 ? this : undefined\n }\n\n get names(): UsedNames {\n return this.nodes.reduce((names: UsedNames, n) => addNames(names, n.names), {})\n }\n\n // get count(): number {\n // return this.nodes.reduce((c, n) => c + n.count, 1)\n // }\n}\n\nabstract class BlockNode extends ParentNode {\n render(opts: CGOptions): string {\n return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n\n }\n}\n\nclass Root extends ParentNode {}\n\nclass Else extends BlockNode {\n static readonly kind = \"else\"\n}\n\nclass If extends BlockNode {\n static readonly kind = \"if\"\n else?: If | Else\n constructor(private condition: Code | boolean, nodes?: ChildNode[]) {\n super(nodes)\n }\n\n render(opts: CGOptions): string {\n let code = `if(${this.condition})` + super.render(opts)\n if (this.else) code += \"else \" + this.else.render(opts)\n return code\n }\n\n optimizeNodes(): If | ChildNode[] | undefined {\n super.optimizeNodes()\n const cond = this.condition\n if (cond === true) return this.nodes // else is ignored here\n let e = this.else\n if (e) {\n const ns = e.optimizeNodes()\n e = this.else = Array.isArray(ns) ? new Else(ns) : (ns as Else | undefined)\n }\n if (e) {\n if (cond === false) return e instanceof If ? e : e.nodes\n if (this.nodes.length) return this\n return new If(not(cond), e instanceof If ? [e] : e.nodes)\n }\n if (cond === false || !this.nodes.length) return undefined\n return this\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n this.else = this.else?.optimizeNames(names, constants)\n if (!(super.optimizeNames(names, constants) || this.else)) return\n this.condition = optimizeExpr(this.condition, names, constants)\n return this\n }\n\n get names(): UsedNames {\n const names = super.names\n addExprNames(names, this.condition)\n if (this.else) addNames(names, this.else.names)\n return names\n }\n\n // get count(): number {\n // return super.count + (this.else?.count || 0)\n // }\n}\n\nabstract class For extends BlockNode {\n static readonly kind = \"for\"\n}\n\nclass ForLoop extends For {\n constructor(private iteration: Code) {\n super()\n }\n\n render(opts: CGOptions): string {\n return `for(${this.iteration})` + super.render(opts)\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (!super.optimizeNames(names, constants)) return\n this.iteration = optimizeExpr(this.iteration, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return addNames(super.names, this.iteration.names)\n }\n}\n\nclass ForRange extends For {\n constructor(\n private readonly varKind: Name,\n private readonly name: Name,\n private readonly from: SafeExpr,\n private readonly to: SafeExpr\n ) {\n super()\n }\n\n render(opts: CGOptions): string {\n const varKind = opts.es5 ? varKinds.var : this.varKind\n const {name, from, to} = this\n return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts)\n }\n\n get names(): UsedNames {\n const names = addExprNames(super.names, this.from)\n return addExprNames(names, this.to)\n }\n}\n\nclass ForIter extends For {\n constructor(\n private readonly loop: \"of\" | \"in\",\n private readonly varKind: Name,\n private readonly name: Name,\n private iterable: Code\n ) {\n super()\n }\n\n render(opts: CGOptions): string {\n return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts)\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (!super.optimizeNames(names, constants)) return\n this.iterable = optimizeExpr(this.iterable, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return addNames(super.names, this.iterable.names)\n }\n}\n\nclass Func extends BlockNode {\n static readonly kind = \"func\"\n constructor(public name: Name, public args: Code, public async?: boolean) {\n super()\n }\n\n render(opts: CGOptions): string {\n const _async = this.async ? \"async \" : \"\"\n return `${_async}function ${this.name}(${this.args})` + super.render(opts)\n }\n}\n\nclass Return extends ParentNode {\n static readonly kind = \"return\"\n\n render(opts: CGOptions): string {\n return \"return \" + super.render(opts)\n }\n}\n\nclass Try extends BlockNode {\n catch?: Catch\n finally?: Finally\n\n render(opts: CGOptions): string {\n let code = \"try\" + super.render(opts)\n if (this.catch) code += this.catch.render(opts)\n if (this.finally) code += this.finally.render(opts)\n return code\n }\n\n optimizeNodes(): this {\n super.optimizeNodes()\n this.catch?.optimizeNodes() as Catch | undefined\n this.finally?.optimizeNodes() as Finally | undefined\n return this\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this {\n super.optimizeNames(names, constants)\n this.catch?.optimizeNames(names, constants)\n this.finally?.optimizeNames(names, constants)\n return this\n }\n\n get names(): UsedNames {\n const names = super.names\n if (this.catch) addNames(names, this.catch.names)\n if (this.finally) addNames(names, this.finally.names)\n return names\n }\n\n // get count(): number {\n // return super.count + (this.catch?.count || 0) + (this.finally?.count || 0)\n // }\n}\n\nclass Catch extends BlockNode {\n static readonly kind = \"catch\"\n constructor(readonly error: Name) {\n super()\n }\n\n render(opts: CGOptions): string {\n return `catch(${this.error})` + super.render(opts)\n }\n}\n\nclass Finally extends BlockNode {\n static readonly kind = \"finally\"\n render(opts: CGOptions): string {\n return \"finally\" + super.render(opts)\n }\n}\n\ntype StartBlockNode = If | For | Func | Return | Try\n\ntype LeafNode = Def | Assign | Label | Break | Throw | AnyCode\n\ntype ChildNode = StartBlockNode | LeafNode\n\ntype EndBlockNodeType =\n | typeof If\n | typeof Else\n | typeof For\n | typeof Func\n | typeof Return\n | typeof Catch\n | typeof Finally\n\ntype Constants = Record<string, SafeExpr | undefined>\n\nexport interface CodeGenOptions {\n es5?: boolean\n lines?: boolean\n ownProperties?: boolean\n}\n\ninterface CGOptions extends CodeGenOptions {\n _n: \"\\n\" | \"\"\n}\n\nexport class CodeGen {\n readonly _scope: Scope\n readonly _extScope: ValueScope\n readonly _values: ScopeValueSets = {}\n private readonly _nodes: ParentNode[]\n private readonly _blockStarts: number[] = []\n private readonly _constants: Constants = {}\n private readonly opts: CGOptions\n\n constructor(extScope: ValueScope, opts: CodeGenOptions = {}) {\n this.opts = {...opts, _n: opts.lines ? \"\\n\" : \"\"}\n this._extScope = extScope\n this._scope = new Scope({parent: extScope})\n this._nodes = [new Root()]\n }\n\n toString(): string {\n return this._root.render(this.opts)\n }\n\n // returns unique name in the internal scope\n name(prefix: string): Name {\n return this._scope.name(prefix)\n }\n\n // reserves unique name in the external scope\n scopeName(prefix: string): ValueScopeName {\n return this._extScope.name(prefix)\n }\n\n // reserves unique name in the external scope and assigns value to it\n scopeValue(prefixOrName: ValueScopeName | string, value: NameValue): Name {\n const name = this._extScope.value(prefixOrName, value)\n const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set())\n vs.add(name)\n return name\n }\n\n getScopeValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n return this._extScope.getValue(prefix, keyOrRef)\n }\n\n // return code that assigns values in the external scope to the names that are used internally\n // (same names that were returned by gen.scopeName or gen.scopeValue)\n scopeRefs(scopeName: Name): Code {\n return this._extScope.scopeRefs(scopeName, this._values)\n }\n\n scopeCode(): Code {\n return this._extScope.scopeCode(this._values)\n }\n\n private _def(\n varKind: Name,\n nameOrPrefix: Name | string,\n rhs?: SafeExpr,\n constant?: boolean\n ): Name {\n const name = this._scope.toName(nameOrPrefix)\n if (rhs !== undefined && constant) this._constants[name.str] = rhs\n this._leafNode(new Def(varKind, name, rhs))\n return name\n }\n\n // `const` declaration (`var` in es5 mode)\n const(nameOrPrefix: Name | string, rhs: SafeExpr, _constant?: boolean): Name {\n return this._def(varKinds.const, nameOrPrefix, rhs, _constant)\n }\n\n // `let` declaration with optional assignment (`var` in es5 mode)\n let(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n return this._def(varKinds.let, nameOrPrefix, rhs, _constant)\n }\n\n // `var` declaration with optional assignment\n var(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n return this._def(varKinds.var, nameOrPrefix, rhs, _constant)\n }\n\n // assignment code\n assign(lhs: Code, rhs: SafeExpr, sideEffects?: boolean): CodeGen {\n return this._leafNode(new Assign(lhs, rhs, sideEffects))\n }\n\n // `+=` code\n add(lhs: Code, rhs: SafeExpr): CodeGen {\n return this._leafNode(new AssignOp(lhs, operators.ADD, rhs))\n }\n\n // appends passed SafeExpr to code or executes Block\n code(c: Block | SafeExpr): CodeGen {\n if (typeof c == \"function\") c()\n else if (c !== nil) this._leafNode(new AnyCode(c))\n return this\n }\n\n // returns code for object literal for the passed argument list of key-value pairs\n object(...keyValues: [Name | string, SafeExpr | string][]): _Code {\n const code: CodeItem[] = [\"{\"]\n for (const [key, value] of keyValues) {\n if (code.length > 1) code.push(\",\")\n code.push(key)\n if (key !== value || this.opts.es5) {\n code.push(\":\")\n addCodeArg(code, value)\n }\n }\n code.push(\"}\")\n return new _Code(code)\n }\n\n // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n if(condition: Code | boolean, thenBody?: Block, elseBody?: Block): CodeGen {\n this._blockNode(new If(condition))\n\n if (thenBody && elseBody) {\n this.code(thenBody).else().code(elseBody).endIf()\n } else if (thenBody) {\n this.code(thenBody).endIf()\n } else if (elseBody) {\n throw new Error('CodeGen: \"else\" body without \"then\" body')\n }\n return this\n }\n\n // `else if` clause - invalid without `if` or after `else` clauses\n elseIf(condition: Code | boolean): CodeGen {\n return this._elseNode(new If(condition))\n }\n\n // `else` clause - only valid after `if` or `else if` clauses\n else(): CodeGen {\n return this._elseNode(new Else())\n }\n\n // end `if` statement (needed if gen.if was used only with condition)\n endIf(): CodeGen {\n return this._endBlockNode(If, Else)\n }\n\n private _for(node: For, forBody?: Block): CodeGen {\n this._blockNode(node)\n if (forBody) this.code(forBody).endFor()\n return this\n }\n\n // a generic `for` clause (or statement if `forBody` is passed)\n for(iteration: Code, forBody?: Block): CodeGen {\n return this._for(new ForLoop(iteration), forBody)\n }\n\n // `for` statement for a range of values\n forRange(\n nameOrPrefix: Name | string,\n from: SafeExpr,\n to: SafeExpr,\n forBody: (index: Name) => void,\n varKind: Code = this.opts.es5 ? varKinds.var : varKinds.let\n ): CodeGen {\n const name = this._scope.toName(nameOrPrefix)\n return this._for(new ForRange(varKind, name, from, to), () => forBody(name))\n }\n\n // `for-of` statement (in es5 mode replace with a normal for loop)\n forOf(\n nameOrPrefix: Name | string,\n iterable: Code,\n forBody: (item: Name) => void,\n varKind: Code = varKinds.const\n ): CodeGen {\n const name = this._scope.toName(nameOrPrefix)\n if (this.opts.es5) {\n const arr = iterable instanceof Name ? iterable : this.var(\"_arr\", iterable)\n return this.forRange(\"_i\", 0, _`${arr}.length`, (i) => {\n this.var(name, _`${arr}[${i}]`)\n forBody(name)\n })\n }\n return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name))\n }\n\n // `for-in` statement.\n // With option `ownProperties` replaced with a `for-of` loop for object keys\n forIn(\n nameOrPrefix: Name | string,\n obj: Code,\n forBody: (item: Name) => void,\n varKind: Code = this.opts.es5 ? varKinds.var : varKinds.const\n ): CodeGen {\n if (this.opts.ownProperties) {\n return this.forOf(nameOrPrefix, _`Object.keys(${obj})`, forBody)\n }\n const name = this._scope.toName(nameOrPrefix)\n return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name))\n }\n\n // end `for` loop\n endFor(): CodeGen {\n return this._endBlockNode(For)\n }\n\n // `label` statement\n label(label: Name): CodeGen {\n return this._leafNode(new Label(label))\n }\n\n // `break` statement\n break(label?: Code): CodeGen {\n return this._leafNode(new Break(label))\n }\n\n // `return` statement\n return(value: Block | SafeExpr): CodeGen {\n const node = new Return()\n this._blockNode(node)\n this.code(value)\n if (node.nodes.length !== 1) throw new Error('CodeGen: \"return\" should have one node')\n return this._endBlockNode(Return)\n }\n\n // `try` statement\n try(tryBody: Block, catchCode?: (e: Name) => void, finallyCode?: Block): CodeGen {\n if (!catchCode && !finallyCode) throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"')\n const node = new Try()\n this._blockNode(node)\n this.code(tryBody)\n if (catchCode) {\n const error = this.name(\"e\")\n this._currNode = node.catch = new Catch(error)\n catchCode(error)\n }\n if (finallyCode) {\n this._currNode = node.finally = new Finally()\n this.code(finallyCode)\n }\n return this._endBlockNode(Catch, Finally)\n }\n\n // `throw` statement\n throw(error: Code): CodeGen {\n return this._leafNode(new Throw(error))\n }\n\n // start self-balancing block\n block(body?: Block, nodeCount?: number): CodeGen {\n this._blockStarts.push(this._nodes.length)\n if (body) this.code(body).endBlock(nodeCount)\n return this\n }\n\n // end the current self-balancing block\n endBlock(nodeCount?: number): CodeGen {\n const len = this._blockStarts.pop()\n if (len === undefined) throw new Error(\"CodeGen: not in self-balancing block\")\n const toClose = this._nodes.length - len\n if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`)\n }\n this._nodes.length = len\n return this\n }\n\n // `function` heading (or definition if funcBody is passed)\n func(name: Name, args: Code = nil, async?: boolean, funcBody?: Block): CodeGen {\n this._blockNode(new Func(name, args, async))\n if (funcBody) this.code(funcBody).endFunc()\n return this\n }\n\n // end function definition\n endFunc(): CodeGen {\n return this._endBlockNode(Func)\n }\n\n optimize(n = 1): void {\n while (n-- > 0) {\n this._root.optimizeNodes()\n this._root.optimizeNames(this._root.names, this._constants)\n }\n }\n\n private _leafNode(node: LeafNode): CodeGen {\n this._currNode.nodes.push(node)\n return this\n }\n\n private _blockNode(node: StartBlockNode): void {\n this._currNode.nodes.push(node)\n this._nodes.push(node)\n }\n\n private _endBlockNode(N1: EndBlockNodeType, N2?: EndBlockNodeType): CodeGen {\n const n = this._currNode\n if (n instanceof N1 || (N2 && n instanceof N2)) {\n this._nodes.pop()\n return this\n }\n throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`)\n }\n\n private _elseNode(node: If | Else): CodeGen {\n const n = this._currNode\n if (!(n instanceof If)) {\n throw new Error('CodeGen: \"else\" without \"if\"')\n }\n this._currNode = n.else = node\n return this\n }\n\n private get _root(): Root {\n return this._nodes[0] as Root\n }\n\n private get _currNode(): ParentNode {\n const ns = this._nodes\n return ns[ns.length - 1]\n }\n\n private set _currNode(node: ParentNode) {\n const ns = this._nodes\n ns[ns.length - 1] = node\n }\n\n // get nodeCount(): number {\n // return this._root.count\n // }\n}\n\nfunction addNames(names: UsedNames, from: UsedNames): UsedNames {\n for (const n in from) names[n] = (names[n] || 0) + (from[n] || 0)\n return names\n}\n\nfunction addExprNames(names: UsedNames, from: SafeExpr): UsedNames {\n return from instanceof _CodeOrName ? addNames(names, from.names) : names\n}\n\nfunction optimizeExpr<T extends SafeExpr | Code>(expr: T, names: UsedNames, constants: Constants): T\nfunction optimizeExpr(expr: SafeExpr, names: UsedNames, constants: Constants): SafeExpr {\n if (expr instanceof Name) return replaceName(expr)\n if (!canOptimize(expr)) return expr\n return new _Code(\n expr._items.reduce((items: CodeItem[], c: SafeExpr | string) => {\n if (c instanceof Name) c = replaceName(c)\n if (c instanceof _Code) items.push(...c._items)\n else items.push(c)\n return items\n }, [])\n )\n\n function replaceName(n: Name): SafeExpr {\n const c = constants[n.str]\n if (c === undefined || names[n.str] !== 1) return n\n delete names[n.str]\n return c\n }\n\n function canOptimize(e: SafeExpr): e is _Code {\n return (\n e instanceof _Code &&\n e._items.some(\n (c) => c instanceof Name && names[c.str] === 1 && constants[c.str] !== undefined\n )\n )\n }\n}\n\nfunction subtractNames(names: UsedNames, from: UsedNames): void {\n for (const n in from) names[n] = (names[n] || 0) - (from[n] || 0)\n}\n\nexport function not<T extends Code | SafeExpr>(x: T): T\nexport function not(x: Code | SafeExpr): Code | SafeExpr {\n return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : _`!${par(x)}`\n}\n\nconst andCode = mappend(operators.AND)\n\n// boolean AND (&&) expression with the passed arguments\nexport function and(...args: Code[]): Code {\n return args.reduce(andCode)\n}\n\nconst orCode = mappend(operators.OR)\n\n// boolean OR (||) expression with the passed arguments\nexport function or(...args: Code[]): Code {\n return args.reduce(orCode)\n}\n\ntype MAppend = (x: Code, y: Code) => Code\n\nfunction mappend(op: Code): MAppend {\n return (x, y) => (x === nil ? y : y === nil ? x : _`${par(x)} ${op} ${par(y)}`)\n}\n\nfunction par(x: Code): Code {\n return x instanceof Name ? x : _`(${x})`\n}\n","import {_, nil, Code, Name} from \"./code\"\n\ninterface NameGroup {\n prefix: string\n index: number\n}\n\nexport interface NameValue {\n ref: ValueReference // this is the reference to any value that can be referred to from generated code via `globals` var in the closure\n key?: unknown // any key to identify a global to avoid duplicates, if not passed ref is used\n code?: Code // this is the code creating the value needed for standalone code wit_out closure - can be a primitive value, function or import (`require`)\n}\n\nexport type ValueReference = unknown // possibly make CodeGen parameterized type on this type\n\nclass ValueError extends Error {\n readonly value?: NameValue\n constructor(name: ValueScopeName) {\n super(`CodeGen: \"code\" for ${name} not defined`)\n this.value = name.value\n }\n}\n\ninterface ScopeOptions {\n prefixes?: Set<string>\n parent?: Scope\n}\n\ninterface ValueScopeOptions extends ScopeOptions {\n scope: ScopeStore\n es5?: boolean\n lines?: boolean\n}\n\nexport type ScopeStore = Record<string, ValueReference[] | undefined>\n\ntype ScopeValues = {\n [Prefix in string]?: Map<unknown, ValueScopeName>\n}\n\nexport type ScopeValueSets = {\n [Prefix in string]?: Set<ValueScopeName>\n}\n\nexport enum UsedValueState {\n Started,\n Completed,\n}\n\nexport type UsedScopeValues = {\n [Prefix in string]?: Map<ValueScopeName, UsedValueState | undefined>\n}\n\nexport const varKinds = {\n const: new Name(\"const\"),\n let: new Name(\"let\"),\n var: new Name(\"var\"),\n}\n\nexport class Scope {\n protected readonly _names: {[Prefix in string]?: NameGroup} = {}\n protected readonly _prefixes?: Set<string>\n protected readonly _parent?: Scope\n\n constructor({prefixes, parent}: ScopeOptions = {}) {\n this._prefixes = prefixes\n this._parent = parent\n }\n\n toName(nameOrPrefix: Name | string): Name {\n return nameOrPrefix instanceof Name ? nameOrPrefix : this.name(nameOrPrefix)\n }\n\n name(prefix: string): Name {\n return new Name(this._newName(prefix))\n }\n\n protected _newName(prefix: string): string {\n const ng = this._names[prefix] || this._nameGroup(prefix)\n return `${prefix}${ng.index++}`\n }\n\n private _nameGroup(prefix: string): NameGroup {\n if (this._parent?._prefixes?.has(prefix) || (this._prefixes && !this._prefixes.has(prefix))) {\n throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`)\n }\n return (this._names[prefix] = {prefix, index: 0})\n }\n}\n\ninterface ScopePath {\n property: string\n itemIndex: number\n}\n\nexport class ValueScopeName extends Name {\n readonly prefix: string\n value?: NameValue\n scopePath?: Code\n\n constructor(prefix: string, nameStr: string) {\n super(nameStr)\n this.prefix = prefix\n }\n\n setValue(value: NameValue, {property, itemIndex}: ScopePath): void {\n this.value = value\n this.scopePath = _`.${new Name(property)}[${itemIndex}]`\n }\n}\n\ninterface VSOptions extends ValueScopeOptions {\n _n: Code\n}\n\nconst line = _`\\n`\n\nexport class ValueScope extends Scope {\n protected readonly _values: ScopeValues = {}\n protected readonly _scope: ScopeStore\n readonly opts: VSOptions\n\n constructor(opts: ValueScopeOptions) {\n super(opts)\n this._scope = opts.scope\n this.opts = {...opts, _n: opts.lines ? line : nil}\n }\n\n get(): ScopeStore {\n return this._scope\n }\n\n name(prefix: string): ValueScopeName {\n return new ValueScopeName(prefix, this._newName(prefix))\n }\n\n value(nameOrPrefix: ValueScopeName | string, value: NameValue): ValueScopeName {\n if (value.ref === undefined) throw new Error(\"CodeGen: ref must be passed in value\")\n const name = this.toName(nameOrPrefix) as ValueScopeName\n const {prefix} = name\n const valueKey = value.key ?? value.ref\n let vs = this._values[prefix]\n if (vs) {\n const _name = vs.get(valueKey)\n if (_name) return _name\n } else {\n vs = this._values[prefix] = new Map()\n }\n vs.set(valueKey, name)\n\n const s = this._scope[prefix] || (this._scope[prefix] = [])\n const itemIndex = s.length\n s[itemIndex] = value.ref\n name.setValue(value, {property: prefix, itemIndex})\n return name\n }\n\n getValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n const vs = this._values[prefix]\n if (!vs) return\n return vs.get(keyOrRef)\n }\n\n scopeRefs(scopeName: Name, values: ScopeValues | ScopeValueSets = this._values): Code {\n return this._reduceValues(values, (name: ValueScopeName) => {\n if (name.scopePath === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n return _`${scopeName}${name.scopePath}`\n })\n }\n\n scopeCode(\n values: ScopeValues | ScopeValueSets = this._values,\n usedValues?: UsedScopeValues,\n getCode?: (n: ValueScopeName) => Code | undefined\n ): Code {\n return this._reduceValues(\n values,\n (name: ValueScopeName) => {\n if (name.value === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n return name.value.code\n },\n usedValues,\n getCode\n )\n }\n\n private _reduceValues(\n values: ScopeValues | ScopeValueSets,\n valueCode: (n: ValueScopeName) => Code | undefined,\n usedValues: UsedScopeValues = {},\n getCode?: (n: ValueScopeName) => Code | undefined\n ): Code {\n let code: Code = nil\n for (const prefix in values) {\n const vs = values[prefix]\n if (!vs) continue\n const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map())\n vs.forEach((name: ValueScopeName) => {\n if (nameSet.has(name)) return\n nameSet.set(name, UsedValueState.Started)\n let c = valueCode(name)\n if (c) {\n const def = this.opts.es5 ? varKinds.var : varKinds.const\n code = _`${code}${def} ${name} = ${c};${this.opts._n}`\n } else if ((c = getCode?.(name))) {\n code = _`${code}${c}${this.opts._n}`\n } else {\n throw new ValueError(name)\n }\n nameSet.set(name, UsedValueState.Completed)\n })\n }\n return code\n }\n}\n","import type {KeywordErrorCxt, KeywordErrorDefinition} from \"../types\"\nimport type {SchemaCxt} from \"./index\"\nimport {CodeGen, _, str, strConcat, Code, Name} from \"./codegen\"\nimport {SafeExpr} from \"./codegen/code\"\nimport {getErrorPath, Type} from \"./util\"\nimport N from \"./names\"\n\nexport const keywordError: KeywordErrorDefinition = {\n message: ({keyword}) => str`must pass \"${keyword}\" keyword validation`,\n}\n\nexport const keyword$DataError: KeywordErrorDefinition = {\n message: ({keyword, schemaType}) =>\n schemaType\n ? str`\"${keyword}\" keyword must be ${schemaType} ($data)`\n : str`\"${keyword}\" keyword is invalid ($data)`,\n}\n\nexport interface ErrorPaths {\n instancePath?: Code\n schemaPath?: string\n parentSchema?: boolean\n}\n\nexport function reportError(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition = keywordError,\n errorPaths?: ErrorPaths,\n overrideAllErrors?: boolean\n): void {\n const {it} = cxt\n const {gen, compositeRule, allErrors} = it\n const errObj = errorObjectCode(cxt, error, errorPaths)\n if (overrideAllErrors ?? (compositeRule || allErrors)) {\n addError(gen, errObj)\n } else {\n returnErrors(it, _`[${errObj}]`)\n }\n}\n\nexport function reportExtraError(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition = keywordError,\n errorPaths?: ErrorPaths\n): void {\n const {it} = cxt\n const {gen, compositeRule, allErrors} = it\n const errObj = errorObjectCode(cxt, error, errorPaths)\n addError(gen, errObj)\n if (!(compositeRule || allErrors)) {\n returnErrors(it, N.vErrors)\n }\n}\n\nexport function resetErrorsCount(gen: CodeGen, errsCount: Name): void {\n gen.assign(N.errors, errsCount)\n gen.if(_`${N.vErrors} !== null`, () =>\n gen.if(\n errsCount,\n () => gen.assign(_`${N.vErrors}.length`, errsCount),\n () => gen.assign(N.vErrors, null)\n )\n )\n}\n\nexport function extendErrors({\n gen,\n keyword,\n schemaValue,\n data,\n errsCount,\n it,\n}: KeywordErrorCxt): void {\n /* istanbul ignore if */\n if (errsCount === undefined) throw new Error(\"ajv implementation error\")\n const err = gen.name(\"err\")\n gen.forRange(\"i\", errsCount, N.errors, (i) => {\n gen.const(err, _`${N.vErrors}[${i}]`)\n gen.if(_`${err}.instancePath === undefined`, () =>\n gen.assign(_`${err}.instancePath`, strConcat(N.instancePath, it.errorPath))\n )\n gen.assign(_`${err}.schemaPath`, str`${it.errSchemaPath}/${keyword}`)\n if (it.opts.verbose) {\n gen.assign(_`${err}.schema`, schemaValue)\n gen.assign(_`${err}.data`, data)\n }\n })\n}\n\nfunction addError(gen: CodeGen, errObj: Code): void {\n const err = gen.const(\"err\", errObj)\n gen.if(\n _`${N.vErrors} === null`,\n () => gen.assign(N.vErrors, _`[${err}]`),\n _`${N.vErrors}.push(${err})`\n )\n gen.code(_`${N.errors}++`)\n}\n\nfunction returnErrors(it: SchemaCxt, errs: Code): void {\n const {gen, validateName, schemaEnv} = it\n if (schemaEnv.$async) {\n gen.throw(_`new ${it.ValidationError as Name}(${errs})`)\n } else {\n gen.assign(_`${validateName}.errors`, errs)\n gen.return(false)\n }\n}\n\nconst E = {\n keyword: new Name(\"keyword\"),\n schemaPath: new Name(\"schemaPath\"), // also used in JTD errors\n params: new Name(\"params\"),\n propertyName: new Name(\"propertyName\"),\n message: new Name(\"message\"),\n schema: new Name(\"schema\"),\n parentSchema: new Name(\"parentSchema\"),\n}\n\nfunction errorObjectCode(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition,\n errorPaths?: ErrorPaths\n): Code {\n const {createErrors} = cxt.it\n if (createErrors === false) return _`{}`\n return errorObject(cxt, error, errorPaths)\n}\n\nfunction errorObject(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition,\n errorPaths: ErrorPaths = {}\n): Code {\n const {gen, it} = cxt\n const keyValues: [Name, SafeExpr | string][] = [\n errorInstancePath(it, errorPaths),\n errorSchemaPath(cxt, errorPaths),\n ]\n extraErrorProps(cxt, error, keyValues)\n return gen.object(...keyValues)\n}\n\nfunction errorInstancePath({errorPath}: SchemaCxt, {instancePath}: ErrorPaths): [Name, Code] {\n const instPath = instancePath\n ? str`${errorPath}${getErrorPath(instancePath, Type.Str)}`\n : errorPath\n return [N.instancePath, strConcat(N.instancePath, instPath)]\n}\n\nfunction errorSchemaPath(\n {keyword, it: {errSchemaPath}}: KeywordErrorCxt,\n {schemaPath, parentSchema}: ErrorPaths\n): [Name, string | Code] {\n let schPath = parentSchema ? errSchemaPath : str`${errSchemaPath}/${keyword}`\n if (schemaPath) {\n schPath = str`${schPath}${getErrorPath(schemaPath, Type.Str)}`\n }\n return [E.schemaPath, schPath]\n}\n\nfunction extraErrorProps(\n cxt: KeywordErrorCxt,\n {params, message}: KeywordErrorDefinition,\n keyValues: [Name, SafeExpr | string][]\n): void {\n const {keyword, data, schemaValue, it} = cxt\n const {opts, propertyName, topSchemaRef, schemaPath} = it\n keyValues.push(\n [E.keyword, keyword],\n [E.params, typeof params == \"function\" ? params(cxt) : params || _`{}`]\n )\n if (opts.messages) {\n keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message])\n }\n if (opts.verbose) {\n keyValues.push(\n [E.schema, schemaValue],\n [E.parentSchema, _`${topSchemaRef}${schemaPath}`],\n [N.data, data]\n )\n }\n if (propertyName) keyValues.push([E.propertyName, propertyName])\n}\n","import type {\n AnySchema,\n AnySchemaObject,\n AnyValidateFunction,\n AsyncValidateFunction,\n EvaluatedProperties,\n EvaluatedItems,\n} from \"../types\"\nimport type Ajv from \"../core\"\nimport type {InstanceOptions} from \"../core\"\nimport {CodeGen, _, nil, stringify, Name, Code, ValueScopeName} from \"./codegen\"\nimport ValidationError from \"../runtime/validation_error\"\nimport N from \"./names\"\nimport {LocalRefs, getFullPath, _getFullPath, inlineRef, normalizeId, resolveUrl} from \"./resolve\"\nimport {schemaHasRulesButRef, unescapeFragment} from \"./util\"\nimport {validateFunctionCode} from \"./validate\"\nimport * as URI from \"uri-js\"\nimport {JSONType} from \"./rules\"\n\nexport type SchemaRefs = {\n [Ref in string]?: SchemaEnv | AnySchema\n}\n\nexport interface SchemaCxt {\n readonly gen: CodeGen\n readonly allErrors?: boolean // validation mode - whether to collect all errors or break on error\n readonly data: Name // Name with reference to the current part of data instance\n readonly parentData: Name // should be used in keywords modifying data\n readonly parentDataProperty: Code | number // should be used in keywords modifying data\n readonly dataNames: Name[]\n readonly dataPathArr: (Code | number)[]\n readonly dataLevel: number // the level of the currently validated data,\n // it can be used to access both the property names and the data on all levels from the top.\n dataTypes: JSONType[] // data types applied to the current part of data instance\n definedProperties: Set<string> // set of properties to keep track of for required checks\n readonly topSchemaRef: Code\n readonly validateName: Name\n evaluated?: Name\n readonly ValidationError?: Name\n readonly schema: AnySchema // current schema object - equal to parentSchema passed via KeywordCxt\n readonly schemaEnv: SchemaEnv\n readonly rootId: string\n baseId: string // the current schema base URI that should be used as the base for resolving URIs in references (\\$ref)\n readonly schemaPath: Code // the run-time expression that evaluates to the property name of the current schema\n readonly errSchemaPath: string // this is actual string, should not be changed to Code\n readonly errorPath: Code\n readonly propertyName?: Name\n readonly compositeRule?: boolean // true indicates that the current schema is inside the compound keyword,\n // where failing some rule doesn't mean validation failure (`anyOf`, `oneOf`, `not`, `if`).\n // This flag is used to determine whether you can return validation result immediately after any error in case the option `allErrors` is not `true.\n // You only need to use it if you have many steps in your keywords and potentially can define multiple errors.\n props?: EvaluatedProperties | Name // properties evaluated by this schema - used by parent schema or assigned to validation function\n items?: EvaluatedItems | Name // last item evaluated by this schema - used by parent schema or assigned to validation function\n jtdDiscriminator?: string\n jtdMetadata?: boolean\n readonly createErrors?: boolean\n readonly opts: InstanceOptions // Ajv instance option.\n readonly self: Ajv // current Ajv instance\n}\n\nexport interface SchemaObjCxt extends SchemaCxt {\n readonly schema: AnySchemaObject\n}\ninterface SchemaEnvArgs {\n readonly schema: AnySchema\n readonly schemaId?: \"$id\" | \"id\"\n readonly root?: SchemaEnv\n readonly baseId?: string\n readonly schemaPath?: string\n readonly localRefs?: LocalRefs\n readonly meta?: boolean\n}\n\nexport class SchemaEnv implements SchemaEnvArgs {\n readonly schema: AnySchema\n readonly schemaId?: \"$id\" | \"id\"\n readonly root: SchemaEnv\n baseId: string // TODO possibly, it should be readonly\n schemaPath?: string\n localRefs?: LocalRefs\n readonly meta?: boolean\n readonly $async?: boolean // true if the current schema is asynchronous.\n readonly refs: SchemaRefs = {}\n readonly dynamicAnchors: {[Ref in string]?: true} = {}\n validate?: AnyValidateFunction\n validateName?: ValueScopeName\n serialize?: (data: unknown) => string\n serializeName?: ValueScopeName\n parse?: (data: string) => unknown\n parseName?: ValueScopeName\n\n constructor(env: SchemaEnvArgs) {\n let schema: AnySchemaObject | undefined\n if (typeof env.schema == \"object\") schema = env.schema\n this.schema = env.schema\n this.schemaId = env.schemaId\n this.root = env.root || this\n this.baseId = env.baseId ?? normalizeId(schema?.[env.schemaId || \"$id\"])\n this.schemaPath = env.schemaPath\n this.localRefs = env.localRefs\n this.meta = env.meta\n this.$async = schema?.$async\n this.refs = {}\n }\n}\n\n// let codeSize = 0\n// let nodeCount = 0\n\n// Compiles schema in SchemaEnv\nexport function compileSchema(this: Ajv, sch: SchemaEnv): SchemaEnv {\n // TODO refactor - remove compilations\n const _sch = getCompilingSchema.call(this, sch)\n if (_sch) return _sch\n const rootId = getFullPath(this.opts.uriResolver, sch.root.baseId) // TODO if getFullPath removed 1 tests fails\n const {es5, lines} = this.opts.code\n const {ownProperties} = this.opts\n const gen = new CodeGen(this.scope, {es5, lines, ownProperties})\n let _ValidationError\n if (sch.$async) {\n _ValidationError = gen.scopeValue(\"Error\", {\n ref: ValidationError,\n code: _`require(\"ajv/dist/runtime/validation_error\").default`,\n })\n }\n\n const validateName = gen.scopeName(\"validate\")\n sch.validateName = validateName\n\n const schemaCxt: SchemaCxt = {\n gen,\n allErrors: this.opts.allErrors,\n data: N.data,\n parentData: N.parentData,\n parentDataProperty: N.parentDataProperty,\n dataNames: [N.data],\n dataPathArr: [nil], // TODO can its length be used as dataLevel if nil is removed?\n dataLevel: 0,\n dataTypes: [],\n definedProperties: new Set<string>(),\n topSchemaRef: gen.scopeValue(\n \"schema\",\n this.opts.code.source === true\n ? {ref: sch.schema, code: stringify(sch.schema)}\n : {ref: sch.schema}\n ),\n validateName,\n ValidationError: _ValidationError,\n schema: sch.schema,\n schemaEnv: sch,\n rootId,\n baseId: sch.baseId || rootId,\n schemaPath: nil,\n errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n errorPath: _`\"\"`,\n opts: this.opts,\n self: this,\n }\n\n let sourceCode: string | undefined\n try {\n this._compilations.add(sch)\n validateFunctionCode(schemaCxt)\n gen.optimize(this.opts.code.optimize)\n // gen.optimize(1)\n const validateCode = gen.toString()\n sourceCode = `${gen.scopeRefs(N.scope)}return ${validateCode}`\n // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n if (this.opts.code.process) sourceCode = this.opts.code.process(sourceCode, sch)\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n const makeValidate = new Function(`${N.self}`, `${N.scope}`, sourceCode)\n const validate: AnyValidateFunction = makeValidate(this, this.scope.get())\n this.scope.value(validateName, {ref: validate})\n\n validate.errors = null\n validate.schema = sch.schema\n validate.schemaEnv = sch\n if (sch.$async) (validate as AsyncValidateFunction).$async = true\n if (this.opts.code.source === true) {\n validate.source = {validateName, validateCode, scopeValues: gen._values}\n }\n if (this.opts.unevaluated) {\n const {props, items} = schemaCxt\n validate.evaluated = {\n props: props instanceof Name ? undefined : props,\n items: items instanceof Name ? undefined : items,\n dynamicProps: props instanceof Name,\n dynamicItems: items instanceof Name,\n }\n if (validate.source) validate.source.evaluated = stringify(validate.evaluated)\n }\n sch.validate = validate\n return sch\n } catch (e) {\n delete sch.validate\n delete sch.validateName\n if (sourceCode) this.logger.error(\"Error compiling schema, function code:\", sourceCode)\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n throw e\n } finally {\n this._compilations.delete(sch)\n }\n}\n\nexport function resolveRef(\n this: Ajv,\n root: SchemaEnv,\n baseId: string,\n ref: string\n): AnySchema | SchemaEnv | undefined {\n ref = resolveUrl(this.opts.uriResolver, baseId, ref)\n const schOrFunc = root.refs[ref]\n if (schOrFunc) return schOrFunc\n\n let _sch = resolve.call(this, root, ref)\n if (_sch === undefined) {\n const schema = root.localRefs?.[ref] // TODO maybe localRefs should hold SchemaEnv\n const {schemaId} = this.opts\n if (schema) _sch = new SchemaEnv({schema, schemaId, root, baseId})\n }\n\n if (_sch === undefined) return\n return (root.refs[ref] = inlineOrCompile.call(this, _sch))\n}\n\nfunction inlineOrCompile(this: Ajv, sch: SchemaEnv): AnySchema | SchemaEnv {\n if (inlineRef(sch.schema, this.opts.inlineRefs)) return sch.schema\n return sch.validate ? sch : compileSchema.call(this, sch)\n}\n\n// Index of schema compilation in the currently compiled list\nexport function getCompilingSchema(this: Ajv, schEnv: SchemaEnv): SchemaEnv | void {\n for (const sch of this._compilations) {\n if (sameSchemaEnv(sch, schEnv)) return sch\n }\n}\n\nfunction sameSchemaEnv(s1: SchemaEnv, s2: SchemaEnv): boolean {\n return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId\n}\n\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(\n this: Ajv,\n root: SchemaEnv, // information about the root schema for the current schema\n ref: string // reference to resolve\n): SchemaEnv | undefined {\n let sch\n while (typeof (sch = this.refs[ref]) == \"string\") ref = sch\n return sch || this.schemas[ref] || resolveSchema.call(this, root, ref)\n}\n\n// Resolve schema, its root and baseId\nexport function resolveSchema(\n this: Ajv,\n root: SchemaEnv, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\n ref: string // reference to resolve\n): SchemaEnv | undefined {\n const p = this.opts.uriResolver.parse(ref)\n const refPath = _getFullPath(this.opts.uriResolver, p)\n let baseId = getFullPath(this.opts.uriResolver, root.baseId, undefined)\n // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n return getJsonPointer.call(this, p, root)\n }\n\n const id = normalizeId(refPath)\n const schOrRef = this.refs[id] || this.schemas[id]\n if (typeof schOrRef == \"string\") {\n const sch = resolveSchema.call(this, root, schOrRef)\n if (typeof sch?.schema !== \"object\") return\n return getJsonPointer.call(this, p, sch)\n }\n\n if (typeof schOrRef?.schema !== \"object\") return\n if (!schOrRef.validate) compileSchema.call(this, schOrRef)\n if (id === normalizeId(ref)) {\n const {schema} = schOrRef\n const {schemaId} = this.opts\n const schId = schema[schemaId]\n if (schId) baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n return new SchemaEnv({schema, schemaId, root, baseId})\n }\n return getJsonPointer.call(this, p, schOrRef)\n}\n\nconst PREVENT_SCOPE_CHANGE = new Set([\n \"properties\",\n \"patternProperties\",\n \"enum\",\n \"dependencies\",\n \"definitions\",\n])\n\nfunction getJsonPointer(\n this: Ajv,\n parsedRef: URI.URIComponents,\n {baseId, schema, root}: SchemaEnv\n): SchemaEnv | undefined {\n if (parsedRef.fragment?.[0] !== \"/\") return\n for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n if (typeof schema === \"boolean\") return\n const partSchema = schema[unescapeFragment(part)]\n if (partSchema === undefined) return\n schema = partSchema\n // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n const schId = typeof schema === \"object\" && schema[this.opts.schemaId]\n if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n }\n }\n let env: SchemaEnv | undefined\n if (typeof schema != \"boolean\" && schema.$ref && !schemaHasRulesButRef(schema, this.RULES)) {\n const $ref = resolveUrl(this.opts.uriResolver, baseId, schema.$ref)\n env = resolveSchema.call(this, root, $ref)\n }\n // even though resolution failed we need to return SchemaEnv to throw exception\n // so that compileAsync loads missing schema.\n const {schemaId} = this.opts\n env = env || new SchemaEnv({schema, schemaId, root, baseId})\n if (env.schema !== env.root.schema) return env\n return undefined\n}\n","import {Name} from \"./codegen\"\n\nconst names = {\n // validation function arguments\n data: new Name(\"data\"), // data passed to validation function\n // args passed from referencing schema\n valCxt: new Name(\"valCxt\"), // validation/data context - should not be used directly, it is destructured to the names below\n instancePath: new Name(\"instancePath\"),\n parentData: new Name(\"parentData\"),\n parentDataProperty: new Name(\"parentDataProperty\"),\n rootData: new Name(\"rootData\"), // root data - same as the data passed to the first/top validation function\n dynamicAnchors: new Name(\"dynamicAnchors\"), // used to support recursiveRef and dynamicRef\n // function scoped variables\n vErrors: new Name(\"vErrors\"), // null or array of validation errors\n errors: new Name(\"errors\"), // counter of validation errors\n this: new Name(\"this\"),\n // \"globals\"\n self: new Name(\"self\"),\n scope: new Name(\"scope\"),\n // JTD serialize/parse name for JSON string and position\n json: new Name(\"json\"),\n jsonPos: new Name(\"jsonPos\"),\n jsonLen: new Name(\"jsonLen\"),\n jsonPart: new Name(\"jsonPart\"),\n}\n\nexport default names\n","import {resolveUrl, normalizeId, getFullPath} from \"./resolve\"\nimport type {UriResolver} from \"../types\"\n\nexport default class MissingRefError extends Error {\n readonly missingRef: string\n readonly missingSchema: string\n\n constructor(resolver: UriResolver, baseId: string, ref: string, msg?: string) {\n super(msg || `can't resolve reference ${ref} from id ${baseId}`)\n this.missingRef = resolveUrl(resolver, baseId, ref)\n this.missingSchema = normalizeId(getFullPath(resolver, this.missingRef))\n }\n}\n","import type {AnySchema, AnySchemaObject, UriResolver} from \"../types\"\nimport type Ajv from \"../ajv\"\nimport type {URIComponents} from \"uri-js\"\nimport {eachItem} from \"./util\"\nimport * as equal from \"fast-deep-equal\"\nimport * as traverse from \"json-schema-traverse\"\n\n// the hash of local references inside the schema (created by getSchemaRefs), used for inline resolution\nexport type LocalRefs = {[Ref in string]?: AnySchemaObject}\n\n// TODO refactor to use keyword definitions\nconst SIMPLE_INLINED = new Set([\n \"type\",\n \"format\",\n \"pattern\",\n \"maxLength\",\n \"minLength\",\n \"maxProperties\",\n \"minProperties\",\n \"maxItems\",\n \"minItems\",\n \"maximum\",\n \"minimum\",\n \"uniqueItems\",\n \"multipleOf\",\n \"required\",\n \"enum\",\n \"const\",\n])\n\nexport function inlineRef(schema: AnySchema, limit: boolean | number = true): boolean {\n if (typeof schema == \"boolean\") return true\n if (limit === true) return !hasRef(schema)\n if (!limit) return false\n return countKeys(schema) <= limit\n}\n\nconst REF_KEYWORDS = new Set([\n \"$ref\",\n \"$recursiveRef\",\n \"$recursiveAnchor\",\n \"$dynamicRef\",\n \"$dynamicAnchor\",\n])\n\nfunction hasRef(schema: AnySchemaObject): boolean {\n for (const key in schema) {\n if (REF_KEYWORDS.has(key)) return true\n const sch = schema[key]\n if (Array.isArray(sch) && sch.some(hasRef)) return true\n if (typeof sch == \"object\" && hasRef(sch)) return true\n }\n return false\n}\n\nfunction countKeys(schema: AnySchemaObject): number {\n let count = 0\n for (const key in schema) {\n if (key === \"$ref\") return Infinity\n count++\n if (SIMPLE_INLINED.has(key)) continue\n if (typeof schema[key] == \"object\") {\n eachItem(schema[key], (sch) => (count += countKeys(sch)))\n }\n if (count === Infinity) return Infinity\n }\n return count\n}\n\nexport function getFullPath(resolver: UriResolver, id = \"\", normalize?: boolean): string {\n if (normalize !== false) id = normalizeId(id)\n const p = resolver.parse(id)\n return _getFullPath(resolver, p)\n}\n\nexport function _getFullPath(resolver: UriResolver, p: URIComponents): string {\n const serialized = resolver.serialize(p)\n return serialized.split(\"#\")[0] + \"#\"\n}\n\nconst TRAILING_SLASH_HASH = /#\\/?$/\nexport function normalizeId(id: string | undefined): string {\n return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\"\n}\n\nexport function resolveUrl(resolver: UriResolver, baseId: string, id: string): string {\n id = normalizeId(id)\n return resolver.resolve(baseId, id)\n}\n\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i\n\nexport function getSchemaRefs(this: Ajv, schema: AnySchema, baseId: string): LocalRefs {\n if (typeof schema == \"boolean\") return {}\n const {schemaId, uriResolver} = this.opts\n const schId = normalizeId(schema[schemaId] || baseId)\n const baseIds: {[JsonPtr in string]?: string} = {\"\": schId}\n const pathPrefix = getFullPath(uriResolver, schId, false)\n const localRefs: LocalRefs = {}\n const schemaRefs: Set<string> = new Set()\n\n traverse(schema, {allKeys: true}, (sch, jsonPtr, _, parentJsonPtr) => {\n if (parentJsonPtr === undefined) return\n const fullPath = pathPrefix + jsonPtr\n let baseId = baseIds[parentJsonPtr]\n if (typeof sch[schemaId] == \"string\") baseId = addRef.call(this, sch[schemaId])\n addAnchor.call(this, sch.$anchor)\n addAnchor.call(this, sch.$dynamicAnchor)\n baseIds[jsonPtr] = baseId\n\n function addRef(this: Ajv, ref: string): string {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const _resolve = this.opts.uriResolver.resolve\n ref = normalizeId(baseId ? _resolve(baseId, ref) : ref)\n if (schemaRefs.has(ref)) throw ambiguos(ref)\n schemaRefs.add(ref)\n let schOrRef = this.refs[ref]\n if (typeof schOrRef == \"string\") schOrRef = this.refs[schOrRef]\n if (typeof schOrRef == \"object\") {\n checkAmbiguosRef(sch, schOrRef.schema, ref)\n } else if (ref !== normalizeId(fullPath)) {\n if (ref[0] === \"#\") {\n checkAmbiguosRef(sch, localRefs[ref], ref)\n localRefs[ref] = sch\n } else {\n this.refs[ref] = fullPath\n }\n }\n return ref\n }\n\n function addAnchor(this: Ajv, anchor: unknown): void {\n if (typeof anchor == \"string\") {\n if (!ANCHOR.test(anchor)) throw new Error(`invalid anchor \"${anchor}\"`)\n addRef.call(this, `#${anchor}`)\n }\n }\n })\n\n return localRefs\n\n function checkAmbiguosRef(sch1: AnySchema, sch2: AnySchema | undefined, ref: string): void {\n if (sch2 !== undefined && !equal(sch1, sch2)) throw ambiguos(ref)\n }\n\n function ambiguos(ref: string): Error {\n return new Error(`reference \"${ref}\" resolves to more than one schema`)\n }\n}\n","import type {AddedKeywordDefinition} from \"../types\"\n\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"] as const\n\nexport type JSONType = typeof _jsonTypes[number]\n\nconst jsonTypes: Set<string> = new Set(_jsonTypes)\n\nexport function isJSONType(x: unknown): x is JSONType {\n return typeof x == \"string\" && jsonTypes.has(x)\n}\n\ntype ValidationTypes = {\n [K in JSONType]: boolean | RuleGroup | undefined\n}\n\nexport interface ValidationRules {\n rules: RuleGroup[]\n post: RuleGroup\n all: {[Key in string]?: boolean | Rule} // rules that have to be validated\n keywords: {[Key in string]?: boolean} // all known keywords (superset of \"all\")\n types: ValidationTypes\n}\n\nexport interface RuleGroup {\n type?: JSONType\n rules: Rule[]\n}\n\n// This interface wraps KeywordDefinition because definition can have multiple keywords\nexport interface Rule {\n keyword: string\n definition: AddedKeywordDefinition\n}\n\nexport function getRules(): ValidationRules {\n const groups: Record<\"number\" | \"string\" | \"array\" | \"object\", RuleGroup> = {\n number: {type: \"number\", rules: []},\n string: {type: \"string\", rules: []},\n array: {type: \"array\", rules: []},\n object: {type: \"object\", rules: []},\n }\n return {\n types: {...groups, integer: true, boolean: true, null: true},\n rules: [{rules: []}, groups.number, groups.string, groups.array, groups.object],\n post: {rules: []},\n all: {},\n keywords: {},\n }\n}\n","import type {AnySchema, EvaluatedProperties, EvaluatedItems} from \"../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \".\"\nimport {_, getProperty, Code, Name, CodeGen} from \"./codegen\"\nimport {_Code} from \"./codegen/code\"\nimport type {Rule, ValidationRules} from \"./rules\"\n\n// TODO refactor to use Set\nexport function toHash<T extends string = string>(arr: T[]): {[K in T]?: true} {\n const hash: {[K in T]?: true} = {}\n for (const item of arr) hash[item] = true\n return hash\n}\n\nexport function alwaysValidSchema(it: SchemaCxt, schema: AnySchema): boolean | void {\n if (typeof schema == \"boolean\") return schema\n if (Object.keys(schema).length === 0) return true\n checkUnknownRules(it, schema)\n return !schemaHasRules(schema, it.self.RULES.all)\n}\n\nexport function checkUnknownRules(it: SchemaCxt, schema: AnySchema = it.schema): void {\n const {opts, self} = it\n if (!opts.strictSchema) return\n if (typeof schema === \"boolean\") return\n const rules = self.RULES.keywords\n for (const key in schema) {\n if (!rules[key]) checkStrictMode(it, `unknown keyword: \"${key}\"`)\n }\n}\n\nexport function schemaHasRules(\n schema: AnySchema,\n rules: {[Key in string]?: boolean | Rule}\n): boolean {\n if (typeof schema == \"boolean\") return !schema\n for (const key in schema) if (rules[key]) return true\n return false\n}\n\nexport function schemaHasRulesButRef(schema: AnySchema, RULES: ValidationRules): boolean {\n if (typeof schema == \"boolean\") return !schema\n for (const key in schema) if (key !== \"$ref\" && RULES.all[key]) return true\n return false\n}\n\nexport function schemaRefOrVal(\n {topSchemaRef, schemaPath}: SchemaObjCxt,\n schema: unknown,\n keyword: string,\n $data?: string | false\n): Code | number | boolean {\n if (!$data) {\n if (typeof schema == \"number\" || typeof schema == \"boolean\") return schema\n if (typeof schema == \"string\") return _`${schema}`\n }\n return _`${topSchemaRef}${schemaPath}${getProperty(keyword)}`\n}\n\nexport function unescapeFragment(str: string): string {\n return unescapeJsonPointer(decodeURIComponent(str))\n}\n\nexport function escapeFragment(str: string | number): string {\n return encodeURIComponent(escapeJsonPointer(str))\n}\n\nexport function escapeJsonPointer(str: string | number): string {\n if (typeof str == \"number\") return `${str}`\n return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")\n}\n\nexport function unescapeJsonPointer(str: string): string {\n return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\")\n}\n\nexport function eachItem<T>(xs: T | T[], f: (x: T) => void): void {\n if (Array.isArray(xs)) {\n for (const x of xs) f(x)\n } else {\n f(xs)\n }\n}\n\ntype SomeEvaluated = EvaluatedProperties | EvaluatedItems\n\ntype MergeEvaluatedFunc<T extends SomeEvaluated> = (\n gen: CodeGen,\n from: Name | T,\n to: Name | Exclude<T, true> | undefined,\n toName?: typeof Name\n) => Name | T\n\ninterface MakeMergeFuncArgs<T extends SomeEvaluated> {\n mergeNames: (gen: CodeGen, from: Name, to: Name) => void\n mergeToName: (gen: CodeGen, from: T, to: Name) => void\n mergeValues: (from: T, to: Exclude<T, true>) => T\n resultToName: (gen: CodeGen, res?: T) => Name\n}\n\nfunction makeMergeEvaluated<T extends SomeEvaluated>({\n mergeNames,\n mergeToName,\n mergeValues,\n resultToName,\n}: MakeMergeFuncArgs<T>): MergeEvaluatedFunc<T> {\n return (gen, from, to, toName) => {\n const res =\n to === undefined\n ? from\n : to instanceof Name\n ? (from instanceof Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n : from instanceof Name\n ? (mergeToName(gen, to, from), from)\n : mergeValues(from, to)\n return toName === Name && !(res instanceof Name) ? resultToName(gen, res) : res\n }\n}\n\ninterface MergeEvaluated {\n props: MergeEvaluatedFunc<EvaluatedProperties>\n items: MergeEvaluatedFunc<EvaluatedItems>\n}\n\nexport const mergeEvaluated: MergeEvaluated = {\n props: makeMergeEvaluated({\n mergeNames: (gen, from, to) =>\n gen.if(_`${to} !== true && ${from} !== undefined`, () => {\n gen.if(\n _`${from} === true`,\n () => gen.assign(to, true),\n () => gen.assign(to, _`${to} || {}`).code(_`Object.assign(${to}, ${from})`)\n )\n }),\n mergeToName: (gen, from, to) =>\n gen.if(_`${to} !== true`, () => {\n if (from === true) {\n gen.assign(to, true)\n } else {\n gen.assign(to, _`${to} || {}`)\n setEvaluated(gen, to, from)\n }\n }),\n mergeValues: (from, to) => (from === true ? true : {...from, ...to}),\n resultToName: evaluatedPropsToName,\n }),\n items: makeMergeEvaluated({\n mergeNames: (gen, from, to) =>\n gen.if(_`${to} !== true && ${from} !== undefined`, () =>\n gen.assign(to, _`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)\n ),\n mergeToName: (gen, from, to) =>\n gen.if(_`${to} !== true`, () =>\n gen.assign(to, from === true ? true : _`${to} > ${from} ? ${to} : ${from}`)\n ),\n mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n resultToName: (gen, items) => gen.var(\"items\", items),\n }),\n}\n\nexport function evaluatedPropsToName(gen: CodeGen, ps?: EvaluatedProperties): Name {\n if (ps === true) return gen.var(\"props\", true)\n const props = gen.var(\"props\", _`{}`)\n if (ps !== undefined) setEvaluated(gen, props, ps)\n return props\n}\n\nexport function setEvaluated(gen: CodeGen, props: Name, ps: {[K in string]?: true}): void {\n Object.keys(ps).forEach((p) => gen.assign(_`${props}${getProperty(p)}`, true))\n}\n\nconst snippets: {[S in string]?: _Code} = {}\n\nexport function useFunc(gen: CodeGen, f: {code: string}): Name {\n return gen.scopeValue(\"func\", {\n ref: f,\n code: snippets[f.code] || (snippets[f.code] = new _Code(f.code)),\n })\n}\n\nexport enum Type {\n Num,\n Str,\n}\n\nexport function getErrorPath(\n dataProp: Name | string | number,\n dataPropType?: Type,\n jsPropertySyntax?: boolean\n): Code | string {\n // let path\n if (dataProp instanceof Name) {\n const isNumber = dataPropType === Type.Num\n return jsPropertySyntax\n ? isNumber\n ? _`\"[\" + ${dataProp} + \"]\"`\n : _`\"['\" + ${dataProp} + \"']\"`\n : isNumber\n ? _`\"/\" + ${dataProp}`\n : _`\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")` // TODO maybe use global escapePointer\n }\n return jsPropertySyntax ? getProperty(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp)\n}\n\nexport function checkStrictMode(\n it: SchemaCxt,\n msg: string,\n mode: boolean | \"log\" = it.opts.strictSchema\n): void {\n if (!mode) return\n msg = `strict mode: ${msg}`\n if (mode === true) throw new Error(msg)\n it.self.logger.warn(msg)\n}\n","import type {AnySchemaObject} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport type {JSONType, RuleGroup, Rule} from \"../rules\"\n\nexport function schemaHasRulesForType(\n {schema, self}: SchemaObjCxt,\n type: JSONType\n): boolean | undefined {\n const group = self.RULES.types[type]\n return group && group !== true && shouldUseGroup(schema, group)\n}\n\nexport function shouldUseGroup(schema: AnySchemaObject, group: RuleGroup): boolean {\n return group.rules.some((rule) => shouldUseRule(schema, rule))\n}\n\nexport function shouldUseRule(schema: AnySchemaObject, rule: Rule): boolean | undefined {\n return (\n schema[rule.keyword] !== undefined ||\n rule.definition.implements?.some((kwd) => schema[kwd] !== undefined)\n )\n}\n","import type {KeywordErrorDefinition, KeywordErrorCxt} from \"../../types\"\nimport type {SchemaCxt} from \"..\"\nimport {reportError} from \"../errors\"\nimport {_, Name} from \"../codegen\"\nimport N from \"../names\"\n\nconst boolError: KeywordErrorDefinition = {\n message: \"boolean schema is false\",\n}\n\nexport function topBoolOrEmptySchema(it: SchemaCxt): void {\n const {gen, schema, validateName} = it\n if (schema === false) {\n falseSchemaError(it, false)\n } else if (typeof schema == \"object\" && schema.$async === true) {\n gen.return(N.data)\n } else {\n gen.assign(_`${validateName}.errors`, null)\n gen.return(true)\n }\n}\n\nexport function boolOrEmptySchema(it: SchemaCxt, valid: Name): void {\n const {gen, schema} = it\n if (schema === false) {\n gen.var(valid, false) // TODO var\n falseSchemaError(it)\n } else {\n gen.var(valid, true) // TODO var\n }\n}\n\nfunction falseSchemaError(it: SchemaCxt, overrideAllErrors?: boolean): void {\n const {gen, data} = it\n // TODO maybe some other interface should be used for non-keyword validation errors...\n const cxt: KeywordErrorCxt = {\n gen,\n keyword: \"false schema\",\n data,\n schema: false,\n schemaCode: false,\n schemaValue: false,\n params: {},\n it,\n }\n reportError(cxt, boolError, undefined, overrideAllErrors)\n}\n","import type {\n KeywordErrorDefinition,\n KeywordErrorCxt,\n ErrorObject,\n AnySchemaObject,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {isJSONType, JSONType} from \"../rules\"\nimport {schemaHasRulesForType} from \"./applicability\"\nimport {reportError} from \"../errors\"\nimport {_, nil, and, not, operators, Code, Name} from \"../codegen\"\nimport {toHash, schemaRefOrVal} from \"../util\"\n\nexport enum DataType {\n Correct,\n Wrong,\n}\n\nexport function getSchemaTypes(schema: AnySchemaObject): JSONType[] {\n const types = getJSONTypes(schema.type)\n const hasNull = types.includes(\"null\")\n if (hasNull) {\n if (schema.nullable === false) throw new Error(\"type: null contradicts nullable: false\")\n } else {\n if (!types.length && schema.nullable !== undefined) {\n throw new Error('\"nullable\" cannot be used without \"type\"')\n }\n if (schema.nullable === true) types.push(\"null\")\n }\n return types\n}\n\nexport function getJSONTypes(ts: unknown | unknown[]): JSONType[] {\n const types: unknown[] = Array.isArray(ts) ? ts : ts ? [ts] : []\n if (types.every(isJSONType)) return types\n throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"))\n}\n\nexport function coerceAndCheckDataType(it: SchemaObjCxt, types: JSONType[]): boolean {\n const {gen, data, opts} = it\n const coerceTo = coerceToTypes(types, opts.coerceTypes)\n const checkTypes =\n types.length > 0 &&\n !(coerceTo.length === 0 && types.length === 1 && schemaHasRulesForType(it, types[0]))\n if (checkTypes) {\n const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong)\n gen.if(wrongType, () => {\n if (coerceTo.length) coerceData(it, types, coerceTo)\n else reportTypeError(it)\n })\n }\n return checkTypes\n}\n\nconst COERCIBLE: Set<JSONType> = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"])\nfunction coerceToTypes(types: JSONType[], coerceTypes?: boolean | \"array\"): JSONType[] {\n return coerceTypes\n ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n : []\n}\n\nfunction coerceData(it: SchemaObjCxt, types: JSONType[], coerceTo: JSONType[]): void {\n const {gen, data, opts} = it\n const dataType = gen.let(\"dataType\", _`typeof ${data}`)\n const coerced = gen.let(\"coerced\", _`undefined`)\n if (opts.coerceTypes === \"array\") {\n gen.if(_`${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () =>\n gen\n .assign(data, _`${data}[0]`)\n .assign(dataType, _`typeof ${data}`)\n .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data))\n )\n }\n gen.if(_`${coerced} !== undefined`)\n for (const t of coerceTo) {\n if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n coerceSpecificType(t)\n }\n }\n gen.else()\n reportTypeError(it)\n gen.endIf()\n\n gen.if(_`${coerced} !== undefined`, () => {\n gen.assign(data, coerced)\n assignParentData(it, coerced)\n })\n\n function coerceSpecificType(t: string): void {\n switch (t) {\n case \"string\":\n gen\n .elseIf(_`${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n .assign(coerced, _`\"\" + ${data}`)\n .elseIf(_`${data} === null`)\n .assign(coerced, _`\"\"`)\n return\n case \"number\":\n gen\n .elseIf(\n _`${dataType} == \"boolean\" || ${data} === null\n || (${dataType} == \"string\" && ${data} && ${data} == +${data})`\n )\n .assign(coerced, _`+${data}`)\n return\n case \"integer\":\n gen\n .elseIf(\n _`${dataType} === \"boolean\" || ${data} === null\n || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`\n )\n .assign(coerced, _`+${data}`)\n return\n case \"boolean\":\n gen\n .elseIf(_`${data} === \"false\" || ${data} === 0 || ${data} === null`)\n .assign(coerced, false)\n .elseIf(_`${data} === \"true\" || ${data} === 1`)\n .assign(coerced, true)\n return\n case \"null\":\n gen.elseIf(_`${data} === \"\" || ${data} === 0 || ${data} === false`)\n gen.assign(coerced, null)\n return\n\n case \"array\":\n gen\n .elseIf(\n _`${dataType} === \"string\" || ${dataType} === \"number\"\n || ${dataType} === \"boolean\" || ${data} === null`\n )\n .assign(coerced, _`[${data}]`)\n }\n }\n}\n\nfunction assignParentData({gen, parentData, parentDataProperty}: SchemaObjCxt, expr: Name): void {\n // TODO use gen.property\n gen.if(_`${parentData} !== undefined`, () =>\n gen.assign(_`${parentData}[${parentDataProperty}]`, expr)\n )\n}\n\nexport function checkDataType(\n dataType: JSONType,\n data: Name,\n strictNums?: boolean | \"log\",\n correct = DataType.Correct\n): Code {\n const EQ = correct === DataType.Correct ? operators.EQ : operators.NEQ\n let cond: Code\n switch (dataType) {\n case \"null\":\n return _`${data} ${EQ} null`\n case \"array\":\n cond = _`Array.isArray(${data})`\n break\n case \"object\":\n cond = _`${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`\n break\n case \"integer\":\n cond = numCond(_`!(${data} % 1) && !isNaN(${data})`)\n break\n case \"number\":\n cond = numCond()\n break\n default:\n return _`typeof ${data} ${EQ} ${dataType}`\n }\n return correct === DataType.Correct ? cond : not(cond)\n\n function numCond(_cond: Code = nil): Code {\n return and(_`typeof ${data} == \"number\"`, _cond, strictNums ? _`isFinite(${data})` : nil)\n }\n}\n\nexport function checkDataTypes(\n dataTypes: JSONType[],\n data: Name,\n strictNums?: boolean | \"log\",\n correct?: DataType\n): Code {\n if (dataTypes.length === 1) {\n return checkDataType(dataTypes[0], data, strictNums, correct)\n }\n let cond: Code\n const types = toHash(dataTypes)\n if (types.array && types.object) {\n const notObj = _`typeof ${data} != \"object\"`\n cond = types.null ? notObj : _`!${data} || ${notObj}`\n delete types.null\n delete types.array\n delete types.object\n } else {\n cond = nil\n }\n if (types.number) delete types.integer\n for (const t in types) cond = and(cond, checkDataType(t as JSONType, data, strictNums, correct))\n return cond\n}\n\nexport type TypeError = ErrorObject<\"type\", {type: string}>\n\nconst typeError: KeywordErrorDefinition = {\n message: ({schema}) => `must be ${schema}`,\n params: ({schema, schemaValue}) =>\n typeof schema == \"string\" ? _`{type: ${schema}}` : _`{type: ${schemaValue}}`,\n}\n\nexport function reportTypeError(it: SchemaObjCxt): void {\n const cxt = getTypeErrorContext(it)\n reportError(cxt, typeError)\n}\n\nfunction getTypeErrorContext(it: SchemaObjCxt): KeywordErrorCxt {\n const {gen, data, schema} = it\n const schemaCode = schemaRefOrVal(it, schema, \"type\")\n return {\n gen,\n keyword: \"type\",\n data,\n schema: schema.type,\n schemaCode,\n schemaValue: schemaCode,\n parentSchema: schema,\n params: {},\n it,\n }\n}\n","import type {SchemaObjCxt} from \"..\"\nimport {_, getProperty, stringify} from \"../codegen\"\nimport {checkStrictMode} from \"../util\"\n\nexport function assignDefaults(it: SchemaObjCxt, ty?: string): void {\n const {properties, items} = it.schema\n if (ty === \"object\" && properties) {\n for (const key in properties) {\n assignDefault(it, key, properties[key].default)\n }\n } else if (ty === \"array\" && Array.isArray(items)) {\n items.forEach((sch, i: number) => assignDefault(it, i, sch.default))\n }\n}\n\nfunction assignDefault(it: SchemaObjCxt, prop: string | number, defaultValue: unknown): void {\n const {gen, compositeRule, data, opts} = it\n if (defaultValue === undefined) return\n const childData = _`${data}${getProperty(prop)}`\n if (compositeRule) {\n checkStrictMode(it, `default is ignored for: ${childData}`)\n return\n }\n\n let condition = _`${childData} === undefined`\n if (opts.useDefaults === \"empty\") {\n condition = _`${condition} || ${childData} === null || ${childData} === \"\"`\n }\n // `${childData} === undefined` +\n // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n gen.if(condition, _`${childData} = ${stringify(defaultValue)}`)\n}\n","import type {\n AddedKeywordDefinition,\n AnySchema,\n AnySchemaObject,\n KeywordErrorCxt,\n KeywordCxtParams,\n} from \"../../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \"..\"\nimport type {InstanceOptions} from \"../../core\"\nimport {boolOrEmptySchema, topBoolOrEmptySchema} from \"./boolSchema\"\nimport {coerceAndCheckDataType, getSchemaTypes} from \"./dataType\"\nimport {shouldUseGroup, shouldUseRule} from \"./applicability\"\nimport {checkDataType, checkDataTypes, reportTypeError, DataType} from \"./dataType\"\nimport {assignDefaults} from \"./defaults\"\nimport {funcKeywordCode, macroKeywordCode, validateKeywordUsage, validSchemaType} from \"./keyword\"\nimport {getSubschema, extendSubschemaData, SubschemaArgs, extendSubschemaMode} from \"./subschema\"\nimport {_, nil, str, or, not, getProperty, Block, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport {resolveUrl} from \"../resolve\"\nimport {\n schemaRefOrVal,\n schemaHasRulesButRef,\n checkUnknownRules,\n checkStrictMode,\n unescapeJsonPointer,\n mergeEvaluated,\n} from \"../util\"\nimport type {JSONType, Rule, RuleGroup} from \"../rules\"\nimport {\n ErrorPaths,\n reportError,\n reportExtraError,\n resetErrorsCount,\n keyword$DataError,\n} from \"../errors\"\n\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nexport function validateFunctionCode(it: SchemaCxt): void {\n if (isSchemaObj(it)) {\n checkKeywords(it)\n if (schemaCxtHasRules(it)) {\n topSchemaObjCode(it)\n return\n }\n }\n validateFunction(it, () => topBoolOrEmptySchema(it))\n}\n\nfunction validateFunction(\n {gen, validateName, schema, schemaEnv, opts}: SchemaCxt,\n body: Block\n): void {\n if (opts.code.es5) {\n gen.func(validateName, _`${N.data}, ${N.valCxt}`, schemaEnv.$async, () => {\n gen.code(_`\"use strict\"; ${funcSourceUrl(schema, opts)}`)\n destructureValCxtES5(gen, opts)\n gen.code(body)\n })\n } else {\n gen.func(validateName, _`${N.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () =>\n gen.code(funcSourceUrl(schema, opts)).code(body)\n )\n }\n}\n\nfunction destructureValCxt(opts: InstanceOptions): Code {\n return _`{${N.instancePath}=\"\", ${N.parentData}, ${N.parentDataProperty}, ${N.rootData}=${\n N.data\n }${opts.dynamicRef ? _`, ${N.dynamicAnchors}={}` : nil}}={}`\n}\n\nfunction destructureValCxtES5(gen: CodeGen, opts: InstanceOptions): void {\n gen.if(\n N.valCxt,\n () => {\n gen.var(N.instancePath, _`${N.valCxt}.${N.instancePath}`)\n gen.var(N.parentData, _`${N.valCxt}.${N.parentData}`)\n gen.var(N.parentDataProperty, _`${N.valCxt}.${N.parentDataProperty}`)\n gen.var(N.rootData, _`${N.valCxt}.${N.rootData}`)\n if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`${N.valCxt}.${N.dynamicAnchors}`)\n },\n () => {\n gen.var(N.instancePath, _`\"\"`)\n gen.var(N.parentData, _`undefined`)\n gen.var(N.parentDataProperty, _`undefined`)\n gen.var(N.rootData, N.data)\n if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`{}`)\n }\n )\n}\n\nfunction topSchemaObjCode(it: SchemaObjCxt): void {\n const {schema, opts, gen} = it\n validateFunction(it, () => {\n if (opts.$comment && schema.$comment) commentKeyword(it)\n checkNoDefault(it)\n gen.let(N.vErrors, null)\n gen.let(N.errors, 0)\n if (opts.unevaluated) resetEvaluated(it)\n typeAndKeywords(it)\n returnResults(it)\n })\n return\n}\n\nfunction resetEvaluated(it: SchemaObjCxt): void {\n // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n const {gen, validateName} = it\n it.evaluated = gen.const(\"evaluated\", _`${validateName}.evaluated`)\n gen.if(_`${it.evaluated}.dynamicProps`, () => gen.assign(_`${it.evaluated}.props`, _`undefined`))\n gen.if(_`${it.evaluated}.dynamicItems`, () => gen.assign(_`${it.evaluated}.items`, _`undefined`))\n}\n\nfunction funcSourceUrl(schema: AnySchema, opts: InstanceOptions): Code {\n const schId = typeof schema == \"object\" && schema[opts.schemaId]\n return schId && (opts.code.source || opts.code.process) ? _`/*# sourceURL=${schId} */` : nil\n}\n\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it: SchemaCxt, valid: Name): void {\n if (isSchemaObj(it)) {\n checkKeywords(it)\n if (schemaCxtHasRules(it)) {\n subSchemaObjCode(it, valid)\n return\n }\n }\n boolOrEmptySchema(it, valid)\n}\n\nfunction schemaCxtHasRules({schema, self}: SchemaCxt): boolean {\n if (typeof schema == \"boolean\") return !schema\n for (const key in schema) if (self.RULES.all[key]) return true\n return false\n}\n\nfunction isSchemaObj(it: SchemaCxt): it is SchemaObjCxt {\n return typeof it.schema != \"boolean\"\n}\n\nfunction subSchemaObjCode(it: SchemaObjCxt, valid: Name): void {\n const {schema, gen, opts} = it\n if (opts.$comment && schema.$comment) commentKeyword(it)\n updateContext(it)\n checkAsyncSchema(it)\n const errsCount = gen.const(\"_errs\", N.errors)\n typeAndKeywords(it, errsCount)\n // TODO var\n gen.var(valid, _`${errsCount} === ${N.errors}`)\n}\n\nfunction checkKeywords(it: SchemaObjCxt): void {\n checkUnknownRules(it)\n checkRefsAndKeywords(it)\n}\n\nfunction typeAndKeywords(it: SchemaObjCxt, errsCount?: Name): void {\n if (it.opts.jtd) return schemaKeywords(it, [], false, errsCount)\n const types = getSchemaTypes(it.schema)\n const checkedTypes = coerceAndCheckDataType(it, types)\n schemaKeywords(it, types, !checkedTypes, errsCount)\n}\n\nfunction checkRefsAndKeywords(it: SchemaObjCxt): void {\n const {schema, errSchemaPath, opts, self} = it\n if (schema.$ref && opts.ignoreKeywordsWithRef && schemaHasRulesButRef(schema, self.RULES)) {\n self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`)\n }\n}\n\nfunction checkNoDefault(it: SchemaObjCxt): void {\n const {schema, opts} = it\n if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n checkStrictMode(it, \"default is ignored in the schema root\")\n }\n}\n\nfunction updateContext(it: SchemaObjCxt): void {\n const schId = it.schema[it.opts.schemaId]\n if (schId) it.baseId = resolveUrl(it.opts.uriResolver, it.baseId, schId)\n}\n\nfunction checkAsyncSchema(it: SchemaObjCxt): void {\n if (it.schema.$async && !it.schemaEnv.$async) throw new Error(\"async schema in sync schema\")\n}\n\nfunction commentKeyword({gen, schemaEnv, schema, errSchemaPath, opts}: SchemaObjCxt): void {\n const msg = schema.$comment\n if (opts.$comment === true) {\n gen.code(_`${N.self}.logger.log(${msg})`)\n } else if (typeof opts.$comment == \"function\") {\n const schemaPath = str`${errSchemaPath}/$comment`\n const rootName = gen.scopeValue(\"root\", {ref: schemaEnv.root})\n gen.code(_`${N.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`)\n }\n}\n\nfunction returnResults(it: SchemaCxt): void {\n const {gen, schemaEnv, validateName, ValidationError, opts} = it\n if (schemaEnv.$async) {\n // TODO assign unevaluated\n gen.if(\n _`${N.errors} === 0`,\n () => gen.return(N.data),\n () => gen.throw(_`new ${ValidationError as Name}(${N.vErrors})`)\n )\n } else {\n gen.assign(_`${validateName}.errors`, N.vErrors)\n if (opts.unevaluated) assignEvaluated(it)\n gen.return(_`${N.errors} === 0`)\n }\n}\n\nfunction assignEvaluated({gen, evaluated, props, items}: SchemaCxt): void {\n if (props instanceof Name) gen.assign(_`${evaluated}.props`, props)\n if (items instanceof Name) gen.assign(_`${evaluated}.items`, items)\n}\n\nfunction schemaKeywords(\n it: SchemaObjCxt,\n types: JSONType[],\n typeErrors: boolean,\n errsCount?: Name\n): void {\n const {gen, schema, data, allErrors, opts, self} = it\n const {RULES} = self\n if (schema.$ref && (opts.ignoreKeywordsWithRef || !schemaHasRulesButRef(schema, RULES))) {\n gen.block(() => keywordCode(it, \"$ref\", (RULES.all.$ref as Rule).definition)) // TODO typecast\n return\n }\n if (!opts.jtd) checkStrictTypes(it, types)\n gen.block(() => {\n for (const group of RULES.rules) groupKeywords(group)\n groupKeywords(RULES.post)\n })\n\n function groupKeywords(group: RuleGroup): void {\n if (!shouldUseGroup(schema, group)) return\n if (group.type) {\n gen.if(checkDataType(group.type, data, opts.strictNumbers))\n iterateKeywords(it, group)\n if (types.length === 1 && types[0] === group.type && typeErrors) {\n gen.else()\n reportTypeError(it)\n }\n gen.endIf()\n } else {\n iterateKeywords(it, group)\n }\n // TODO make it \"ok\" call?\n if (!allErrors) gen.if(_`${N.errors} === ${errsCount || 0}`)\n }\n}\n\nfunction iterateKeywords(it: SchemaObjCxt, group: RuleGroup): void {\n const {\n gen,\n schema,\n opts: {useDefaults},\n } = it\n if (useDefaults) assignDefaults(it, group.type)\n gen.block(() => {\n for (const rule of group.rules) {\n if (shouldUseRule(schema, rule)) {\n keywordCode(it, rule.keyword, rule.definition, group.type)\n }\n }\n })\n}\n\nfunction checkStrictTypes(it: SchemaObjCxt, types: JSONType[]): void {\n if (it.schemaEnv.meta || !it.opts.strictTypes) return\n checkContextTypes(it, types)\n if (!it.opts.allowUnionTypes) checkMultipleTypes(it, types)\n checkKeywordTypes(it, it.dataTypes)\n}\n\nfunction checkContextTypes(it: SchemaObjCxt, types: JSONType[]): void {\n if (!types.length) return\n if (!it.dataTypes.length) {\n it.dataTypes = types\n return\n }\n types.forEach((t) => {\n if (!includesType(it.dataTypes, t)) {\n strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`)\n }\n })\n narrowSchemaTypes(it, types)\n}\n\nfunction checkMultipleTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n strictTypesError(it, \"use allowUnionTypes to allow union type keyword\")\n }\n}\n\nfunction checkKeywordTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n const rules = it.self.RULES.all\n for (const keyword in rules) {\n const rule = rules[keyword]\n if (typeof rule == \"object\" && shouldUseRule(it.schema, rule)) {\n const {type} = rule.definition\n if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`)\n }\n }\n }\n}\n\nfunction hasApplicableType(schTs: JSONType[], kwdT: JSONType): boolean {\n return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"))\n}\n\nfunction includesType(ts: JSONType[], t: JSONType): boolean {\n return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"))\n}\n\nfunction narrowSchemaTypes(it: SchemaObjCxt, withTypes: JSONType[]): void {\n const ts: JSONType[] = []\n for (const t of it.dataTypes) {\n if (includesType(withTypes, t)) ts.push(t)\n else if (withTypes.includes(\"integer\") && t === \"number\") ts.push(\"integer\")\n }\n it.dataTypes = ts\n}\n\nfunction strictTypesError(it: SchemaObjCxt, msg: string): void {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n msg += ` at \"${schemaPath}\" (strictTypes)`\n checkStrictMode(it, msg, it.opts.strictTypes)\n}\n\nexport class KeywordCxt implements KeywordErrorCxt {\n readonly gen: CodeGen\n readonly allErrors?: boolean\n readonly keyword: string\n readonly data: Name // Name referencing the current level of the data instance\n readonly $data?: string | false\n schema: any // keyword value in the schema\n readonly schemaValue: Code | number | boolean // Code reference to keyword schema value or primitive value\n readonly schemaCode: Code | number | boolean // Code reference to resolved schema value (different if schema is $data)\n readonly schemaType: JSONType[] // allowed type(s) of keyword value in the schema\n readonly parentSchema: AnySchemaObject\n readonly errsCount?: Name // Name reference to the number of validation errors collected before this keyword,\n // requires option trackErrors in keyword definition\n params: KeywordCxtParams // object to pass parameters to error messages from keyword code\n readonly it: SchemaObjCxt // schema compilation context (schema is guaranteed to be an object, not boolean)\n readonly def: AddedKeywordDefinition\n\n constructor(it: SchemaObjCxt, def: AddedKeywordDefinition, keyword: string) {\n validateKeywordUsage(it, def, keyword)\n this.gen = it.gen\n this.allErrors = it.allErrors\n this.keyword = keyword\n this.data = it.data\n this.schema = it.schema[keyword]\n this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data\n this.schemaValue = schemaRefOrVal(it, this.schema, keyword, this.$data)\n this.schemaType = def.schemaType\n this.parentSchema = it.schema\n this.params = {}\n this.it = it\n this.def = def\n\n if (this.$data) {\n this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it))\n } else {\n this.schemaCode = this.schemaValue\n if (!validSchemaType(this.schema, def.schemaType, def.allowUndefined)) {\n throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`)\n }\n }\n\n if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n this.errsCount = it.gen.const(\"_errs\", N.errors)\n }\n }\n\n result(condition: Code, successAction?: () => void, failAction?: () => void): void {\n this.failResult(not(condition), successAction, failAction)\n }\n\n failResult(condition: Code, successAction?: () => void, failAction?: () => void): void {\n this.gen.if(condition)\n if (failAction) failAction()\n else this.error()\n if (successAction) {\n this.gen.else()\n successAction()\n if (this.allErrors) this.gen.endIf()\n } else {\n if (this.allErrors) this.gen.endIf()\n else this.gen.else()\n }\n }\n\n pass(condition: Code, failAction?: () => void): void {\n this.failResult(not(condition), undefined, failAction)\n }\n\n fail(condition?: Code): void {\n if (condition === undefined) {\n this.error()\n if (!this.allErrors) this.gen.if(false) // this branch will be removed by gen.optimize\n return\n }\n this.gen.if(condition)\n this.error()\n if (this.allErrors) this.gen.endIf()\n else this.gen.else()\n }\n\n fail$data(condition: Code): void {\n if (!this.$data) return this.fail(condition)\n const {schemaCode} = this\n this.fail(_`${schemaCode} !== undefined && (${or(this.invalid$data(), condition)})`)\n }\n\n error(append?: boolean, errorParams?: KeywordCxtParams, errorPaths?: ErrorPaths): void {\n if (errorParams) {\n this.setParams(errorParams)\n this._error(append, errorPaths)\n this.setParams({})\n return\n }\n this._error(append, errorPaths)\n }\n\n private _error(append?: boolean, errorPaths?: ErrorPaths): void {\n ;(append ? reportExtraError : reportError)(this, this.def.error, errorPaths)\n }\n\n $dataError(): void {\n reportError(this, this.def.$dataError || keyword$DataError)\n }\n\n reset(): void {\n if (this.errsCount === undefined) throw new Error('add \"trackErrors\" to keyword definition')\n resetErrorsCount(this.gen, this.errsCount)\n }\n\n ok(cond: Code | boolean): void {\n if (!this.allErrors) this.gen.if(cond)\n }\n\n setParams(obj: KeywordCxtParams, assign?: true): void {\n if (assign) Object.assign(this.params, obj)\n else this.params = obj\n }\n\n block$data(valid: Name, codeBlock: () => void, $dataValid: Code = nil): void {\n this.gen.block(() => {\n this.check$data(valid, $dataValid)\n codeBlock()\n })\n }\n\n check$data(valid: Name = nil, $dataValid: Code = nil): void {\n if (!this.$data) return\n const {gen, schemaCode, schemaType, def} = this\n gen.if(or(_`${schemaCode} === undefined`, $dataValid))\n if (valid !== nil) gen.assign(valid, true)\n if (schemaType.length || def.validateSchema) {\n gen.elseIf(this.invalid$data())\n this.$dataError()\n if (valid !== nil) gen.assign(valid, false)\n }\n gen.else()\n }\n\n invalid$data(): Code {\n const {gen, schemaCode, schemaType, def, it} = this\n return or(wrong$DataType(), invalid$DataSchema())\n\n function wrong$DataType(): Code {\n if (schemaType.length) {\n /* istanbul ignore if */\n if (!(schemaCode instanceof Name)) throw new Error(\"ajv implementation error\")\n const st = Array.isArray(schemaType) ? schemaType : [schemaType]\n return _`${checkDataTypes(st, schemaCode, it.opts.strictNumbers, DataType.Wrong)}`\n }\n return nil\n }\n\n function invalid$DataSchema(): Code {\n if (def.validateSchema) {\n const validateSchemaRef = gen.scopeValue(\"validate$data\", {ref: def.validateSchema}) // TODO value.code for standalone\n return _`!${validateSchemaRef}(${schemaCode})`\n }\n return nil\n }\n }\n\n subschema(appl: SubschemaArgs, valid: Name): SchemaCxt {\n const subschema = getSubschema(this.it, appl)\n extendSubschemaData(subschema, this.it, appl)\n extendSubschemaMode(subschema, appl)\n const nextContext = {...this.it, ...subschema, items: undefined, props: undefined}\n subschemaCode(nextContext, valid)\n return nextContext\n }\n\n mergeEvaluated(schemaCxt: SchemaCxt, toName?: typeof Name): void {\n const {it, gen} = this\n if (!it.opts.unevaluated) return\n if (it.props !== true && schemaCxt.props !== undefined) {\n it.props = mergeEvaluated.props(gen, schemaCxt.props, it.props, toName)\n }\n if (it.items !== true && schemaCxt.items !== undefined) {\n it.items = mergeEvaluated.items(gen, schemaCxt.items, it.items, toName)\n }\n }\n\n mergeValidEvaluated(schemaCxt: SchemaCxt, valid: Name): boolean | void {\n const {it, gen} = this\n if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n gen.if(valid, () => this.mergeEvaluated(schemaCxt, Name))\n return true\n }\n }\n}\n\nfunction keywordCode(\n it: SchemaObjCxt,\n keyword: string,\n def: AddedKeywordDefinition,\n ruleType?: JSONType\n): void {\n const cxt = new KeywordCxt(it, def, keyword)\n if (\"code\" in def) {\n def.code(cxt, ruleType)\n } else if (cxt.$data && def.validate) {\n funcKeywordCode(cxt, def)\n } else if (\"macro\" in def) {\n macroKeywordCode(cxt, def)\n } else if (def.compile || def.validate) {\n funcKeywordCode(cxt, def)\n }\n}\n\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/\nexport function getData(\n $data: string,\n {dataLevel, dataNames, dataPathArr}: SchemaCxt\n): Code | number {\n let jsonPointer\n let data: Code\n if ($data === \"\") return N.rootData\n if ($data[0] === \"/\") {\n if (!JSON_POINTER.test($data)) throw new Error(`Invalid JSON-pointer: ${$data}`)\n jsonPointer = $data\n data = N.rootData\n } else {\n const matches = RELATIVE_JSON_POINTER.exec($data)\n if (!matches) throw new Error(`Invalid JSON-pointer: ${$data}`)\n const up: number = +matches[1]\n jsonPointer = matches[2]\n if (jsonPointer === \"#\") {\n if (up >= dataLevel) throw new Error(errorMsg(\"property/index\", up))\n return dataPathArr[dataLevel - up]\n }\n if (up > dataLevel) throw new Error(errorMsg(\"data\", up))\n data = dataNames[dataLevel - up]\n if (!jsonPointer) return data\n }\n\n let expr = data\n const segments = jsonPointer.split(\"/\")\n for (const segment of segments) {\n if (segment) {\n data = _`${data}${getProperty(unescapeJsonPointer(segment))}`\n expr = _`${expr} && ${data}`\n }\n }\n return expr\n\n function errorMsg(pointerType: string, up: number): string {\n return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`\n }\n}\n","import type {KeywordCxt} from \".\"\nimport type {\n AnySchema,\n SchemaValidateFunction,\n AnyValidateFunction,\n AddedKeywordDefinition,\n MacroKeywordDefinition,\n FuncKeywordDefinition,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, nil, not, stringify, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport type {JSONType} from \"../rules\"\nimport {callValidateCode} from \"../../vocabularies/code\"\nimport {extendErrors} from \"../errors\"\n\ntype KeywordCompilationResult = AnySchema | SchemaValidateFunction | AnyValidateFunction\n\nexport function macroKeywordCode(cxt: KeywordCxt, def: MacroKeywordDefinition): void {\n const {gen, keyword, schema, parentSchema, it} = cxt\n const macroSchema = def.macro.call(it.self, schema, parentSchema, it)\n const schemaRef = useKeyword(gen, keyword, macroSchema)\n if (it.opts.validateSchema !== false) it.self.validateSchema(macroSchema, true)\n\n const valid = gen.name(\"valid\")\n cxt.subschema(\n {\n schema: macroSchema,\n schemaPath: nil,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n topSchemaRef: schemaRef,\n compositeRule: true,\n },\n valid\n )\n cxt.pass(valid, () => cxt.error(true))\n}\n\nexport function funcKeywordCode(cxt: KeywordCxt, def: FuncKeywordDefinition): void {\n const {gen, keyword, schema, parentSchema, $data, it} = cxt\n checkAsyncKeyword(it, def)\n const validate =\n !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate\n const validateRef = useKeyword(gen, keyword, validate)\n const valid = gen.let(\"valid\")\n cxt.block$data(valid, validateKeyword)\n cxt.ok(def.valid ?? valid)\n\n function validateKeyword(): void {\n if (def.errors === false) {\n assignValid()\n if (def.modifying) modifyData(cxt)\n reportErrs(() => cxt.error())\n } else {\n const ruleErrs = def.async ? validateAsync() : validateSync()\n if (def.modifying) modifyData(cxt)\n reportErrs(() => addErrs(cxt, ruleErrs))\n }\n }\n\n function validateAsync(): Name {\n const ruleErrs = gen.let(\"ruleErrs\", null)\n gen.try(\n () => assignValid(_`await `),\n (e) =>\n gen.assign(valid, false).if(\n _`${e} instanceof ${it.ValidationError as Name}`,\n () => gen.assign(ruleErrs, _`${e}.errors`),\n () => gen.throw(e)\n )\n )\n return ruleErrs\n }\n\n function validateSync(): Code {\n const validateErrs = _`${validateRef}.errors`\n gen.assign(validateErrs, null)\n assignValid(nil)\n return validateErrs\n }\n\n function assignValid(_await: Code = def.async ? _`await ` : nil): void {\n const passCxt = it.opts.passContext ? N.this : N.self\n const passSchema = !((\"compile\" in def && !$data) || def.schema === false)\n gen.assign(\n valid,\n _`${_await}${callValidateCode(cxt, validateRef, passCxt, passSchema)}`,\n def.modifying\n )\n }\n\n function reportErrs(errors: () => void): void {\n gen.if(not(def.valid ?? valid), errors)\n }\n}\n\nfunction modifyData(cxt: KeywordCxt): void {\n const {gen, data, it} = cxt\n gen.if(it.parentData, () => gen.assign(data, _`${it.parentData}[${it.parentDataProperty}]`))\n}\n\nfunction addErrs(cxt: KeywordCxt, errs: Code): void {\n const {gen} = cxt\n gen.if(\n _`Array.isArray(${errs})`,\n () => {\n gen\n .assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`)\n .assign(N.errors, _`${N.vErrors}.length`)\n extendErrors(cxt)\n },\n () => cxt.error()\n )\n}\n\nfunction checkAsyncKeyword({schemaEnv}: SchemaObjCxt, def: FuncKeywordDefinition): void {\n if (def.async && !schemaEnv.$async) throw new Error(\"async keyword in sync schema\")\n}\n\nfunction useKeyword(gen: CodeGen, keyword: string, result?: KeywordCompilationResult): Name {\n if (result === undefined) throw new Error(`keyword \"${keyword}\" failed to compile`)\n return gen.scopeValue(\n \"keyword\",\n typeof result == \"function\" ? {ref: result} : {ref: result, code: stringify(result)}\n )\n}\n\nexport function validSchemaType(\n schema: unknown,\n schemaType: JSONType[],\n allowUndefined = false\n): boolean {\n // TODO add tests\n return (\n !schemaType.length ||\n schemaType.some((st) =>\n st === \"array\"\n ? Array.isArray(schema)\n : st === \"object\"\n ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")\n )\n )\n}\n\nexport function validateKeywordUsage(\n {schema, opts, self, errSchemaPath}: SchemaObjCxt,\n def: AddedKeywordDefinition,\n keyword: string\n): void {\n /* istanbul ignore if */\n if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n throw new Error(\"ajv implementation error\")\n }\n\n const deps = def.dependencies\n if (deps?.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`)\n }\n\n if (def.validateSchema) {\n const valid = def.validateSchema(schema[keyword])\n if (!valid) {\n const msg =\n `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n self.errorsText(def.validateSchema.errors)\n if (opts.validateSchema === \"log\") self.logger.error(msg)\n else throw new Error(msg)\n }\n }\n}\n","import type {AnySchema} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, str, getProperty, Code, Name} from \"../codegen\"\nimport {escapeFragment, getErrorPath, Type} from \"../util\"\nimport type {JSONType} from \"../rules\"\n\nexport interface SubschemaContext {\n // TODO use Optional? align with SchemCxt property types\n schema: AnySchema\n schemaPath: Code\n errSchemaPath: string\n topSchemaRef?: Code\n errorPath?: Code\n dataLevel?: number\n dataTypes?: JSONType[]\n data?: Name\n parentData?: Name\n parentDataProperty?: Code | number\n dataNames?: Name[]\n dataPathArr?: (Code | number)[]\n propertyName?: Name\n jtdDiscriminator?: string\n jtdMetadata?: boolean\n compositeRule?: true\n createErrors?: boolean\n allErrors?: boolean\n}\n\nexport type SubschemaArgs = Partial<{\n keyword: string\n schemaProp: string | number\n schema: AnySchema\n schemaPath: Code\n errSchemaPath: string\n topSchemaRef: Code\n data: Name | Code\n dataProp: Code | string | number\n dataTypes: JSONType[]\n definedProperties: Set<string>\n propertyName: Name\n dataPropType: Type\n jtdDiscriminator: string\n jtdMetadata: boolean\n compositeRule: true\n createErrors: boolean\n allErrors: boolean\n}>\n\nexport function getSubschema(\n it: SchemaObjCxt,\n {keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef}: SubschemaArgs\n): SubschemaContext {\n if (keyword !== undefined && schema !== undefined) {\n throw new Error('both \"keyword\" and \"schema\" passed, only one allowed')\n }\n\n if (keyword !== undefined) {\n const sch = it.schema[keyword]\n return schemaProp === undefined\n ? {\n schema: sch,\n schemaPath: _`${it.schemaPath}${getProperty(keyword)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n }\n : {\n schema: sch[schemaProp],\n schemaPath: _`${it.schemaPath}${getProperty(keyword)}${getProperty(schemaProp)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}/${escapeFragment(schemaProp)}`,\n }\n }\n\n if (schema !== undefined) {\n if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"')\n }\n return {\n schema,\n schemaPath,\n topSchemaRef,\n errSchemaPath,\n }\n }\n\n throw new Error('either \"keyword\" or \"schema\" must be passed')\n}\n\nexport function extendSubschemaData(\n subschema: SubschemaContext,\n it: SchemaObjCxt,\n {dataProp, dataPropType: dpType, data, dataTypes, propertyName}: SubschemaArgs\n): void {\n if (data !== undefined && dataProp !== undefined) {\n throw new Error('both \"data\" and \"dataProp\" passed, only one allowed')\n }\n\n const {gen} = it\n\n if (dataProp !== undefined) {\n const {errorPath, dataPathArr, opts} = it\n const nextData = gen.let(\"data\", _`${it.data}${getProperty(dataProp)}`, true)\n dataContextProps(nextData)\n subschema.errorPath = str`${errorPath}${getErrorPath(dataProp, dpType, opts.jsPropertySyntax)}`\n subschema.parentDataProperty = _`${dataProp}`\n subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty]\n }\n\n if (data !== undefined) {\n const nextData = data instanceof Name ? data : gen.let(\"data\", data, true) // replaceable if used once?\n dataContextProps(nextData)\n if (propertyName !== undefined) subschema.propertyName = propertyName\n // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n }\n\n if (dataTypes) subschema.dataTypes = dataTypes\n\n function dataContextProps(_nextData: Name): void {\n subschema.data = _nextData\n subschema.dataLevel = it.dataLevel + 1\n subschema.dataTypes = []\n it.definedProperties = new Set<string>()\n subschema.parentData = it.data\n subschema.dataNames = [...it.dataNames, _nextData]\n }\n}\n\nexport function extendSubschemaMode(\n subschema: SubschemaContext,\n {jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors}: SubschemaArgs\n): void {\n if (compositeRule !== undefined) subschema.compositeRule = compositeRule\n if (createErrors !== undefined) subschema.createErrors = createErrors\n if (allErrors !== undefined) subschema.allErrors = allErrors\n subschema.jtdDiscriminator = jtdDiscriminator // not inherited\n subschema.jtdMetadata = jtdMetadata // not inherited\n}\n","export {\n Format,\n FormatDefinition,\n AsyncFormatDefinition,\n KeywordDefinition,\n KeywordErrorDefinition,\n CodeKeywordDefinition,\n MacroKeywordDefinition,\n FuncKeywordDefinition,\n Vocabulary,\n Schema,\n SchemaObject,\n AnySchemaObject,\n AsyncSchema,\n AnySchema,\n ValidateFunction,\n AsyncValidateFunction,\n AnyValidateFunction,\n ErrorObject,\n ErrorNoParams,\n} from \"./types\"\n\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport interface Plugin<Opts> {\n (ajv: Ajv, options?: Opts): Ajv\n [prop: string]: any\n}\n\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\n\nimport type {\n Schema,\n AnySchema,\n AnySchemaObject,\n SchemaObject,\n AsyncSchema,\n Vocabulary,\n KeywordDefinition,\n AddedKeywordDefinition,\n AnyValidateFunction,\n ValidateFunction,\n AsyncValidateFunction,\n ErrorObject,\n Format,\n AddedFormat,\n RegExpEngine,\n UriResolver,\n} from \"./types\"\nimport type {JSONSchemaType} from \"./types/json-schema\"\nimport type {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nimport ValidationError from \"./runtime/validation_error\"\nimport MissingRefError from \"./compile/ref_error\"\nimport {getRules, ValidationRules, Rule, RuleGroup, JSONType} from \"./compile/rules\"\nimport {SchemaEnv, compileSchema, resolveSchema} from \"./compile\"\nimport {Code, ValueScope} from \"./compile/codegen\"\nimport {normalizeId, getSchemaRefs} from \"./compile/resolve\"\nimport {getJSONTypes} from \"./compile/validate/dataType\"\nimport {eachItem} from \"./compile/util\"\nimport * as $dataRefSchema from \"./refs/data.json\"\n\nimport DefaultUriResolver from \"./runtime/uri\"\n\nconst defaultRegExp: RegExpEngine = (str, flags) => new RegExp(str, flags)\ndefaultRegExp.code = \"new RegExp\"\n\nconst META_IGNORE_OPTIONS: (keyof Options)[] = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"]\nconst EXT_SCOPE_NAMES = new Set([\n \"validate\",\n \"serialize\",\n \"parse\",\n \"wrapper\",\n \"root\",\n \"schema\",\n \"keyword\",\n \"pattern\",\n \"formats\",\n \"validate$data\",\n \"func\",\n \"obj\",\n \"Error\",\n])\n\nexport type Options = CurrentOptions & DeprecatedOptions\n\nexport interface CurrentOptions {\n // strict mode options (NEW)\n strict?: boolean | \"log\"\n strictSchema?: boolean | \"log\"\n strictNumbers?: boolean | \"log\"\n strictTypes?: boolean | \"log\"\n strictTuples?: boolean | \"log\"\n strictRequired?: boolean | \"log\"\n allowMatchingProperties?: boolean // disables a strict mode restriction\n allowUnionTypes?: boolean\n validateFormats?: boolean\n // validation and reporting options:\n $data?: boolean\n allErrors?: boolean\n verbose?: boolean\n discriminator?: boolean\n unicodeRegExp?: boolean\n timestamp?: \"string\" | \"date\" // JTD only\n parseDate?: boolean // JTD only\n allowDate?: boolean // JTD only\n $comment?:\n | true\n | ((comment: string, schemaPath?: string, rootSchema?: AnySchemaObject) => unknown)\n formats?: {[Name in string]?: Format}\n keywords?: Vocabulary\n schemas?: AnySchema[] | {[Key in string]?: AnySchema}\n logger?: Logger | false\n loadSchema?: (uri: string) => Promise<AnySchemaObject>\n // options to modify validated data:\n removeAdditional?: boolean | \"all\" | \"failing\"\n useDefaults?: boolean | \"empty\"\n coerceTypes?: boolean | \"array\"\n // advanced options:\n next?: boolean // NEW\n unevaluated?: boolean // NEW\n dynamicRef?: boolean // NEW\n schemaId?: \"id\" | \"$id\"\n jtd?: boolean // NEW\n meta?: SchemaObject | boolean\n defaultMeta?: string | AnySchemaObject\n validateSchema?: boolean | \"log\"\n addUsedSchema?: boolean\n inlineRefs?: boolean | number\n passContext?: boolean\n loopRequired?: number\n loopEnum?: number // NEW\n ownProperties?: boolean\n multipleOfPrecision?: number\n int32range?: boolean // JTD only\n messages?: boolean\n code?: CodeOptions // NEW\n uriResolver?: UriResolver\n}\n\nexport interface CodeOptions {\n es5?: boolean\n esm?: boolean\n lines?: boolean\n optimize?: boolean | number\n formats?: Code // code to require (or construct) map of available formats - for standalone code\n source?: boolean\n process?: (code: string, schema?: SchemaEnv) => string\n regExp?: RegExpEngine\n}\n\ninterface InstanceCodeOptions extends CodeOptions {\n regExp: RegExpEngine\n optimize: number\n}\n\ninterface DeprecatedOptions {\n /** @deprecated */\n ignoreKeywordsWithRef?: boolean\n /** @deprecated */\n jsPropertySyntax?: boolean // added instead of jsonPointers\n /** @deprecated */\n unicode?: boolean\n}\n\ninterface RemovedOptions {\n format?: boolean\n errorDataPath?: \"object\" | \"property\"\n nullable?: boolean // \"nullable\" keyword is supported by default\n jsonPointers?: boolean\n extendRefs?: true | \"ignore\" | \"fail\"\n missingRefs?: true | \"ignore\" | \"fail\"\n processCode?: (code: string, schema?: SchemaEnv) => string\n sourceCode?: boolean\n strictDefaults?: boolean\n strictKeywords?: boolean\n uniqueItems?: boolean\n unknownFormats?: true | string[] | \"ignore\"\n cache?: any\n serialize?: (schema: AnySchema) => unknown\n ajvErrors?: boolean\n}\n\ntype OptionsInfo<T extends RemovedOptions | DeprecatedOptions> = {\n [K in keyof T]-?: string | undefined\n}\n\nconst removedOptions: OptionsInfo<RemovedOptions> = {\n errorDataPath: \"\",\n format: \"`validateFormats: false` can be used instead.\",\n nullable: '\"nullable\" keyword is supported by default.',\n jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n sourceCode: \"Use option `code: {source: true}`\",\n strictDefaults: \"It is default now, see option `strict`.\",\n strictKeywords: \"It is default now, see option `strict`.\",\n uniqueItems: '\"uniqueItems\" keyword is always validated.',\n unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n cache: \"Map is used as cache, schema object as key.\",\n serialize: \"Map is used as cache, schema object as key.\",\n ajvErrors: \"It is default now.\",\n}\n\nconst deprecatedOptions: OptionsInfo<DeprecatedOptions> = {\n ignoreKeywordsWithRef: \"\",\n jsPropertySyntax: \"\",\n unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n}\n\ntype RequiredInstanceOptions = {\n [K in\n | \"strictSchema\"\n | \"strictNumbers\"\n | \"strictTypes\"\n | \"strictTuples\"\n | \"strictRequired\"\n | \"inlineRefs\"\n | \"loopRequired\"\n | \"loopEnum\"\n | \"meta\"\n | \"messages\"\n | \"schemaId\"\n | \"addUsedSchema\"\n | \"validateSchema\"\n | \"validateFormats\"\n | \"int32range\"\n | \"unicodeRegExp\"\n | \"uriResolver\"]: NonNullable<Options[K]>\n} & {code: InstanceCodeOptions}\n\nexport type InstanceOptions = Options & RequiredInstanceOptions\n\nconst MAX_EXPRESSION = 200\n\n// eslint-disable-next-line complexity\nfunction requiredOptions(o: Options): RequiredInstanceOptions {\n const s = o.strict\n const _optz = o.code?.optimize\n const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0\n const regExp = o.code?.regExp ?? defaultRegExp\n const uriResolver = o.uriResolver ?? DefaultUriResolver\n return {\n strictSchema: o.strictSchema ?? s ?? true,\n strictNumbers: o.strictNumbers ?? s ?? true,\n strictTypes: o.strictTypes ?? s ?? \"log\",\n strictTuples: o.strictTuples ?? s ?? \"log\",\n strictRequired: o.strictRequired ?? s ?? false,\n code: o.code ? {...o.code, optimize, regExp} : {optimize, regExp},\n loopRequired: o.loopRequired ?? MAX_EXPRESSION,\n loopEnum: o.loopEnum ?? MAX_EXPRESSION,\n meta: o.meta ?? true,\n messages: o.messages ?? true,\n inlineRefs: o.inlineRefs ?? true,\n schemaId: o.schemaId ?? \"$id\",\n addUsedSchema: o.addUsedSchema ?? true,\n validateSchema: o.validateSchema ?? true,\n validateFormats: o.validateFormats ?? true,\n unicodeRegExp: o.unicodeRegExp ?? true,\n int32range: o.int32range ?? true,\n uriResolver: uriResolver,\n }\n}\n\nexport interface Logger {\n log(...args: unknown[]): unknown\n warn(...args: unknown[]): unknown\n error(...args: unknown[]): unknown\n}\n\nexport default class Ajv {\n opts: InstanceOptions\n errors?: ErrorObject[] | null // errors from the last validation\n logger: Logger\n // shared external scope values for compiled functions\n readonly scope: ValueScope\n readonly schemas: {[Key in string]?: SchemaEnv} = {}\n readonly refs: {[Ref in string]?: SchemaEnv | string} = {}\n readonly formats: {[Name in string]?: AddedFormat} = {}\n readonly RULES: ValidationRules\n readonly _compilations: Set<SchemaEnv> = new Set()\n private readonly _loading: {[Ref in string]?: Promise<AnySchemaObject>} = {}\n private readonly _cache: Map<AnySchema, SchemaEnv> = new Map()\n private readonly _metaOpts: InstanceOptions\n\n static ValidationError = ValidationError\n static MissingRefError = MissingRefError\n\n constructor(opts: Options = {}) {\n opts = this.opts = {...opts, ...requiredOptions(opts)}\n const {es5, lines} = this.opts.code\n\n this.scope = new ValueScope({scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines})\n this.logger = getLogger(opts.logger)\n const formatOpt = opts.validateFormats\n opts.validateFormats = false\n\n this.RULES = getRules()\n checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\")\n checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\")\n this._metaOpts = getMetaSchemaOptions.call(this)\n\n if (opts.formats) addInitialFormats.call(this)\n this._addVocabularies()\n this._addDefaultMetaSchema()\n if (opts.keywords) addInitialKeywords.call(this, opts.keywords)\n if (typeof opts.meta == \"object\") this.addMetaSchema(opts.meta)\n addInitialSchemas.call(this)\n opts.validateFormats = formatOpt\n }\n\n _addVocabularies(): void {\n this.addKeyword(\"$async\")\n }\n\n _addDefaultMetaSchema(): void {\n const {$data, meta, schemaId} = this.opts\n let _dataRefSchema: SchemaObject = $dataRefSchema\n if (schemaId === \"id\") {\n _dataRefSchema = {...$dataRefSchema}\n _dataRefSchema.id = _dataRefSchema.$id\n delete _dataRefSchema.$id\n }\n if (meta && $data) this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false)\n }\n\n defaultMeta(): string | AnySchemaObject | undefined {\n const {meta, schemaId} = this.opts\n return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined)\n }\n\n // Validate data using schema\n // AnySchema will be compiled and cached using schema itself as a key for Map\n validate(schema: Schema | string, data: unknown): boolean\n validate(schemaKeyRef: AnySchema | string, data: unknown): boolean | Promise<unknown>\n validate<T>(schema: Schema | JSONSchemaType<T> | string, data: unknown): data is T\n // Separated for type inference to work\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n validate<T>(schema: JTDSchemaType<T>, data: unknown): data is T\n // This overload is only intended for typescript inference, the first\n // argument prevents manual type annotation from matching this overload\n validate<N extends never, T extends SomeJTDSchemaType>(\n schema: T,\n data: unknown\n ): data is JTDDataType<T>\n validate<T>(schema: AsyncSchema, data: unknown | T): Promise<T>\n validate<T>(schemaKeyRef: AnySchema | string, data: unknown): data is T | Promise<T>\n validate<T>(\n schemaKeyRef: AnySchema | string, // key, ref or schema object\n data: unknown | T // to be validated\n ): boolean | Promise<T> {\n let v: AnyValidateFunction | undefined\n if (typeof schemaKeyRef == \"string\") {\n v = this.getSchema<T>(schemaKeyRef)\n if (!v) throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`)\n } else {\n v = this.compile<T>(schemaKeyRef)\n }\n\n const valid = v(data)\n if (!(\"$async\" in v)) this.errors = v.errors\n return valid\n }\n\n // Create validation function for passed schema\n // _meta: true if schema is a meta-schema. Used internally to compile meta schemas of user-defined keywords.\n compile<T = unknown>(schema: Schema | JSONSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n // Separated for type inference to work\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n compile<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n // This overload is only intended for typescript inference, the first\n // argument prevents manual type annotation from matching this overload\n compile<N extends never, T extends SomeJTDSchemaType>(\n schema: T,\n _meta?: boolean\n ): ValidateFunction<JTDDataType<T>>\n compile<T = unknown>(schema: AsyncSchema, _meta?: boolean): AsyncValidateFunction<T>\n compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T>\n compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T> {\n const sch = this._addSchema(schema, _meta)\n return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T>\n }\n\n // Creates validating function for passed schema with asynchronous loading of missing schemas.\n // `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.\n // TODO allow passing schema URI\n // meta - optional true to compile meta-schema\n compileAsync<T = unknown>(\n schema: SchemaObject | JSONSchemaType<T>,\n _meta?: boolean\n ): Promise<ValidateFunction<T>>\n // Separated for type inference to work\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n compileAsync<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): Promise<ValidateFunction<T>>\n compileAsync<T = unknown>(schema: AsyncSchema, meta?: boolean): Promise<AsyncValidateFunction<T>>\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n compileAsync<T = unknown>(\n schema: AnySchemaObject,\n meta?: boolean\n ): Promise<AnyValidateFunction<T>>\n compileAsync<T = unknown>(\n schema: AnySchemaObject,\n meta?: boolean\n ): Promise<AnyValidateFunction<T>> {\n if (typeof this.opts.loadSchema != \"function\") {\n throw new Error(\"options.loadSchema should be a function\")\n }\n const {loadSchema} = this.opts\n return runCompileAsync.call(this, schema, meta)\n\n async function runCompileAsync(\n this: Ajv,\n _schema: AnySchemaObject,\n _meta?: boolean\n ): Promise<AnyValidateFunction> {\n await loadMetaSchema.call(this, _schema.$schema)\n const sch = this._addSchema(_schema, _meta)\n return sch.validate || _compileAsync.call(this, sch)\n }\n\n async function loadMetaSchema(this: Ajv, $ref?: string): Promise<void> {\n if ($ref && !this.getSchema($ref)) {\n await runCompileAsync.call(this, {$ref}, true)\n }\n }\n\n async function _compileAsync(this: Ajv, sch: SchemaEnv): Promise<AnyValidateFunction> {\n try {\n return this._compileSchemaEnv(sch)\n } catch (e) {\n if (!(e instanceof MissingRefError)) throw e\n checkLoaded.call(this, e)\n await loadMissingSchema.call(this, e.missingSchema)\n return _compileAsync.call(this, sch)\n }\n }\n\n function checkLoaded(this: Ajv, {missingSchema: ref, missingRef}: MissingRefError): void {\n if (this.refs[ref]) {\n throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`)\n }\n }\n\n async function loadMissingSchema(this: Ajv, ref: string): Promise<void> {\n const _schema = await _loadSchema.call(this, ref)\n if (!this.refs[ref]) await loadMetaSchema.call(this, _schema.$schema)\n if (!this.refs[ref]) this.addSchema(_schema, ref, meta)\n }\n\n async function _loadSchema(this: Ajv, ref: string): Promise<AnySchemaObject> {\n const p = this._loading[ref]\n if (p) return p\n try {\n return await (this._loading[ref] = loadSchema(ref))\n } finally {\n delete this._loading[ref]\n }\n }\n }\n\n // Adds schema to the instance\n addSchema(\n schema: AnySchema | AnySchema[], // If array is passed, `key` will be ignored\n key?: string, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n _meta?: boolean, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n ): Ajv {\n if (Array.isArray(schema)) {\n for (const sch of schema) this.addSchema(sch, undefined, _meta, _validateSchema)\n return this\n }\n let id: string | undefined\n if (typeof schema === \"object\") {\n const {schemaId} = this.opts\n id = schema[schemaId]\n if (id !== undefined && typeof id != \"string\") {\n throw new Error(`schema ${schemaId} must be string`)\n }\n }\n key = normalizeId(key || id)\n this._checkUnique(key)\n this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true)\n return this\n }\n\n // Add schema that will be used to validate other schemas\n // options in META_IGNORE_OPTIONS are alway set to false\n addMetaSchema(\n schema: AnySchemaObject,\n key?: string, // schema key\n _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n ): Ajv {\n this.addSchema(schema, key, true, _validateSchema)\n return this\n }\n\n // Validate schema against its meta-schema\n validateSchema(schema: AnySchema, throwOrLogError?: boolean): boolean | Promise<unknown> {\n if (typeof schema == \"boolean\") return true\n let $schema: string | AnySchemaObject | undefined\n $schema = schema.$schema\n if ($schema !== undefined && typeof $schema != \"string\") {\n throw new Error(\"$schema must be a string\")\n }\n $schema = $schema || this.opts.defaultMeta || this.defaultMeta()\n if (!$schema) {\n this.logger.warn(\"meta-schema not available\")\n this.errors = null\n return true\n }\n const valid = this.validate($schema, schema)\n if (!valid && throwOrLogError) {\n const message = \"schema is invalid: \" + this.errorsText()\n if (this.opts.validateSchema === \"log\") this.logger.error(message)\n else throw new Error(message)\n }\n return valid\n }\n\n // Get compiled schema by `key` or `ref`.\n // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n getSchema<T = unknown>(keyRef: string): AnyValidateFunction<T> | undefined {\n let sch\n while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\") keyRef = sch\n if (sch === undefined) {\n const {schemaId} = this.opts\n const root = new SchemaEnv({schema: {}, schemaId})\n sch = resolveSchema.call(this, root, keyRef)\n if (!sch) return\n this.refs[keyRef] = sch\n }\n return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T> | undefined\n }\n\n // Remove cached schema(s).\n // If no parameter is passed all schemas but meta-schemas are removed.\n // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n removeSchema(schemaKeyRef?: AnySchema | string | RegExp): Ajv {\n if (schemaKeyRef instanceof RegExp) {\n this._removeAllSchemas(this.schemas, schemaKeyRef)\n this._removeAllSchemas(this.refs, schemaKeyRef)\n return this\n }\n switch (typeof schemaKeyRef) {\n case \"undefined\":\n this._removeAllSchemas(this.schemas)\n this._removeAllSchemas(this.refs)\n this._cache.clear()\n return this\n case \"string\": {\n const sch = getSchEnv.call(this, schemaKeyRef)\n if (typeof sch == \"object\") this._cache.delete(sch.schema)\n delete this.schemas[schemaKeyRef]\n delete this.refs[schemaKeyRef]\n return this\n }\n case \"object\": {\n const cacheKey = schemaKeyRef\n this._cache.delete(cacheKey)\n let id = schemaKeyRef[this.opts.schemaId]\n if (id) {\n id = normalizeId(id)\n delete this.schemas[id]\n delete this.refs[id]\n }\n return this\n }\n default:\n throw new Error(\"ajv.removeSchema: invalid parameter\")\n }\n }\n\n // add \"vocabulary\" - a collection of keywords\n addVocabulary(definitions: Vocabulary): Ajv {\n for (const def of definitions) this.addKeyword(def)\n return this\n }\n\n addKeyword(\n kwdOrDef: string | KeywordDefinition,\n def?: KeywordDefinition // deprecated\n ): Ajv {\n let keyword: string | string[]\n if (typeof kwdOrDef == \"string\") {\n keyword = kwdOrDef\n if (typeof def == \"object\") {\n this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\")\n def.keyword = keyword\n }\n } else if (typeof kwdOrDef == \"object\" && def === undefined) {\n def = kwdOrDef\n keyword = def.keyword\n if (Array.isArray(keyword) && !keyword.length) {\n throw new Error(\"addKeywords: keyword must be string or non-empty array\")\n }\n } else {\n throw new Error(\"invalid addKeywords parameters\")\n }\n\n checkKeyword.call(this, keyword, def)\n if (!def) {\n eachItem(keyword, (kwd) => addRule.call(this, kwd))\n return this\n }\n keywordMetaschema.call(this, def)\n const definition: AddedKeywordDefinition = {\n ...def,\n type: getJSONTypes(def.type),\n schemaType: getJSONTypes(def.schemaType),\n }\n eachItem(\n keyword,\n definition.type.length === 0\n ? (k) => addRule.call(this, k, definition)\n : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t))\n )\n return this\n }\n\n getKeyword(keyword: string): AddedKeywordDefinition | boolean {\n const rule = this.RULES.all[keyword]\n return typeof rule == \"object\" ? rule.definition : !!rule\n }\n\n // Remove keyword\n removeKeyword(keyword: string): Ajv {\n // TODO return type should be Ajv\n const {RULES} = this\n delete RULES.keywords[keyword]\n delete RULES.all[keyword]\n for (const group of RULES.rules) {\n const i = group.rules.findIndex((rule) => rule.keyword === keyword)\n if (i >= 0) group.rules.splice(i, 1)\n }\n return this\n }\n\n // Add format\n addFormat(name: string, format: Format): Ajv {\n if (typeof format == \"string\") format = new RegExp(format)\n this.formats[name] = format\n return this\n }\n\n errorsText(\n errors: ErrorObject[] | null | undefined = this.errors, // optional array of validation errors\n {separator = \", \", dataVar = \"data\"}: ErrorsTextOptions = {} // optional options with properties `separator` and `dataVar`\n ): string {\n if (!errors || errors.length === 0) return \"No errors\"\n return errors\n .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n .reduce((text, msg) => text + separator + msg)\n }\n\n $dataMetaSchema(metaSchema: AnySchemaObject, keywordsJsonPointers: string[]): AnySchemaObject {\n const rules = this.RULES.all\n metaSchema = JSON.parse(JSON.stringify(metaSchema))\n for (const jsonPointer of keywordsJsonPointers) {\n const segments = jsonPointer.split(\"/\").slice(1) // first segment is an empty string\n let keywords = metaSchema\n for (const seg of segments) keywords = keywords[seg] as AnySchemaObject\n\n for (const key in rules) {\n const rule = rules[key]\n if (typeof rule != \"object\") continue\n const {$data} = rule.definition\n const schema = keywords[key] as AnySchemaObject | undefined\n if ($data && schema) keywords[key] = schemaOrData(schema)\n }\n }\n\n return metaSchema\n }\n\n private _removeAllSchemas(schemas: {[Ref in string]?: SchemaEnv | string}, regex?: RegExp): void {\n for (const keyRef in schemas) {\n const sch = schemas[keyRef]\n if (!regex || regex.test(keyRef)) {\n if (typeof sch == \"string\") {\n delete schemas[keyRef]\n } else if (sch && !sch.meta) {\n this._cache.delete(sch.schema)\n delete schemas[keyRef]\n }\n }\n }\n }\n\n _addSchema(\n schema: AnySchema,\n meta?: boolean,\n baseId?: string,\n validateSchema = this.opts.validateSchema,\n addSchema = this.opts.addUsedSchema\n ): SchemaEnv {\n let id: string | undefined\n const {schemaId} = this.opts\n if (typeof schema == \"object\") {\n id = schema[schemaId]\n } else {\n if (this.opts.jtd) throw new Error(\"schema must be object\")\n else if (typeof schema != \"boolean\") throw new Error(\"schema must be object or boolean\")\n }\n let sch = this._cache.get(schema)\n if (sch !== undefined) return sch\n\n baseId = normalizeId(id || baseId)\n const localRefs = getSchemaRefs.call(this, schema, baseId)\n sch = new SchemaEnv({schema, schemaId, meta, baseId, localRefs})\n this._cache.set(sch.schema, sch)\n if (addSchema && !baseId.startsWith(\"#\")) {\n // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n if (baseId) this._checkUnique(baseId)\n this.refs[baseId] = sch\n }\n if (validateSchema) this.validateSchema(schema, true)\n return sch\n }\n\n private _checkUnique(id: string): void {\n if (this.schemas[id] || this.refs[id]) {\n throw new Error(`schema with key or id \"${id}\" already exists`)\n }\n }\n\n private _compileSchemaEnv(sch: SchemaEnv): AnyValidateFunction {\n if (sch.meta) this._compileMetaSchema(sch)\n else compileSchema.call(this, sch)\n\n /* istanbul ignore if */\n if (!sch.validate) throw new Error(\"ajv implementation error\")\n return sch.validate\n }\n\n private _compileMetaSchema(sch: SchemaEnv): void {\n const currentOpts = this.opts\n this.opts = this._metaOpts\n try {\n compileSchema.call(this, sch)\n } finally {\n this.opts = currentOpts\n }\n }\n}\n\nexport interface ErrorsTextOptions {\n separator?: string\n dataVar?: string\n}\n\nfunction checkOptions(\n this: Ajv,\n checkOpts: OptionsInfo<RemovedOptions | DeprecatedOptions>,\n options: Options & RemovedOptions,\n msg: string,\n log: \"warn\" | \"error\" = \"error\"\n): void {\n for (const key in checkOpts) {\n const opt = key as keyof typeof checkOpts\n if (opt in options) this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`)\n }\n}\n\nfunction getSchEnv(this: Ajv, keyRef: string): SchemaEnv | string | undefined {\n keyRef = normalizeId(keyRef) // TODO tests fail without this line\n return this.schemas[keyRef] || this.refs[keyRef]\n}\n\nfunction addInitialSchemas(this: Ajv): void {\n const optsSchemas = this.opts.schemas\n if (!optsSchemas) return\n if (Array.isArray(optsSchemas)) this.addSchema(optsSchemas)\n else for (const key in optsSchemas) this.addSchema(optsSchemas[key] as AnySchema, key)\n}\n\nfunction addInitialFormats(this: Ajv): void {\n for (const name in this.opts.formats) {\n const format = this.opts.formats[name]\n if (format) this.addFormat(name, format)\n }\n}\n\nfunction addInitialKeywords(\n this: Ajv,\n defs: Vocabulary | {[K in string]?: KeywordDefinition}\n): void {\n if (Array.isArray(defs)) {\n this.addVocabulary(defs)\n return\n }\n this.logger.warn(\"keywords option as map is deprecated, pass array\")\n for (const keyword in defs) {\n const def = defs[keyword] as KeywordDefinition\n if (!def.keyword) def.keyword = keyword\n this.addKeyword(def)\n }\n}\n\nfunction getMetaSchemaOptions(this: Ajv): InstanceOptions {\n const metaOpts = {...this.opts}\n for (const opt of META_IGNORE_OPTIONS) delete metaOpts[opt]\n return metaOpts\n}\n\nconst noLogs = {log() {}, warn() {}, error() {}}\n\nfunction getLogger(logger?: Partial<Logger> | false): Logger {\n if (logger === false) return noLogs\n if (logger === undefined) return console\n if (logger.log && logger.warn && logger.error) return logger as Logger\n throw new Error(\"logger must implement log, warn and error methods\")\n}\n\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i\n\nfunction checkKeyword(this: Ajv, keyword: string | string[], def?: KeywordDefinition): void {\n const {RULES} = this\n eachItem(keyword, (kwd) => {\n if (RULES.keywords[kwd]) throw new Error(`Keyword ${kwd} is already defined`)\n if (!KEYWORD_NAME.test(kwd)) throw new Error(`Keyword ${kwd} has invalid name`)\n })\n if (!def) return\n if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n throw new Error('$data keyword must have \"code\" or \"validate\" function')\n }\n}\n\nfunction addRule(\n this: Ajv,\n keyword: string,\n definition?: AddedKeywordDefinition,\n dataType?: JSONType\n): void {\n const post = definition?.post\n if (dataType && post) throw new Error('keyword with \"post\" flag cannot have \"type\"')\n const {RULES} = this\n let ruleGroup = post ? RULES.post : RULES.rules.find(({type: t}) => t === dataType)\n if (!ruleGroup) {\n ruleGroup = {type: dataType, rules: []}\n RULES.rules.push(ruleGroup)\n }\n RULES.keywords[keyword] = true\n if (!definition) return\n\n const rule: Rule = {\n keyword,\n definition: {\n ...definition,\n type: getJSONTypes(definition.type),\n schemaType: getJSONTypes(definition.schemaType),\n },\n }\n if (definition.before) addBeforeRule.call(this, ruleGroup, rule, definition.before)\n else ruleGroup.rules.push(rule)\n RULES.all[keyword] = rule\n definition.implements?.forEach((kwd) => this.addKeyword(kwd))\n}\n\nfunction addBeforeRule(this: Ajv, ruleGroup: RuleGroup, rule: Rule, before: string): void {\n const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before)\n if (i >= 0) {\n ruleGroup.rules.splice(i, 0, rule)\n } else {\n ruleGroup.rules.push(rule)\n this.logger.warn(`rule ${before} is not defined`)\n }\n}\n\nfunction keywordMetaschema(this: Ajv, def: KeywordDefinition): void {\n let {metaSchema} = def\n if (metaSchema === undefined) return\n if (def.$data && this.opts.$data) metaSchema = schemaOrData(metaSchema)\n def.validateSchema = this.compile(metaSchema, true)\n}\n\nconst $dataRef = {\n $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n}\n\nfunction schemaOrData(schema: AnySchema): AnySchemaObject {\n return {anyOf: [schema, $dataRef]}\n}\n","// https://github.com/ajv-validator/ajv/issues/889\nimport * as equal from \"fast-deep-equal\"\n\ntype Equal = typeof equal & {code: string}\n;(equal as Equal).code = 'require(\"ajv/dist/runtime/equal\").default'\n\nexport default equal as Equal\n","// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nexport default function ucs2length(str: string): number {\n const len = str.length\n let length = 0\n let pos = 0\n let value: number\n while (pos < len) {\n length++\n value = str.charCodeAt(pos++)\n if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n // high surrogate, and there is a next character\n value = str.charCodeAt(pos)\n if ((value & 0xfc00) === 0xdc00) pos++ // low surrogate\n }\n }\n return length\n}\n\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default'\n","import * as uri from \"uri-js\"\n\ntype URI = typeof uri & {code: string}\n;(uri as URI).code = 'require(\"ajv/dist/runtime/uri\").default'\n\nexport default uri as URI\n","import type {ErrorObject} from \"../types\"\n\nexport default class ValidationError extends Error {\n readonly errors: Partial<ErrorObject>[]\n readonly ajv: true\n readonly validation: true\n\n constructor(errors: Partial<ErrorObject>[]) {\n super(\"validation failed\")\n this.errors = errors\n this.ajv = this.validation = true\n }\n}\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type AdditionalItemsError = ErrorObject<\"additionalItems\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"additionalItems\" as const,\n type: \"array\",\n schemaType: [\"boolean\", \"object\"],\n before: \"uniqueItems\",\n error,\n code(cxt: KeywordCxt) {\n const {parentSchema, it} = cxt\n const {items} = parentSchema\n if (!Array.isArray(items)) {\n checkStrictMode(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas')\n return\n }\n validateAdditionalItems(cxt, items)\n },\n}\n\nexport function validateAdditionalItems(cxt: KeywordCxt, items: AnySchema[]): void {\n const {gen, schema, data, keyword, it} = cxt\n it.items = true\n const len = gen.const(\"len\", _`${data}.length`)\n if (schema === false) {\n cxt.setParams({len: items.length})\n cxt.pass(_`${len} <= ${items.length}`)\n } else if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n const valid = gen.var(\"valid\", _`${len} <= ${items.length}`) // TODO var\n gen.if(not(valid), () => validateItems(valid))\n cxt.ok(valid)\n }\n\n function validateItems(valid: Name): void {\n gen.forRange(\"i\", items.length, len, (i) => {\n cxt.subschema({keyword, dataProp: i, dataPropType: Type.Num}, valid)\n if (!it.allErrors) gen.if(not(valid), () => gen.break())\n })\n }\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n AddedKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport {allSchemaProperties, usePattern, isOwnProperty} from \"../code\"\nimport {_, nil, or, not, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport type {SubschemaArgs} from \"../../compile/validate/subschema\"\nimport {alwaysValidSchema, schemaRefOrVal, Type} from \"../../compile/util\"\n\nexport type AdditionalPropertiesError = ErrorObject<\n \"additionalProperties\",\n {additionalProperty: string},\n AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n message: \"must NOT have additional properties\",\n params: ({params}) => _`{additionalProperty: ${params.additionalProperty}}`,\n}\n\nconst def: CodeKeywordDefinition & AddedKeywordDefinition = {\n keyword: \"additionalProperties\",\n type: [\"object\"],\n schemaType: [\"boolean\", \"object\"],\n allowUndefined: true,\n trackErrors: true,\n error,\n code(cxt) {\n const {gen, schema, parentSchema, data, errsCount, it} = cxt\n /* istanbul ignore if */\n if (!errsCount) throw new Error(\"ajv implementation error\")\n const {allErrors, opts} = it\n it.props = true\n if (opts.removeAdditional !== \"all\" && alwaysValidSchema(it, schema)) return\n const props = allSchemaProperties(parentSchema.properties)\n const patProps = allSchemaProperties(parentSchema.patternProperties)\n checkAdditionalProperties()\n cxt.ok(_`${errsCount} === ${N.errors}`)\n\n function checkAdditionalProperties(): void {\n gen.forIn(\"key\", data, (key: Name) => {\n if (!props.length && !patProps.length) additionalPropertyCode(key)\n else gen.if(isAdditional(key), () => additionalPropertyCode(key))\n })\n }\n\n function isAdditional(key: Name): Code {\n let definedProp: Code\n if (props.length > 8) {\n // TODO maybe an option instead of hard-coded 8?\n const propsSchema = schemaRefOrVal(it, parentSchema.properties, \"properties\")\n definedProp = isOwnProperty(gen, propsSchema as Code, key)\n } else if (props.length) {\n definedProp = or(...props.map((p) => _`${key} === ${p}`))\n } else {\n definedProp = nil\n }\n if (patProps.length) {\n definedProp = or(definedProp, ...patProps.map((p) => _`${usePattern(cxt, p)}.test(${key})`))\n }\n return not(definedProp)\n }\n\n function deleteAdditional(key: Name): void {\n gen.code(_`delete ${data}[${key}]`)\n }\n\n function additionalPropertyCode(key: Name): void {\n if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n deleteAdditional(key)\n return\n }\n\n if (schema === false) {\n cxt.setParams({additionalProperty: key})\n cxt.error()\n if (!allErrors) gen.break()\n return\n }\n\n if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n const valid = gen.name(\"valid\")\n if (opts.removeAdditional === \"failing\") {\n applyAdditionalSchema(key, valid, false)\n gen.if(not(valid), () => {\n cxt.reset()\n deleteAdditional(key)\n })\n } else {\n applyAdditionalSchema(key, valid)\n if (!allErrors) gen.if(not(valid), () => gen.break())\n }\n }\n }\n\n function applyAdditionalSchema(key: Name, valid: Name, errors?: false): void {\n const subschema: SubschemaArgs = {\n keyword: \"additionalProperties\",\n dataProp: key,\n dataPropType: Type.Str,\n }\n if (errors === false) {\n Object.assign(subschema, {\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n })\n }\n cxt.subschema(subschema, valid)\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"allOf\",\n schemaType: \"array\",\n code(cxt: KeywordCxt) {\n const {gen, schema, it} = cxt\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n const valid = gen.name(\"valid\")\n schema.forEach((sch: AnySchema, i: number) => {\n if (alwaysValidSchema(it, sch)) return\n const schCxt = cxt.subschema({keyword: \"allOf\", schemaProp: i}, valid)\n cxt.ok(valid)\n cxt.mergeEvaluated(schCxt)\n })\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport {validateUnion} from \"../code\"\n\nexport type AnyOfError = ErrorNoParams<\"anyOf\", AnySchema[]>\n\nconst def: CodeKeywordDefinition = {\n keyword: \"anyOf\",\n schemaType: \"array\",\n trackErrors: true,\n code: validateUnion,\n error: {message: \"must match a schema in anyOf\"},\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n KeywordErrorDefinition,\n ErrorObject,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type ContainsError = ErrorObject<\n \"contains\",\n {minContains: number; maxContains?: number},\n AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {min, max}}) =>\n max === undefined\n ? str`must contain at least ${min} valid item(s)`\n : str`must contain at least ${min} and no more than ${max} valid item(s)`,\n params: ({params: {min, max}}) =>\n max === undefined ? _`{minContains: ${min}}` : _`{minContains: ${min}, maxContains: ${max}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"contains\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n trackErrors: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, parentSchema, data, it} = cxt\n let min: number\n let max: number | undefined\n const {minContains, maxContains} = parentSchema\n if (it.opts.next) {\n min = minContains === undefined ? 1 : minContains\n max = maxContains\n } else {\n min = 1\n }\n const len = gen.const(\"len\", _`${data}.length`)\n cxt.setParams({min, max})\n if (max === undefined && min === 0) {\n checkStrictMode(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`)\n return\n }\n if (max !== undefined && min > max) {\n checkStrictMode(it, `\"minContains\" > \"maxContains\" is always invalid`)\n cxt.fail()\n return\n }\n if (alwaysValidSchema(it, schema)) {\n let cond = _`${len} >= ${min}`\n if (max !== undefined) cond = _`${cond} && ${len} <= ${max}`\n cxt.pass(cond)\n return\n }\n\n it.items = true\n const valid = gen.name(\"valid\")\n if (max === undefined && min === 1) {\n validateItems(valid, () => gen.if(valid, () => gen.break()))\n } else if (min === 0) {\n gen.let(valid, true)\n if (max !== undefined) gen.if(_`${data}.length > 0`, validateItemsWithCount)\n } else {\n gen.let(valid, false)\n validateItemsWithCount()\n }\n cxt.result(valid, () => cxt.reset())\n\n function validateItemsWithCount(): void {\n const schValid = gen.name(\"_valid\")\n const count = gen.let(\"count\", 0)\n validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)))\n }\n\n function validateItems(_valid: Name, block: () => void): void {\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema(\n {\n keyword: \"contains\",\n dataProp: i,\n dataPropType: Type.Num,\n compositeRule: true,\n },\n _valid\n )\n block()\n })\n }\n\n function checkLimits(count: Name): void {\n gen.code(_`${count}++`)\n if (max === undefined) {\n gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true).break())\n } else {\n gen.if(_`${count} > ${max}`, () => gen.assign(valid, false).break())\n if (min === 1) gen.assign(valid, true)\n else gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true))\n }\n }\n },\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n SchemaMap,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {checkReportMissingProp, checkMissingProp, reportMissingProp, propertyInData} from \"../code\"\n\nexport type PropertyDependencies = {[K in string]?: string[]}\n\nexport interface DependenciesErrorParams {\n property: string\n missingProperty: string\n depsCount: number\n deps: string // TODO change to string[]\n}\n\ntype SchemaDependencies = SchemaMap\n\nexport type DependenciesError = ErrorObject<\n \"dependencies\",\n DependenciesErrorParams,\n {[K in string]?: string[] | AnySchema}\n>\n\nexport const error: KeywordErrorDefinition = {\n message: ({params: {property, depsCount, deps}}) => {\n const property_ies = depsCount === 1 ? \"property\" : \"properties\"\n return str`must have ${property_ies} ${deps} when property ${property} is present`\n },\n params: ({params: {property, depsCount, deps, missingProperty}}) =>\n _`{property: ${property},\n missingProperty: ${missingProperty},\n depsCount: ${depsCount},\n deps: ${deps}}`, // TODO change to reference\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"dependencies\",\n type: \"object\",\n schemaType: \"object\",\n error,\n code(cxt: KeywordCxt) {\n const [propDeps, schDeps] = splitDependencies(cxt)\n validatePropertyDeps(cxt, propDeps)\n validateSchemaDeps(cxt, schDeps)\n },\n}\n\nfunction splitDependencies({schema}: KeywordCxt): [PropertyDependencies, SchemaDependencies] {\n const propertyDeps: PropertyDependencies = {}\n const schemaDeps: SchemaDependencies = {}\n for (const key in schema) {\n if (key === \"__proto__\") continue\n const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps\n deps[key] = schema[key]\n }\n return [propertyDeps, schemaDeps]\n}\n\nexport function validatePropertyDeps(\n cxt: KeywordCxt,\n propertyDeps: {[K in string]?: string[]} = cxt.schema\n): void {\n const {gen, data, it} = cxt\n if (Object.keys(propertyDeps).length === 0) return\n const missing = gen.let(\"missing\")\n for (const prop in propertyDeps) {\n const deps = propertyDeps[prop] as string[]\n if (deps.length === 0) continue\n const hasProperty = propertyInData(gen, data, prop, it.opts.ownProperties)\n cxt.setParams({\n property: prop,\n depsCount: deps.length,\n deps: deps.join(\", \"),\n })\n if (it.allErrors) {\n gen.if(hasProperty, () => {\n for (const depProp of deps) {\n checkReportMissingProp(cxt, depProp)\n }\n })\n } else {\n gen.if(_`${hasProperty} && (${checkMissingProp(cxt, deps, missing)})`)\n reportMissingProp(cxt, missing)\n gen.else()\n }\n }\n}\n\nexport function validateSchemaDeps(cxt: KeywordCxt, schemaDeps: SchemaMap = cxt.schema): void {\n const {gen, data, keyword, it} = cxt\n const valid = gen.name(\"valid\")\n for (const prop in schemaDeps) {\n if (alwaysValidSchema(it, schemaDeps[prop] as AnySchema)) continue\n gen.if(\n propertyInData(gen, data, prop, it.opts.ownProperties),\n () => {\n const schCxt = cxt.subschema({keyword, schemaProp: prop}, valid)\n cxt.mergeValidEvaluated(schCxt, valid)\n },\n () => gen.var(valid, true) // TODO var\n )\n cxt.ok(valid)\n }\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"../../compile\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\n\nexport type IfKeywordError = ErrorObject<\"if\", {failingKeyword: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: ({params}) => str`must match \"${params.ifClause}\" schema`,\n params: ({params}) => _`{failingKeyword: ${params.ifClause}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"if\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, parentSchema, it} = cxt\n if (parentSchema.then === undefined && parentSchema.else === undefined) {\n checkStrictMode(it, '\"if\" without \"then\" and \"else\" is ignored')\n }\n const hasThen = hasSchema(it, \"then\")\n const hasElse = hasSchema(it, \"else\")\n if (!hasThen && !hasElse) return\n\n const valid = gen.let(\"valid\", true)\n const schValid = gen.name(\"_valid\")\n validateIf()\n cxt.reset()\n\n if (hasThen && hasElse) {\n const ifClause = gen.let(\"ifClause\")\n cxt.setParams({ifClause})\n gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause))\n } else if (hasThen) {\n gen.if(schValid, validateClause(\"then\"))\n } else {\n gen.if(not(schValid), validateClause(\"else\"))\n }\n\n cxt.pass(valid, () => cxt.error(true))\n\n function validateIf(): void {\n const schCxt = cxt.subschema(\n {\n keyword: \"if\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n },\n schValid\n )\n cxt.mergeEvaluated(schCxt)\n }\n\n function validateClause(keyword: string, ifClause?: Name): () => void {\n return () => {\n const schCxt = cxt.subschema({keyword}, schValid)\n gen.assign(valid, schValid)\n cxt.mergeValidEvaluated(schCxt, valid)\n if (ifClause) gen.assign(ifClause, _`${keyword}`)\n else cxt.setParams({ifClause: keyword})\n }\n }\n },\n}\n\nfunction hasSchema(it: SchemaObjCxt, keyword: string): boolean {\n const schema = it.schema[keyword]\n return schema !== undefined && !alwaysValidSchema(it, schema)\n}\n\nexport default def\n","import type {ErrorNoParams, Vocabulary} from \"../../types\"\nimport additionalItems, {AdditionalItemsError} from \"./additionalItems\"\nimport prefixItems from \"./prefixItems\"\nimport items from \"./items\"\nimport items2020, {ItemsError} from \"./items2020\"\nimport contains, {ContainsError} from \"./contains\"\nimport dependencies, {DependenciesError} from \"./dependencies\"\nimport propertyNames, {PropertyNamesError} from \"./propertyNames\"\nimport additionalProperties, {AdditionalPropertiesError} from \"./additionalProperties\"\nimport properties from \"./properties\"\nimport patternProperties from \"./patternProperties\"\nimport notKeyword, {NotKeywordError} from \"./not\"\nimport anyOf, {AnyOfError} from \"./anyOf\"\nimport oneOf, {OneOfError} from \"./oneOf\"\nimport allOf from \"./allOf\"\nimport ifKeyword, {IfKeywordError} from \"./if\"\nimport thenElse from \"./thenElse\"\n\nexport default function getApplicator(draft2020 = false): Vocabulary {\n const applicator = [\n // any\n notKeyword,\n anyOf,\n oneOf,\n allOf,\n ifKeyword,\n thenElse,\n // object\n propertyNames,\n additionalProperties,\n dependencies,\n properties,\n patternProperties,\n ]\n // array\n if (draft2020) applicator.push(prefixItems, items2020)\n else applicator.push(additionalItems, items)\n applicator.push(contains)\n return applicator\n}\n\nexport type ApplicatorKeywordError =\n | ErrorNoParams<\"false schema\">\n | AdditionalItemsError\n | ItemsError\n | ContainsError\n | AdditionalPropertiesError\n | DependenciesError\n | IfKeywordError\n | AnyOfError\n | OneOfError\n | NotKeywordError\n | PropertyNamesError\n","import type {CodeKeywordDefinition, AnySchema, AnySchemaObject} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {alwaysValidSchema, mergeEvaluated, checkStrictMode} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"array\", \"boolean\"],\n before: \"uniqueItems\",\n code(cxt: KeywordCxt) {\n const {schema, it} = cxt\n if (Array.isArray(schema)) return validateTuple(cxt, \"additionalItems\", schema)\n it.items = true\n if (alwaysValidSchema(it, schema)) return\n cxt.ok(validateArray(cxt))\n },\n}\n\nexport function validateTuple(\n cxt: KeywordCxt,\n extraItems: string,\n schArr: AnySchema[] = cxt.schema\n): void {\n const {gen, parentSchema, data, keyword, it} = cxt\n checkStrictTuple(parentSchema)\n if (it.opts.unevaluated && schArr.length && it.items !== true) {\n it.items = mergeEvaluated.items(gen, schArr.length, it.items)\n }\n const valid = gen.name(\"valid\")\n const len = gen.const(\"len\", _`${data}.length`)\n schArr.forEach((sch: AnySchema, i: number) => {\n if (alwaysValidSchema(it, sch)) return\n gen.if(_`${len} > ${i}`, () =>\n cxt.subschema(\n {\n keyword,\n schemaProp: i,\n dataProp: i,\n },\n valid\n )\n )\n cxt.ok(valid)\n })\n\n function checkStrictTuple(sch: AnySchemaObject): void {\n const {opts, errSchemaPath} = it\n const l = schArr.length\n const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false)\n if (opts.strictTuples && !fullTuple) {\n const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`\n checkStrictMode(it, msg, opts.strictTuples)\n }\n }\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n KeywordErrorDefinition,\n ErrorObject,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\nimport {validateAdditionalItems} from \"./additionalItems\"\n\nexport type ItemsError = ErrorObject<\"items\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n error,\n code(cxt: KeywordCxt) {\n const {schema, parentSchema, it} = cxt\n const {prefixItems} = parentSchema\n it.items = true\n if (alwaysValidSchema(it, schema)) return\n if (prefixItems) validateAdditionalItems(cxt, prefixItems)\n else cxt.ok(validateArray(cxt))\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type NotKeywordError = ErrorNoParams<\"not\", AnySchema>\n\nconst def: CodeKeywordDefinition = {\n keyword: \"not\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n code(cxt: KeywordCxt) {\n const {gen, schema, it} = cxt\n if (alwaysValidSchema(it, schema)) {\n cxt.fail()\n return\n }\n\n const valid = gen.name(\"valid\")\n cxt.subschema(\n {\n keyword: \"not\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n },\n valid\n )\n\n cxt.failResult(\n valid,\n () => cxt.reset(),\n () => cxt.error()\n )\n },\n error: {message: \"must NOT be valid\"},\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {SchemaCxt} from \"../../compile\"\n\nexport type OneOfError = ErrorObject<\n \"oneOf\",\n {passingSchemas: [number, number] | null},\n AnySchema[]\n>\n\nconst error: KeywordErrorDefinition = {\n message: \"must match exactly one schema in oneOf\",\n params: ({params}) => _`{passingSchemas: ${params.passing}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"oneOf\",\n schemaType: \"array\",\n trackErrors: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, parentSchema, it} = cxt\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n if (it.opts.discriminator && parentSchema.discriminator) return\n const schArr: AnySchema[] = schema\n const valid = gen.let(\"valid\", false)\n const passing = gen.let(\"passing\", null)\n const schValid = gen.name(\"_valid\")\n cxt.setParams({passing})\n // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n\n gen.block(validateOneOf)\n\n cxt.result(\n valid,\n () => cxt.reset(),\n () => cxt.error(true)\n )\n\n function validateOneOf(): void {\n schArr.forEach((sch: AnySchema, i: number) => {\n let schCxt: SchemaCxt | undefined\n if (alwaysValidSchema(it, sch)) {\n gen.var(schValid, true)\n } else {\n schCxt = cxt.subschema(\n {\n keyword: \"oneOf\",\n schemaProp: i,\n compositeRule: true,\n },\n schValid\n )\n }\n\n if (i > 0) {\n gen\n .if(_`${schValid} && ${valid}`)\n .assign(valid, false)\n .assign(passing, _`[${passing}, ${i}]`)\n .else()\n }\n\n gen.if(schValid, () => {\n gen.assign(valid, true)\n gen.assign(passing, i)\n if (schCxt) cxt.mergeEvaluated(schCxt, Name)\n })\n })\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {allSchemaProperties, usePattern} from \"../code\"\nimport {_, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\nimport {evaluatedPropsToName, Type} from \"../../compile/util\"\nimport {AnySchema} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"patternProperties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt: KeywordCxt) {\n const {gen, schema, data, parentSchema, it} = cxt\n const {opts} = it\n const patterns = allSchemaProperties(schema)\n const alwaysValidPatterns = patterns.filter((p) =>\n alwaysValidSchema(it, schema[p] as AnySchema)\n )\n\n if (\n patterns.length === 0 ||\n (alwaysValidPatterns.length === patterns.length &&\n (!it.opts.unevaluated || it.props === true))\n ) {\n return\n }\n\n const checkProperties =\n opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties\n const valid = gen.name(\"valid\")\n if (it.props !== true && !(it.props instanceof Name)) {\n it.props = evaluatedPropsToName(gen, it.props)\n }\n const {props} = it\n validatePatternProperties()\n\n function validatePatternProperties(): void {\n for (const pat of patterns) {\n if (checkProperties) checkMatchingProperties(pat)\n if (it.allErrors) {\n validateProperties(pat)\n } else {\n gen.var(valid, true) // TODO var\n validateProperties(pat)\n gen.if(valid)\n }\n }\n }\n\n function checkMatchingProperties(pat: string): void {\n for (const prop in checkProperties) {\n if (new RegExp(pat).test(prop)) {\n checkStrictMode(\n it,\n `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`\n )\n }\n }\n }\n\n function validateProperties(pat: string): void {\n gen.forIn(\"key\", data, (key) => {\n gen.if(_`${usePattern(cxt, pat)}.test(${key})`, () => {\n const alwaysValid = alwaysValidPatterns.includes(pat)\n if (!alwaysValid) {\n cxt.subschema(\n {\n keyword: \"patternProperties\",\n schemaProp: pat,\n dataProp: key,\n dataPropType: Type.Str,\n },\n valid\n )\n }\n\n if (it.opts.unevaluated && props !== true) {\n gen.assign(_`${props}[${key}]`, true)\n } else if (!alwaysValid && !it.allErrors) {\n // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n // or if all properties were evaluated (props === true)\n gen.if(not(valid), () => gen.break())\n }\n })\n })\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport {validateTuple} from \"./items\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"prefixItems\",\n type: \"array\",\n schemaType: [\"array\"],\n before: \"uniqueItems\",\n code: (cxt) => validateTuple(cxt, \"items\"),\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport {KeywordCxt} from \"../../compile/validate\"\nimport {propertyInData, allSchemaProperties} from \"../code\"\nimport {alwaysValidSchema, toHash, mergeEvaluated} from \"../../compile/util\"\nimport apDef from \"./additionalProperties\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"properties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt: KeywordCxt) {\n const {gen, schema, parentSchema, data, it} = cxt\n if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n apDef.code(new KeywordCxt(it, apDef, \"additionalProperties\"))\n }\n const allProps = allSchemaProperties(schema)\n for (const prop of allProps) {\n it.definedProperties.add(prop)\n }\n if (it.opts.unevaluated && allProps.length && it.props !== true) {\n it.props = mergeEvaluated.props(gen, toHash(allProps), it.props)\n }\n const properties = allProps.filter((p) => !alwaysValidSchema(it, schema[p]))\n if (properties.length === 0) return\n const valid = gen.name(\"valid\")\n\n for (const prop of properties) {\n if (hasDefault(prop)) {\n applyPropertySchema(prop)\n } else {\n gen.if(propertyInData(gen, data, prop, it.opts.ownProperties))\n applyPropertySchema(prop)\n if (!it.allErrors) gen.else().var(valid, true)\n gen.endIf()\n }\n cxt.it.definedProperties.add(prop)\n cxt.ok(valid)\n }\n\n function hasDefault(prop: string): boolean | undefined {\n return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined\n }\n\n function applyPropertySchema(prop: string): void {\n cxt.subschema(\n {\n keyword: \"properties\",\n schemaProp: prop,\n dataProp: prop,\n },\n valid\n )\n }\n },\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, not} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type PropertyNamesError = ErrorObject<\"propertyNames\", {propertyName: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: \"property name must be valid\",\n params: ({params}) => _`{propertyName: ${params.propertyName}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"propertyNames\",\n type: \"object\",\n schemaType: [\"object\", \"boolean\"],\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, data, it} = cxt\n if (alwaysValidSchema(it, schema)) return\n const valid = gen.name(\"valid\")\n\n gen.forIn(\"key\", data, (key) => {\n cxt.setParams({propertyName: key})\n cxt.subschema(\n {\n keyword: \"propertyNames\",\n data: key,\n dataTypes: [\"string\"],\n propertyName: key,\n compositeRule: true,\n },\n valid\n )\n gen.if(not(valid), () => {\n cxt.error(true)\n if (!it.allErrors) gen.break()\n })\n })\n\n cxt.ok(valid)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"then\", \"else\"],\n schemaType: [\"object\", \"boolean\"],\n code({keyword, parentSchema, it}: KeywordCxt) {\n if (parentSchema.if === undefined) checkStrictMode(it, `\"${keyword}\" without \"if\" is ignored`)\n },\n}\n\nexport default def\n","import type {AnySchema, SchemaMap} from \"../types\"\nimport type {SchemaCxt} from \"../compile\"\nimport type {KeywordCxt} from \"../compile/validate\"\nimport {CodeGen, _, and, or, not, nil, strConcat, getProperty, Code, Name} from \"../compile/codegen\"\nimport {alwaysValidSchema, Type} from \"../compile/util\"\nimport N from \"../compile/names\"\nimport {useFunc} from \"../compile/util\"\nexport function checkReportMissingProp(cxt: KeywordCxt, prop: string): void {\n const {gen, data, it} = cxt\n gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n cxt.setParams({missingProperty: _`${prop}`}, true)\n cxt.error()\n })\n}\n\nexport function checkMissingProp(\n {gen, data, it: {opts}}: KeywordCxt,\n properties: string[],\n missing: Name\n): Code {\n return or(\n ...properties.map((prop) =>\n and(noPropertyInData(gen, data, prop, opts.ownProperties), _`${missing} = ${prop}`)\n )\n )\n}\n\nexport function reportMissingProp(cxt: KeywordCxt, missing: Name): void {\n cxt.setParams({missingProperty: missing}, true)\n cxt.error()\n}\n\nexport function hasPropFunc(gen: CodeGen): Name {\n return gen.scopeValue(\"func\", {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n ref: Object.prototype.hasOwnProperty,\n code: _`Object.prototype.hasOwnProperty`,\n })\n}\n\nexport function isOwnProperty(gen: CodeGen, data: Name, property: Name | string): Code {\n return _`${hasPropFunc(gen)}.call(${data}, ${property})`\n}\n\nexport function propertyInData(\n gen: CodeGen,\n data: Name,\n property: Name | string,\n ownProperties?: boolean\n): Code {\n const cond = _`${data}${getProperty(property)} !== undefined`\n return ownProperties ? _`${cond} && ${isOwnProperty(gen, data, property)}` : cond\n}\n\nexport function noPropertyInData(\n gen: CodeGen,\n data: Name,\n property: Name | string,\n ownProperties?: boolean\n): Code {\n const cond = _`${data}${getProperty(property)} === undefined`\n return ownProperties ? or(cond, not(isOwnProperty(gen, data, property))) : cond\n}\n\nexport function allSchemaProperties(schemaMap?: SchemaMap): string[] {\n return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : []\n}\n\nexport function schemaProperties(it: SchemaCxt, schemaMap: SchemaMap): string[] {\n return allSchemaProperties(schemaMap).filter(\n (p) => !alwaysValidSchema(it, schemaMap[p] as AnySchema)\n )\n}\n\nexport function callValidateCode(\n {schemaCode, data, it: {gen, topSchemaRef, schemaPath, errorPath}, it}: KeywordCxt,\n func: Code,\n context: Code,\n passSchema?: boolean\n): Code {\n const dataAndSchema = passSchema ? _`${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data\n const valCxt: [Name, Code | number][] = [\n [N.instancePath, strConcat(N.instancePath, errorPath)],\n [N.parentData, it.parentData],\n [N.parentDataProperty, it.parentDataProperty],\n [N.rootData, N.rootData],\n ]\n if (it.opts.dynamicRef) valCxt.push([N.dynamicAnchors, N.dynamicAnchors])\n const args = _`${dataAndSchema}, ${gen.object(...valCxt)}`\n return context !== nil ? _`${func}.call(${context}, ${args})` : _`${func}(${args})`\n}\n\nconst newRegExp = _`new RegExp`\n\nexport function usePattern({gen, it: {opts}}: KeywordCxt, pattern: string): Name {\n const u = opts.unicodeRegExp ? \"u\" : \"\"\n const {regExp} = opts.code\n const rx = regExp(pattern, u)\n\n return gen.scopeValue(\"pattern\", {\n key: rx.toString(),\n ref: rx,\n code: _`${regExp.code === \"new RegExp\" ? newRegExp : useFunc(gen, regExp)}(${pattern}, ${u})`,\n })\n}\n\nexport function validateArray(cxt: KeywordCxt): Name {\n const {gen, data, keyword, it} = cxt\n const valid = gen.name(\"valid\")\n if (it.allErrors) {\n const validArr = gen.let(\"valid\", true)\n validateItems(() => gen.assign(validArr, false))\n return validArr\n }\n gen.var(valid, true)\n validateItems(() => gen.break())\n return valid\n\n function validateItems(notValid: () => void): void {\n const len = gen.const(\"len\", _`${data}.length`)\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema(\n {\n keyword,\n dataProp: i,\n dataPropType: Type.Num,\n },\n valid\n )\n gen.if(not(valid), notValid)\n })\n }\n}\n\nexport function validateUnion(cxt: KeywordCxt): void {\n const {gen, schema, keyword, it} = cxt\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n const alwaysValid = schema.some((sch: AnySchema) => alwaysValidSchema(it, sch))\n if (alwaysValid && !it.opts.unevaluated) return\n\n const valid = gen.let(\"valid\", false)\n const schValid = gen.name(\"_valid\")\n\n gen.block(() =>\n schema.forEach((_sch: AnySchema, i: number) => {\n const schCxt = cxt.subschema(\n {\n keyword,\n schemaProp: i,\n compositeRule: true,\n },\n schValid\n )\n gen.assign(valid, _`${valid} || ${schValid}`)\n const merged = cxt.mergeValidEvaluated(schCxt, schValid)\n // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n // or if all properties and items were evaluated (it.props === true && it.items === true)\n if (!merged) gen.if(not(valid))\n })\n )\n\n cxt.result(\n valid,\n () => cxt.reset(),\n () => cxt.error(true)\n )\n}\n","import type {CodeKeywordDefinition} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"id\",\n code() {\n throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID')\n },\n}\n\nexport default def\n","import type {Vocabulary} from \"../../types\"\nimport idKeyword from \"./id\"\nimport refKeyword from \"./ref\"\n\nconst core: Vocabulary = [\n \"$schema\",\n \"$id\",\n \"$defs\",\n \"$vocabulary\",\n {keyword: \"$comment\"},\n \"definitions\",\n idKeyword,\n refKeyword,\n]\n\nexport default core\n","import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport MissingRefError from \"../../compile/ref_error\"\nimport {callValidateCode} from \"../code\"\nimport {_, nil, stringify, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport {SchemaEnv, resolveRef} from \"../../compile\"\nimport {mergeEvaluated} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"$ref\",\n schemaType: \"string\",\n code(cxt: KeywordCxt): void {\n const {gen, schema: $ref, it} = cxt\n const {baseId, schemaEnv: env, validateName, opts, self} = it\n const {root} = env\n if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId) return callRootRef()\n const schOrEnv = resolveRef.call(self, root, baseId, $ref)\n if (schOrEnv === undefined) throw new MissingRefError(it.opts.uriResolver, baseId, $ref)\n if (schOrEnv instanceof SchemaEnv) return callValidate(schOrEnv)\n return inlineRefSchema(schOrEnv)\n\n function callRootRef(): void {\n if (env === root) return callRef(cxt, validateName, env, env.$async)\n const rootName = gen.scopeValue(\"root\", {ref: root})\n return callRef(cxt, _`${rootName}.validate`, root, root.$async)\n }\n\n function callValidate(sch: SchemaEnv): void {\n const v = getValidate(cxt, sch)\n callRef(cxt, v, sch, sch.$async)\n }\n\n function inlineRefSchema(sch: AnySchema): void {\n const schName = gen.scopeValue(\n \"schema\",\n opts.code.source === true ? {ref: sch, code: stringify(sch)} : {ref: sch}\n )\n const valid = gen.name(\"valid\")\n const schCxt = cxt.subschema(\n {\n schema: sch,\n dataTypes: [],\n schemaPath: nil,\n topSchemaRef: schName,\n errSchemaPath: $ref,\n },\n valid\n )\n cxt.mergeEvaluated(schCxt)\n cxt.ok(valid)\n }\n },\n}\n\nexport function getValidate(cxt: KeywordCxt, sch: SchemaEnv): Code {\n const {gen} = cxt\n return sch.validate\n ? gen.scopeValue(\"validate\", {ref: sch.validate})\n : _`${gen.scopeValue(\"wrapper\", {ref: sch})}.validate`\n}\n\nexport function callRef(cxt: KeywordCxt, v: Code, sch?: SchemaEnv, $async?: boolean): void {\n const {gen, it} = cxt\n const {allErrors, schemaEnv: env, opts} = it\n const passCxt = opts.passContext ? N.this : nil\n if ($async) callAsyncRef()\n else callSyncRef()\n\n function callAsyncRef(): void {\n if (!env.$async) throw new Error(\"async schema referenced by sync schema\")\n const valid = gen.let(\"valid\")\n gen.try(\n () => {\n gen.code(_`await ${callValidateCode(cxt, v, passCxt)}`)\n addEvaluatedFrom(v) // TODO will not work with async, it has to be returned with the result\n if (!allErrors) gen.assign(valid, true)\n },\n (e) => {\n gen.if(_`!(${e} instanceof ${it.ValidationError as Name})`, () => gen.throw(e))\n addErrorsFrom(e)\n if (!allErrors) gen.assign(valid, false)\n }\n )\n cxt.ok(valid)\n }\n\n function callSyncRef(): void {\n cxt.result(\n callValidateCode(cxt, v, passCxt),\n () => addEvaluatedFrom(v),\n () => addErrorsFrom(v)\n )\n }\n\n function addErrorsFrom(source: Code): void {\n const errs = _`${source}.errors`\n gen.assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`) // TODO tagged\n gen.assign(N.errors, _`${N.vErrors}.length`)\n }\n\n function addEvaluatedFrom(source: Code): void {\n if (!it.opts.unevaluated) return\n const schEvaluated = sch?.validate?.evaluated\n // TODO refactor\n if (it.props !== true) {\n if (schEvaluated && !schEvaluated.dynamicProps) {\n if (schEvaluated.props !== undefined) {\n it.props = mergeEvaluated.props(gen, schEvaluated.props, it.props)\n }\n } else {\n const props = gen.var(\"props\", _`${source}.evaluated.props`)\n it.props = mergeEvaluated.props(gen, props, it.props, Name)\n }\n }\n if (it.items !== true) {\n if (schEvaluated && !schEvaluated.dynamicItems) {\n if (schEvaluated.items !== undefined) {\n it.items = mergeEvaluated.items(gen, schEvaluated.items, it.items)\n }\n } else {\n const items = gen.var(\"items\", _`${source}.evaluated.items`)\n it.items = mergeEvaluated.items(gen, items, it.items, Name)\n }\n }\n }\n}\n\nexport default def\n","import type {CodeKeywordDefinition, AnySchemaObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, getProperty, Name} from \"../../compile/codegen\"\nimport {DiscrError, DiscrErrorObj} from \"../discriminator/types\"\nimport {resolveRef, SchemaEnv} from \"../../compile\"\nimport {schemaHasRulesButRef} from \"../../compile/util\"\n\nexport type DiscriminatorError = DiscrErrorObj<DiscrError.Tag> | DiscrErrorObj<DiscrError.Mapping>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {discrError, tagName}}) =>\n discrError === DiscrError.Tag\n ? `tag \"${tagName}\" must be string`\n : `value of tag \"${tagName}\" must be in oneOf`,\n params: ({params: {discrError, tag, tagName}}) =>\n _`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"discriminator\",\n type: \"object\",\n schemaType: \"object\",\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, schema, parentSchema, it} = cxt\n const {oneOf} = parentSchema\n if (!it.opts.discriminator) {\n throw new Error(\"discriminator: requires discriminator option\")\n }\n const tagName = schema.propertyName\n if (typeof tagName != \"string\") throw new Error(\"discriminator: requires propertyName\")\n if (schema.mapping) throw new Error(\"discriminator: mapping is not supported\")\n if (!oneOf) throw new Error(\"discriminator: requires oneOf keyword\")\n const valid = gen.let(\"valid\", false)\n const tag = gen.const(\"tag\", _`${data}${getProperty(tagName)}`)\n gen.if(\n _`typeof ${tag} == \"string\"`,\n () => validateMapping(),\n () => cxt.error(false, {discrError: DiscrError.Tag, tag, tagName})\n )\n cxt.ok(valid)\n\n function validateMapping(): void {\n const mapping = getMapping()\n gen.if(false)\n for (const tagValue in mapping) {\n gen.elseIf(_`${tag} === ${tagValue}`)\n gen.assign(valid, applyTagSchema(mapping[tagValue]))\n }\n gen.else()\n cxt.error(false, {discrError: DiscrError.Mapping, tag, tagName})\n gen.endIf()\n }\n\n function applyTagSchema(schemaProp?: number): Name {\n const _valid = gen.name(\"valid\")\n const schCxt = cxt.subschema({keyword: \"oneOf\", schemaProp}, _valid)\n cxt.mergeEvaluated(schCxt, Name)\n return _valid\n }\n\n function getMapping(): {[T in string]?: number} {\n const oneOfMapping: {[T in string]?: number} = {}\n const topRequired = hasRequired(parentSchema)\n let tagRequired = true\n for (let i = 0; i < oneOf.length; i++) {\n let sch = oneOf[i]\n if (sch?.$ref && !schemaHasRulesButRef(sch, it.self.RULES)) {\n sch = resolveRef.call(it.self, it.schemaEnv.root, it.baseId, sch?.$ref)\n if (sch instanceof SchemaEnv) sch = sch.schema\n }\n const propSch = sch?.properties?.[tagName]\n if (typeof propSch != \"object\") {\n throw new Error(\n `discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`\n )\n }\n tagRequired = tagRequired && (topRequired || hasRequired(sch))\n addMappings(propSch, i)\n }\n if (!tagRequired) throw new Error(`discriminator: \"${tagName}\" must be required`)\n return oneOfMapping\n\n function hasRequired({required}: AnySchemaObject): boolean {\n return Array.isArray(required) && required.includes(tagName)\n }\n\n function addMappings(sch: AnySchemaObject, i: number): void {\n if (sch.const) {\n addMapping(sch.const, i)\n } else if (sch.enum) {\n for (const tagValue of sch.enum) {\n addMapping(tagValue, i)\n }\n } else {\n throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`)\n }\n }\n\n function addMapping(tagValue: unknown, i: number): void {\n if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n throw new Error(`discriminator: \"${tagName}\" values must be unique strings`)\n }\n oneOfMapping[tagValue] = i\n }\n }\n },\n}\n\nexport default def\n","import type {ErrorObject} from \"../../types\"\n\nexport enum DiscrError {\n Tag = \"tag\",\n Mapping = \"mapping\",\n}\n\nexport type DiscrErrorObj<E extends DiscrError> = ErrorObject<\n \"discriminator\",\n {error: E; tag: string; tagValue: unknown},\n string\n>\n","import type {Vocabulary} from \"../types\"\nimport coreVocabulary from \"./core\"\nimport validationVocabulary from \"./validation\"\nimport getApplicatorVocabulary from \"./applicator\"\nimport formatVocabulary from \"./format\"\nimport {metadataVocabulary, contentVocabulary} from \"./metadata\"\n\nconst draft7Vocabularies: Vocabulary[] = [\n coreVocabulary,\n validationVocabulary,\n getApplicatorVocabulary(),\n formatVocabulary,\n metadataVocabulary,\n contentVocabulary,\n]\n\nexport default draft7Vocabularies\n","import type {\n AddedFormat,\n FormatValidator,\n AsyncFormatValidator,\n CodeKeywordDefinition,\n KeywordErrorDefinition,\n ErrorObject,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, nil, or, Code, getProperty, regexpCode} from \"../../compile/codegen\"\n\ntype FormatValidate =\n | FormatValidator<string>\n | FormatValidator<number>\n | AsyncFormatValidator<string>\n | AsyncFormatValidator<number>\n | RegExp\n | string\n | true\n\nexport type FormatError = ErrorObject<\"format\", {format: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n message: ({schemaCode}) => str`must match format \"${schemaCode}\"`,\n params: ({schemaCode}) => _`{format: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"format\",\n type: [\"number\", \"string\"],\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt: KeywordCxt, ruleType?: string) {\n const {gen, data, $data, schema, schemaCode, it} = cxt\n const {opts, errSchemaPath, schemaEnv, self} = it\n if (!opts.validateFormats) return\n\n if ($data) validate$DataFormat()\n else validateFormat()\n\n function validate$DataFormat(): void {\n const fmts = gen.scopeValue(\"formats\", {\n ref: self.formats,\n code: opts.code.formats,\n })\n const fDef = gen.const(\"fDef\", _`${fmts}[${schemaCode}]`)\n const fType = gen.let(\"fType\")\n const format = gen.let(\"format\")\n // TODO simplify\n gen.if(\n _`typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`,\n () => gen.assign(fType, _`${fDef}.type || \"string\"`).assign(format, _`${fDef}.validate`),\n () => gen.assign(fType, _`\"string\"`).assign(format, fDef)\n )\n cxt.fail$data(or(unknownFmt(), invalidFmt()))\n\n function unknownFmt(): Code {\n if (opts.strictSchema === false) return nil\n return _`${schemaCode} && !${format}`\n }\n\n function invalidFmt(): Code {\n const callFormat = schemaEnv.$async\n ? _`(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n : _`${format}(${data})`\n const validData = _`(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`\n return _`${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`\n }\n }\n\n function validateFormat(): void {\n const formatDef: AddedFormat | undefined = self.formats[schema]\n if (!formatDef) {\n unknownFormat()\n return\n }\n if (formatDef === true) return\n const [fmtType, format, fmtRef] = getFormat(formatDef)\n if (fmtType === ruleType) cxt.pass(validCondition())\n\n function unknownFormat(): void {\n if (opts.strictSchema === false) {\n self.logger.warn(unknownMsg())\n return\n }\n throw new Error(unknownMsg())\n\n function unknownMsg(): string {\n return `unknown format \"${schema as string}\" ignored in schema at path \"${errSchemaPath}\"`\n }\n }\n\n function getFormat(fmtDef: AddedFormat): [string, FormatValidate, Code] {\n const code =\n fmtDef instanceof RegExp\n ? regexpCode(fmtDef)\n : opts.code.formats\n ? _`${opts.code.formats}${getProperty(schema)}`\n : undefined\n const fmt = gen.scopeValue(\"formats\", {key: schema, ref: fmtDef, code})\n if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n return [fmtDef.type || \"string\", fmtDef.validate, _`${fmt}.validate`]\n }\n\n return [\"string\", fmtDef, fmt]\n }\n\n function validCondition(): Code {\n if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n if (!schemaEnv.$async) throw new Error(\"async format in sync schema\")\n return _`await ${fmtRef}(${data})`\n }\n return typeof format == \"function\" ? _`${fmtRef}(${data})` : _`${fmtRef}.test(${data})`\n }\n }\n },\n}\n\nexport default def\n","import type {Vocabulary} from \"../../types\"\nimport formatKeyword from \"./format\"\n\nconst format: Vocabulary = [formatKeyword]\n\nexport default format\n","import type {Vocabulary} from \"../types\"\n\nexport const metadataVocabulary: Vocabulary = [\n \"title\",\n \"description\",\n \"default\",\n \"deprecated\",\n \"readOnly\",\n \"writeOnly\",\n \"examples\",\n]\n\nexport const contentVocabulary: Vocabulary = [\n \"contentMediaType\",\n \"contentEncoding\",\n \"contentSchema\",\n]\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type ConstError = ErrorObject<\"const\", {allowedValue: any}>\n\nconst error: KeywordErrorDefinition = {\n message: \"must be equal to constant\",\n params: ({schemaCode}) => _`{allowedValue: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"const\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schemaCode, schema} = cxt\n if ($data || (schema && typeof schema == \"object\")) {\n cxt.fail$data(_`!${useFunc(gen, equal)}(${data}, ${schemaCode})`)\n } else {\n cxt.fail(_`${schema} !== ${data}`)\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, or, Name, Code} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type EnumError = ErrorObject<\"enum\", {allowedValues: any[]}, any[] | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n message: \"must be equal to one of the allowed values\",\n params: ({schemaCode}) => _`{allowedValues: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"enum\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schema, schemaCode, it} = cxt\n if (!$data && schema.length === 0) throw new Error(\"enum must have non-empty array\")\n const useLoop = schema.length >= it.opts.loopEnum\n let eql: Name | undefined\n const getEql = (): Name => (eql ??= useFunc(gen, equal))\n\n let valid: Code\n if (useLoop || $data) {\n valid = gen.let(\"valid\")\n cxt.block$data(valid, loopEnum)\n } else {\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n const vSchema = gen.const(\"vSchema\", schemaCode)\n valid = or(...schema.map((_x: unknown, i: number) => equalCode(vSchema, i)))\n }\n cxt.pass(valid)\n\n function loopEnum(): void {\n gen.assign(valid, false)\n gen.forOf(\"v\", schemaCode as Code, (v) =>\n gen.if(_`${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break())\n )\n }\n\n function equalCode(vSchema: Name, i: number): Code {\n const sch = schema[i]\n return typeof sch === \"object\" && sch !== null\n ? _`${getEql()}(${data}, ${vSchema}[${i}])`\n : _`${data} === ${sch}`\n }\n },\n}\n\nexport default def\n","import type {ErrorObject, Vocabulary} from \"../../types\"\nimport limitNumber, {LimitNumberError} from \"./limitNumber\"\nimport multipleOf, {MultipleOfError} from \"./multipleOf\"\nimport limitLength from \"./limitLength\"\nimport pattern, {PatternError} from \"./pattern\"\nimport limitProperties from \"./limitProperties\"\nimport required, {RequiredError} from \"./required\"\nimport limitItems from \"./limitItems\"\nimport uniqueItems, {UniqueItemsError} from \"./uniqueItems\"\nimport constKeyword, {ConstError} from \"./const\"\nimport enumKeyword, {EnumError} from \"./enum\"\n\nconst validation: Vocabulary = [\n // number\n limitNumber,\n multipleOf,\n // string\n limitLength,\n pattern,\n // object\n limitProperties,\n required,\n // array\n limitItems,\n uniqueItems,\n // any\n {keyword: \"type\", schemaType: [\"string\", \"array\"]},\n {keyword: \"nullable\", schemaType: \"boolean\"},\n constKeyword,\n enumKeyword,\n]\n\nexport default validation\n\ntype LimitError = ErrorObject<\n \"maxItems\" | \"minItems\" | \"minProperties\" | \"maxProperties\" | \"minLength\" | \"maxLength\",\n {limit: number},\n number | {$data: string}\n>\n\nexport type ValidationKeywordError =\n | LimitError\n | LimitNumberError\n | MultipleOfError\n | PatternError\n | RequiredError\n | UniqueItemsError\n | ConstError\n | EnumError\n","import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n message({keyword, schemaCode}) {\n const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\"\n return str`must NOT have ${comp} than ${schemaCode} items`\n },\n params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"maxItems\", \"minItems\"],\n type: \"array\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode} = cxt\n const op = keyword === \"maxItems\" ? operators.GT : operators.LT\n cxt.fail$data(_`${data}.length ${op} ${schemaCode}`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport ucs2length from \"../../runtime/ucs2length\"\n\nconst error: KeywordErrorDefinition = {\n message({keyword, schemaCode}) {\n const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\"\n return str`must NOT have ${comp} than ${schemaCode} characters`\n },\n params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"maxLength\", \"minLength\"],\n type: \"string\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode, it} = cxt\n const op = keyword === \"maxLength\" ? operators.GT : operators.LT\n const len =\n it.opts.unicode === false ? _`${data}.length` : _`${useFunc(cxt.gen, ucs2length)}(${data})`\n cxt.fail$data(_`${len} ${op} ${schemaCode}`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators, Code} from \"../../compile/codegen\"\n\nconst ops = operators\n\ntype Kwd = \"maximum\" | \"minimum\" | \"exclusiveMaximum\" | \"exclusiveMinimum\"\n\ntype Comparison = \"<=\" | \">=\" | \"<\" | \">\"\n\nconst KWDs: {[K in Kwd]: {okStr: Comparison; ok: Code; fail: Code}} = {\n maximum: {okStr: \"<=\", ok: ops.LTE, fail: ops.GT},\n minimum: {okStr: \">=\", ok: ops.GTE, fail: ops.LT},\n exclusiveMaximum: {okStr: \"<\", ok: ops.LT, fail: ops.GTE},\n exclusiveMinimum: {okStr: \">\", ok: ops.GT, fail: ops.LTE},\n}\n\nexport type LimitNumberError = ErrorObject<\n Kwd,\n {limit: number; comparison: Comparison},\n number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({keyword, schemaCode}) => str`must be ${KWDs[keyword as Kwd].okStr} ${schemaCode}`,\n params: ({keyword, schemaCode}) =>\n _`{comparison: ${KWDs[keyword as Kwd].okStr}, limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: Object.keys(KWDs),\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode} = cxt\n cxt.fail$data(_`${data} ${KWDs[keyword as Kwd].fail} ${schemaCode} || isNaN(${data})`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n message({keyword, schemaCode}) {\n const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\"\n return str`must NOT have ${comp} than ${schemaCode} properties`\n },\n params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"maxProperties\", \"minProperties\"],\n type: \"object\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode} = cxt\n const op = keyword === \"maxProperties\" ? operators.GT : operators.LT\n cxt.fail$data(_`Object.keys(${data}).length ${op} ${schemaCode}`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type MultipleOfError = ErrorObject<\n \"multipleOf\",\n {multipleOf: number},\n number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({schemaCode}) => str`must be multiple of ${schemaCode}`,\n params: ({schemaCode}) => _`{multipleOf: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"multipleOf\",\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, schemaCode, it} = cxt\n // const bdt = bad$DataType(schemaCode, <string>def.schemaType, $data)\n const prec = it.opts.multipleOfPrecision\n const res = gen.let(\"res\")\n const invalid = prec\n ? _`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n : _`${res} !== parseInt(${res})`\n cxt.fail$data(_`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {usePattern} from \"../code\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type PatternError = ErrorObject<\"pattern\", {pattern: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n message: ({schemaCode}) => str`must match pattern \"${schemaCode}\"`,\n params: ({schemaCode}) => _`{pattern: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"pattern\",\n type: \"string\",\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {data, $data, schema, schemaCode, it} = cxt\n // TODO regexp should be wrapped in try/catchs\n const u = it.opts.unicodeRegExp ? \"u\" : \"\"\n const regExp = $data ? _`(new RegExp(${schemaCode}, ${u}))` : usePattern(cxt, schema)\n cxt.fail$data(_`!${regExp}.test(${data})`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {\n checkReportMissingProp,\n checkMissingProp,\n reportMissingProp,\n propertyInData,\n noPropertyInData,\n} from \"../code\"\nimport {_, str, nil, not, Name, Code} from \"../../compile/codegen\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nexport type RequiredError = ErrorObject<\n \"required\",\n {missingProperty: string},\n string[] | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {missingProperty}}) => str`must have required property '${missingProperty}'`,\n params: ({params: {missingProperty}}) => _`{missingProperty: ${missingProperty}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"required\",\n type: \"object\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, schemaCode, data, $data, it} = cxt\n const {opts} = it\n if (!$data && schema.length === 0) return\n const useLoop = schema.length >= opts.loopRequired\n if (it.allErrors) allErrorsMode()\n else exitOnErrorMode()\n\n if (opts.strictRequired) {\n const props = cxt.parentSchema.properties\n const {definedProperties} = cxt.it\n for (const requiredKey of schema) {\n if (props?.[requiredKey] === undefined && !definedProperties.has(requiredKey)) {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`\n checkStrictMode(it, msg, it.opts.strictRequired)\n }\n }\n }\n\n function allErrorsMode(): void {\n if (useLoop || $data) {\n cxt.block$data(nil, loopAllRequired)\n } else {\n for (const prop of schema) {\n checkReportMissingProp(cxt, prop)\n }\n }\n }\n\n function exitOnErrorMode(): void {\n const missing = gen.let(\"missing\")\n if (useLoop || $data) {\n const valid = gen.let(\"valid\", true)\n cxt.block$data(valid, () => loopUntilMissing(missing, valid))\n cxt.ok(valid)\n } else {\n gen.if(checkMissingProp(cxt, schema, missing))\n reportMissingProp(cxt, missing)\n gen.else()\n }\n }\n\n function loopAllRequired(): void {\n gen.forOf(\"prop\", schemaCode as Code, (prop) => {\n cxt.setParams({missingProperty: prop})\n gen.if(noPropertyInData(gen, data, prop, opts.ownProperties), () => cxt.error())\n })\n }\n\n function loopUntilMissing(missing: Name, valid: Name): void {\n cxt.setParams({missingProperty: missing})\n gen.forOf(\n missing,\n schemaCode as Code,\n () => {\n gen.assign(valid, propertyInData(gen, data, missing, opts.ownProperties))\n gen.if(not(valid), () => {\n cxt.error()\n gen.break()\n })\n },\n nil\n )\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkDataTypes, getSchemaTypes, DataType} from \"../../compile/validate/dataType\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type UniqueItemsError = ErrorObject<\n \"uniqueItems\",\n {i: number; j: number},\n boolean | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {i, j}}) =>\n str`must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n params: ({params: {i, j}}) => _`{i: ${i}, j: ${j}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"uniqueItems\",\n type: \"array\",\n schemaType: \"boolean\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schema, parentSchema, schemaCode, it} = cxt\n if (!$data && !schema) return\n const valid = gen.let(\"valid\")\n const itemTypes = parentSchema.items ? getSchemaTypes(parentSchema.items) : []\n cxt.block$data(valid, validateUniqueItems, _`${schemaCode} === false`)\n cxt.ok(valid)\n\n function validateUniqueItems(): void {\n const i = gen.let(\"i\", _`${data}.length`)\n const j = gen.let(\"j\")\n cxt.setParams({i, j})\n gen.assign(valid, true)\n gen.if(_`${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j))\n }\n\n function canOptimize(): boolean {\n return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\")\n }\n\n function loopN(i: Name, j: Name): void {\n const item = gen.name(\"item\")\n const wrongType = checkDataTypes(itemTypes, item, it.opts.strictNumbers, DataType.Wrong)\n const indices = gen.const(\"indices\", _`{}`)\n gen.for(_`;${i}--;`, () => {\n gen.let(item, _`${data}[${i}]`)\n gen.if(wrongType, _`continue`)\n if (itemTypes.length > 1) gen.if(_`typeof ${item} == \"string\"`, _`${item} += \"_\"`)\n gen\n .if(_`typeof ${indices}[${item}] == \"number\"`, () => {\n gen.assign(j, _`${indices}[${item}]`)\n cxt.error()\n gen.assign(valid, false).break()\n })\n .code(_`${indices}[${item}] = ${i}`)\n })\n }\n\n function loopN2(i: Name, j: Name): void {\n const eql = useFunc(gen, equal)\n const outer = gen.name(\"outer\")\n gen.label(outer).for(_`;${i}--;`, () =>\n gen.for(_`${j} = ${i}; ${j}--;`, () =>\n gen.if(_`${eql}(${data}[${i}], ${data}[${j}])`, () => {\n cxt.error()\n gen.assign(valid, false).break(outer)\n })\n )\n )\n }\n },\n}\n\nexport default def\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.typeDetect = factory());\n}(this, (function () { 'use strict';\n\n/* !\n * type-detect\n * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\nvar promiseExists = typeof Promise === 'function';\n\n/* eslint-disable no-undef */\nvar globalObject = typeof self === 'object' ? self : global; // eslint-disable-line id-blacklist\n\nvar symbolExists = typeof Symbol !== 'undefined';\nvar mapExists = typeof Map !== 'undefined';\nvar setExists = typeof Set !== 'undefined';\nvar weakMapExists = typeof WeakMap !== 'undefined';\nvar weakSetExists = typeof WeakSet !== 'undefined';\nvar dataViewExists = typeof DataView !== 'undefined';\nvar symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined';\nvar symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined';\nvar setEntriesExists = setExists && typeof Set.prototype.entries === 'function';\nvar mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function';\nvar setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries());\nvar mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries());\nvar arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function';\nvar arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]());\nvar stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function';\nvar stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]());\nvar toStringLeftSliceLength = 8;\nvar toStringRightSliceLength = -1;\n/**\n * ### typeOf (obj)\n *\n * Uses `Object.prototype.toString` to determine the type of an object,\n * normalising behaviour across engine versions & well optimised.\n *\n * @param {Mixed} object\n * @return {String} object type\n * @api public\n */\nfunction typeDetect(obj) {\n /* ! Speed optimisation\n * Pre:\n * string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled)\n * boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled)\n * number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled)\n * undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled)\n * function x 2,556,769 ops/sec ±1.73% (77 runs sampled)\n * Post:\n * string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled)\n * boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled)\n * number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled)\n * undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled)\n * function x 31,296,870 ops/sec ±0.96% (83 runs sampled)\n */\n var typeofObj = typeof obj;\n if (typeofObj !== 'object') {\n return typeofObj;\n }\n\n /* ! Speed optimisation\n * Pre:\n * null x 28,645,765 ops/sec ±1.17% (82 runs sampled)\n * Post:\n * null x 36,428,962 ops/sec ±1.37% (84 runs sampled)\n */\n if (obj === null) {\n return 'null';\n }\n\n /* ! Spec Conformance\n * Test: `Object.prototype.toString.call(window)``\n * - Node === \"[object global]\"\n * - Chrome === \"[object global]\"\n * - Firefox === \"[object Window]\"\n * - PhantomJS === \"[object Window]\"\n * - Safari === \"[object Window]\"\n * - IE 11 === \"[object Window]\"\n * - IE Edge === \"[object Window]\"\n * Test: `Object.prototype.toString.call(this)``\n * - Chrome Worker === \"[object global]\"\n * - Firefox Worker === \"[object DedicatedWorkerGlobalScope]\"\n * - Safari Worker === \"[object DedicatedWorkerGlobalScope]\"\n * - IE 11 Worker === \"[object WorkerGlobalScope]\"\n * - IE Edge Worker === \"[object WorkerGlobalScope]\"\n */\n if (obj === globalObject) {\n return 'global';\n }\n\n /* ! Speed optimisation\n * Pre:\n * array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled)\n * Post:\n * array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled)\n */\n if (\n Array.isArray(obj) &&\n (symbolToStringTagExists === false || !(Symbol.toStringTag in obj))\n ) {\n return 'Array';\n }\n\n // Not caching existence of `window` and related properties due to potential\n // for `window` to be unset before tests in quasi-browser environments.\n if (typeof window === 'object' && window !== null) {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/browsers.html#location)\n * WhatWG HTML$7.7.3 - The `Location` interface\n * Test: `Object.prototype.toString.call(window.location)``\n * - IE <=11 === \"[object Object]\"\n * - IE Edge <=13 === \"[object Object]\"\n */\n if (typeof window.location === 'object' && obj === window.location) {\n return 'Location';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#document)\n * WhatWG HTML$3.1.1 - The `Document` object\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * WhatWG HTML states:\n * > For historical reasons, Window objects must also have a\n * > writable, configurable, non-enumerable property named\n * > HTMLDocument whose value is the Document interface object.\n * Test: `Object.prototype.toString.call(document)``\n * - Chrome === \"[object HTMLDocument]\"\n * - Firefox === \"[object HTMLDocument]\"\n * - Safari === \"[object HTMLDocument]\"\n * - IE <=10 === \"[object Document]\"\n * - IE 11 === \"[object HTMLDocument]\"\n * - IE Edge <=13 === \"[object HTMLDocument]\"\n */\n if (typeof window.document === 'object' && obj === window.document) {\n return 'Document';\n }\n\n if (typeof window.navigator === 'object') {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray)\n * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray\n * Test: `Object.prototype.toString.call(navigator.mimeTypes)``\n * - IE <=10 === \"[object MSMimeTypesCollection]\"\n */\n if (typeof window.navigator.mimeTypes === 'object' &&\n obj === window.navigator.mimeTypes) {\n return 'MimeTypeArray';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)\n * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray\n * Test: `Object.prototype.toString.call(navigator.plugins)``\n * - IE <=10 === \"[object MSPluginsCollection]\"\n */\n if (typeof window.navigator.plugins === 'object' &&\n obj === window.navigator.plugins) {\n return 'PluginArray';\n }\n }\n\n if ((typeof window.HTMLElement === 'function' ||\n typeof window.HTMLElement === 'object') &&\n obj instanceof window.HTMLElement) {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)\n * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement`\n * Test: `Object.prototype.toString.call(document.createElement('blockquote'))``\n * - IE <=10 === \"[object HTMLBlockElement]\"\n */\n if (obj.tagName === 'BLOCKQUOTE') {\n return 'HTMLQuoteElement';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#htmltabledatacellelement)\n * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement`\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * Test: Object.prototype.toString.call(document.createElement('td'))\n * - Chrome === \"[object HTMLTableCellElement]\"\n * - Firefox === \"[object HTMLTableCellElement]\"\n * - Safari === \"[object HTMLTableCellElement]\"\n */\n if (obj.tagName === 'TD') {\n return 'HTMLTableDataCellElement';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#htmltableheadercellelement)\n * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement`\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * Test: Object.prototype.toString.call(document.createElement('th'))\n * - Chrome === \"[object HTMLTableCellElement]\"\n * - Firefox === \"[object HTMLTableCellElement]\"\n * - Safari === \"[object HTMLTableCellElement]\"\n */\n if (obj.tagName === 'TH') {\n return 'HTMLTableHeaderCellElement';\n }\n }\n }\n\n /* ! Speed optimisation\n * Pre:\n * Float64Array x 625,644 ops/sec ±1.58% (80 runs sampled)\n * Float32Array x 1,279,852 ops/sec ±2.91% (77 runs sampled)\n * Uint32Array x 1,178,185 ops/sec ±1.95% (83 runs sampled)\n * Uint16Array x 1,008,380 ops/sec ±2.25% (80 runs sampled)\n * Uint8Array x 1,128,040 ops/sec ±2.11% (81 runs sampled)\n * Int32Array x 1,170,119 ops/sec ±2.88% (80 runs sampled)\n * Int16Array x 1,176,348 ops/sec ±5.79% (86 runs sampled)\n * Int8Array x 1,058,707 ops/sec ±4.94% (77 runs sampled)\n * Uint8ClampedArray x 1,110,633 ops/sec ±4.20% (80 runs sampled)\n * Post:\n * Float64Array x 7,105,671 ops/sec ±13.47% (64 runs sampled)\n * Float32Array x 5,887,912 ops/sec ±1.46% (82 runs sampled)\n * Uint32Array x 6,491,661 ops/sec ±1.76% (79 runs sampled)\n * Uint16Array x 6,559,795 ops/sec ±1.67% (82 runs sampled)\n * Uint8Array x 6,463,966 ops/sec ±1.43% (85 runs sampled)\n * Int32Array x 5,641,841 ops/sec ±3.49% (81 runs sampled)\n * Int16Array x 6,583,511 ops/sec ±1.98% (80 runs sampled)\n * Int8Array x 6,606,078 ops/sec ±1.74% (81 runs sampled)\n * Uint8ClampedArray x 6,602,224 ops/sec ±1.77% (83 runs sampled)\n */\n var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]);\n if (typeof stringTag === 'string') {\n return stringTag;\n }\n\n var objPrototype = Object.getPrototypeOf(obj);\n /* ! Speed optimisation\n * Pre:\n * regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled)\n * regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled)\n * Post:\n * regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled)\n * regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled)\n */\n if (objPrototype === RegExp.prototype) {\n return 'RegExp';\n }\n\n /* ! Speed optimisation\n * Pre:\n * date x 2,130,074 ops/sec ±4.42% (68 runs sampled)\n * Post:\n * date x 3,953,779 ops/sec ±1.35% (77 runs sampled)\n */\n if (objPrototype === Date.prototype) {\n return 'Date';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag)\n * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be \"Promise\":\n * Test: `Object.prototype.toString.call(Promise.resolve())``\n * - Chrome <=47 === \"[object Object]\"\n * - Edge <=20 === \"[object Object]\"\n * - Firefox 29-Latest === \"[object Promise]\"\n * - Safari 7.1-Latest === \"[object Promise]\"\n */\n if (promiseExists && objPrototype === Promise.prototype) {\n return 'Promise';\n }\n\n /* ! Speed optimisation\n * Pre:\n * set x 2,222,186 ops/sec ±1.31% (82 runs sampled)\n * Post:\n * set x 4,545,879 ops/sec ±1.13% (83 runs sampled)\n */\n if (setExists && objPrototype === Set.prototype) {\n return 'Set';\n }\n\n /* ! Speed optimisation\n * Pre:\n * map x 2,396,842 ops/sec ±1.59% (81 runs sampled)\n * Post:\n * map x 4,183,945 ops/sec ±6.59% (82 runs sampled)\n */\n if (mapExists && objPrototype === Map.prototype) {\n return 'Map';\n }\n\n /* ! Speed optimisation\n * Pre:\n * weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled)\n * Post:\n * weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled)\n */\n if (weakSetExists && objPrototype === WeakSet.prototype) {\n return 'WeakSet';\n }\n\n /* ! Speed optimisation\n * Pre:\n * weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled)\n * Post:\n * weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled)\n */\n if (weakMapExists && objPrototype === WeakMap.prototype) {\n return 'WeakMap';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag)\n * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be \"DataView\":\n * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))``\n * - Edge <=13 === \"[object Object]\"\n */\n if (dataViewExists && objPrototype === DataView.prototype) {\n return 'DataView';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag)\n * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be \"Map Iterator\":\n * Test: `Object.prototype.toString.call(new Map().entries())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (mapExists && objPrototype === mapIteratorPrototype) {\n return 'Map Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag)\n * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be \"Set Iterator\":\n * Test: `Object.prototype.toString.call(new Set().entries())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (setExists && objPrototype === setIteratorPrototype) {\n return 'Set Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag)\n * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be \"Array Iterator\":\n * Test: `Object.prototype.toString.call([][Symbol.iterator]())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) {\n return 'Array Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag)\n * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be \"String Iterator\":\n * Test: `Object.prototype.toString.call(''[Symbol.iterator]())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (stringIteratorExists && objPrototype === stringIteratorPrototype) {\n return 'String Iterator';\n }\n\n /* ! Speed optimisation\n * Pre:\n * object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled)\n * Post:\n * object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled)\n */\n if (objPrototype === null) {\n return 'Object';\n }\n\n return Object\n .prototype\n .toString\n .call(obj)\n .slice(toStringLeftSliceLength, toStringRightSliceLength);\n}\n\nreturn typeDetect;\n\n})));\n","const isBufferExists = typeof Buffer !== 'undefined';\nconst isBufferFromExists = isBufferExists && typeof Buffer.from !== 'undefined';\n\nexport const isBuffer = isBufferExists\n ? /**\n * is value is Buffer?\n *\n * @param {*} value\n * @return {boolean}\n */\n function isBuffer(value) {\n return Buffer.isBuffer(value);\n }\n : /**\n * return false\n *\n * NOTE: for Buffer unsupported\n *\n * @return {boolean}\n */\n function isBuffer() {\n return false;\n };\n\nexport const copy = isBufferFromExists\n ? /**\n * copy Buffer\n *\n * @param {Buffer} value\n * @return {Buffer}\n */\n function copy(value) {\n return Buffer.from(value);\n }\n : isBufferExists\n ? /**\n * copy Buffer\n *\n * NOTE: for old node.js\n *\n * @param {Buffer} value\n * @return {Buffer}\n */\n function copy(value) {\n return new Buffer(value);\n }\n : /**\n * shallow copy\n *\n * NOTE: for Buffer unsupported\n *\n * @param {*}\n * @return {*}\n */\n function copy(value) {\n return value;\n };\n","import typeDetect from 'type-detect';\n\nimport { isBuffer } from './buffer.mjs';\n\n/**\n * detect type of value\n *\n * @param {*} value\n * @return {string}\n */\nexport function detectType(value) {\n // NOTE: isBuffer must execute before type-detect,\n // because type-detect returns 'Uint8Array'.\n if (isBuffer(value)) {\n return 'Buffer';\n }\n\n return typeDetect(value);\n}\n","import { detectType } from './detector.mjs';\n\n/**\n * collection types\n */\nconst collectionTypeSet = new Set([\n 'Arguments',\n 'Array',\n 'Map',\n 'Object',\n 'Set'\n]);\n\n/**\n * get value from collection\n *\n * @param {Array|Object|Map|Set} collection\n * @param {string|number|symbol} key\n * @param {string} [type=null]\n * @return {*}\n */\nexport function get(collection, key, type = null) {\n const valueType = type || detectType(collection);\n\n switch (valueType) {\n case 'Arguments':\n case 'Array':\n case 'Object':\n return collection[key];\n case 'Map':\n return collection.get(key);\n case 'Set':\n // NOTE: Set.prototype.keys is alias of Set.prototype.values\n // it means key is equals value\n return key;\n default:\n }\n}\n\n/**\n * check to type string is collection\n *\n * @param {string} type\n */\nexport function isCollection(type) {\n return collectionTypeSet.has(type);\n}\n\n/**\n * set value to collection\n *\n * @param {Array|Object|Map|Set} collection\n * @param {string|number|symbol} key\n * @param {*} value\n * @param {string} [type=null]\n * @return {Array|Object|Map|Set}\n */\nexport function set(collection, key, value, type = null) {\n const valueType = type || detectType(collection);\n\n switch (valueType) {\n case 'Arguments':\n case 'Array':\n case 'Object':\n collection[key] = value;\n break;\n case 'Map':\n collection.set(key, value);\n break;\n case 'Set':\n collection.add(value);\n break;\n default:\n }\n\n return collection;\n}\n","const freeGlobalThis =\n typeof globalThis !== 'undefined' &&\n globalThis !== null &&\n globalThis.Object === Object &&\n globalThis;\n\nconst freeGlobal =\n typeof global !== 'undefined' &&\n global !== null &&\n global.Object === Object &&\n global;\n\nconst freeSelf =\n typeof self !== 'undefined' &&\n self !== null &&\n self.Object === Object &&\n self;\n\nexport const globalObject =\n freeGlobalThis || freeGlobal || freeSelf || Function('return this')();\n","import { copy as cloneBuffer } from './buffer.mjs';\nimport { globalObject } from './global.mjs';\n\n/**\n * copy ArrayBuffer\n *\n * @param {ArrayBuffer} value\n * @return {ArrayBuffer}\n */\nfunction copyArrayBuffer(value) {\n return value.slice(0);\n}\n\n/**\n * copy Boolean\n *\n * @param {Boolean} value\n * @return {Boolean}\n */\nfunction copyBoolean(value) {\n return new Boolean(value.valueOf());\n}\n\n/**\n * copy DataView\n *\n * @param {DataView} value\n * @return {DataView}\n */\nfunction copyDataView(value) {\n // TODO: copy ArrayBuffer?\n return new DataView(value.buffer);\n}\n\n/**\n * copy Buffer\n *\n * @param {Buffer} value\n * @return {Buffer}\n */\nfunction copyBuffer(value) {\n return cloneBuffer(value);\n}\n\n/**\n * copy Date\n *\n * @param {Date} value\n * @return {Date}\n */\nfunction copyDate(value) {\n return new Date(value.getTime());\n}\n\n/**\n * copy Number\n *\n * @param {Number} value\n * @return {Number}\n */\nfunction copyNumber(value) {\n return new Number(value);\n}\n\n/**\n * copy RegExp\n *\n * @param {RegExp} value\n * @return {RegExp}\n */\nfunction copyRegExp(value) {\n return new RegExp(value.source, value.flags);\n}\n\n/**\n * copy String\n *\n * @param {String} value\n * @return {String}\n */\nfunction copyString(value) {\n return new String(value);\n}\n\n/**\n * copy TypedArray\n *\n * @param {*} value\n * @return {*}\n */\nfunction copyTypedArray(value, type) {\n const typedArray = globalObject[type];\n\n if (typedArray.from) {\n return globalObject[type].from(value);\n }\n\n return new globalObject[type](value);\n}\n\n/**\n * shallow copy\n *\n * @param {*} value\n * @return {*}\n */\nfunction shallowCopy(value) {\n return value;\n}\n\n/**\n * get empty Array\n *\n * @return {Array}\n */\nfunction getEmptyArray() {\n return [];\n}\n\n/**\n * get empty Map\n *\n * @return {Map}\n */\nfunction getEmptyMap() {\n return new Map();\n}\n\n/**\n * get empty Object\n *\n * @return {Object}\n */\nfunction getEmptyObject() {\n return {};\n}\n\n/**\n * get empty Set\n *\n * @return {Set}\n */\nfunction getEmptySet() {\n return new Set();\n}\n\nexport default new Map([\n // deep copy\n ['ArrayBuffer', copyArrayBuffer],\n ['Boolean', copyBoolean],\n ['Buffer', copyBuffer],\n ['DataView', copyDataView],\n ['Date', copyDate],\n ['Number', copyNumber],\n ['RegExp', copyRegExp],\n ['String', copyString],\n\n // typed arrays\n // TODO: pass bound function\n ['Float32Array', copyTypedArray],\n ['Float64Array', copyTypedArray],\n ['Int16Array', copyTypedArray],\n ['Int32Array', copyTypedArray],\n ['Int8Array', copyTypedArray],\n ['Uint16Array', copyTypedArray],\n ['Uint32Array', copyTypedArray],\n ['Uint8Array', copyTypedArray],\n ['Uint8ClampedArray', copyTypedArray],\n\n // shallow copy\n ['Array Iterator', shallowCopy],\n ['Map Iterator', shallowCopy],\n ['Promise', shallowCopy],\n ['Set Iterator', shallowCopy],\n ['String Iterator', shallowCopy],\n ['function', shallowCopy],\n ['global', shallowCopy],\n // NOTE: WeakMap and WeakSet cannot get entries\n ['WeakMap', shallowCopy],\n ['WeakSet', shallowCopy],\n\n // primitives\n ['boolean', shallowCopy],\n ['null', shallowCopy],\n ['number', shallowCopy],\n ['string', shallowCopy],\n ['symbol', shallowCopy],\n ['undefined', shallowCopy],\n\n // collections\n // NOTE: return empty value, because recursively copy later.\n ['Arguments', getEmptyArray],\n ['Array', getEmptyArray],\n ['Map', getEmptyMap],\n ['Object', getEmptyObject],\n ['Set', getEmptySet]\n\n // NOTE: type-detect returns following types\n // 'Location'\n // 'Document'\n // 'MimeTypeArray'\n // 'PluginArray'\n // 'HTMLQuoteElement'\n // 'HTMLTableDataCellElement'\n // 'HTMLTableHeaderCellElement'\n\n // TODO: is type-detect never return 'object'?\n // 'object'\n]);\n","import copyMap from './copy_map.mjs';\nimport { detectType } from './detector.mjs';\n\n/**\n * no operation\n */\nfunction noop() {}\n\n/**\n * copy value\n *\n * @param {*} value\n * @param {string} [type=null]\n * @param {Function} [customizer=noop]\n * @return {*}\n */\nexport function copy(value, type = null, customizer = noop) {\n if (arguments.length === 2 && typeof type === 'function') {\n customizer = type;\n type = null;\n }\n\n const valueType = type || detectType(value);\n const copyFunction = copyMap.get(valueType);\n\n if (valueType === 'Object') {\n const result = customizer(value, valueType);\n\n if (result !== undefined) {\n return result;\n }\n }\n\n // NOTE: TypedArray needs pass type to argument\n return copyFunction ? copyFunction(value, valueType) : value;\n}\n","import { detectType } from './detector.mjs';\nimport { get, isCollection, set } from './collection.mjs';\nimport { copy } from './copier.mjs';\n\n/**\n * deepcopy function\n *\n * @param {*} value\n * @param {Object|Function} [options]\n * @return {*}\n */\nexport default function deepcopy(value, options = {}) {\n if (typeof options === 'function') {\n options = {\n customizer: options\n };\n }\n\n const {\n // TODO: before/after customizer\n customizer\n // TODO: max depth\n // depth = Infinity,\n } = options;\n\n const valueType = detectType(value);\n\n if (!isCollection(valueType)) {\n return recursiveCopy(value, null, null, null, customizer);\n }\n\n const copiedValue = copy(value, valueType, customizer);\n\n const references = new WeakMap([[value, copiedValue]]);\n const visited = new WeakSet([value]);\n\n return recursiveCopy(value, copiedValue, references, visited, customizer);\n}\n\n/**\n * recursively copy\n *\n * @param {*} value target value\n * @param {*} clone clone of value\n * @param {WeakMap} references visited references of clone\n * @param {WeakSet} visited visited references of value\n * @param {Function} customizer user customize function\n * @return {*}\n */\nfunction recursiveCopy(value, clone, references, visited, customizer) {\n const type = detectType(value);\n const copiedValue = copy(value, type);\n\n // return if not a collection value\n if (!isCollection(type)) {\n return copiedValue;\n }\n\n let keys;\n\n switch (type) {\n case 'Arguments':\n case 'Array':\n keys = Object.keys(value);\n break;\n case 'Object':\n keys = Object.keys(value);\n keys.push(...Object.getOwnPropertySymbols(value));\n break;\n case 'Map':\n case 'Set':\n keys = value.keys();\n break;\n default:\n }\n\n // walk within collection with iterator\n for (let collectionKey of keys) {\n const collectionValue = get(value, collectionKey, type);\n\n if (visited.has(collectionValue)) {\n // for [Circular]\n set(clone, collectionKey, references.get(collectionValue), type);\n } else {\n const collectionValueType = detectType(collectionValue);\n const copiedCollectionValue = copy(collectionValue, collectionValueType);\n\n // save reference if value is collection\n if (isCollection(collectionValueType)) {\n references.set(collectionValue, copiedCollectionValue);\n visited.add(collectionValue);\n }\n\n set(\n clone,\n collectionKey,\n recursiveCopy(\n collectionValue,\n copiedCollectionValue,\n references,\n visited,\n customizer\n ),\n type\n );\n }\n }\n\n // TODO: isSealed/isFrozen/isExtensible\n\n return clone;\n}\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","var prefix = require('prefix-style')\nvar toCamelCase = require('to-camel-case')\nvar cache = { 'float': 'cssFloat' }\nvar addPxToStyle = require('add-px-to-style')\n\nfunction style (element, property, value) {\n var camel = cache[property]\n if (typeof camel === 'undefined') {\n camel = detect(property)\n }\n\n // may be false if CSS prop is unsupported\n if (camel) {\n if (value === undefined) {\n return element.style[camel]\n }\n\n element.style[camel] = addPxToStyle(camel, value)\n }\n}\n\nfunction each (element, properties) {\n for (var k in properties) {\n if (properties.hasOwnProperty(k)) {\n style(element, k, properties[k])\n }\n }\n}\n\nfunction detect (cssProp) {\n var camel = toCamelCase(cssProp)\n var result = prefix(camel)\n cache[camel] = cache[cssProp] = cache[result] = result\n return result\n}\n\nfunction set () {\n if (arguments.length === 2) {\n if (typeof arguments[1] === 'string') {\n arguments[0].style.cssText = arguments[1]\n } else {\n each(arguments[0], arguments[1])\n }\n } else {\n style(arguments[0], arguments[1], arguments[2])\n }\n}\n\nmodule.exports = set\nmodule.exports.set = set\n\nmodule.exports.get = function (element, properties) {\n if (Array.isArray(properties)) {\n return properties.reduce(function (obj, prop) {\n obj[prop] = style(element, prop || '')\n return obj\n }, {})\n } else {\n return style(element, properties || '')\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Doctype = exports.CDATA = exports.Tag = exports.Style = exports.Script = exports.Comment = exports.Directive = exports.Text = exports.Root = exports.isTag = exports.ElementType = void 0;\n/** Types of elements found in htmlparser2's DOM */\nvar ElementType;\n(function (ElementType) {\n /** Type for the root element of a document */\n ElementType[\"Root\"] = \"root\";\n /** Type for Text */\n ElementType[\"Text\"] = \"text\";\n /** Type for <? ... ?> */\n ElementType[\"Directive\"] = \"directive\";\n /** Type for <!-- ... --> */\n ElementType[\"Comment\"] = \"comment\";\n /** Type for <script> tags */\n ElementType[\"Script\"] = \"script\";\n /** Type for <style> tags */\n ElementType[\"Style\"] = \"style\";\n /** Type for Any tag */\n ElementType[\"Tag\"] = \"tag\";\n /** Type for <![CDATA[ ... ]]> */\n ElementType[\"CDATA\"] = \"cdata\";\n /** Type for <!doctype ...> */\n ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType = exports.ElementType || (exports.ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nfunction isTag(elem) {\n return (elem.type === ElementType.Tag ||\n elem.type === ElementType.Script ||\n elem.type === ElementType.Style);\n}\nexports.isTag = isTag;\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nexports.Root = ElementType.Root;\n/** Type for Text */\nexports.Text = ElementType.Text;\n/** Type for <? ... ?> */\nexports.Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nexports.Comment = ElementType.Comment;\n/** Type for <script> tags */\nexports.Script = ElementType.Script;\n/** Type for <style> tags */\nexports.Style = ElementType.Style;\n/** Type for Any tag */\nexports.Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nexports.CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\nexports.Doctype = ElementType.Doctype;\n",null,null,null,null,null,null,null,null,"'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/*!\n * is-plain-object <https://github.com/jonschlinkert/is-plain-object>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nfunction isObject(o) {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nfunction isPlainObject(o) {\n var ctor,prot;\n\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n ctor = o.constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n prot = ctor.prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n\nexports.isPlainObject = isPlainObject;\n","'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n // Legacy support for v0.3.1 and earlier.\n if (typeof opts == 'function') {\n cb = opts;\n opts = {};\n }\n\n cb = opts.cb || cb;\n var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n var post = cb.post || function() {};\n\n _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n additionalItems: true,\n items: true,\n contains: true,\n additionalProperties: true,\n propertyNames: true,\n not: true,\n if: true,\n then: true,\n else: true\n};\n\ntraverse.arrayKeywords = {\n items: true,\n allOf: true,\n anyOf: true,\n oneOf: true\n};\n\ntraverse.propsKeywords = {\n $defs: true,\n definitions: true,\n properties: true,\n patternProperties: true,\n dependencies: true\n};\n\ntraverse.skipKeywords = {\n default: true,\n enum: true,\n const: true,\n required: true,\n maximum: true,\n minimum: true,\n exclusiveMaximum: true,\n exclusiveMinimum: true,\n multipleOf: true,\n maxLength: true,\n minLength: true,\n pattern: true,\n format: true,\n maxItems: true,\n minItems: true,\n uniqueItems: true,\n maxProperties: true,\n minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n for (var key in schema) {\n var sch = schema[key];\n if (Array.isArray(sch)) {\n if (key in traverse.arrayKeywords) {\n for (var i=0; i<sch.length; i++)\n _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n }\n } else if (key in traverse.propsKeywords) {\n if (sch && typeof sch == 'object') {\n for (var prop in sch)\n _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n }\n } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n }\n }\n post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n }\n}\n\n\nfunction escapeJsonPtr(str) {\n return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, & pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b><script></b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n // The sourceURL gets injected into the source that's eval-ed, so be careful\n // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n // and escape the comment, thus injecting code that gets evaled.\n var sourceURL = '//# sourceURL=' +\n (hasOwnProperty.call(options, 'sourceURL')\n ? (options.sourceURL + '').replace(/\\s/g, ' ')\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Throw an error if a forbidden character was found in `variable`, to prevent\n // potential command injection attacks.\n else if (reForbiddenIdentifierChars.test(variable)) {\n throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n }\n\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return baseTrim(string);\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.slice(0, trimmedEndIndex(string) + 1);\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&`, `<`, `>`, `"`, and `'` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\n\n /**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\n var flowRight = createFlow(true);\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * **Note:** Multiple values can be checked by combining several matchers\n * using `_.overSome`\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n *\n * // Checking for several possible values\n * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * **Note:** Multiple values can be checked by combining several matchers\n * using `_.overSome`\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n *\n * // Checking for several possible values\n * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * Following shorthands are possible for providing predicates.\n * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * Following shorthands are possible for providing predicates.\n * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n *\n * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = lodashFunc.name + '';\n if (!hasOwnProperty.call(realNames, key)) {\n realNames[key] = [];\n }\n realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return _;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.logdown=e():t.logdown=e()}(window,function(){return function(r){var n={};function o(t){if(n[t])return n[t].exports;var e=n[t]={i:t,l:!1,exports:{}};return r[t].call(e.exports,e,e.exports,o),e.l=!0,e.exports}return o.m=r,o.c=n,o.d=function(t,e,r){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},o.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var n in e)o.d(r,n,function(t){return e[t]}.bind(null,n));return r},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,\"a\",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p=\"\",o(o.s=0)}([function(t,e,r){var n,o=r(1)(),i=r(3),s=r(5),f=r(8)();o.prefixColors=[\"#F2777A\",\"#F99157\",\"#FFCC66\",\"#99CC99\",\"#66CCCC\",\"#6699CC\",\"#CC99CC\"],o._setPrefixRegExps=function(){try{f.localStorage&&\"string\"==typeof f.localStorage.getItem(\"debug\")&&(o._prefixRegExps=[],f.localStorage.getItem(\"debug\").split(\",\").forEach(function(t){var e=\"enable\";\"-\"===(t=t.trim())[0]&&(t=t.substr(1),e=\"disable\");var r=o._prepareRegExpForPrefixSearch(t);o._prefixRegExps.push({type:e,regExp:r})}))}catch(t){}},o._getNextPrefixColor=(n=0,function(){return n+=1,o.prefixColors[n%o.prefixColors.length]}),o.prototype._getDecoratedPrefix=function(){var t=[];return s()?(t.push(\"%c\"+this.opts.prefix+\"%c \"),t.push(\"color:\"+this.opts.prefixColor+\"; font-weight:bold;\",\"\")):t.push(\"[\"+this.opts.prefix+\"] \"),t},o.prototype._prepareOutput=function(t){var e,r=this._getDecoratedPrefix();return\"string\"==typeof t[0]?this.opts.markdown&&s()?(e=i.parse(t[0]),r[0]=r[0]+e.text,r=r.concat(e.styles)):r[0]=r[0]+t[0]:r.push(t[0]),1<t.length&&(r=r.concat(t.slice(1))),r},o._setPrefixRegExps(),t.exports=o},function(t,e,r){var f=r(2);t.exports=function(){function s(t,e){return this instanceof s?s._isPrefixAlreadyInUse(t)?s._getInstanceByPrefix(t):(this.opts=s._normalizeOpts(t,e),this.state=s._getInitialState(this.opts),s._decorateLoggerMethods(this),s._instances.push(this),this):new s(t,e)}return s.transports=[],s._instances=[],s._prefixRegExps=[],s._prepareRegExpForPrefixSearch=function(t){return new RegExp(\"^\"+t.replace(/\\*/g,\".*?\")+\"$\")},s._isPrefixAlreadyInUse=function(e){return s._instances.some(function(t){return t.opts.prefix===e})},s._getInstanceByPrefix=function(e){return s._instances.filter(function(t){return t.opts.prefix===e})[0]},s._normalizeOpts=function(t,e){if(\"string\"!=typeof t)throw new TypeError(\"prefix must be a string\");var r=void 0===(e=e||{}).markdown||Boolean(e.markdown),n=e.prefixColor||s._getNextPrefixColor();return{logger:e.logger||console,markdown:r,plaintext:Boolean(e.plaintext),prefix:t,prefixColor:n}},s._getInitialState=function(t){return{isEnabled:s._getEnableState(t)}},s._getEnableState=function(e){var r=!1;return s._prefixRegExps.forEach(function(t){\"enable\"===t.type&&t.regExp.test(e.prefix)?r=!0:\"disable\"===t.type&&t.regExp.test(e.prefix)&&(r=!1)}),r},s._decorateLoggerMethods=function(t){var i=t.opts.logger,e=Object.keys(i).filter(function(t){return\"function\"==typeof i[t]});0===e.length&&(e=[\"debug\",\"log\",\"warn\",\"error\",\"info\"]),e.forEach(function(o){t[o]=function(){var e=f(arguments),r=this.opts.prefix;if(s.transports.length){var n=\"[\"+r+\"] \"+e.filter(function(t){return\"object\"!=typeof t}).join(\" \");s.transports.forEach(function(t){t({state:this.state,instance:r,level:o,args:e,msg:n})}.bind(this))}if(this.state.isEnabled){var t=this._prepareOutput(e,o);i[o].apply(i,t)}}})},s}},function(t,e){t.exports=function(t){return Array.prototype.slice.call(t,0)}},function(t,e,r){var n=[];function o(e){return function(t){return n.push(e),n.push(\"\"),\"%c\"+t+\"%c\"}}var i=new(r(4))({renderer:{\"*\":o(\"font-weight:bold;\"),_:o(\"font-style:italic;\"),\"`\":o(\"background-color:rgba(255,204,102, 0.1);color:#FFCC66;padding:2px 5px;border-radius:2px;\")}});t.exports={parse:function(t){var e={text:i.parse(t),styles:[].concat(n)};return n.length=0,e}}},function(t,e){var x=/([_*`\\\\]|[^_*`\\\\]+)/g,r=/[_*`]/;function n(t){this.renderer=t.renderer}function d(t){return r.test(t)}n.prototype.parse=function(t){if(\"\"===t)return\"\";var r,e,n,o=t.match(x),i=this.renderer,s=\"\",f=[],u={},a=0;function p(t){for(var e=\"\";r&&r.tag!==t;)e=r.tag+r.text+e,u[r.tag]=!1,r=f.pop();return e}for(;n=o[a];){if(e=\"\",a++,d(n))if(u[n])e=p(n),e=i[r.tag](r.text+e),u[n]=!1,r=f.pop();else{var c=\"\";if(\"`\"===n){var l=o.indexOf(n,a);-1!==l&&(s+=p(),c=o.slice(a,l).join(\"\"),a=l)}r&&f.push(r),u[n]=!0,r={tag:n,text:c}}else if(\"\\\\\"===(e=n)){var g=o[a];(d(g)||\"\\\\\"===g)&&(e=g,a++)}e&&(r?r.text+=e:s+=e,e=\"\")}return s+p()},t.exports=n},function(t,e,r){var n=r(6),o=r(7);t.exports=function(){return n()||o()}},function(t,e){t.exports=function(){try{return\"WebkitAppearance\"in document.documentElement.style&&!/Edge/.test(navigator.userAgent)}catch(t){return!1}}},function(t,e){t.exports=function(){try{return/firefox\\/(\\d+)/i.test(navigator.userAgent)}catch(t){return!1}}},function(r,t,e){(function(t){function e(t,e){return\"object\"==typeof t&&t.self===t&&t||\"object\"==typeof e&&e.global===e&&e||this}r.exports=e.bind(this,self,t),r.exports.getGlobal=e}).call(this,e(9))},function(ob,pb){var qb;qb=function(){return this}();try{qb=qb||Function(\"return this\")()||eval(\"this\")}catch(ob){\"object\"==typeof window&&(qb=window)}ob.exports=qb}])});\n","//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n return name.match('^[^/\\\\\\\\]*$') != null;\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.29.4';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM', // <input type=\"month\" />\n };\n\n return hooks;\n\n})));\n","/**\n * Srcset Parser\n *\n * By Alex Bell | MIT License\n *\n * JS Parser for the string value that appears in markup <img srcset=\"here\">\n *\n * @returns Array [{url: _, d: _, w: _, h:_}, ...]\n *\n * Based super duper closely on the reference algorithm at:\n * https://html.spec.whatwg.org/multipage/embedded-content.html#parse-a-srcset-attribute\n *\n * Most comments are copied in directly from the spec\n * (except for comments in parens).\n */\n\n(function (root, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([], factory);\n\t} else if (typeof module === 'object' && module.exports) {\n\t\t// Node. Does not work with strict CommonJS, but\n\t\t// only CommonJS-like environments that support module.exports,\n\t\t// like Node.\n\t\tmodule.exports = factory();\n\t} else {\n\t\t// Browser globals (root is window)\n\t\troot.parseSrcset = factory();\n\t}\n}(this, function () {\n\n\t// 1. Let input be the value passed to this algorithm.\n\treturn function (input) {\n\n\t\t// UTILITY FUNCTIONS\n\n\t\t// Manual is faster than RegEx\n\t\t// http://bjorn.tipling.com/state-and-regular-expressions-in-javascript\n\t\t// http://jsperf.com/whitespace-character/5\n\t\tfunction isSpace(c) {\n\t\t\treturn (c === \"\\u0020\" || // space\n\t\t\tc === \"\\u0009\" || // horizontal tab\n\t\t\tc === \"\\u000A\" || // new line\n\t\t\tc === \"\\u000C\" || // form feed\n\t\t\tc === \"\\u000D\"); // carriage return\n\t\t}\n\n\t\tfunction collectCharacters(regEx) {\n\t\t\tvar chars,\n\t\t\t\tmatch = regEx.exec(input.substring(pos));\n\t\t\tif (match) {\n\t\t\t\tchars = match[ 0 ];\n\t\t\t\tpos += chars.length;\n\t\t\t\treturn chars;\n\t\t\t}\n\t\t}\n\n\t\tvar inputLength = input.length,\n\n\t\t\t// (Don't use \\s, to avoid matching non-breaking space)\n\t\t\tregexLeadingSpaces = /^[ \\t\\n\\r\\u000c]+/,\n\t\t\tregexLeadingCommasOrSpaces = /^[, \\t\\n\\r\\u000c]+/,\n\t\t\tregexLeadingNotSpaces = /^[^ \\t\\n\\r\\u000c]+/,\n\t\t\tregexTrailingCommas = /[,]+$/,\n\t\t\tregexNonNegativeInteger = /^\\d+$/,\n\n\t\t\t// ( Positive or negative or unsigned integers or decimals, without or without exponents.\n\t\t\t// Must include at least one digit.\n\t\t\t// According to spec tests any decimal point must be followed by a digit.\n\t\t\t// No leading plus sign is allowed.)\n\t\t\t// https://html.spec.whatwg.org/multipage/infrastructure.html#valid-floating-point-number\n\t\t\tregexFloatingPoint = /^-?(?:[0-9]+|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/,\n\n\t\t\turl,\n\t\t\tdescriptors,\n\t\t\tcurrentDescriptor,\n\t\t\tstate,\n\t\t\tc,\n\n\t\t\t// 2. Let position be a pointer into input, initially pointing at the start\n\t\t\t// of the string.\n\t\t\tpos = 0,\n\n\t\t\t// 3. Let candidates be an initially empty source set.\n\t\t\tcandidates = [];\n\n\t\t// 4. Splitting loop: Collect a sequence of characters that are space\n\t\t// characters or U+002C COMMA characters. If any U+002C COMMA characters\n\t\t// were collected, that is a parse error.\n\t\twhile (true) {\n\t\t\tcollectCharacters(regexLeadingCommasOrSpaces);\n\n\t\t\t// 5. If position is past the end of input, return candidates and abort these steps.\n\t\t\tif (pos >= inputLength) {\n\t\t\t\treturn candidates; // (we're done, this is the sole return path)\n\t\t\t}\n\n\t\t\t// 6. Collect a sequence of characters that are not space characters,\n\t\t\t// and let that be url.\n\t\t\turl = collectCharacters(regexLeadingNotSpaces);\n\n\t\t\t// 7. Let descriptors be a new empty list.\n\t\t\tdescriptors = [];\n\n\t\t\t// 8. If url ends with a U+002C COMMA character (,), follow these substeps:\n\t\t\t//\t\t(1). Remove all trailing U+002C COMMA characters from url. If this removed\n\t\t\t// more than one character, that is a parse error.\n\t\t\tif (url.slice(-1) === \",\") {\n\t\t\t\turl = url.replace(regexTrailingCommas, \"\");\n\t\t\t\t// (Jump ahead to step 9 to skip tokenization and just push the candidate).\n\t\t\t\tparseDescriptors();\n\n\t\t\t\t//\tOtherwise, follow these substeps:\n\t\t\t} else {\n\t\t\t\ttokenize();\n\t\t\t} // (close else of step 8)\n\n\t\t\t// 16. Return to the step labeled splitting loop.\n\t\t} // (Close of big while loop.)\n\n\t\t/**\n\t\t * Tokenizes descriptor properties prior to parsing\n\t\t * Returns undefined.\n\t\t */\n\t\tfunction tokenize() {\n\n\t\t\t// 8.1. Descriptor tokeniser: Skip whitespace\n\t\t\tcollectCharacters(regexLeadingSpaces);\n\n\t\t\t// 8.2. Let current descriptor be the empty string.\n\t\t\tcurrentDescriptor = \"\";\n\n\t\t\t// 8.3. Let state be in descriptor.\n\t\t\tstate = \"in descriptor\";\n\n\t\t\twhile (true) {\n\n\t\t\t\t// 8.4. Let c be the character at position.\n\t\t\t\tc = input.charAt(pos);\n\n\t\t\t\t// Do the following depending on the value of state.\n\t\t\t\t// For the purpose of this step, \"EOF\" is a special character representing\n\t\t\t\t// that position is past the end of input.\n\n\t\t\t\t// In descriptor\n\t\t\t\tif (state === \"in descriptor\") {\n\t\t\t\t\t// Do the following, depending on the value of c:\n\n\t\t\t\t\t// Space character\n\t\t\t\t\t// If current descriptor is not empty, append current descriptor to\n\t\t\t\t\t// descriptors and let current descriptor be the empty string.\n\t\t\t\t\t// Set state to after descriptor.\n\t\t\t\t\tif (isSpace(c)) {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t\tcurrentDescriptor = \"\";\n\t\t\t\t\t\t\tstate = \"after descriptor\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// U+002C COMMA (,)\n\t\t\t\t\t\t// Advance position to the next character in input. If current descriptor\n\t\t\t\t\t\t// is not empty, append current descriptor to descriptors. Jump to the step\n\t\t\t\t\t\t// labeled descriptor parser.\n\t\t\t\t\t} else if (c === \",\") {\n\t\t\t\t\t\tpos += 1;\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// U+0028 LEFT PARENTHESIS (()\n\t\t\t\t\t\t// Append c to current descriptor. Set state to in parens.\n\t\t\t\t\t} else if (c === \"\\u0028\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in parens\";\n\n\t\t\t\t\t\t// EOF\n\t\t\t\t\t\t// If current descriptor is not empty, append current descriptor to\n\t\t\t\t\t\t// descriptors. Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// Anything else\n\t\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\t\t\t\t\t// (end \"in descriptor\"\n\n\t\t\t\t\t// In parens\n\t\t\t\t} else if (state === \"in parens\") {\n\n\t\t\t\t\t// U+0029 RIGHT PARENTHESIS ())\n\t\t\t\t\t// Append c to current descriptor. Set state to in descriptor.\n\t\t\t\t\tif (c === \")\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in descriptor\";\n\n\t\t\t\t\t\t// EOF\n\t\t\t\t\t\t// Append current descriptor to descriptors. Jump to the step labeled\n\t\t\t\t\t\t// descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// Anything else\n\t\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\n\t\t\t\t\t// After descriptor\n\t\t\t\t} else if (state === \"after descriptor\") {\n\n\t\t\t\t\t// Do the following, depending on the value of c:\n\t\t\t\t\t// Space character: Stay in this state.\n\t\t\t\t\tif (isSpace(c)) {\n\n\t\t\t\t\t\t// EOF: Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// Anything else\n\t\t\t\t\t\t// Set state to in descriptor. Set position to the previous character in input.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate = \"in descriptor\";\n\t\t\t\t\t\tpos -= 1;\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Advance position to the next character in input.\n\t\t\t\tpos += 1;\n\n\t\t\t\t// Repeat this step.\n\t\t\t} // (close while true loop)\n\t\t}\n\n\t\t/**\n\t\t * Adds descriptor properties to a candidate, pushes to the candidates array\n\t\t * @return undefined\n\t\t */\n\t\t// Declared outside of the while loop so that it's only created once.\n\t\tfunction parseDescriptors() {\n\n\t\t\t// 9. Descriptor parser: Let error be no.\n\t\t\tvar pError = false,\n\n\t\t\t\t// 10. Let width be absent.\n\t\t\t\t// 11. Let density be absent.\n\t\t\t\t// 12. Let future-compat-h be absent. (We're implementing it now as h)\n\t\t\t\tw, d, h, i,\n\t\t\t\tcandidate = {},\n\t\t\t\tdesc, lastChar, value, intVal, floatVal;\n\n\t\t\t// 13. For each descriptor in descriptors, run the appropriate set of steps\n\t\t\t// from the following list:\n\t\t\tfor (i = 0 ; i < descriptors.length; i++) {\n\t\t\t\tdesc = descriptors[ i ];\n\n\t\t\t\tlastChar = desc[ desc.length - 1 ];\n\t\t\t\tvalue = desc.substring(0, desc.length - 1);\n\t\t\t\tintVal = parseInt(value, 10);\n\t\t\t\tfloatVal = parseFloat(value);\n\n\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t// a U+0077 LATIN SMALL LETTER W character\n\t\t\t\tif (regexNonNegativeInteger.test(value) && (lastChar === \"w\")) {\n\n\t\t\t\t\t// If width and density are not both absent, then let error be yes.\n\t\t\t\t\tif (w || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes.\n\t\t\t\t\t// Otherwise, let width be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {w = intVal;}\n\n\t\t\t\t\t// If the descriptor consists of a valid floating-point number followed by\n\t\t\t\t\t// a U+0078 LATIN SMALL LETTER X character\n\t\t\t\t} else if (regexFloatingPoint.test(value) && (lastChar === \"x\")) {\n\n\t\t\t\t\t// If width, density and future-compat-h are not all absent, then let error\n\t\t\t\t\t// be yes.\n\t\t\t\t\tif (w || d || h) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing floating-point number values to the descriptor.\n\t\t\t\t\t// If the result is less than zero, let error be yes. Otherwise, let density\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (floatVal < 0) {pError = true;} else {d = floatVal;}\n\n\t\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t\t// a U+0068 LATIN SMALL LETTER H character\n\t\t\t\t} else if (regexNonNegativeInteger.test(value) && (lastChar === \"h\")) {\n\n\t\t\t\t\t// If height and density are not both absent, then let error be yes.\n\t\t\t\t\tif (h || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes. Otherwise, let future-compat-h\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {h = intVal;}\n\n\t\t\t\t\t// Anything else, Let error be yes.\n\t\t\t\t} else {pError = true;}\n\t\t\t} // (close step 13 for loop)\n\n\t\t\t// 15. If error is still no, then append a new image source to candidates whose\n\t\t\t// URL is url, associated with a width width if not absent and a pixel\n\t\t\t// density density if not absent. Otherwise, there is a parse error.\n\t\t\tif (!pError) {\n\t\t\t\tcandidate.url = url;\n\t\t\t\tif (w) { candidate.w = w;}\n\t\t\t\tif (d) { candidate.d = d;}\n\t\t\t\tif (h) { candidate.h = h;}\n\t\t\t\tcandidates.push(candidate);\n\t\t\t} else if (console && console.log) {\n\t\t\t\tconsole.log(\"Invalid srcset descriptor found in '\" +\n\t\t\t\t\tinput + \"' at '\" + desc + \"'.\");\n\t\t\t}\n\t\t} // (close parseDescriptors fn)\n\n\t}\n}));\n","if performance? and performance.now\n module.exports = -> performance.now()\nelse if process? and process.hrtime\n module.exports = -> (getNanoSeconds() - nodeLoadTime) / 1e6\n hrtime = process.hrtime\n getNanoSeconds = ->\n hr = hrtime()\n hr[0] * 1e9 + hr[1]\n moduleLoadTime = getNanoSeconds()\n upTime = process.uptime() * 1e9\n nodeLoadTime = moduleLoadTime - upTime\nelse if Date.now\n module.exports = -> Date.now() - loadTime\n loadTime = Date.now()\nelse\n module.exports = -> new Date().getTime() - loadTime\n loadTime = new Date().getTime()\n","var x=String;\nvar create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x}};\nmodule.exports=create();\nmodule.exports.createColors = create;\n","'use strict'\n\nlet Container = require('./container')\n\nclass AtRule extends Container {\n constructor(defaults) {\n super(defaults)\n this.type = 'atrule'\n }\n\n append(...children) {\n if (!this.proxyOf.nodes) this.nodes = []\n return super.append(...children)\n }\n\n prepend(...children) {\n if (!this.proxyOf.nodes) this.nodes = []\n return super.prepend(...children)\n }\n}\n\nmodule.exports = AtRule\nAtRule.default = AtRule\n\nContainer.registerAtRule(AtRule)\n","'use strict'\n\nlet Node = require('./node')\n\nclass Comment extends Node {\n constructor(defaults) {\n super(defaults)\n this.type = 'comment'\n }\n}\n\nmodule.exports = Comment\nComment.default = Comment\n","'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet Declaration = require('./declaration')\nlet Comment = require('./comment')\nlet Node = require('./node')\n\nlet parse, Rule, AtRule, Root\n\nfunction cleanSource(nodes) {\n return nodes.map(i => {\n if (i.nodes) i.nodes = cleanSource(i.nodes)\n delete i.source\n return i\n })\n}\n\nfunction markDirtyUp(node) {\n node[isClean] = false\n if (node.proxyOf.nodes) {\n for (let i of node.proxyOf.nodes) {\n markDirtyUp(i)\n }\n }\n}\n\nclass Container extends Node {\n append(...children) {\n for (let child of children) {\n let nodes = this.normalize(child, this.last)\n for (let node of nodes) this.proxyOf.nodes.push(node)\n }\n\n this.markDirty()\n\n return this\n }\n\n cleanRaws(keepBetween) {\n super.cleanRaws(keepBetween)\n if (this.nodes) {\n for (let node of this.nodes) node.cleanRaws(keepBetween)\n }\n }\n\n each(callback) {\n if (!this.proxyOf.nodes) return undefined\n let iterator = this.getIterator()\n\n let index, result\n while (this.indexes[iterator] < this.proxyOf.nodes.length) {\n index = this.indexes[iterator]\n result = callback(this.proxyOf.nodes[index], index)\n if (result === false) break\n\n this.indexes[iterator] += 1\n }\n\n delete this.indexes[iterator]\n return result\n }\n\n every(condition) {\n return this.nodes.every(condition)\n }\n\n getIterator() {\n if (!this.lastEach) this.lastEach = 0\n if (!this.indexes) this.indexes = {}\n\n this.lastEach += 1\n let iterator = this.lastEach\n this.indexes[iterator] = 0\n\n return iterator\n }\n\n getProxyProcessor() {\n return {\n get(node, prop) {\n if (prop === 'proxyOf') {\n return node\n } else if (!node[prop]) {\n return node[prop]\n } else if (\n prop === 'each' ||\n (typeof prop === 'string' && prop.startsWith('walk'))\n ) {\n return (...args) => {\n return node[prop](\n ...args.map(i => {\n if (typeof i === 'function') {\n return (child, index) => i(child.toProxy(), index)\n } else {\n return i\n }\n })\n )\n }\n } else if (prop === 'every' || prop === 'some') {\n return cb => {\n return node[prop]((child, ...other) =>\n cb(child.toProxy(), ...other)\n )\n }\n } else if (prop === 'root') {\n return () => node.root().toProxy()\n } else if (prop === 'nodes') {\n return node.nodes.map(i => i.toProxy())\n } else if (prop === 'first' || prop === 'last') {\n return node[prop].toProxy()\n } else {\n return node[prop]\n }\n },\n\n set(node, prop, value) {\n if (node[prop] === value) return true\n node[prop] = value\n if (prop === 'name' || prop === 'params' || prop === 'selector') {\n node.markDirty()\n }\n return true\n }\n }\n }\n\n index(child) {\n if (typeof child === 'number') return child\n if (child.proxyOf) child = child.proxyOf\n return this.proxyOf.nodes.indexOf(child)\n }\n\n insertAfter(exist, add) {\n let existIndex = this.index(exist)\n let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse()\n existIndex = this.index(exist)\n for (let node of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node)\n\n let index\n for (let id in this.indexes) {\n index = this.indexes[id]\n if (existIndex < index) {\n this.indexes[id] = index + nodes.length\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n insertBefore(exist, add) {\n let existIndex = this.index(exist)\n let type = existIndex === 0 ? 'prepend' : false\n let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse()\n existIndex = this.index(exist)\n for (let node of nodes) this.proxyOf.nodes.splice(existIndex, 0, node)\n\n let index\n for (let id in this.indexes) {\n index = this.indexes[id]\n if (existIndex <= index) {\n this.indexes[id] = index + nodes.length\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n normalize(nodes, sample) {\n if (typeof nodes === 'string') {\n nodes = cleanSource(parse(nodes).nodes)\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0)\n for (let i of nodes) {\n if (i.parent) i.parent.removeChild(i, 'ignore')\n }\n } else if (nodes.type === 'root' && this.type !== 'document') {\n nodes = nodes.nodes.slice(0)\n for (let i of nodes) {\n if (i.parent) i.parent.removeChild(i, 'ignore')\n }\n } else if (nodes.type) {\n nodes = [nodes]\n } else if (nodes.prop) {\n if (typeof nodes.value === 'undefined') {\n throw new Error('Value field is missed in node creation')\n } else if (typeof nodes.value !== 'string') {\n nodes.value = String(nodes.value)\n }\n nodes = [new Declaration(nodes)]\n } else if (nodes.selector) {\n nodes = [new Rule(nodes)]\n } else if (nodes.name) {\n nodes = [new AtRule(nodes)]\n } else if (nodes.text) {\n nodes = [new Comment(nodes)]\n } else {\n throw new Error('Unknown node type in node creation')\n }\n\n let processed = nodes.map(i => {\n /* c8 ignore next */\n if (!i[my]) Container.rebuild(i)\n i = i.proxyOf\n if (i.parent) i.parent.removeChild(i)\n if (i[isClean]) markDirtyUp(i)\n if (typeof i.raws.before === 'undefined') {\n if (sample && typeof sample.raws.before !== 'undefined') {\n i.raws.before = sample.raws.before.replace(/\\S/g, '')\n }\n }\n i.parent = this.proxyOf\n return i\n })\n\n return processed\n }\n\n prepend(...children) {\n children = children.reverse()\n for (let child of children) {\n let nodes = this.normalize(child, this.first, 'prepend').reverse()\n for (let node of nodes) this.proxyOf.nodes.unshift(node)\n for (let id in this.indexes) {\n this.indexes[id] = this.indexes[id] + nodes.length\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n push(child) {\n child.parent = this\n this.proxyOf.nodes.push(child)\n return this\n }\n\n removeAll() {\n for (let node of this.proxyOf.nodes) node.parent = undefined\n this.proxyOf.nodes = []\n\n this.markDirty()\n\n return this\n }\n\n removeChild(child) {\n child = this.index(child)\n this.proxyOf.nodes[child].parent = undefined\n this.proxyOf.nodes.splice(child, 1)\n\n let index\n for (let id in this.indexes) {\n index = this.indexes[id]\n if (index >= child) {\n this.indexes[id] = index - 1\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts\n opts = {}\n }\n\n this.walkDecls(decl => {\n if (opts.props && !opts.props.includes(decl.prop)) return\n if (opts.fast && !decl.value.includes(opts.fast)) return\n\n decl.value = decl.value.replace(pattern, callback)\n })\n\n this.markDirty()\n\n return this\n }\n\n some(condition) {\n return this.nodes.some(condition)\n }\n\n walk(callback) {\n return this.each((child, i) => {\n let result\n try {\n result = callback(child, i)\n } catch (e) {\n throw child.addToError(e)\n }\n if (result !== false && child.walk) {\n result = child.walk(callback)\n }\n\n return result\n })\n }\n\n walkAtRules(name, callback) {\n if (!callback) {\n callback = name\n return this.walk((child, i) => {\n if (child.type === 'atrule') {\n return callback(child, i)\n }\n })\n }\n if (name instanceof RegExp) {\n return this.walk((child, i) => {\n if (child.type === 'atrule' && name.test(child.name)) {\n return callback(child, i)\n }\n })\n }\n return this.walk((child, i) => {\n if (child.type === 'atrule' && child.name === name) {\n return callback(child, i)\n }\n })\n }\n\n walkComments(callback) {\n return this.walk((child, i) => {\n if (child.type === 'comment') {\n return callback(child, i)\n }\n })\n }\n\n walkDecls(prop, callback) {\n if (!callback) {\n callback = prop\n return this.walk((child, i) => {\n if (child.type === 'decl') {\n return callback(child, i)\n }\n })\n }\n if (prop instanceof RegExp) {\n return this.walk((child, i) => {\n if (child.type === 'decl' && prop.test(child.prop)) {\n return callback(child, i)\n }\n })\n }\n return this.walk((child, i) => {\n if (child.type === 'decl' && child.prop === prop) {\n return callback(child, i)\n }\n })\n }\n\n walkRules(selector, callback) {\n if (!callback) {\n callback = selector\n\n return this.walk((child, i) => {\n if (child.type === 'rule') {\n return callback(child, i)\n }\n })\n }\n if (selector instanceof RegExp) {\n return this.walk((child, i) => {\n if (child.type === 'rule' && selector.test(child.selector)) {\n return callback(child, i)\n }\n })\n }\n return this.walk((child, i) => {\n if (child.type === 'rule' && child.selector === selector) {\n return callback(child, i)\n }\n })\n }\n\n get first() {\n if (!this.proxyOf.nodes) return undefined\n return this.proxyOf.nodes[0]\n }\n\n get last() {\n if (!this.proxyOf.nodes) return undefined\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1]\n }\n}\n\nContainer.registerParse = dependant => {\n parse = dependant\n}\n\nContainer.registerRule = dependant => {\n Rule = dependant\n}\n\nContainer.registerAtRule = dependant => {\n AtRule = dependant\n}\n\nContainer.registerRoot = dependant => {\n Root = dependant\n}\n\nmodule.exports = Container\nContainer.default = Container\n\n/* c8 ignore start */\nContainer.rebuild = node => {\n if (node.type === 'atrule') {\n Object.setPrototypeOf(node, AtRule.prototype)\n } else if (node.type === 'rule') {\n Object.setPrototypeOf(node, Rule.prototype)\n } else if (node.type === 'decl') {\n Object.setPrototypeOf(node, Declaration.prototype)\n } else if (node.type === 'comment') {\n Object.setPrototypeOf(node, Comment.prototype)\n } else if (node.type === 'root') {\n Object.setPrototypeOf(node, Root.prototype)\n }\n\n node[my] = true\n\n if (node.nodes) {\n node.nodes.forEach(child => {\n Container.rebuild(child)\n })\n }\n}\n/* c8 ignore stop */\n","'use strict'\n\nlet pico = require('picocolors')\n\nlet terminalHighlight = require('./terminal-highlight')\n\nclass CssSyntaxError extends Error {\n constructor(message, line, column, source, file, plugin) {\n super(message)\n this.name = 'CssSyntaxError'\n this.reason = message\n\n if (file) {\n this.file = file\n }\n if (source) {\n this.source = source\n }\n if (plugin) {\n this.plugin = plugin\n }\n if (typeof line !== 'undefined' && typeof column !== 'undefined') {\n if (typeof line === 'number') {\n this.line = line\n this.column = column\n } else {\n this.line = line.line\n this.column = line.column\n this.endLine = column.line\n this.endColumn = column.column\n }\n }\n\n this.setMessage()\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, CssSyntaxError)\n }\n }\n\n setMessage() {\n this.message = this.plugin ? this.plugin + ': ' : ''\n this.message += this.file ? this.file : '<css input>'\n if (typeof this.line !== 'undefined') {\n this.message += ':' + this.line + ':' + this.column\n }\n this.message += ': ' + this.reason\n }\n\n showSourceCode(color) {\n if (!this.source) return ''\n\n let css = this.source\n if (color == null) color = pico.isColorSupported\n if (terminalHighlight) {\n if (color) css = terminalHighlight(css)\n }\n\n let lines = css.split(/\\r?\\n/)\n let start = Math.max(this.line - 3, 0)\n let end = Math.min(this.line + 2, lines.length)\n\n let maxWidth = String(end).length\n\n let mark, aside\n if (color) {\n let { bold, gray, red } = pico.createColors(true)\n mark = text => bold(red(text))\n aside = text => gray(text)\n } else {\n mark = aside = str => str\n }\n\n return lines\n .slice(start, end)\n .map((line, index) => {\n let number = start + 1 + index\n let gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | '\n if (number === this.line) {\n let spacing =\n aside(gutter.replace(/\\d/g, ' ')) +\n line.slice(0, this.column - 1).replace(/[^\\t]/g, ' ')\n return mark('>') + aside(gutter) + line + '\\n ' + spacing + mark('^')\n }\n return ' ' + aside(gutter) + line\n })\n .join('\\n')\n }\n\n toString() {\n let code = this.showSourceCode()\n if (code) {\n code = '\\n\\n' + code + '\\n'\n }\n return this.name + ': ' + this.message + code\n }\n}\n\nmodule.exports = CssSyntaxError\nCssSyntaxError.default = CssSyntaxError\n","'use strict'\n\nlet Node = require('./node')\n\nclass Declaration extends Node {\n constructor(defaults) {\n if (\n defaults &&\n typeof defaults.value !== 'undefined' &&\n typeof defaults.value !== 'string'\n ) {\n defaults = { ...defaults, value: String(defaults.value) }\n }\n super(defaults)\n this.type = 'decl'\n }\n\n get variable() {\n return this.prop.startsWith('--') || this.prop[0] === '$'\n }\n}\n\nmodule.exports = Declaration\nDeclaration.default = Declaration\n","'use strict'\n\nlet Container = require('./container')\n\nlet LazyResult, Processor\n\nclass Document extends Container {\n constructor(defaults) {\n // type needs to be passed to super, otherwise child roots won't be normalized correctly\n super({ type: 'document', ...defaults })\n\n if (!this.nodes) {\n this.nodes = []\n }\n }\n\n toResult(opts = {}) {\n let lazy = new LazyResult(new Processor(), this, opts)\n\n return lazy.stringify()\n }\n}\n\nDocument.registerLazyResult = dependant => {\n LazyResult = dependant\n}\n\nDocument.registerProcessor = dependant => {\n Processor = dependant\n}\n\nmodule.exports = Document\nDocument.default = Document\n","'use strict'\n\nlet Declaration = require('./declaration')\nlet PreviousMap = require('./previous-map')\nlet Comment = require('./comment')\nlet AtRule = require('./at-rule')\nlet Input = require('./input')\nlet Root = require('./root')\nlet Rule = require('./rule')\n\nfunction fromJSON(json, inputs) {\n if (Array.isArray(json)) return json.map(n => fromJSON(n))\n\n let { inputs: ownInputs, ...defaults } = json\n if (ownInputs) {\n inputs = []\n for (let input of ownInputs) {\n let inputHydrated = { ...input, __proto__: Input.prototype }\n if (inputHydrated.map) {\n inputHydrated.map = {\n ...inputHydrated.map,\n __proto__: PreviousMap.prototype\n }\n }\n inputs.push(inputHydrated)\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map(n => fromJSON(n, inputs))\n }\n if (defaults.source) {\n let { inputId, ...source } = defaults.source\n defaults.source = source\n if (inputId != null) {\n defaults.source.input = inputs[inputId]\n }\n }\n if (defaults.type === 'root') {\n return new Root(defaults)\n } else if (defaults.type === 'decl') {\n return new Declaration(defaults)\n } else if (defaults.type === 'rule') {\n return new Rule(defaults)\n } else if (defaults.type === 'comment') {\n return new Comment(defaults)\n } else if (defaults.type === 'atrule') {\n return new AtRule(defaults)\n } else {\n throw new Error('Unknown node type: ' + json.type)\n }\n}\n\nmodule.exports = fromJSON\nfromJSON.default = fromJSON\n","'use strict'\n\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { fileURLToPath, pathToFileURL } = require('url')\nlet { isAbsolute, resolve } = require('path')\nlet { nanoid } = require('nanoid/non-secure')\n\nlet terminalHighlight = require('./terminal-highlight')\nlet CssSyntaxError = require('./css-syntax-error')\nlet PreviousMap = require('./previous-map')\n\nlet fromOffsetCache = Symbol('fromOffsetCache')\n\nlet sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)\nlet pathAvailable = Boolean(resolve && isAbsolute)\n\nclass Input {\n constructor(css, opts = {}) {\n if (\n css === null ||\n typeof css === 'undefined' ||\n (typeof css === 'object' && !css.toString)\n ) {\n throw new Error(`PostCSS received ${css} instead of CSS string`)\n }\n\n this.css = css.toString()\n\n if (this.css[0] === '\\uFEFF' || this.css[0] === '\\uFFFE') {\n this.hasBOM = true\n this.css = this.css.slice(1)\n } else {\n this.hasBOM = false\n }\n\n if (opts.from) {\n if (\n !pathAvailable ||\n /^\\w+:\\/\\//.test(opts.from) ||\n isAbsolute(opts.from)\n ) {\n this.file = opts.from\n } else {\n this.file = resolve(opts.from)\n }\n }\n\n if (pathAvailable && sourceMapAvailable) {\n let map = new PreviousMap(this.css, opts)\n if (map.text) {\n this.map = map\n let file = map.consumer().file\n if (!this.file && file) this.file = this.mapResolve(file)\n }\n }\n\n if (!this.file) {\n this.id = '<input css ' + nanoid(6) + '>'\n }\n if (this.map) this.map.file = this.from\n }\n\n error(message, line, column, opts = {}) {\n let result, endLine, endColumn\n\n if (line && typeof line === 'object') {\n let start = line\n let end = column\n if (typeof start.offset === 'number') {\n let pos = this.fromOffset(start.offset)\n line = pos.line\n column = pos.col\n } else {\n line = start.line\n column = start.column\n }\n if (typeof end.offset === 'number') {\n let pos = this.fromOffset(end.offset)\n endLine = pos.line\n endColumn = pos.col\n } else {\n endLine = end.line\n endColumn = end.column\n }\n } else if (!column) {\n let pos = this.fromOffset(line)\n line = pos.line\n column = pos.col\n }\n\n let origin = this.origin(line, column, endLine, endColumn)\n if (origin) {\n result = new CssSyntaxError(\n message,\n origin.endLine === undefined\n ? origin.line\n : { column: origin.column, line: origin.line },\n origin.endLine === undefined\n ? origin.column\n : { column: origin.endColumn, line: origin.endLine },\n origin.source,\n origin.file,\n opts.plugin\n )\n } else {\n result = new CssSyntaxError(\n message,\n endLine === undefined ? line : { column, line },\n endLine === undefined ? column : { column: endColumn, line: endLine },\n this.css,\n this.file,\n opts.plugin\n )\n }\n\n result.input = { column, endColumn, endLine, line, source: this.css }\n if (this.file) {\n if (pathToFileURL) {\n result.input.url = pathToFileURL(this.file).toString()\n }\n result.input.file = this.file\n }\n\n return result\n }\n\n fromOffset(offset) {\n let lastLine, lineToIndex\n if (!this[fromOffsetCache]) {\n let lines = this.css.split('\\n')\n lineToIndex = new Array(lines.length)\n let prevIndex = 0\n\n for (let i = 0, l = lines.length; i < l; i++) {\n lineToIndex[i] = prevIndex\n prevIndex += lines[i].length + 1\n }\n\n this[fromOffsetCache] = lineToIndex\n } else {\n lineToIndex = this[fromOffsetCache]\n }\n lastLine = lineToIndex[lineToIndex.length - 1]\n\n let min = 0\n if (offset >= lastLine) {\n min = lineToIndex.length - 1\n } else {\n let max = lineToIndex.length - 2\n let mid\n while (min < max) {\n mid = min + ((max - min) >> 1)\n if (offset < lineToIndex[mid]) {\n max = mid - 1\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1\n } else {\n min = mid\n break\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n }\n }\n\n mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file\n }\n return resolve(this.map.consumer().sourceRoot || this.map.root || '.', file)\n }\n\n origin(line, column, endLine, endColumn) {\n if (!this.map) return false\n let consumer = this.map.consumer()\n\n let from = consumer.originalPositionFor({ column, line })\n if (!from.source) return false\n\n let to\n if (typeof endLine === 'number') {\n to = consumer.originalPositionFor({ column: endColumn, line: endLine })\n }\n\n let fromUrl\n\n if (isAbsolute(from.source)) {\n fromUrl = pathToFileURL(from.source)\n } else {\n fromUrl = new URL(\n from.source,\n this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile)\n )\n }\n\n let result = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n }\n\n if (fromUrl.protocol === 'file:') {\n if (fileURLToPath) {\n result.file = fileURLToPath(fromUrl)\n } else {\n /* c8 ignore next 2 */\n throw new Error(`file: protocol is not available in this PostCSS build`)\n }\n }\n\n let source = consumer.sourceContentFor(from.source)\n if (source) result.source = source\n\n return result\n }\n\n toJSON() {\n let json = {}\n for (let name of ['hasBOM', 'css', 'file', 'id']) {\n if (this[name] != null) {\n json[name] = this[name]\n }\n }\n if (this.map) {\n json.map = { ...this.map }\n if (json.map.consumerCache) {\n json.map.consumerCache = undefined\n }\n }\n return json\n }\n\n get from() {\n return this.file || this.id\n }\n}\n\nmodule.exports = Input\nInput.default = Input\n\nif (terminalHighlight && terminalHighlight.registerInput) {\n terminalHighlight.registerInput(Input)\n}\n","'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet MapGenerator = require('./map-generator')\nlet stringify = require('./stringify')\nlet Container = require('./container')\nlet Document = require('./document')\nlet warnOnce = require('./warn-once')\nlet Result = require('./result')\nlet parse = require('./parse')\nlet Root = require('./root')\n\nconst TYPE_TO_CLASS_NAME = {\n atrule: 'AtRule',\n comment: 'Comment',\n decl: 'Declaration',\n document: 'Document',\n root: 'Root',\n rule: 'Rule'\n}\n\nconst PLUGIN_PROPS = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n}\n\nconst NOT_VISITORS = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n}\n\nconst CHILDREN = 0\n\nfunction isPromise(obj) {\n return typeof obj === 'object' && typeof obj.then === 'function'\n}\n\nfunction getEvents(node) {\n let key = false\n let type = TYPE_TO_CLASS_NAME[node.type]\n if (node.type === 'decl') {\n key = node.prop.toLowerCase()\n } else if (node.type === 'atrule') {\n key = node.name.toLowerCase()\n }\n\n if (key && node.append) {\n return [\n type,\n type + '-' + key,\n CHILDREN,\n type + 'Exit',\n type + 'Exit-' + key\n ]\n } else if (key) {\n return [type, type + '-' + key, type + 'Exit', type + 'Exit-' + key]\n } else if (node.append) {\n return [type, CHILDREN, type + 'Exit']\n } else {\n return [type, type + 'Exit']\n }\n}\n\nfunction toStack(node) {\n let events\n if (node.type === 'document') {\n events = ['Document', CHILDREN, 'DocumentExit']\n } else if (node.type === 'root') {\n events = ['Root', CHILDREN, 'RootExit']\n } else {\n events = getEvents(node)\n }\n\n return {\n eventIndex: 0,\n events,\n iterator: 0,\n node,\n visitorIndex: 0,\n visitors: []\n }\n}\n\nfunction cleanMarks(node) {\n node[isClean] = false\n if (node.nodes) node.nodes.forEach(i => cleanMarks(i))\n return node\n}\n\nlet postcss = {}\n\nclass LazyResult {\n constructor(processor, css, opts) {\n this.stringified = false\n this.processed = false\n\n let root\n if (\n typeof css === 'object' &&\n css !== null &&\n (css.type === 'root' || css.type === 'document')\n ) {\n root = cleanMarks(css)\n } else if (css instanceof LazyResult || css instanceof Result) {\n root = cleanMarks(css.root)\n if (css.map) {\n if (typeof opts.map === 'undefined') opts.map = {}\n if (!opts.map.inline) opts.map.inline = false\n opts.map.prev = css.map\n }\n } else {\n let parser = parse\n if (opts.syntax) parser = opts.syntax.parse\n if (opts.parser) parser = opts.parser\n if (parser.parse) parser = parser.parse\n\n try {\n root = parser(css, opts)\n } catch (error) {\n this.processed = true\n this.error = error\n }\n\n if (root && !root[my]) {\n /* c8 ignore next 2 */\n Container.rebuild(root)\n }\n }\n\n this.result = new Result(processor, root, opts)\n this.helpers = { ...postcss, postcss, result: this.result }\n this.plugins = this.processor.plugins.map(plugin => {\n if (typeof plugin === 'object' && plugin.prepare) {\n return { ...plugin, ...plugin.prepare(this.result) }\n } else {\n return plugin\n }\n })\n }\n\n async() {\n if (this.error) return Promise.reject(this.error)\n if (this.processed) return Promise.resolve(this.result)\n if (!this.processing) {\n this.processing = this.runAsync()\n }\n return this.processing\n }\n\n catch(onRejected) {\n return this.async().catch(onRejected)\n }\n\n finally(onFinally) {\n return this.async().then(onFinally, onFinally)\n }\n\n getAsyncError() {\n throw new Error('Use process(css).then(cb) to work with async plugins')\n }\n\n handleError(error, node) {\n let plugin = this.result.lastPlugin\n try {\n if (node) node.addToError(error)\n this.error = error\n if (error.name === 'CssSyntaxError' && !error.plugin) {\n error.plugin = plugin.postcssPlugin\n error.setMessage()\n } else if (plugin.postcssVersion) {\n if (process.env.NODE_ENV !== 'production') {\n let pluginName = plugin.postcssPlugin\n let pluginVer = plugin.postcssVersion\n let runtimeVer = this.result.processor.version\n let a = pluginVer.split('.')\n let b = runtimeVer.split('.')\n\n if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {\n // eslint-disable-next-line no-console\n console.error(\n 'Unknown error from PostCSS plugin. Your current PostCSS ' +\n 'version is ' +\n runtimeVer +\n ', but ' +\n pluginName +\n ' uses ' +\n pluginVer +\n '. Perhaps this is the source of the error below.'\n )\n }\n }\n }\n } catch (err) {\n /* c8 ignore next 3 */\n // eslint-disable-next-line no-console\n if (console && console.error) console.error(err)\n }\n return error\n }\n\n prepareVisitors() {\n this.listeners = {}\n let add = (plugin, type, cb) => {\n if (!this.listeners[type]) this.listeners[type] = []\n this.listeners[type].push([plugin, cb])\n }\n for (let plugin of this.plugins) {\n if (typeof plugin === 'object') {\n for (let event in plugin) {\n if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {\n throw new Error(\n `Unknown event ${event} in ${plugin.postcssPlugin}. ` +\n `Try to update PostCSS (${this.processor.version} now).`\n )\n }\n if (!NOT_VISITORS[event]) {\n if (typeof plugin[event] === 'object') {\n for (let filter in plugin[event]) {\n if (filter === '*') {\n add(plugin, event, plugin[event][filter])\n } else {\n add(\n plugin,\n event + '-' + filter.toLowerCase(),\n plugin[event][filter]\n )\n }\n }\n } else if (typeof plugin[event] === 'function') {\n add(plugin, event, plugin[event])\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0\n }\n\n async runAsync() {\n this.plugin = 0\n for (let i = 0; i < this.plugins.length; i++) {\n let plugin = this.plugins[i]\n let promise = this.runOnRoot(plugin)\n if (isPromise(promise)) {\n try {\n await promise\n } catch (error) {\n throw this.handleError(error)\n }\n }\n }\n\n this.prepareVisitors()\n if (this.hasListener) {\n let root = this.result.root\n while (!root[isClean]) {\n root[isClean] = true\n let stack = [toStack(root)]\n while (stack.length > 0) {\n let promise = this.visitTick(stack)\n if (isPromise(promise)) {\n try {\n await promise\n } catch (e) {\n let node = stack[stack.length - 1].node\n throw this.handleError(e, node)\n }\n }\n }\n }\n\n if (this.listeners.OnceExit) {\n for (let [plugin, visitor] of this.listeners.OnceExit) {\n this.result.lastPlugin = plugin\n try {\n if (root.type === 'document') {\n let roots = root.nodes.map(subRoot =>\n visitor(subRoot, this.helpers)\n )\n\n await Promise.all(roots)\n } else {\n await visitor(root, this.helpers)\n }\n } catch (e) {\n throw this.handleError(e)\n }\n }\n }\n }\n\n this.processed = true\n return this.stringify()\n }\n\n runOnRoot(plugin) {\n this.result.lastPlugin = plugin\n try {\n if (typeof plugin === 'object' && plugin.Once) {\n if (this.result.root.type === 'document') {\n let roots = this.result.root.nodes.map(root =>\n plugin.Once(root, this.helpers)\n )\n\n if (isPromise(roots[0])) {\n return Promise.all(roots)\n }\n\n return roots\n }\n\n return plugin.Once(this.result.root, this.helpers)\n } else if (typeof plugin === 'function') {\n return plugin(this.result.root, this.result)\n }\n } catch (error) {\n throw this.handleError(error)\n }\n }\n\n stringify() {\n if (this.error) throw this.error\n if (this.stringified) return this.result\n this.stringified = true\n\n this.sync()\n\n let opts = this.result.opts\n let str = stringify\n if (opts.syntax) str = opts.syntax.stringify\n if (opts.stringifier) str = opts.stringifier\n if (str.stringify) str = str.stringify\n\n let map = new MapGenerator(str, this.result.root, this.result.opts)\n let data = map.generate()\n this.result.css = data[0]\n this.result.map = data[1]\n\n return this.result\n }\n\n sync() {\n if (this.error) throw this.error\n if (this.processed) return this.result\n this.processed = true\n\n if (this.processing) {\n throw this.getAsyncError()\n }\n\n for (let plugin of this.plugins) {\n let promise = this.runOnRoot(plugin)\n if (isPromise(promise)) {\n throw this.getAsyncError()\n }\n }\n\n this.prepareVisitors()\n if (this.hasListener) {\n let root = this.result.root\n while (!root[isClean]) {\n root[isClean] = true\n this.walkSync(root)\n }\n if (this.listeners.OnceExit) {\n if (root.type === 'document') {\n for (let subRoot of root.nodes) {\n this.visitSync(this.listeners.OnceExit, subRoot)\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root)\n }\n }\n }\n\n return this.result\n }\n\n then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== 'production') {\n if (!('from' in this.opts)) {\n warnOnce(\n 'Without `from` option PostCSS could generate wrong source map ' +\n 'and will not find Browserslist config. Set it to CSS file path ' +\n 'or to `undefined` to prevent this warning.'\n )\n }\n }\n return this.async().then(onFulfilled, onRejected)\n }\n\n toString() {\n return this.css\n }\n\n visitSync(visitors, node) {\n for (let [plugin, visitor] of visitors) {\n this.result.lastPlugin = plugin\n let promise\n try {\n promise = visitor(node, this.helpers)\n } catch (e) {\n throw this.handleError(e, node.proxyOf)\n }\n if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n return true\n }\n if (isPromise(promise)) {\n throw this.getAsyncError()\n }\n }\n }\n\n visitTick(stack) {\n let visit = stack[stack.length - 1]\n let { node, visitors } = visit\n\n if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n stack.pop()\n return\n }\n\n if (visitors.length > 0 && visit.visitorIndex < visitors.length) {\n let [plugin, visitor] = visitors[visit.visitorIndex]\n visit.visitorIndex += 1\n if (visit.visitorIndex === visitors.length) {\n visit.visitors = []\n visit.visitorIndex = 0\n }\n this.result.lastPlugin = plugin\n try {\n return visitor(node.toProxy(), this.helpers)\n } catch (e) {\n throw this.handleError(e, node)\n }\n }\n\n if (visit.iterator !== 0) {\n let iterator = visit.iterator\n let child\n while ((child = node.nodes[node.indexes[iterator]])) {\n node.indexes[iterator] += 1\n if (!child[isClean]) {\n child[isClean] = true\n stack.push(toStack(child))\n return\n }\n }\n visit.iterator = 0\n delete node.indexes[iterator]\n }\n\n let events = visit.events\n while (visit.eventIndex < events.length) {\n let event = events[visit.eventIndex]\n visit.eventIndex += 1\n if (event === CHILDREN) {\n if (node.nodes && node.nodes.length) {\n node[isClean] = true\n visit.iterator = node.getIterator()\n }\n return\n } else if (this.listeners[event]) {\n visit.visitors = this.listeners[event]\n return\n }\n }\n stack.pop()\n }\n\n walkSync(node) {\n node[isClean] = true\n let events = getEvents(node)\n for (let event of events) {\n if (event === CHILDREN) {\n if (node.nodes) {\n node.each(child => {\n if (!child[isClean]) this.walkSync(child)\n })\n }\n } else {\n let visitors = this.listeners[event]\n if (visitors) {\n if (this.visitSync(visitors, node.toProxy())) return\n }\n }\n }\n }\n\n warnings() {\n return this.sync().warnings()\n }\n\n get content() {\n return this.stringify().content\n }\n\n get css() {\n return this.stringify().css\n }\n\n get map() {\n return this.stringify().map\n }\n\n get messages() {\n return this.sync().messages\n }\n\n get opts() {\n return this.result.opts\n }\n\n get processor() {\n return this.result.processor\n }\n\n get root() {\n return this.sync().root\n }\n\n get [Symbol.toStringTag]() {\n return 'LazyResult'\n }\n}\n\nLazyResult.registerPostcss = dependant => {\n postcss = dependant\n}\n\nmodule.exports = LazyResult\nLazyResult.default = LazyResult\n\nRoot.registerLazyResult(LazyResult)\nDocument.registerLazyResult(LazyResult)\n","'use strict'\n\nlet list = {\n comma(string) {\n return list.split(string, [','], true)\n },\n\n space(string) {\n let spaces = [' ', '\\n', '\\t']\n return list.split(string, spaces)\n },\n\n split(string, separators, last) {\n let array = []\n let current = ''\n let split = false\n\n let func = 0\n let inQuote = false\n let prevQuote = ''\n let escape = false\n\n for (let letter of string) {\n if (escape) {\n escape = false\n } else if (letter === '\\\\') {\n escape = true\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true\n prevQuote = letter\n } else if (letter === '(') {\n func += 1\n } else if (letter === ')') {\n if (func > 0) func -= 1\n } else if (func === 0) {\n if (separators.includes(letter)) split = true\n }\n\n if (split) {\n if (current !== '') array.push(current.trim())\n current = ''\n split = false\n } else {\n current += letter\n }\n }\n\n if (last || current !== '') array.push(current.trim())\n return array\n }\n}\n\nmodule.exports = list\nlist.default = list\n","'use strict'\n\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { dirname, relative, resolve, sep } = require('path')\nlet { pathToFileURL } = require('url')\n\nlet Input = require('./input')\n\nlet sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)\nlet pathAvailable = Boolean(dirname && resolve && relative && sep)\n\nclass MapGenerator {\n constructor(stringify, root, opts, cssString) {\n this.stringify = stringify\n this.mapOpts = opts.map || {}\n this.root = root\n this.opts = opts\n this.css = cssString\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute\n\n this.memoizedFileURLs = new Map()\n this.memoizedPaths = new Map()\n this.memoizedURLs = new Map()\n }\n\n addAnnotation() {\n let content\n\n if (this.isInline()) {\n content =\n 'data:application/json;base64,' + this.toBase64(this.map.toString())\n } else if (typeof this.mapOpts.annotation === 'string') {\n content = this.mapOpts.annotation\n } else if (typeof this.mapOpts.annotation === 'function') {\n content = this.mapOpts.annotation(this.opts.to, this.root)\n } else {\n content = this.outputFile() + '.map'\n }\n let eol = '\\n'\n if (this.css.includes('\\r\\n')) eol = '\\r\\n'\n\n this.css += eol + '/*# sourceMappingURL=' + content + ' */'\n }\n\n applyPrevMaps() {\n for (let prev of this.previous()) {\n let from = this.toUrl(this.path(prev.file))\n let root = prev.root || dirname(prev.file)\n let map\n\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer(prev.text)\n if (map.sourcesContent) {\n map.sourcesContent = map.sourcesContent.map(() => null)\n }\n } else {\n map = prev.consumer()\n }\n\n this.map.applySourceMap(map, from, this.toUrl(this.path(root)))\n }\n }\n\n clearAnnotation() {\n if (this.mapOpts.annotation === false) return\n\n if (this.root) {\n let node\n for (let i = this.root.nodes.length - 1; i >= 0; i--) {\n node = this.root.nodes[i]\n if (node.type !== 'comment') continue\n if (node.text.indexOf('# sourceMappingURL=') === 0) {\n this.root.removeChild(i)\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/(\\n)?\\/\\*#[\\S\\s]*?\\*\\/$/gm, '')\n }\n }\n\n generate() {\n this.clearAnnotation()\n if (pathAvailable && sourceMapAvailable && this.isMap()) {\n return this.generateMap()\n } else {\n let result = ''\n this.stringify(this.root, i => {\n result += i\n })\n return [result]\n }\n }\n\n generateMap() {\n if (this.root) {\n this.generateString()\n } else if (this.previous().length === 1) {\n let prev = this.previous()[0].consumer()\n prev.file = this.outputFile()\n this.map = SourceMapGenerator.fromSourceMap(prev)\n } else {\n this.map = new SourceMapGenerator({ file: this.outputFile() })\n this.map.addMapping({\n generated: { column: 0, line: 1 },\n original: { column: 0, line: 1 },\n source: this.opts.from\n ? this.toUrl(this.path(this.opts.from))\n : '<no source>'\n })\n }\n\n if (this.isSourcesContent()) this.setSourcesContent()\n if (this.root && this.previous().length > 0) this.applyPrevMaps()\n if (this.isAnnotation()) this.addAnnotation()\n\n if (this.isInline()) {\n return [this.css]\n } else {\n return [this.css, this.map]\n }\n }\n\n generateString() {\n this.css = ''\n this.map = new SourceMapGenerator({ file: this.outputFile() })\n\n let line = 1\n let column = 1\n\n let noSource = '<no source>'\n let mapping = {\n generated: { column: 0, line: 0 },\n original: { column: 0, line: 0 },\n source: ''\n }\n\n let lines, last\n this.stringify(this.root, (str, node, type) => {\n this.css += str\n\n if (node && type !== 'end') {\n mapping.generated.line = line\n mapping.generated.column = column - 1\n if (node.source && node.source.start) {\n mapping.source = this.sourcePath(node)\n mapping.original.line = node.source.start.line\n mapping.original.column = node.source.start.column - 1\n this.map.addMapping(mapping)\n } else {\n mapping.source = noSource\n mapping.original.line = 1\n mapping.original.column = 0\n this.map.addMapping(mapping)\n }\n }\n\n lines = str.match(/\\n/g)\n if (lines) {\n line += lines.length\n last = str.lastIndexOf('\\n')\n column = str.length - last\n } else {\n column += str.length\n }\n\n if (node && type !== 'start') {\n let p = node.parent || { raws: {} }\n let childless =\n node.type === 'decl' || (node.type === 'atrule' && !node.nodes)\n if (!childless || node !== p.last || p.raws.semicolon) {\n if (node.source && node.source.end) {\n mapping.source = this.sourcePath(node)\n mapping.original.line = node.source.end.line\n mapping.original.column = node.source.end.column - 1\n mapping.generated.line = line\n mapping.generated.column = column - 2\n this.map.addMapping(mapping)\n } else {\n mapping.source = noSource\n mapping.original.line = 1\n mapping.original.column = 0\n mapping.generated.line = line\n mapping.generated.column = column - 1\n this.map.addMapping(mapping)\n }\n }\n }\n })\n }\n\n isAnnotation() {\n if (this.isInline()) {\n return true\n }\n if (typeof this.mapOpts.annotation !== 'undefined') {\n return this.mapOpts.annotation\n }\n if (this.previous().length) {\n return this.previous().some(i => i.annotation)\n }\n return true\n }\n\n isInline() {\n if (typeof this.mapOpts.inline !== 'undefined') {\n return this.mapOpts.inline\n }\n\n let annotation = this.mapOpts.annotation\n if (typeof annotation !== 'undefined' && annotation !== true) {\n return false\n }\n\n if (this.previous().length) {\n return this.previous().some(i => i.inline)\n }\n return true\n }\n\n isMap() {\n if (typeof this.opts.map !== 'undefined') {\n return !!this.opts.map\n }\n return this.previous().length > 0\n }\n\n isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== 'undefined') {\n return this.mapOpts.sourcesContent\n }\n if (this.previous().length) {\n return this.previous().some(i => i.withContent())\n }\n return true\n }\n\n outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to)\n } else if (this.opts.from) {\n return this.path(this.opts.from)\n } else {\n return 'to.css'\n }\n }\n\n path(file) {\n if (this.mapOpts.absolute) return file\n if (file.charCodeAt(0) === 60 /* `<` */) return file\n if (/^\\w+:\\/\\//.test(file)) return file\n let cached = this.memoizedPaths.get(file)\n if (cached) return cached\n\n let from = this.opts.to ? dirname(this.opts.to) : '.'\n\n if (typeof this.mapOpts.annotation === 'string') {\n from = dirname(resolve(from, this.mapOpts.annotation))\n }\n\n let path = relative(from, file)\n this.memoizedPaths.set(file, path)\n\n return path\n }\n\n previous() {\n if (!this.previousMaps) {\n this.previousMaps = []\n if (this.root) {\n this.root.walk(node => {\n if (node.source && node.source.input.map) {\n let map = node.source.input.map\n if (!this.previousMaps.includes(map)) {\n this.previousMaps.push(map)\n }\n }\n })\n } else {\n let input = new Input(this.css, this.opts)\n if (input.map) this.previousMaps.push(input.map)\n }\n }\n\n return this.previousMaps\n }\n\n setSourcesContent() {\n let already = {}\n if (this.root) {\n this.root.walk(node => {\n if (node.source) {\n let from = node.source.input.from\n if (from && !already[from]) {\n already[from] = true\n let fromUrl = this.usesFileUrls\n ? this.toFileUrl(from)\n : this.toUrl(this.path(from))\n this.map.setSourceContent(fromUrl, node.source.input.css)\n }\n }\n })\n } else if (this.css) {\n let from = this.opts.from\n ? this.toUrl(this.path(this.opts.from))\n : '<no source>'\n this.map.setSourceContent(from, this.css)\n }\n }\n\n sourcePath(node) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from)\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node.source.input.from)\n } else {\n return this.toUrl(this.path(node.source.input.from))\n }\n }\n\n toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString('base64')\n } else {\n return window.btoa(unescape(encodeURIComponent(str)))\n }\n }\n\n toFileUrl(path) {\n let cached = this.memoizedFileURLs.get(path)\n if (cached) return cached\n\n if (pathToFileURL) {\n let fileURL = pathToFileURL(path).toString()\n this.memoizedFileURLs.set(path, fileURL)\n\n return fileURL\n } else {\n throw new Error(\n '`map.absolute` option is not available in this PostCSS build'\n )\n }\n }\n\n toUrl(path) {\n let cached = this.memoizedURLs.get(path)\n if (cached) return cached\n\n if (sep === '\\\\') {\n path = path.replace(/\\\\/g, '/')\n }\n\n let url = encodeURI(path).replace(/[#?]/g, encodeURIComponent)\n this.memoizedURLs.set(path, url)\n\n return url\n }\n}\n\nmodule.exports = MapGenerator\n","'use strict'\n\nlet MapGenerator = require('./map-generator')\nlet stringify = require('./stringify')\nlet warnOnce = require('./warn-once')\nlet parse = require('./parse')\nconst Result = require('./result')\n\nclass NoWorkResult {\n constructor(processor, css, opts) {\n css = css.toString()\n this.stringified = false\n\n this._processor = processor\n this._css = css\n this._opts = opts\n this._map = undefined\n let root\n\n let str = stringify\n this.result = new Result(this._processor, root, this._opts)\n this.result.css = css\n\n let self = this\n Object.defineProperty(this.result, 'root', {\n get() {\n return self.root\n }\n })\n\n let map = new MapGenerator(str, root, this._opts, css)\n if (map.isMap()) {\n let [generatedCSS, generatedMap] = map.generate()\n if (generatedCSS) {\n this.result.css = generatedCSS\n }\n if (generatedMap) {\n this.result.map = generatedMap\n }\n }\n }\n\n async() {\n if (this.error) return Promise.reject(this.error)\n return Promise.resolve(this.result)\n }\n\n catch(onRejected) {\n return this.async().catch(onRejected)\n }\n\n finally(onFinally) {\n return this.async().then(onFinally, onFinally)\n }\n\n sync() {\n if (this.error) throw this.error\n return this.result\n }\n\n then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== 'production') {\n if (!('from' in this._opts)) {\n warnOnce(\n 'Without `from` option PostCSS could generate wrong source map ' +\n 'and will not find Browserslist config. Set it to CSS file path ' +\n 'or to `undefined` to prevent this warning.'\n )\n }\n }\n\n return this.async().then(onFulfilled, onRejected)\n }\n\n toString() {\n return this._css\n }\n\n warnings() {\n return []\n }\n\n get content() {\n return this.result.css\n }\n\n get css() {\n return this.result.css\n }\n\n get map() {\n return this.result.map\n }\n\n get messages() {\n return []\n }\n\n get opts() {\n return this.result.opts\n }\n\n get processor() {\n return this.result.processor\n }\n\n get root() {\n if (this._root) {\n return this._root\n }\n\n let root\n let parser = parse\n\n try {\n root = parser(this._css, this._opts)\n } catch (error) {\n this.error = error\n }\n\n if (this.error) {\n throw this.error\n } else {\n this._root = root\n return root\n }\n }\n\n get [Symbol.toStringTag]() {\n return 'NoWorkResult'\n }\n}\n\nmodule.exports = NoWorkResult\nNoWorkResult.default = NoWorkResult\n","'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet CssSyntaxError = require('./css-syntax-error')\nlet Stringifier = require('./stringifier')\nlet stringify = require('./stringify')\n\nfunction cloneNode(obj, parent) {\n let cloned = new obj.constructor()\n\n for (let i in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, i)) {\n /* c8 ignore next 2 */\n continue\n }\n if (i === 'proxyCache') continue\n let value = obj[i]\n let type = typeof value\n\n if (i === 'parent' && type === 'object') {\n if (parent) cloned[i] = parent\n } else if (i === 'source') {\n cloned[i] = value\n } else if (Array.isArray(value)) {\n cloned[i] = value.map(j => cloneNode(j, cloned))\n } else {\n if (type === 'object' && value !== null) value = cloneNode(value)\n cloned[i] = value\n }\n }\n\n return cloned\n}\n\nclass Node {\n constructor(defaults = {}) {\n this.raws = {}\n this[isClean] = false\n this[my] = true\n\n for (let name in defaults) {\n if (name === 'nodes') {\n this.nodes = []\n for (let node of defaults[name]) {\n if (typeof node.clone === 'function') {\n this.append(node.clone())\n } else {\n this.append(node)\n }\n }\n } else {\n this[name] = defaults[name]\n }\n }\n }\n\n addToError(error) {\n error.postcssNode = this\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n let s = this.source\n error.stack = error.stack.replace(\n /\\n\\s{4}at /,\n `$&${s.input.from}:${s.start.line}:${s.start.column}$&`\n )\n }\n return error\n }\n\n after(add) {\n this.parent.insertAfter(this, add)\n return this\n }\n\n assign(overrides = {}) {\n for (let name in overrides) {\n this[name] = overrides[name]\n }\n return this\n }\n\n before(add) {\n this.parent.insertBefore(this, add)\n return this\n }\n\n cleanRaws(keepBetween) {\n delete this.raws.before\n delete this.raws.after\n if (!keepBetween) delete this.raws.between\n }\n\n clone(overrides = {}) {\n let cloned = cloneNode(this)\n for (let name in overrides) {\n cloned[name] = overrides[name]\n }\n return cloned\n }\n\n cloneAfter(overrides = {}) {\n let cloned = this.clone(overrides)\n this.parent.insertAfter(this, cloned)\n return cloned\n }\n\n cloneBefore(overrides = {}) {\n let cloned = this.clone(overrides)\n this.parent.insertBefore(this, cloned)\n return cloned\n }\n\n error(message, opts = {}) {\n if (this.source) {\n let { end, start } = this.rangeBy(opts)\n return this.source.input.error(\n message,\n { column: start.column, line: start.line },\n { column: end.column, line: end.line },\n opts\n )\n }\n return new CssSyntaxError(message)\n }\n\n getProxyProcessor() {\n return {\n get(node, prop) {\n if (prop === 'proxyOf') {\n return node\n } else if (prop === 'root') {\n return () => node.root().toProxy()\n } else {\n return node[prop]\n }\n },\n\n set(node, prop, value) {\n if (node[prop] === value) return true\n node[prop] = value\n if (\n prop === 'prop' ||\n prop === 'value' ||\n prop === 'name' ||\n prop === 'params' ||\n prop === 'important' ||\n /* c8 ignore next */\n prop === 'text'\n ) {\n node.markDirty()\n }\n return true\n }\n }\n }\n\n markDirty() {\n if (this[isClean]) {\n this[isClean] = false\n let next = this\n while ((next = next.parent)) {\n next[isClean] = false\n }\n }\n }\n\n next() {\n if (!this.parent) return undefined\n let index = this.parent.index(this)\n return this.parent.nodes[index + 1]\n }\n\n positionBy(opts, stringRepresentation) {\n let pos = this.source.start\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation)\n } else if (opts.word) {\n stringRepresentation = this.toString()\n let index = stringRepresentation.indexOf(opts.word)\n if (index !== -1) pos = this.positionInside(index, stringRepresentation)\n }\n return pos\n }\n\n positionInside(index, stringRepresentation) {\n let string = stringRepresentation || this.toString()\n let column = this.source.start.column\n let line = this.source.start.line\n\n for (let i = 0; i < index; i++) {\n if (string[i] === '\\n') {\n column = 1\n line += 1\n } else {\n column += 1\n }\n }\n\n return { column, line }\n }\n\n prev() {\n if (!this.parent) return undefined\n let index = this.parent.index(this)\n return this.parent.nodes[index - 1]\n }\n\n rangeBy(opts) {\n let start = {\n column: this.source.start.column,\n line: this.source.start.line\n }\n let end = this.source.end\n ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n }\n : {\n column: start.column + 1,\n line: start.line\n }\n\n if (opts.word) {\n let stringRepresentation = this.toString()\n let index = stringRepresentation.indexOf(opts.word)\n if (index !== -1) {\n start = this.positionInside(index, stringRepresentation)\n end = this.positionInside(index + opts.word.length, stringRepresentation)\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n }\n } else if (opts.index) {\n start = this.positionInside(opts.index)\n }\n\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n }\n } else if (opts.endIndex) {\n end = this.positionInside(opts.endIndex)\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1)\n }\n }\n\n if (\n end.line < start.line ||\n (end.line === start.line && end.column <= start.column)\n ) {\n end = { column: start.column + 1, line: start.line }\n }\n\n return { end, start }\n }\n\n raw(prop, defaultType) {\n let str = new Stringifier()\n return str.raw(this, prop, defaultType)\n }\n\n remove() {\n if (this.parent) {\n this.parent.removeChild(this)\n }\n this.parent = undefined\n return this\n }\n\n replaceWith(...nodes) {\n if (this.parent) {\n let bookmark = this\n let foundSelf = false\n for (let node of nodes) {\n if (node === this) {\n foundSelf = true\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node)\n bookmark = node\n } else {\n this.parent.insertBefore(bookmark, node)\n }\n }\n\n if (!foundSelf) {\n this.remove()\n }\n }\n\n return this\n }\n\n root() {\n let result = this\n while (result.parent && result.parent.type !== 'document') {\n result = result.parent\n }\n return result\n }\n\n toJSON(_, inputs) {\n let fixed = {}\n let emitInputs = inputs == null\n inputs = inputs || new Map()\n let inputsNextIndex = 0\n\n for (let name in this) {\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n /* c8 ignore next 2 */\n continue\n }\n if (name === 'parent' || name === 'proxyCache') continue\n let value = this[name]\n\n if (Array.isArray(value)) {\n fixed[name] = value.map(i => {\n if (typeof i === 'object' && i.toJSON) {\n return i.toJSON(null, inputs)\n } else {\n return i\n }\n })\n } else if (typeof value === 'object' && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs)\n } else if (name === 'source') {\n let inputId = inputs.get(value.input)\n if (inputId == null) {\n inputId = inputsNextIndex\n inputs.set(value.input, inputsNextIndex)\n inputsNextIndex++\n }\n fixed[name] = {\n end: value.end,\n inputId,\n start: value.start\n }\n } else {\n fixed[name] = value\n }\n }\n\n if (emitInputs) {\n fixed.inputs = [...inputs.keys()].map(input => input.toJSON())\n }\n\n return fixed\n }\n\n toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor())\n }\n return this.proxyCache\n }\n\n toString(stringifier = stringify) {\n if (stringifier.stringify) stringifier = stringifier.stringify\n let result = ''\n stringifier(this, i => {\n result += i\n })\n return result\n }\n\n warn(result, text, opts) {\n let data = { node: this }\n for (let i in opts) data[i] = opts[i]\n return result.warn(text, data)\n }\n\n get proxyOf() {\n return this\n }\n}\n\nmodule.exports = Node\nNode.default = Node\n","'use strict'\n\nlet Container = require('./container')\nlet Parser = require('./parser')\nlet Input = require('./input')\n\nfunction parse(css, opts) {\n let input = new Input(css, opts)\n let parser = new Parser(input)\n try {\n parser.parse()\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n if (e.name === 'CssSyntaxError' && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e.message +=\n '\\nYou tried to parse SCSS with ' +\n 'the standard CSS parser; ' +\n 'try again with the postcss-scss parser'\n } else if (/\\.sass/i.test(opts.from)) {\n e.message +=\n '\\nYou tried to parse Sass with ' +\n 'the standard CSS parser; ' +\n 'try again with the postcss-sass parser'\n } else if (/\\.less$/i.test(opts.from)) {\n e.message +=\n '\\nYou tried to parse Less with ' +\n 'the standard CSS parser; ' +\n 'try again with the postcss-less parser'\n }\n }\n }\n throw e\n }\n\n return parser.root\n}\n\nmodule.exports = parse\nparse.default = parse\n\nContainer.registerParse(parse)\n","'use strict'\n\nlet Declaration = require('./declaration')\nlet tokenizer = require('./tokenize')\nlet Comment = require('./comment')\nlet AtRule = require('./at-rule')\nlet Root = require('./root')\nlet Rule = require('./rule')\n\nconst SAFE_COMMENT_NEIGHBOR = {\n empty: true,\n space: true\n}\n\nfunction findLastWithPosition(tokens) {\n for (let i = tokens.length - 1; i >= 0; i--) {\n let token = tokens[i]\n let pos = token[3] || token[2]\n if (pos) return pos\n }\n}\n\nclass Parser {\n constructor(input) {\n this.input = input\n\n this.root = new Root()\n this.current = this.root\n this.spaces = ''\n this.semicolon = false\n this.customProperty = false\n\n this.createTokenizer()\n this.root.source = { input, start: { column: 1, line: 1, offset: 0 } }\n }\n\n atrule(token) {\n let node = new AtRule()\n node.name = token[1].slice(1)\n if (node.name === '') {\n this.unnamedAtrule(node, token)\n }\n this.init(node, token[2])\n\n let type\n let prev\n let shift\n let last = false\n let open = false\n let params = []\n let brackets = []\n\n while (!this.tokenizer.endOfFile()) {\n token = this.tokenizer.nextToken()\n type = token[0]\n\n if (type === '(' || type === '[') {\n brackets.push(type === '(' ? ')' : ']')\n } else if (type === '{' && brackets.length > 0) {\n brackets.push('}')\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop()\n }\n\n if (brackets.length === 0) {\n if (type === ';') {\n node.source.end = this.getPosition(token[2])\n node.source.end.offset++\n this.semicolon = true\n break\n } else if (type === '{') {\n open = true\n break\n } else if (type === '}') {\n if (params.length > 0) {\n shift = params.length - 1\n prev = params[shift]\n while (prev && prev[0] === 'space') {\n prev = params[--shift]\n }\n if (prev) {\n node.source.end = this.getPosition(prev[3] || prev[2])\n node.source.end.offset++\n }\n }\n this.end(token)\n break\n } else {\n params.push(token)\n }\n } else {\n params.push(token)\n }\n\n if (this.tokenizer.endOfFile()) {\n last = true\n break\n }\n }\n\n node.raws.between = this.spacesAndCommentsFromEnd(params)\n if (params.length) {\n node.raws.afterName = this.spacesAndCommentsFromStart(params)\n this.raw(node, 'params', params)\n if (last) {\n token = params[params.length - 1]\n node.source.end = this.getPosition(token[3] || token[2])\n node.source.end.offset++\n this.spaces = node.raws.between\n node.raws.between = ''\n }\n } else {\n node.raws.afterName = ''\n node.params = ''\n }\n\n if (open) {\n node.nodes = []\n this.current = node\n }\n }\n\n checkMissedSemicolon(tokens) {\n let colon = this.colon(tokens)\n if (colon === false) return\n\n let founded = 0\n let token\n for (let j = colon - 1; j >= 0; j--) {\n token = tokens[j]\n if (token[0] !== 'space') {\n founded += 1\n if (founded === 2) break\n }\n }\n // If the token is a word, e.g. `!important`, `red` or any other valid property's value.\n // Then we need to return the colon after that word token. [3] is the \"end\" colon of that word.\n // And because we need it after that one we do +1 to get the next one.\n throw this.input.error(\n 'Missed semicolon',\n token[0] === 'word' ? token[3] + 1 : token[2]\n )\n }\n\n colon(tokens) {\n let brackets = 0\n let token, type, prev\n for (let [i, element] of tokens.entries()) {\n token = element\n type = token[0]\n\n if (type === '(') {\n brackets += 1\n }\n if (type === ')') {\n brackets -= 1\n }\n if (brackets === 0 && type === ':') {\n if (!prev) {\n this.doubleColon(token)\n } else if (prev[0] === 'word' && prev[1] === 'progid') {\n continue\n } else {\n return i\n }\n }\n\n prev = token\n }\n return false\n }\n\n comment(token) {\n let node = new Comment()\n this.init(node, token[2])\n node.source.end = this.getPosition(token[3] || token[2])\n node.source.end.offset++\n\n let text = token[1].slice(2, -2)\n if (/^\\s*$/.test(text)) {\n node.text = ''\n node.raws.left = text\n node.raws.right = ''\n } else {\n let match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/)\n node.text = match[2]\n node.raws.left = match[1]\n node.raws.right = match[3]\n }\n }\n\n createTokenizer() {\n this.tokenizer = tokenizer(this.input)\n }\n\n decl(tokens, customProperty) {\n let node = new Declaration()\n this.init(node, tokens[0][2])\n\n let last = tokens[tokens.length - 1]\n if (last[0] === ';') {\n this.semicolon = true\n tokens.pop()\n }\n\n node.source.end = this.getPosition(\n last[3] || last[2] || findLastWithPosition(tokens)\n )\n node.source.end.offset++\n\n while (tokens[0][0] !== 'word') {\n if (tokens.length === 1) this.unknownWord(tokens)\n node.raws.before += tokens.shift()[1]\n }\n node.source.start = this.getPosition(tokens[0][2])\n\n node.prop = ''\n while (tokens.length) {\n let type = tokens[0][0]\n if (type === ':' || type === 'space' || type === 'comment') {\n break\n }\n node.prop += tokens.shift()[1]\n }\n\n node.raws.between = ''\n\n let token\n while (tokens.length) {\n token = tokens.shift()\n\n if (token[0] === ':') {\n node.raws.between += token[1]\n break\n } else {\n if (token[0] === 'word' && /\\w/.test(token[1])) {\n this.unknownWord([token])\n }\n node.raws.between += token[1]\n }\n }\n\n if (node.prop[0] === '_' || node.prop[0] === '*') {\n node.raws.before += node.prop[0]\n node.prop = node.prop.slice(1)\n }\n\n let firstSpaces = []\n let next\n while (tokens.length) {\n next = tokens[0][0]\n if (next !== 'space' && next !== 'comment') break\n firstSpaces.push(tokens.shift())\n }\n\n this.precheckMissedSemicolon(tokens)\n\n for (let i = tokens.length - 1; i >= 0; i--) {\n token = tokens[i]\n if (token[1].toLowerCase() === '!important') {\n node.important = true\n let string = this.stringFrom(tokens, i)\n string = this.spacesFromEnd(tokens) + string\n if (string !== ' !important') node.raws.important = string\n break\n } else if (token[1].toLowerCase() === 'important') {\n let cache = tokens.slice(0)\n let str = ''\n for (let j = i; j > 0; j--) {\n let type = cache[j][0]\n if (str.trim().indexOf('!') === 0 && type !== 'space') {\n break\n }\n str = cache.pop()[1] + str\n }\n if (str.trim().indexOf('!') === 0) {\n node.important = true\n node.raws.important = str\n tokens = cache\n }\n }\n\n if (token[0] !== 'space' && token[0] !== 'comment') {\n break\n }\n }\n\n let hasWord = tokens.some(i => i[0] !== 'space' && i[0] !== 'comment')\n\n if (hasWord) {\n node.raws.between += firstSpaces.map(i => i[1]).join('')\n firstSpaces = []\n }\n this.raw(node, 'value', firstSpaces.concat(tokens), customProperty)\n\n if (node.value.includes(':') && !customProperty) {\n this.checkMissedSemicolon(tokens)\n }\n }\n\n doubleColon(token) {\n throw this.input.error(\n 'Double colon',\n { offset: token[2] },\n { offset: token[2] + token[1].length }\n )\n }\n\n emptyRule(token) {\n let node = new Rule()\n this.init(node, token[2])\n node.selector = ''\n node.raws.between = ''\n this.current = node\n }\n\n end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon\n }\n this.semicolon = false\n\n this.current.raws.after = (this.current.raws.after || '') + this.spaces\n this.spaces = ''\n\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2])\n this.current.source.end.offset++\n this.current = this.current.parent\n } else {\n this.unexpectedClose(token)\n }\n }\n\n endFile() {\n if (this.current.parent) this.unclosedBlock()\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon\n }\n this.current.raws.after = (this.current.raws.after || '') + this.spaces\n this.root.source.end = this.getPosition(this.tokenizer.position())\n }\n\n freeSemicolon(token) {\n this.spaces += token[1]\n if (this.current.nodes) {\n let prev = this.current.nodes[this.current.nodes.length - 1]\n if (prev && prev.type === 'rule' && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces\n this.spaces = ''\n }\n }\n }\n\n // Helpers\n\n getPosition(offset) {\n let pos = this.input.fromOffset(offset)\n return {\n column: pos.col,\n line: pos.line,\n offset\n }\n }\n\n init(node, offset) {\n this.current.push(node)\n node.source = {\n input: this.input,\n start: this.getPosition(offset)\n }\n node.raws.before = this.spaces\n this.spaces = ''\n if (node.type !== 'comment') this.semicolon = false\n }\n\n other(start) {\n let end = false\n let type = null\n let colon = false\n let bracket = null\n let brackets = []\n let customProperty = start[1].startsWith('--')\n\n let tokens = []\n let token = start\n while (token) {\n type = token[0]\n tokens.push(token)\n\n if (type === '(' || type === '[') {\n if (!bracket) bracket = token\n brackets.push(type === '(' ? ')' : ']')\n } else if (customProperty && colon && type === '{') {\n if (!bracket) bracket = token\n brackets.push('}')\n } else if (brackets.length === 0) {\n if (type === ';') {\n if (colon) {\n this.decl(tokens, customProperty)\n return\n } else {\n break\n }\n } else if (type === '{') {\n this.rule(tokens)\n return\n } else if (type === '}') {\n this.tokenizer.back(tokens.pop())\n end = true\n break\n } else if (type === ':') {\n colon = true\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop()\n if (brackets.length === 0) bracket = null\n }\n\n token = this.tokenizer.nextToken()\n }\n\n if (this.tokenizer.endOfFile()) end = true\n if (brackets.length > 0) this.unclosedBracket(bracket)\n\n if (end && colon) {\n if (!customProperty) {\n while (tokens.length) {\n token = tokens[tokens.length - 1][0]\n if (token !== 'space' && token !== 'comment') break\n this.tokenizer.back(tokens.pop())\n }\n }\n this.decl(tokens, customProperty)\n } else {\n this.unknownWord(tokens)\n }\n }\n\n parse() {\n let token\n while (!this.tokenizer.endOfFile()) {\n token = this.tokenizer.nextToken()\n\n switch (token[0]) {\n case 'space':\n this.spaces += token[1]\n break\n\n case ';':\n this.freeSemicolon(token)\n break\n\n case '}':\n this.end(token)\n break\n\n case 'comment':\n this.comment(token)\n break\n\n case 'at-word':\n this.atrule(token)\n break\n\n case '{':\n this.emptyRule(token)\n break\n\n default:\n this.other(token)\n break\n }\n }\n this.endFile()\n }\n\n precheckMissedSemicolon(/* tokens */) {\n // Hook for Safe Parser\n }\n\n raw(node, prop, tokens, customProperty) {\n let token, type\n let length = tokens.length\n let value = ''\n let clean = true\n let next, prev\n\n for (let i = 0; i < length; i += 1) {\n token = tokens[i]\n type = token[0]\n if (type === 'space' && i === length - 1 && !customProperty) {\n clean = false\n } else if (type === 'comment') {\n prev = tokens[i - 1] ? tokens[i - 1][0] : 'empty'\n next = tokens[i + 1] ? tokens[i + 1][0] : 'empty'\n if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {\n if (value.slice(-1) === ',') {\n clean = false\n } else {\n value += token[1]\n }\n } else {\n clean = false\n }\n } else {\n value += token[1]\n }\n }\n if (!clean) {\n let raw = tokens.reduce((all, i) => all + i[1], '')\n node.raws[prop] = { raw, value }\n }\n node[prop] = value\n }\n\n rule(tokens) {\n tokens.pop()\n\n let node = new Rule()\n this.init(node, tokens[0][2])\n\n node.raws.between = this.spacesAndCommentsFromEnd(tokens)\n this.raw(node, 'selector', tokens)\n this.current = node\n }\n\n spacesAndCommentsFromEnd(tokens) {\n let lastTokenType\n let spaces = ''\n while (tokens.length) {\n lastTokenType = tokens[tokens.length - 1][0]\n if (lastTokenType !== 'space' && lastTokenType !== 'comment') break\n spaces = tokens.pop()[1] + spaces\n }\n return spaces\n }\n\n // Errors\n\n spacesAndCommentsFromStart(tokens) {\n let next\n let spaces = ''\n while (tokens.length) {\n next = tokens[0][0]\n if (next !== 'space' && next !== 'comment') break\n spaces += tokens.shift()[1]\n }\n return spaces\n }\n\n spacesFromEnd(tokens) {\n let lastTokenType\n let spaces = ''\n while (tokens.length) {\n lastTokenType = tokens[tokens.length - 1][0]\n if (lastTokenType !== 'space') break\n spaces = tokens.pop()[1] + spaces\n }\n return spaces\n }\n\n stringFrom(tokens, from) {\n let result = ''\n for (let i = from; i < tokens.length; i++) {\n result += tokens[i][1]\n }\n tokens.splice(from, tokens.length - from)\n return result\n }\n\n unclosedBlock() {\n let pos = this.current.source.start\n throw this.input.error('Unclosed block', pos.line, pos.column)\n }\n\n unclosedBracket(bracket) {\n throw this.input.error(\n 'Unclosed bracket',\n { offset: bracket[2] },\n { offset: bracket[2] + 1 }\n )\n }\n\n unexpectedClose(token) {\n throw this.input.error(\n 'Unexpected }',\n { offset: token[2] },\n { offset: token[2] + 1 }\n )\n }\n\n unknownWord(tokens) {\n throw this.input.error(\n 'Unknown word',\n { offset: tokens[0][2] },\n { offset: tokens[0][2] + tokens[0][1].length }\n )\n }\n\n unnamedAtrule(node, token) {\n throw this.input.error(\n 'At-rule without name',\n { offset: token[2] },\n { offset: token[2] + token[1].length }\n )\n }\n}\n\nmodule.exports = Parser\n","'use strict'\n\nlet CssSyntaxError = require('./css-syntax-error')\nlet Declaration = require('./declaration')\nlet LazyResult = require('./lazy-result')\nlet Container = require('./container')\nlet Processor = require('./processor')\nlet stringify = require('./stringify')\nlet fromJSON = require('./fromJSON')\nlet Document = require('./document')\nlet Warning = require('./warning')\nlet Comment = require('./comment')\nlet AtRule = require('./at-rule')\nlet Result = require('./result.js')\nlet Input = require('./input')\nlet parse = require('./parse')\nlet list = require('./list')\nlet Rule = require('./rule')\nlet Root = require('./root')\nlet Node = require('./node')\n\nfunction postcss(...plugins) {\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0]\n }\n return new Processor(plugins)\n}\n\npostcss.plugin = function plugin(name, initializer) {\n let warningPrinted = false\n function creator(...args) {\n // eslint-disable-next-line no-console\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true\n // eslint-disable-next-line no-console\n console.warn(\n name +\n ': postcss.plugin was deprecated. Migration guide:\\n' +\n 'https://evilmartians.com/chronicles/postcss-8-plugin-migration'\n )\n if (process.env.LANG && process.env.LANG.startsWith('cn')) {\n /* c8 ignore next 7 */\n // eslint-disable-next-line no-console\n console.warn(\n name +\n ': é‡Œé¢ postcss.plugin 被弃用. è¿ç§»æŒ‡å—:\\n' +\n 'https://www.w3ctech.com/topic/2226'\n )\n }\n }\n let transformer = initializer(...args)\n transformer.postcssPlugin = name\n transformer.postcssVersion = new Processor().version\n return transformer\n }\n\n let cache\n Object.defineProperty(creator, 'postcss', {\n get() {\n if (!cache) cache = creator()\n return cache\n }\n })\n\n creator.process = function (css, processOpts, pluginOpts) {\n return postcss([creator(pluginOpts)]).process(css, processOpts)\n }\n\n return creator\n}\n\npostcss.stringify = stringify\npostcss.parse = parse\npostcss.fromJSON = fromJSON\npostcss.list = list\n\npostcss.comment = defaults => new Comment(defaults)\npostcss.atRule = defaults => new AtRule(defaults)\npostcss.decl = defaults => new Declaration(defaults)\npostcss.rule = defaults => new Rule(defaults)\npostcss.root = defaults => new Root(defaults)\npostcss.document = defaults => new Document(defaults)\n\npostcss.CssSyntaxError = CssSyntaxError\npostcss.Declaration = Declaration\npostcss.Container = Container\npostcss.Processor = Processor\npostcss.Document = Document\npostcss.Comment = Comment\npostcss.Warning = Warning\npostcss.AtRule = AtRule\npostcss.Result = Result\npostcss.Input = Input\npostcss.Rule = Rule\npostcss.Root = Root\npostcss.Node = Node\n\nLazyResult.registerPostcss(postcss)\n\nmodule.exports = postcss\npostcss.default = postcss\n","'use strict'\n\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { existsSync, readFileSync } = require('fs')\nlet { dirname, join } = require('path')\n\nfunction fromBase64(str) {\n if (Buffer) {\n return Buffer.from(str, 'base64').toString()\n } else {\n /* c8 ignore next 2 */\n return window.atob(str)\n }\n}\n\nclass PreviousMap {\n constructor(css, opts) {\n if (opts.map === false) return\n this.loadAnnotation(css)\n this.inline = this.startWith(this.annotation, 'data:')\n\n let prev = opts.map ? opts.map.prev : undefined\n let text = this.loadMap(opts.from, prev)\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from\n }\n if (this.mapFile) this.root = dirname(this.mapFile)\n if (text) this.text = text\n }\n\n consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer(this.text)\n }\n return this.consumerCache\n }\n\n decodeInline(text) {\n let baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/\n let baseUri = /^data:application\\/json;base64,/\n let charsetUri = /^data:application\\/json;charset=utf-?8,/\n let uri = /^data:application\\/json,/\n\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length))\n }\n\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64(text.substr(RegExp.lastMatch.length))\n }\n\n let encoding = text.match(/data:application\\/json;([^,]+),/)[1]\n throw new Error('Unsupported source map encoding ' + encoding)\n }\n\n getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, '').trim()\n }\n\n isMap(map) {\n if (typeof map !== 'object') return false\n return (\n typeof map.mappings === 'string' ||\n typeof map._mappings === 'string' ||\n Array.isArray(map.sections)\n )\n }\n\n loadAnnotation(css) {\n let comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm)\n if (!comments) return\n\n // sourceMappingURLs from comments, strings, etc.\n let start = css.lastIndexOf(comments.pop())\n let end = css.indexOf('*/', start)\n\n if (start > -1 && end > -1) {\n // Locate the last sourceMappingURL to avoid pickin\n this.annotation = this.getAnnotationURL(css.substring(start, end))\n }\n }\n\n loadFile(path) {\n this.root = dirname(path)\n if (existsSync(path)) {\n this.mapFile = path\n return readFileSync(path, 'utf-8').toString().trim()\n }\n }\n\n loadMap(file, prev) {\n if (prev === false) return false\n\n if (prev) {\n if (typeof prev === 'string') {\n return prev\n } else if (typeof prev === 'function') {\n let prevPath = prev(file)\n if (prevPath) {\n let map = this.loadFile(prevPath)\n if (!map) {\n throw new Error(\n 'Unable to load previous source map: ' + prevPath.toString()\n )\n }\n return map\n }\n } else if (prev instanceof SourceMapConsumer) {\n return SourceMapGenerator.fromSourceMap(prev).toString()\n } else if (prev instanceof SourceMapGenerator) {\n return prev.toString()\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev)\n } else {\n throw new Error(\n 'Unsupported previous source map format: ' + prev.toString()\n )\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation)\n } else if (this.annotation) {\n let map = this.annotation\n if (file) map = join(dirname(file), map)\n return this.loadFile(map)\n }\n }\n\n startWith(string, start) {\n if (!string) return false\n return string.substr(0, start.length) === start\n }\n\n withContent() {\n return !!(\n this.consumer().sourcesContent &&\n this.consumer().sourcesContent.length > 0\n )\n }\n}\n\nmodule.exports = PreviousMap\nPreviousMap.default = PreviousMap\n","'use strict'\n\nlet NoWorkResult = require('./no-work-result')\nlet LazyResult = require('./lazy-result')\nlet Document = require('./document')\nlet Root = require('./root')\n\nclass Processor {\n constructor(plugins = []) {\n this.version = '8.4.32'\n this.plugins = this.normalize(plugins)\n }\n\n normalize(plugins) {\n let normalized = []\n for (let i of plugins) {\n if (i.postcss === true) {\n i = i()\n } else if (i.postcss) {\n i = i.postcss\n }\n\n if (typeof i === 'object' && Array.isArray(i.plugins)) {\n normalized = normalized.concat(i.plugins)\n } else if (typeof i === 'object' && i.postcssPlugin) {\n normalized.push(i)\n } else if (typeof i === 'function') {\n normalized.push(i)\n } else if (typeof i === 'object' && (i.parse || i.stringify)) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'PostCSS syntaxes cannot be used as plugins. Instead, please use ' +\n 'one of the syntax/parser/stringifier options as outlined ' +\n 'in your PostCSS runner documentation.'\n )\n }\n } else {\n throw new Error(i + ' is not a PostCSS plugin')\n }\n }\n return normalized\n }\n\n process(css, opts = {}) {\n if (\n this.plugins.length === 0 &&\n typeof opts.parser === 'undefined' &&\n typeof opts.stringifier === 'undefined' &&\n typeof opts.syntax === 'undefined'\n ) {\n return new NoWorkResult(this, css, opts)\n } else {\n return new LazyResult(this, css, opts)\n }\n }\n\n use(plugin) {\n this.plugins = this.plugins.concat(this.normalize([plugin]))\n return this\n }\n}\n\nmodule.exports = Processor\nProcessor.default = Processor\n\nRoot.registerProcessor(Processor)\nDocument.registerProcessor(Processor)\n","'use strict'\n\nlet Warning = require('./warning')\n\nclass Result {\n constructor(processor, root, opts) {\n this.processor = processor\n this.messages = []\n this.root = root\n this.opts = opts\n this.css = undefined\n this.map = undefined\n }\n\n toString() {\n return this.css\n }\n\n warn(text, opts = {}) {\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin\n }\n }\n\n let warning = new Warning(text, opts)\n this.messages.push(warning)\n\n return warning\n }\n\n warnings() {\n return this.messages.filter(i => i.type === 'warning')\n }\n\n get content() {\n return this.css\n }\n}\n\nmodule.exports = Result\nResult.default = Result\n","'use strict'\n\nlet Container = require('./container')\n\nlet LazyResult, Processor\n\nclass Root extends Container {\n constructor(defaults) {\n super(defaults)\n this.type = 'root'\n if (!this.nodes) this.nodes = []\n }\n\n normalize(child, sample, type) {\n let nodes = super.normalize(child)\n\n if (sample) {\n if (type === 'prepend') {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before\n } else {\n delete sample.raws.before\n }\n } else if (this.first !== sample) {\n for (let node of nodes) {\n node.raws.before = sample.raws.before\n }\n }\n }\n\n return nodes\n }\n\n removeChild(child, ignore) {\n let index = this.index(child)\n\n if (!ignore && index === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index].raws.before\n }\n\n return super.removeChild(child)\n }\n\n toResult(opts = {}) {\n let lazy = new LazyResult(new Processor(), this, opts)\n return lazy.stringify()\n }\n}\n\nRoot.registerLazyResult = dependant => {\n LazyResult = dependant\n}\n\nRoot.registerProcessor = dependant => {\n Processor = dependant\n}\n\nmodule.exports = Root\nRoot.default = Root\n\nContainer.registerRoot(Root)\n","'use strict'\n\nlet Container = require('./container')\nlet list = require('./list')\n\nclass Rule extends Container {\n constructor(defaults) {\n super(defaults)\n this.type = 'rule'\n if (!this.nodes) this.nodes = []\n }\n\n get selectors() {\n return list.comma(this.selector)\n }\n\n set selectors(values) {\n let match = this.selector ? this.selector.match(/,\\s*/) : null\n let sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen')\n this.selector = values.join(sep)\n }\n}\n\nmodule.exports = Rule\nRule.default = Rule\n\nContainer.registerRule(Rule)\n","'use strict'\n\nconst DEFAULT_RAW = {\n after: '\\n',\n beforeClose: '\\n',\n beforeComment: '\\n',\n beforeDecl: '\\n',\n beforeOpen: ' ',\n beforeRule: '\\n',\n colon: ': ',\n commentLeft: ' ',\n commentRight: ' ',\n emptyBody: '',\n indent: ' ',\n semicolon: false\n}\n\nfunction capitalize(str) {\n return str[0].toUpperCase() + str.slice(1)\n}\n\nclass Stringifier {\n constructor(builder) {\n this.builder = builder\n }\n\n atrule(node, semicolon) {\n let name = '@' + node.name\n let params = node.params ? this.rawValue(node, 'params') : ''\n\n if (typeof node.raws.afterName !== 'undefined') {\n name += node.raws.afterName\n } else if (params) {\n name += ' '\n }\n\n if (node.nodes) {\n this.block(node, name + params)\n } else {\n let end = (node.raws.between || '') + (semicolon ? ';' : '')\n this.builder(name + params + end, node)\n }\n }\n\n beforeAfter(node, detect) {\n let value\n if (node.type === 'decl') {\n value = this.raw(node, null, 'beforeDecl')\n } else if (node.type === 'comment') {\n value = this.raw(node, null, 'beforeComment')\n } else if (detect === 'before') {\n value = this.raw(node, null, 'beforeRule')\n } else {\n value = this.raw(node, null, 'beforeClose')\n }\n\n let buf = node.parent\n let depth = 0\n while (buf && buf.type !== 'root') {\n depth += 1\n buf = buf.parent\n }\n\n if (value.includes('\\n')) {\n let indent = this.raw(node, null, 'indent')\n if (indent.length) {\n for (let step = 0; step < depth; step++) value += indent\n }\n }\n\n return value\n }\n\n block(node, start) {\n let between = this.raw(node, 'between', 'beforeOpen')\n this.builder(start + between + '{', node, 'start')\n\n let after\n if (node.nodes && node.nodes.length) {\n this.body(node)\n after = this.raw(node, 'after')\n } else {\n after = this.raw(node, 'after', 'emptyBody')\n }\n\n if (after) this.builder(after)\n this.builder('}', node, 'end')\n }\n\n body(node) {\n let last = node.nodes.length - 1\n while (last > 0) {\n if (node.nodes[last].type !== 'comment') break\n last -= 1\n }\n\n let semicolon = this.raw(node, 'semicolon')\n for (let i = 0; i < node.nodes.length; i++) {\n let child = node.nodes[i]\n let before = this.raw(child, 'before')\n if (before) this.builder(before)\n this.stringify(child, last !== i || semicolon)\n }\n }\n\n comment(node) {\n let left = this.raw(node, 'left', 'commentLeft')\n let right = this.raw(node, 'right', 'commentRight')\n this.builder('/*' + left + node.text + right + '*/', node)\n }\n\n decl(node, semicolon) {\n let between = this.raw(node, 'between', 'colon')\n let string = node.prop + between + this.rawValue(node, 'value')\n\n if (node.important) {\n string += node.raws.important || ' !important'\n }\n\n if (semicolon) string += ';'\n this.builder(string, node)\n }\n\n document(node) {\n this.body(node)\n }\n\n raw(node, own, detect) {\n let value\n if (!detect) detect = own\n\n // Already had\n if (own) {\n value = node.raws[own]\n if (typeof value !== 'undefined') return value\n }\n\n let parent = node.parent\n\n if (detect === 'before') {\n // Hack for first rule in CSS\n if (!parent || (parent.type === 'root' && parent.first === node)) {\n return ''\n }\n\n // `root` nodes in `document` should use only their own raws\n if (parent && parent.type === 'document') {\n return ''\n }\n }\n\n // Floating child without parent\n if (!parent) return DEFAULT_RAW[detect]\n\n // Detect style by other nodes\n let root = node.root()\n if (!root.rawCache) root.rawCache = {}\n if (typeof root.rawCache[detect] !== 'undefined') {\n return root.rawCache[detect]\n }\n\n if (detect === 'before' || detect === 'after') {\n return this.beforeAfter(node, detect)\n } else {\n let method = 'raw' + capitalize(detect)\n if (this[method]) {\n value = this[method](root, node)\n } else {\n root.walk(i => {\n value = i.raws[own]\n if (typeof value !== 'undefined') return false\n })\n }\n }\n\n if (typeof value === 'undefined') value = DEFAULT_RAW[detect]\n\n root.rawCache[detect] = value\n return value\n }\n\n rawBeforeClose(root) {\n let value\n root.walk(i => {\n if (i.nodes && i.nodes.length > 0) {\n if (typeof i.raws.after !== 'undefined') {\n value = i.raws.after\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n }\n })\n if (value) value = value.replace(/\\S/g, '')\n return value\n }\n\n rawBeforeComment(root, node) {\n let value\n root.walkComments(i => {\n if (typeof i.raws.before !== 'undefined') {\n value = i.raws.before\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n })\n if (typeof value === 'undefined') {\n value = this.raw(node, null, 'beforeDecl')\n } else if (value) {\n value = value.replace(/\\S/g, '')\n }\n return value\n }\n\n rawBeforeDecl(root, node) {\n let value\n root.walkDecls(i => {\n if (typeof i.raws.before !== 'undefined') {\n value = i.raws.before\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n })\n if (typeof value === 'undefined') {\n value = this.raw(node, null, 'beforeRule')\n } else if (value) {\n value = value.replace(/\\S/g, '')\n }\n return value\n }\n\n rawBeforeOpen(root) {\n let value\n root.walk(i => {\n if (i.type !== 'decl') {\n value = i.raws.between\n if (typeof value !== 'undefined') return false\n }\n })\n return value\n }\n\n rawBeforeRule(root) {\n let value\n root.walk(i => {\n if (i.nodes && (i.parent !== root || root.first !== i)) {\n if (typeof i.raws.before !== 'undefined') {\n value = i.raws.before\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n }\n })\n if (value) value = value.replace(/\\S/g, '')\n return value\n }\n\n rawColon(root) {\n let value\n root.walkDecls(i => {\n if (typeof i.raws.between !== 'undefined') {\n value = i.raws.between.replace(/[^\\s:]/g, '')\n return false\n }\n })\n return value\n }\n\n rawEmptyBody(root) {\n let value\n root.walk(i => {\n if (i.nodes && i.nodes.length === 0) {\n value = i.raws.after\n if (typeof value !== 'undefined') return false\n }\n })\n return value\n }\n\n rawIndent(root) {\n if (root.raws.indent) return root.raws.indent\n let value\n root.walk(i => {\n let p = i.parent\n if (p && p !== root && p.parent && p.parent === root) {\n if (typeof i.raws.before !== 'undefined') {\n let parts = i.raws.before.split('\\n')\n value = parts[parts.length - 1]\n value = value.replace(/\\S/g, '')\n return false\n }\n }\n })\n return value\n }\n\n rawSemicolon(root) {\n let value\n root.walk(i => {\n if (i.nodes && i.nodes.length && i.last.type === 'decl') {\n value = i.raws.semicolon\n if (typeof value !== 'undefined') return false\n }\n })\n return value\n }\n\n rawValue(node, prop) {\n let value = node[prop]\n let raw = node.raws[prop]\n if (raw && raw.value === value) {\n return raw.raw\n }\n\n return value\n }\n\n root(node) {\n this.body(node)\n if (node.raws.after) this.builder(node.raws.after)\n }\n\n rule(node) {\n this.block(node, this.rawValue(node, 'selector'))\n if (node.raws.ownSemicolon) {\n this.builder(node.raws.ownSemicolon, node, 'end')\n }\n }\n\n stringify(node, semicolon) {\n /* c8 ignore start */\n if (!this[node.type]) {\n throw new Error(\n 'Unknown AST node type ' +\n node.type +\n '. ' +\n 'Maybe you need to change PostCSS stringifier.'\n )\n }\n /* c8 ignore stop */\n this[node.type](node, semicolon)\n }\n}\n\nmodule.exports = Stringifier\nStringifier.default = Stringifier\n","'use strict'\n\nlet Stringifier = require('./stringifier')\n\nfunction stringify(node, builder) {\n let str = new Stringifier(builder)\n str.stringify(node)\n}\n\nmodule.exports = stringify\nstringify.default = stringify\n","'use strict'\n\nmodule.exports.isClean = Symbol('isClean')\n\nmodule.exports.my = Symbol('my')\n","'use strict'\n\nconst SINGLE_QUOTE = \"'\".charCodeAt(0)\nconst DOUBLE_QUOTE = '\"'.charCodeAt(0)\nconst BACKSLASH = '\\\\'.charCodeAt(0)\nconst SLASH = '/'.charCodeAt(0)\nconst NEWLINE = '\\n'.charCodeAt(0)\nconst SPACE = ' '.charCodeAt(0)\nconst FEED = '\\f'.charCodeAt(0)\nconst TAB = '\\t'.charCodeAt(0)\nconst CR = '\\r'.charCodeAt(0)\nconst OPEN_SQUARE = '['.charCodeAt(0)\nconst CLOSE_SQUARE = ']'.charCodeAt(0)\nconst OPEN_PARENTHESES = '('.charCodeAt(0)\nconst CLOSE_PARENTHESES = ')'.charCodeAt(0)\nconst OPEN_CURLY = '{'.charCodeAt(0)\nconst CLOSE_CURLY = '}'.charCodeAt(0)\nconst SEMICOLON = ';'.charCodeAt(0)\nconst ASTERISK = '*'.charCodeAt(0)\nconst COLON = ':'.charCodeAt(0)\nconst AT = '@'.charCodeAt(0)\n\nconst RE_AT_END = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g\nconst RE_WORD_END = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g\nconst RE_BAD_BRACKET = /.[\\r\\n\"'(/\\\\]/\nconst RE_HEX_ESCAPE = /[\\da-f]/i\n\nmodule.exports = function tokenizer(input, options = {}) {\n let css = input.css.valueOf()\n let ignore = options.ignoreErrors\n\n let code, next, quote, content, escape\n let escaped, escapePos, prev, n, currentToken\n\n let length = css.length\n let pos = 0\n let buffer = []\n let returned = []\n\n function position() {\n return pos\n }\n\n function unclosed(what) {\n throw input.error('Unclosed ' + what, pos)\n }\n\n function endOfFile() {\n return returned.length === 0 && pos >= length\n }\n\n function nextToken(opts) {\n if (returned.length) return returned.pop()\n if (pos >= length) return\n\n let ignoreUnclosed = opts ? opts.ignoreUnclosed : false\n\n code = css.charCodeAt(pos)\n\n switch (code) {\n case NEWLINE:\n case SPACE:\n case TAB:\n case CR:\n case FEED: {\n next = pos\n do {\n next += 1\n code = css.charCodeAt(next)\n } while (\n code === SPACE ||\n code === NEWLINE ||\n code === TAB ||\n code === CR ||\n code === FEED\n )\n\n currentToken = ['space', css.slice(pos, next)]\n pos = next - 1\n break\n }\n\n case OPEN_SQUARE:\n case CLOSE_SQUARE:\n case OPEN_CURLY:\n case CLOSE_CURLY:\n case COLON:\n case SEMICOLON:\n case CLOSE_PARENTHESES: {\n let controlChar = String.fromCharCode(code)\n currentToken = [controlChar, controlChar, pos]\n break\n }\n\n case OPEN_PARENTHESES: {\n prev = buffer.length ? buffer.pop()[1] : ''\n n = css.charCodeAt(pos + 1)\n if (\n prev === 'url' &&\n n !== SINGLE_QUOTE &&\n n !== DOUBLE_QUOTE &&\n n !== SPACE &&\n n !== NEWLINE &&\n n !== TAB &&\n n !== FEED &&\n n !== CR\n ) {\n next = pos\n do {\n escaped = false\n next = css.indexOf(')', next + 1)\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos\n break\n } else {\n unclosed('bracket')\n }\n }\n escapePos = next\n while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n escapePos -= 1\n escaped = !escaped\n }\n } while (escaped)\n\n currentToken = ['brackets', css.slice(pos, next + 1), pos, next]\n\n pos = next\n } else {\n next = css.indexOf(')', pos + 1)\n content = css.slice(pos, next + 1)\n\n if (next === -1 || RE_BAD_BRACKET.test(content)) {\n currentToken = ['(', '(', pos]\n } else {\n currentToken = ['brackets', content, pos, next]\n pos = next\n }\n }\n\n break\n }\n\n case SINGLE_QUOTE:\n case DOUBLE_QUOTE: {\n quote = code === SINGLE_QUOTE ? \"'\" : '\"'\n next = pos\n do {\n escaped = false\n next = css.indexOf(quote, next + 1)\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1\n break\n } else {\n unclosed('string')\n }\n }\n escapePos = next\n while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n escapePos -= 1\n escaped = !escaped\n }\n } while (escaped)\n\n currentToken = ['string', css.slice(pos, next + 1), pos, next]\n pos = next\n break\n }\n\n case AT: {\n RE_AT_END.lastIndex = pos + 1\n RE_AT_END.test(css)\n if (RE_AT_END.lastIndex === 0) {\n next = css.length - 1\n } else {\n next = RE_AT_END.lastIndex - 2\n }\n\n currentToken = ['at-word', css.slice(pos, next + 1), pos, next]\n\n pos = next\n break\n }\n\n case BACKSLASH: {\n next = pos\n escape = true\n while (css.charCodeAt(next + 1) === BACKSLASH) {\n next += 1\n escape = !escape\n }\n code = css.charCodeAt(next + 1)\n if (\n escape &&\n code !== SLASH &&\n code !== SPACE &&\n code !== NEWLINE &&\n code !== TAB &&\n code !== CR &&\n code !== FEED\n ) {\n next += 1\n if (RE_HEX_ESCAPE.test(css.charAt(next))) {\n while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {\n next += 1\n }\n if (css.charCodeAt(next + 1) === SPACE) {\n next += 1\n }\n }\n }\n\n currentToken = ['word', css.slice(pos, next + 1), pos, next]\n\n pos = next\n break\n }\n\n default: {\n if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {\n next = css.indexOf('*/', pos + 2) + 1\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length\n } else {\n unclosed('comment')\n }\n }\n\n currentToken = ['comment', css.slice(pos, next + 1), pos, next]\n pos = next\n } else {\n RE_WORD_END.lastIndex = pos + 1\n RE_WORD_END.test(css)\n if (RE_WORD_END.lastIndex === 0) {\n next = css.length - 1\n } else {\n next = RE_WORD_END.lastIndex - 2\n }\n\n currentToken = ['word', css.slice(pos, next + 1), pos, next]\n buffer.push(currentToken)\n pos = next\n }\n\n break\n }\n }\n\n pos++\n return currentToken\n }\n\n function back(token) {\n returned.push(token)\n }\n\n return {\n back,\n endOfFile,\n nextToken,\n position\n }\n}\n","/* eslint-disable no-console */\n'use strict'\n\nlet printed = {}\n\nmodule.exports = function warnOnce(message) {\n if (printed[message]) return\n printed[message] = true\n\n if (typeof console !== 'undefined' && console.warn) {\n console.warn(message)\n }\n}\n","'use strict'\n\nclass Warning {\n constructor(text, opts = {}) {\n this.type = 'warning'\n this.text = text\n\n if (opts.node && opts.node.source) {\n let range = opts.node.rangeBy(opts)\n this.line = range.start.line\n this.column = range.start.column\n this.endLine = range.end.line\n this.endColumn = range.end.column\n }\n\n for (let opt in opts) this[opt] = opts[opt]\n }\n\n toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message\n }\n\n if (this.plugin) {\n return this.plugin + ': ' + this.text\n }\n\n return this.text\n }\n}\n\nmodule.exports = Warning\nWarning.default = Warning\n","var div = null\nvar prefixes = [ 'Webkit', 'Moz', 'O', 'ms' ]\n\nmodule.exports = function prefixStyle (prop) {\n // re-use a dummy div\n if (!div) {\n div = document.createElement('div')\n }\n\n var style = div.style\n\n // prop exists without prefix\n if (prop in style) {\n return prop\n }\n\n // borderRadius -> BorderRadius\n var titleCase = prop.charAt(0).toUpperCase() + prop.slice(1)\n\n // find the vendor-prefixed prop\n for (var i = prefixes.length; i >= 0; i--) {\n var name = prefixes[i] + titleCase\n // e.g. WebkitBorderRadius or webkitBorderRadius\n if (name in style) {\n return name\n }\n }\n\n return false\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","var now = require('performance-now')\n , root = typeof window === 'undefined' ? global : window\n , vendors = ['moz', 'webkit']\n , suffix = 'AnimationFrame'\n , raf = root['request' + suffix]\n , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n raf = root[vendors[i] + 'Request' + suffix]\n caf = root[vendors[i] + 'Cancel' + suffix]\n || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n var last = 0\n , id = 0\n , queue = []\n , frameDuration = 1000 / 60\n\n raf = function(callback) {\n if(queue.length === 0) {\n var _now = now()\n , next = Math.max(0, frameDuration - (_now - last))\n last = next + _now\n setTimeout(function() {\n var cp = queue.slice(0)\n // Clear queue here to prevent\n // callbacks from appending listeners\n // to the current frame's queue\n queue.length = 0\n for(var i = 0; i < cp.length; i++) {\n if(!cp[i].cancelled) {\n try{\n cp[i].callback(last)\n } catch(e) {\n setTimeout(function() { throw e }, 0)\n }\n }\n }\n }, Math.round(next))\n }\n queue.push({\n handle: ++id,\n callback: callback,\n cancelled: false\n })\n return id\n }\n\n caf = function(handle) {\n for(var i = 0; i < queue.length; i++) {\n if(queue[i].handle === handle) {\n queue[i].cancelled = true\n }\n }\n }\n}\n\nmodule.exports = function(fn) {\n // Wrap in a new function to prevent\n // `cancel` potentially being assigned\n // to the native rAF function\n return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function(object) {\n if (!object) {\n object = root;\n }\n object.requestAnimationFrame = raf\n object.cancelAnimationFrame = caf\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.renderViewDefault = renderViewDefault;\nexports.renderTrackHorizontalDefault = renderTrackHorizontalDefault;\nexports.renderTrackVerticalDefault = renderTrackVerticalDefault;\nexports.renderThumbHorizontalDefault = renderThumbHorizontalDefault;\nexports.renderThumbVerticalDefault = renderThumbVerticalDefault;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\n/* eslint-disable react/prop-types */\n\nfunction renderViewDefault(props) {\n return _react2[\"default\"].createElement('div', props);\n}\n\nfunction renderTrackHorizontalDefault(_ref) {\n var style = _ref.style,\n props = _objectWithoutProperties(_ref, ['style']);\n\n var finalStyle = _extends({}, style, {\n right: 2,\n bottom: 2,\n left: 2,\n borderRadius: 3\n });\n return _react2[\"default\"].createElement('div', _extends({ style: finalStyle }, props));\n}\n\nfunction renderTrackVerticalDefault(_ref2) {\n var style = _ref2.style,\n props = _objectWithoutProperties(_ref2, ['style']);\n\n var finalStyle = _extends({}, style, {\n right: 2,\n bottom: 2,\n top: 2,\n borderRadius: 3\n });\n return _react2[\"default\"].createElement('div', _extends({ style: finalStyle }, props));\n}\n\nfunction renderThumbHorizontalDefault(_ref3) {\n var style = _ref3.style,\n props = _objectWithoutProperties(_ref3, ['style']);\n\n var finalStyle = _extends({}, style, {\n cursor: 'pointer',\n borderRadius: 'inherit',\n backgroundColor: 'rgba(0,0,0,.2)'\n });\n return _react2[\"default\"].createElement('div', _extends({ style: finalStyle }, props));\n}\n\nfunction renderThumbVerticalDefault(_ref4) {\n var style = _ref4.style,\n props = _objectWithoutProperties(_ref4, ['style']);\n\n var finalStyle = _extends({}, style, {\n cursor: 'pointer',\n borderRadius: 'inherit',\n backgroundColor: 'rgba(0,0,0,.2)'\n });\n return _react2[\"default\"].createElement('div', _extends({ style: finalStyle }, props));\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _raf2 = require('raf');\n\nvar _raf3 = _interopRequireDefault(_raf2);\n\nvar _domCss = require('dom-css');\n\nvar _domCss2 = _interopRequireDefault(_domCss);\n\nvar _react = require('react');\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _isString = require('../utils/isString');\n\nvar _isString2 = _interopRequireDefault(_isString);\n\nvar _getScrollbarWidth = require('../utils/getScrollbarWidth');\n\nvar _getScrollbarWidth2 = _interopRequireDefault(_getScrollbarWidth);\n\nvar _returnFalse = require('../utils/returnFalse');\n\nvar _returnFalse2 = _interopRequireDefault(_returnFalse);\n\nvar _getInnerWidth = require('../utils/getInnerWidth');\n\nvar _getInnerWidth2 = _interopRequireDefault(_getInnerWidth);\n\nvar _getInnerHeight = require('../utils/getInnerHeight');\n\nvar _getInnerHeight2 = _interopRequireDefault(_getInnerHeight);\n\nvar _styles = require('./styles');\n\nvar _defaultRenderElements = require('./defaultRenderElements');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Scrollbars = function (_Component) {\n _inherits(Scrollbars, _Component);\n\n function Scrollbars(props) {\n var _ref;\n\n _classCallCheck(this, Scrollbars);\n\n for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n\n var _this = _possibleConstructorReturn(this, (_ref = Scrollbars.__proto__ || Object.getPrototypeOf(Scrollbars)).call.apply(_ref, [this, props].concat(rest)));\n\n _this.getScrollLeft = _this.getScrollLeft.bind(_this);\n _this.getScrollTop = _this.getScrollTop.bind(_this);\n _this.getScrollWidth = _this.getScrollWidth.bind(_this);\n _this.getScrollHeight = _this.getScrollHeight.bind(_this);\n _this.getClientWidth = _this.getClientWidth.bind(_this);\n _this.getClientHeight = _this.getClientHeight.bind(_this);\n _this.getValues = _this.getValues.bind(_this);\n _this.getThumbHorizontalWidth = _this.getThumbHorizontalWidth.bind(_this);\n _this.getThumbVerticalHeight = _this.getThumbVerticalHeight.bind(_this);\n _this.getScrollLeftForOffset = _this.getScrollLeftForOffset.bind(_this);\n _this.getScrollTopForOffset = _this.getScrollTopForOffset.bind(_this);\n\n _this.scrollLeft = _this.scrollLeft.bind(_this);\n _this.scrollTop = _this.scrollTop.bind(_this);\n _this.scrollToLeft = _this.scrollToLeft.bind(_this);\n _this.scrollToTop = _this.scrollToTop.bind(_this);\n _this.scrollToRight = _this.scrollToRight.bind(_this);\n _this.scrollToBottom = _this.scrollToBottom.bind(_this);\n\n _this.handleTrackMouseEnter = _this.handleTrackMouseEnter.bind(_this);\n _this.handleTrackMouseLeave = _this.handleTrackMouseLeave.bind(_this);\n _this.handleHorizontalTrackMouseDown = _this.handleHorizontalTrackMouseDown.bind(_this);\n _this.handleVerticalTrackMouseDown = _this.handleVerticalTrackMouseDown.bind(_this);\n _this.handleHorizontalThumbMouseDown = _this.handleHorizontalThumbMouseDown.bind(_this);\n _this.handleVerticalThumbMouseDown = _this.handleVerticalThumbMouseDown.bind(_this);\n _this.handleWindowResize = _this.handleWindowResize.bind(_this);\n _this.handleScroll = _this.handleScroll.bind(_this);\n _this.handleDrag = _this.handleDrag.bind(_this);\n _this.handleDragEnd = _this.handleDragEnd.bind(_this);\n\n _this.state = {\n didMountUniversal: false\n };\n return _this;\n }\n\n _createClass(Scrollbars, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.addListeners();\n this.update();\n this.componentDidMountUniversal();\n }\n }, {\n key: 'componentDidMountUniversal',\n value: function componentDidMountUniversal() {\n // eslint-disable-line react/sort-comp\n var universal = this.props.universal;\n\n if (!universal) return;\n this.setState({ didMountUniversal: true });\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate() {\n this.update();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.removeListeners();\n (0, _raf2.cancel)(this.requestFrame);\n clearTimeout(this.hideTracksTimeout);\n clearInterval(this.detectScrollingInterval);\n }\n }, {\n key: 'getScrollLeft',\n value: function getScrollLeft() {\n if (!this.view) return 0;\n return this.view.scrollLeft;\n }\n }, {\n key: 'getScrollTop',\n value: function getScrollTop() {\n if (!this.view) return 0;\n return this.view.scrollTop;\n }\n }, {\n key: 'getScrollWidth',\n value: function getScrollWidth() {\n if (!this.view) return 0;\n return this.view.scrollWidth;\n }\n }, {\n key: 'getScrollHeight',\n value: function getScrollHeight() {\n if (!this.view) return 0;\n return this.view.scrollHeight;\n }\n }, {\n key: 'getClientWidth',\n value: function getClientWidth() {\n if (!this.view) return 0;\n return this.view.clientWidth;\n }\n }, {\n key: 'getClientHeight',\n value: function getClientHeight() {\n if (!this.view) return 0;\n return this.view.clientHeight;\n }\n }, {\n key: 'getValues',\n value: function getValues() {\n var _ref2 = this.view || {},\n _ref2$scrollLeft = _ref2.scrollLeft,\n scrollLeft = _ref2$scrollLeft === undefined ? 0 : _ref2$scrollLeft,\n _ref2$scrollTop = _ref2.scrollTop,\n scrollTop = _ref2$scrollTop === undefined ? 0 : _ref2$scrollTop,\n _ref2$scrollWidth = _ref2.scrollWidth,\n scrollWidth = _ref2$scrollWidth === undefined ? 0 : _ref2$scrollWidth,\n _ref2$scrollHeight = _ref2.scrollHeight,\n scrollHeight = _ref2$scrollHeight === undefined ? 0 : _ref2$scrollHeight,\n _ref2$clientWidth = _ref2.clientWidth,\n clientWidth = _ref2$clientWidth === undefined ? 0 : _ref2$clientWidth,\n _ref2$clientHeight = _ref2.clientHeight,\n clientHeight = _ref2$clientHeight === undefined ? 0 : _ref2$clientHeight;\n\n return {\n left: scrollLeft / (scrollWidth - clientWidth) || 0,\n top: scrollTop / (scrollHeight - clientHeight) || 0,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollWidth: scrollWidth,\n scrollHeight: scrollHeight,\n clientWidth: clientWidth,\n clientHeight: clientHeight\n };\n }\n }, {\n key: 'getThumbHorizontalWidth',\n value: function getThumbHorizontalWidth() {\n var _props = this.props,\n thumbSize = _props.thumbSize,\n thumbMinSize = _props.thumbMinSize;\n var _view = this.view,\n scrollWidth = _view.scrollWidth,\n clientWidth = _view.clientWidth;\n\n var trackWidth = (0, _getInnerWidth2[\"default\"])(this.trackHorizontal);\n var width = Math.ceil(clientWidth / scrollWidth * trackWidth);\n if (trackWidth <= width) return 0;\n if (thumbSize) return thumbSize;\n return Math.max(width, thumbMinSize);\n }\n }, {\n key: 'getThumbVerticalHeight',\n value: function getThumbVerticalHeight() {\n var _props2 = this.props,\n thumbSize = _props2.thumbSize,\n thumbMinSize = _props2.thumbMinSize;\n var _view2 = this.view,\n scrollHeight = _view2.scrollHeight,\n clientHeight = _view2.clientHeight;\n\n var trackHeight = (0, _getInnerHeight2[\"default\"])(this.trackVertical);\n var height = Math.ceil(clientHeight / scrollHeight * trackHeight);\n if (trackHeight <= height) return 0;\n if (thumbSize) return thumbSize;\n return Math.max(height, thumbMinSize);\n }\n }, {\n key: 'getScrollLeftForOffset',\n value: function getScrollLeftForOffset(offset) {\n var _view3 = this.view,\n scrollWidth = _view3.scrollWidth,\n clientWidth = _view3.clientWidth;\n\n var trackWidth = (0, _getInnerWidth2[\"default\"])(this.trackHorizontal);\n var thumbWidth = this.getThumbHorizontalWidth();\n return offset / (trackWidth - thumbWidth) * (scrollWidth - clientWidth);\n }\n }, {\n key: 'getScrollTopForOffset',\n value: function getScrollTopForOffset(offset) {\n var _view4 = this.view,\n scrollHeight = _view4.scrollHeight,\n clientHeight = _view4.clientHeight;\n\n var trackHeight = (0, _getInnerHeight2[\"default\"])(this.trackVertical);\n var thumbHeight = this.getThumbVerticalHeight();\n return offset / (trackHeight - thumbHeight) * (scrollHeight - clientHeight);\n }\n }, {\n key: 'scrollLeft',\n value: function scrollLeft() {\n var left = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (!this.view) return;\n this.view.scrollLeft = left;\n }\n }, {\n key: 'scrollTop',\n value: function scrollTop() {\n var top = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (!this.view) return;\n this.view.scrollTop = top;\n }\n }, {\n key: 'scrollToLeft',\n value: function scrollToLeft() {\n if (!this.view) return;\n this.view.scrollLeft = 0;\n }\n }, {\n key: 'scrollToTop',\n value: function scrollToTop() {\n if (!this.view) return;\n this.view.scrollTop = 0;\n }\n }, {\n key: 'scrollToRight',\n value: function scrollToRight() {\n if (!this.view) return;\n this.view.scrollLeft = this.view.scrollWidth;\n }\n }, {\n key: 'scrollToBottom',\n value: function scrollToBottom() {\n if (!this.view) return;\n this.view.scrollTop = this.view.scrollHeight;\n }\n }, {\n key: 'addListeners',\n value: function addListeners() {\n /* istanbul ignore if */\n if (typeof document === 'undefined' || !this.view) return;\n var view = this.view,\n trackHorizontal = this.trackHorizontal,\n trackVertical = this.trackVertical,\n thumbHorizontal = this.thumbHorizontal,\n thumbVertical = this.thumbVertical;\n\n view.addEventListener('scroll', this.handleScroll);\n if (!(0, _getScrollbarWidth2[\"default\"])()) return;\n trackHorizontal.addEventListener('mouseenter', this.handleTrackMouseEnter);\n trackHorizontal.addEventListener('mouseleave', this.handleTrackMouseLeave);\n trackHorizontal.addEventListener('mousedown', this.handleHorizontalTrackMouseDown);\n trackVertical.addEventListener('mouseenter', this.handleTrackMouseEnter);\n trackVertical.addEventListener('mouseleave', this.handleTrackMouseLeave);\n trackVertical.addEventListener('mousedown', this.handleVerticalTrackMouseDown);\n thumbHorizontal.addEventListener('mousedown', this.handleHorizontalThumbMouseDown);\n thumbVertical.addEventListener('mousedown', this.handleVerticalThumbMouseDown);\n window.addEventListener('resize', this.handleWindowResize);\n }\n }, {\n key: 'removeListeners',\n value: function removeListeners() {\n /* istanbul ignore if */\n if (typeof document === 'undefined' || !this.view) return;\n var view = this.view,\n trackHorizontal = this.trackHorizontal,\n trackVertical = this.trackVertical,\n thumbHorizontal = this.thumbHorizontal,\n thumbVertical = this.thumbVertical;\n\n view.removeEventListener('scroll', this.handleScroll);\n if (!(0, _getScrollbarWidth2[\"default\"])()) return;\n trackHorizontal.removeEventListener('mouseenter', this.handleTrackMouseEnter);\n trackHorizontal.removeEventListener('mouseleave', this.handleTrackMouseLeave);\n trackHorizontal.removeEventListener('mousedown', this.handleHorizontalTrackMouseDown);\n trackVertical.removeEventListener('mouseenter', this.handleTrackMouseEnter);\n trackVertical.removeEventListener('mouseleave', this.handleTrackMouseLeave);\n trackVertical.removeEventListener('mousedown', this.handleVerticalTrackMouseDown);\n thumbHorizontal.removeEventListener('mousedown', this.handleHorizontalThumbMouseDown);\n thumbVertical.removeEventListener('mousedown', this.handleVerticalThumbMouseDown);\n window.removeEventListener('resize', this.handleWindowResize);\n // Possibly setup by `handleDragStart`\n this.teardownDragging();\n }\n }, {\n key: 'handleScroll',\n value: function handleScroll(event) {\n var _this2 = this;\n\n var _props3 = this.props,\n onScroll = _props3.onScroll,\n onScrollFrame = _props3.onScrollFrame;\n\n if (onScroll) onScroll(event);\n this.update(function (values) {\n var scrollLeft = values.scrollLeft,\n scrollTop = values.scrollTop;\n\n _this2.viewScrollLeft = scrollLeft;\n _this2.viewScrollTop = scrollTop;\n if (onScrollFrame) onScrollFrame(values);\n });\n this.detectScrolling();\n }\n }, {\n key: 'handleScrollStart',\n value: function handleScrollStart() {\n var onScrollStart = this.props.onScrollStart;\n\n if (onScrollStart) onScrollStart();\n this.handleScrollStartAutoHide();\n }\n }, {\n key: 'handleScrollStartAutoHide',\n value: function handleScrollStartAutoHide() {\n var autoHide = this.props.autoHide;\n\n if (!autoHide) return;\n this.showTracks();\n }\n }, {\n key: 'handleScrollStop',\n value: function handleScrollStop() {\n var onScrollStop = this.props.onScrollStop;\n\n if (onScrollStop) onScrollStop();\n this.handleScrollStopAutoHide();\n }\n }, {\n key: 'handleScrollStopAutoHide',\n value: function handleScrollStopAutoHide() {\n var autoHide = this.props.autoHide;\n\n if (!autoHide) return;\n this.hideTracks();\n }\n }, {\n key: 'handleWindowResize',\n value: function handleWindowResize() {\n (0, _getScrollbarWidth2[\"default\"])(false);\n this.forceUpdate();\n }\n }, {\n key: 'handleHorizontalTrackMouseDown',\n value: function handleHorizontalTrackMouseDown(event) {\n event.preventDefault();\n var target = event.target,\n clientX = event.clientX;\n\n var _target$getBoundingCl = target.getBoundingClientRect(),\n targetLeft = _target$getBoundingCl.left;\n\n var thumbWidth = this.getThumbHorizontalWidth();\n var offset = Math.abs(targetLeft - clientX) - thumbWidth / 2;\n this.view.scrollLeft = this.getScrollLeftForOffset(offset);\n }\n }, {\n key: 'handleVerticalTrackMouseDown',\n value: function handleVerticalTrackMouseDown(event) {\n event.preventDefault();\n var target = event.target,\n clientY = event.clientY;\n\n var _target$getBoundingCl2 = target.getBoundingClientRect(),\n targetTop = _target$getBoundingCl2.top;\n\n var thumbHeight = this.getThumbVerticalHeight();\n var offset = Math.abs(targetTop - clientY) - thumbHeight / 2;\n this.view.scrollTop = this.getScrollTopForOffset(offset);\n }\n }, {\n key: 'handleHorizontalThumbMouseDown',\n value: function handleHorizontalThumbMouseDown(event) {\n event.preventDefault();\n this.handleDragStart(event);\n var target = event.target,\n clientX = event.clientX;\n var offsetWidth = target.offsetWidth;\n\n var _target$getBoundingCl3 = target.getBoundingClientRect(),\n left = _target$getBoundingCl3.left;\n\n this.prevPageX = offsetWidth - (clientX - left);\n }\n }, {\n key: 'handleVerticalThumbMouseDown',\n value: function handleVerticalThumbMouseDown(event) {\n event.preventDefault();\n this.handleDragStart(event);\n var target = event.target,\n clientY = event.clientY;\n var offsetHeight = target.offsetHeight;\n\n var _target$getBoundingCl4 = target.getBoundingClientRect(),\n top = _target$getBoundingCl4.top;\n\n this.prevPageY = offsetHeight - (clientY - top);\n }\n }, {\n key: 'setupDragging',\n value: function setupDragging() {\n (0, _domCss2[\"default\"])(document.body, _styles.disableSelectStyle);\n document.addEventListener('mousemove', this.handleDrag);\n document.addEventListener('mouseup', this.handleDragEnd);\n document.onselectstart = _returnFalse2[\"default\"];\n }\n }, {\n key: 'teardownDragging',\n value: function teardownDragging() {\n (0, _domCss2[\"default\"])(document.body, _styles.disableSelectStyleReset);\n document.removeEventListener('mousemove', this.handleDrag);\n document.removeEventListener('mouseup', this.handleDragEnd);\n document.onselectstart = undefined;\n }\n }, {\n key: 'handleDragStart',\n value: function handleDragStart(event) {\n this.dragging = true;\n event.stopImmediatePropagation();\n this.setupDragging();\n }\n }, {\n key: 'handleDrag',\n value: function handleDrag(event) {\n if (this.prevPageX) {\n var clientX = event.clientX;\n\n var _trackHorizontal$getB = this.trackHorizontal.getBoundingClientRect(),\n trackLeft = _trackHorizontal$getB.left;\n\n var thumbWidth = this.getThumbHorizontalWidth();\n var clickPosition = thumbWidth - this.prevPageX;\n var offset = -trackLeft + clientX - clickPosition;\n this.view.scrollLeft = this.getScrollLeftForOffset(offset);\n }\n if (this.prevPageY) {\n var clientY = event.clientY;\n\n var _trackVertical$getBou = this.trackVertical.getBoundingClientRect(),\n trackTop = _trackVertical$getBou.top;\n\n var thumbHeight = this.getThumbVerticalHeight();\n var _clickPosition = thumbHeight - this.prevPageY;\n var _offset = -trackTop + clientY - _clickPosition;\n this.view.scrollTop = this.getScrollTopForOffset(_offset);\n }\n return false;\n }\n }, {\n key: 'handleDragEnd',\n value: function handleDragEnd() {\n this.dragging = false;\n this.prevPageX = this.prevPageY = 0;\n this.teardownDragging();\n this.handleDragEndAutoHide();\n }\n }, {\n key: 'handleDragEndAutoHide',\n value: function handleDragEndAutoHide() {\n var autoHide = this.props.autoHide;\n\n if (!autoHide) return;\n this.hideTracks();\n }\n }, {\n key: 'handleTrackMouseEnter',\n value: function handleTrackMouseEnter() {\n this.trackMouseOver = true;\n this.handleTrackMouseEnterAutoHide();\n }\n }, {\n key: 'handleTrackMouseEnterAutoHide',\n value: function handleTrackMouseEnterAutoHide() {\n var autoHide = this.props.autoHide;\n\n if (!autoHide) return;\n this.showTracks();\n }\n }, {\n key: 'handleTrackMouseLeave',\n value: function handleTrackMouseLeave() {\n this.trackMouseOver = false;\n this.handleTrackMouseLeaveAutoHide();\n }\n }, {\n key: 'handleTrackMouseLeaveAutoHide',\n value: function handleTrackMouseLeaveAutoHide() {\n var autoHide = this.props.autoHide;\n\n if (!autoHide) return;\n this.hideTracks();\n }\n }, {\n key: 'showTracks',\n value: function showTracks() {\n clearTimeout(this.hideTracksTimeout);\n (0, _domCss2[\"default\"])(this.trackHorizontal, { opacity: 1 });\n (0, _domCss2[\"default\"])(this.trackVertical, { opacity: 1 });\n }\n }, {\n key: 'hideTracks',\n value: function hideTracks() {\n var _this3 = this;\n\n if (this.dragging) return;\n if (this.scrolling) return;\n if (this.trackMouseOver) return;\n var autoHideTimeout = this.props.autoHideTimeout;\n\n clearTimeout(this.hideTracksTimeout);\n this.hideTracksTimeout = setTimeout(function () {\n (0, _domCss2[\"default\"])(_this3.trackHorizontal, { opacity: 0 });\n (0, _domCss2[\"default\"])(_this3.trackVertical, { opacity: 0 });\n }, autoHideTimeout);\n }\n }, {\n key: 'detectScrolling',\n value: function detectScrolling() {\n var _this4 = this;\n\n if (this.scrolling) return;\n this.scrolling = true;\n this.handleScrollStart();\n this.detectScrollingInterval = setInterval(function () {\n if (_this4.lastViewScrollLeft === _this4.viewScrollLeft && _this4.lastViewScrollTop === _this4.viewScrollTop) {\n clearInterval(_this4.detectScrollingInterval);\n _this4.scrolling = false;\n _this4.handleScrollStop();\n }\n _this4.lastViewScrollLeft = _this4.viewScrollLeft;\n _this4.lastViewScrollTop = _this4.viewScrollTop;\n }, 100);\n }\n }, {\n key: 'raf',\n value: function raf(callback) {\n var _this5 = this;\n\n if (this.requestFrame) _raf3[\"default\"].cancel(this.requestFrame);\n this.requestFrame = (0, _raf3[\"default\"])(function () {\n _this5.requestFrame = undefined;\n callback();\n });\n }\n }, {\n key: 'update',\n value: function update(callback) {\n var _this6 = this;\n\n this.raf(function () {\n return _this6._update(callback);\n });\n }\n }, {\n key: '_update',\n value: function _update(callback) {\n var _props4 = this.props,\n onUpdate = _props4.onUpdate,\n hideTracksWhenNotNeeded = _props4.hideTracksWhenNotNeeded;\n\n var values = this.getValues();\n if ((0, _getScrollbarWidth2[\"default\"])()) {\n var scrollLeft = values.scrollLeft,\n clientWidth = values.clientWidth,\n scrollWidth = values.scrollWidth;\n\n var trackHorizontalWidth = (0, _getInnerWidth2[\"default\"])(this.trackHorizontal);\n var thumbHorizontalWidth = this.getThumbHorizontalWidth();\n var thumbHorizontalX = scrollLeft / (scrollWidth - clientWidth) * (trackHorizontalWidth - thumbHorizontalWidth);\n var thumbHorizontalStyle = {\n width: thumbHorizontalWidth,\n transform: 'translateX(' + thumbHorizontalX + 'px)'\n };\n var scrollTop = values.scrollTop,\n clientHeight = values.clientHeight,\n scrollHeight = values.scrollHeight;\n\n var trackVerticalHeight = (0, _getInnerHeight2[\"default\"])(this.trackVertical);\n var thumbVerticalHeight = this.getThumbVerticalHeight();\n var thumbVerticalY = scrollTop / (scrollHeight - clientHeight) * (trackVerticalHeight - thumbVerticalHeight);\n var thumbVerticalStyle = {\n height: thumbVerticalHeight,\n transform: 'translateY(' + thumbVerticalY + 'px)'\n };\n if (hideTracksWhenNotNeeded) {\n var trackHorizontalStyle = {\n visibility: scrollWidth > clientWidth ? 'visible' : 'hidden'\n };\n var trackVerticalStyle = {\n visibility: scrollHeight > clientHeight ? 'visible' : 'hidden'\n };\n (0, _domCss2[\"default\"])(this.trackHorizontal, trackHorizontalStyle);\n (0, _domCss2[\"default\"])(this.trackVertical, trackVerticalStyle);\n }\n (0, _domCss2[\"default\"])(this.thumbHorizontal, thumbHorizontalStyle);\n (0, _domCss2[\"default\"])(this.thumbVertical, thumbVerticalStyle);\n }\n if (onUpdate) onUpdate(values);\n if (typeof callback !== 'function') return;\n callback(values);\n }\n }, {\n key: 'render',\n value: function render() {\n var _this7 = this;\n\n var scrollbarWidth = (0, _getScrollbarWidth2[\"default\"])();\n /* eslint-disable no-unused-vars */\n\n var _props5 = this.props,\n onScroll = _props5.onScroll,\n onScrollFrame = _props5.onScrollFrame,\n onScrollStart = _props5.onScrollStart,\n onScrollStop = _props5.onScrollStop,\n onUpdate = _props5.onUpdate,\n renderView = _props5.renderView,\n renderTrackHorizontal = _props5.renderTrackHorizontal,\n renderTrackVertical = _props5.renderTrackVertical,\n renderThumbHorizontal = _props5.renderThumbHorizontal,\n renderThumbVertical = _props5.renderThumbVertical,\n tagName = _props5.tagName,\n hideTracksWhenNotNeeded = _props5.hideTracksWhenNotNeeded,\n autoHide = _props5.autoHide,\n autoHideTimeout = _props5.autoHideTimeout,\n autoHideDuration = _props5.autoHideDuration,\n thumbSize = _props5.thumbSize,\n thumbMinSize = _props5.thumbMinSize,\n universal = _props5.universal,\n autoHeight = _props5.autoHeight,\n autoHeightMin = _props5.autoHeightMin,\n autoHeightMax = _props5.autoHeightMax,\n style = _props5.style,\n children = _props5.children,\n props = _objectWithoutProperties(_props5, ['onScroll', 'onScrollFrame', 'onScrollStart', 'onScrollStop', 'onUpdate', 'renderView', 'renderTrackHorizontal', 'renderTrackVertical', 'renderThumbHorizontal', 'renderThumbVertical', 'tagName', 'hideTracksWhenNotNeeded', 'autoHide', 'autoHideTimeout', 'autoHideDuration', 'thumbSize', 'thumbMinSize', 'universal', 'autoHeight', 'autoHeightMin', 'autoHeightMax', 'style', 'children']);\n /* eslint-enable no-unused-vars */\n\n var didMountUniversal = this.state.didMountUniversal;\n\n\n var containerStyle = _extends({}, _styles.containerStyleDefault, autoHeight && _extends({}, _styles.containerStyleAutoHeight, {\n minHeight: autoHeightMin,\n maxHeight: autoHeightMax\n }), style);\n\n var viewStyle = _extends({}, _styles.viewStyleDefault, {\n // Hide scrollbars by setting a negative margin\n marginRight: scrollbarWidth ? -scrollbarWidth : 0,\n marginBottom: scrollbarWidth ? -scrollbarWidth : 0\n }, autoHeight && _extends({}, _styles.viewStyleAutoHeight, {\n // Add scrollbarWidth to autoHeight in order to compensate negative margins\n minHeight: (0, _isString2[\"default\"])(autoHeightMin) ? 'calc(' + autoHeightMin + ' + ' + scrollbarWidth + 'px)' : autoHeightMin + scrollbarWidth,\n maxHeight: (0, _isString2[\"default\"])(autoHeightMax) ? 'calc(' + autoHeightMax + ' + ' + scrollbarWidth + 'px)' : autoHeightMax + scrollbarWidth\n }), autoHeight && universal && !didMountUniversal && {\n minHeight: autoHeightMin,\n maxHeight: autoHeightMax\n }, universal && !didMountUniversal && _styles.viewStyleUniversalInitial);\n\n var trackAutoHeightStyle = {\n transition: 'opacity ' + autoHideDuration + 'ms',\n opacity: 0\n };\n\n var trackHorizontalStyle = _extends({}, _styles.trackHorizontalStyleDefault, autoHide && trackAutoHeightStyle, (!scrollbarWidth || universal && !didMountUniversal) && {\n display: 'none'\n });\n\n var trackVerticalStyle = _extends({}, _styles.trackVerticalStyleDefault, autoHide && trackAutoHeightStyle, (!scrollbarWidth || universal && !didMountUniversal) && {\n display: 'none'\n });\n\n return (0, _react.createElement)(tagName, _extends({}, props, { style: containerStyle, ref: function ref(_ref3) {\n _this7.container = _ref3;\n } }), [(0, _react.cloneElement)(renderView({ style: viewStyle }), { key: 'view', ref: function ref(_ref4) {\n _this7.view = _ref4;\n } }, children), (0, _react.cloneElement)(renderTrackHorizontal({ style: trackHorizontalStyle }), { key: 'trackHorizontal', ref: function ref(_ref5) {\n _this7.trackHorizontal = _ref5;\n } }, (0, _react.cloneElement)(renderThumbHorizontal({ style: _styles.thumbHorizontalStyleDefault }), { ref: function ref(_ref6) {\n _this7.thumbHorizontal = _ref6;\n } })), (0, _react.cloneElement)(renderTrackVertical({ style: trackVerticalStyle }), { key: 'trackVertical', ref: function ref(_ref7) {\n _this7.trackVertical = _ref7;\n } }, (0, _react.cloneElement)(renderThumbVertical({ style: _styles.thumbVerticalStyleDefault }), { ref: function ref(_ref8) {\n _this7.thumbVertical = _ref8;\n } }))]);\n }\n }]);\n\n return Scrollbars;\n}(_react.Component);\n\nexports[\"default\"] = Scrollbars;\n\n\nScrollbars.propTypes = {\n onScroll: _propTypes2[\"default\"].func,\n onScrollFrame: _propTypes2[\"default\"].func,\n onScrollStart: _propTypes2[\"default\"].func,\n onScrollStop: _propTypes2[\"default\"].func,\n onUpdate: _propTypes2[\"default\"].func,\n renderView: _propTypes2[\"default\"].func,\n renderTrackHorizontal: _propTypes2[\"default\"].func,\n renderTrackVertical: _propTypes2[\"default\"].func,\n renderThumbHorizontal: _propTypes2[\"default\"].func,\n renderThumbVertical: _propTypes2[\"default\"].func,\n tagName: _propTypes2[\"default\"].string,\n thumbSize: _propTypes2[\"default\"].number,\n thumbMinSize: _propTypes2[\"default\"].number,\n hideTracksWhenNotNeeded: _propTypes2[\"default\"].bool,\n autoHide: _propTypes2[\"default\"].bool,\n autoHideTimeout: _propTypes2[\"default\"].number,\n autoHideDuration: _propTypes2[\"default\"].number,\n autoHeight: _propTypes2[\"default\"].bool,\n autoHeightMin: _propTypes2[\"default\"].oneOfType([_propTypes2[\"default\"].number, _propTypes2[\"default\"].string]),\n autoHeightMax: _propTypes2[\"default\"].oneOfType([_propTypes2[\"default\"].number, _propTypes2[\"default\"].string]),\n universal: _propTypes2[\"default\"].bool,\n style: _propTypes2[\"default\"].object,\n children: _propTypes2[\"default\"].node\n};\n\nScrollbars.defaultProps = {\n renderView: _defaultRenderElements.renderViewDefault,\n renderTrackHorizontal: _defaultRenderElements.renderTrackHorizontalDefault,\n renderTrackVertical: _defaultRenderElements.renderTrackVerticalDefault,\n renderThumbHorizontal: _defaultRenderElements.renderThumbHorizontalDefault,\n renderThumbVertical: _defaultRenderElements.renderThumbVerticalDefault,\n tagName: 'div',\n thumbMinSize: 30,\n hideTracksWhenNotNeeded: false,\n autoHide: false,\n autoHideTimeout: 1000,\n autoHideDuration: 200,\n autoHeight: false,\n autoHeightMin: 0,\n autoHeightMax: 200,\n universal: false\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar containerStyleDefault = exports.containerStyleDefault = {\n position: 'relative',\n overflow: 'hidden',\n width: '100%',\n height: '100%'\n};\n\n// Overrides containerStyleDefault properties\nvar containerStyleAutoHeight = exports.containerStyleAutoHeight = {\n height: 'auto'\n};\n\nvar viewStyleDefault = exports.viewStyleDefault = {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n overflow: 'scroll',\n WebkitOverflowScrolling: 'touch'\n};\n\n// Overrides viewStyleDefault properties\nvar viewStyleAutoHeight = exports.viewStyleAutoHeight = {\n position: 'relative',\n top: undefined,\n left: undefined,\n right: undefined,\n bottom: undefined\n};\n\nvar viewStyleUniversalInitial = exports.viewStyleUniversalInitial = {\n overflow: 'hidden',\n marginRight: 0,\n marginBottom: 0\n};\n\nvar trackHorizontalStyleDefault = exports.trackHorizontalStyleDefault = {\n position: 'absolute',\n height: 6\n};\n\nvar trackVerticalStyleDefault = exports.trackVerticalStyleDefault = {\n position: 'absolute',\n width: 6\n};\n\nvar thumbHorizontalStyleDefault = exports.thumbHorizontalStyleDefault = {\n position: 'relative',\n display: 'block',\n height: '100%'\n};\n\nvar thumbVerticalStyleDefault = exports.thumbVerticalStyleDefault = {\n position: 'relative',\n display: 'block',\n width: '100%'\n};\n\nvar disableSelectStyle = exports.disableSelectStyle = {\n userSelect: 'none'\n};\n\nvar disableSelectStyleReset = exports.disableSelectStyleReset = {\n userSelect: ''\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Scrollbars = undefined;\n\nvar _Scrollbars = require('./Scrollbars');\n\nvar _Scrollbars2 = _interopRequireDefault(_Scrollbars);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nexports[\"default\"] = _Scrollbars2[\"default\"];\nexports.Scrollbars = _Scrollbars2[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getInnerHeight;\nfunction getInnerHeight(el) {\n var clientHeight = el.clientHeight;\n\n var _getComputedStyle = getComputedStyle(el),\n paddingTop = _getComputedStyle.paddingTop,\n paddingBottom = _getComputedStyle.paddingBottom;\n\n return clientHeight - parseFloat(paddingTop) - parseFloat(paddingBottom);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getInnerWidth;\nfunction getInnerWidth(el) {\n var clientWidth = el.clientWidth;\n\n var _getComputedStyle = getComputedStyle(el),\n paddingLeft = _getComputedStyle.paddingLeft,\n paddingRight = _getComputedStyle.paddingRight;\n\n return clientWidth - parseFloat(paddingLeft) - parseFloat(paddingRight);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = getScrollbarWidth;\n\nvar _domCss = require('dom-css');\n\nvar _domCss2 = _interopRequireDefault(_domCss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar scrollbarWidth = false;\n\nfunction getScrollbarWidth() {\n var cacheEnabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n if (cacheEnabled && scrollbarWidth !== false) return scrollbarWidth;\n /* istanbul ignore else */\n if (typeof document !== 'undefined') {\n var div = document.createElement('div');\n (0, _domCss2[\"default\"])(div, {\n width: 100,\n height: 100,\n position: 'absolute',\n top: -9999,\n overflow: 'scroll',\n MsOverflowStyle: 'scrollbar'\n });\n document.body.appendChild(div);\n scrollbarWidth = div.offsetWidth - div.clientWidth;\n document.body.removeChild(div);\n } else {\n scrollbarWidth = 0;\n }\n return scrollbarWidth || 0;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = isString;\nfunction isString(maybe) {\n return typeof maybe === 'string';\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = returnFalse;\nfunction returnFalse() {\n return false;\n}","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['exports', './react-swipe'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports, require('./react-swipe'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod.exports, global.reactSwipe);\n global.index = mod.exports;\n }\n})(this, function (exports, _reactSwipe) {\n 'use strict';\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n\n var _reactSwipe2 = _interopRequireDefault(_reactSwipe);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n exports.default = _reactSwipe2.default;\n});","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['exports', 'react', 'prop-types'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports, require('react'), require('prop-types'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod.exports, global.react, global.propTypes);\n global.reactSwipe = mod.exports;\n }\n})(this, function (exports, _react, _propTypes) {\n 'use strict';\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.setHasSupportToCaptureOption = setHasSupportToCaptureOption;\n\n var _react2 = _interopRequireDefault(_react);\n\n var _propTypes2 = _interopRequireDefault(_propTypes);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n function _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var supportsCaptureOption = false;\n function setHasSupportToCaptureOption(hasSupport) {\n supportsCaptureOption = hasSupport;\n }\n\n try {\n addEventListener('test', null, Object.defineProperty({}, 'capture', { get: function get() {\n setHasSupportToCaptureOption(true);\n } }));\n } catch (e) {} // eslint-disable-line no-empty\n\n function getSafeEventHandlerOpts() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { capture: true };\n\n return supportsCaptureOption ? options : options.capture;\n }\n\n /**\n * [getPosition returns a position element that works for mouse or touch events]\n * @param {[Event]} event [the received event]\n * @return {[Object]} [x and y coords]\n */\n function getPosition(event) {\n if ('touches' in event) {\n var _event$touches$ = event.touches[0],\n pageX = _event$touches$.pageX,\n pageY = _event$touches$.pageY;\n\n return { x: pageX, y: pageY };\n }\n\n var screenX = event.screenX,\n screenY = event.screenY;\n\n return { x: screenX, y: screenY };\n }\n\n var ReactSwipe = function (_Component) {\n _inherits(ReactSwipe, _Component);\n\n function ReactSwipe() {\n var _ref;\n\n _classCallCheck(this, ReactSwipe);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var _this = _possibleConstructorReturn(this, (_ref = ReactSwipe.__proto__ || Object.getPrototypeOf(ReactSwipe)).call.apply(_ref, [this].concat(args)));\n\n _this._handleSwipeStart = _this._handleSwipeStart.bind(_this);\n _this._handleSwipeMove = _this._handleSwipeMove.bind(_this);\n _this._handleSwipeEnd = _this._handleSwipeEnd.bind(_this);\n\n _this._onMouseDown = _this._onMouseDown.bind(_this);\n _this._onMouseMove = _this._onMouseMove.bind(_this);\n _this._onMouseUp = _this._onMouseUp.bind(_this);\n\n _this._setSwiperRef = _this._setSwiperRef.bind(_this);\n return _this;\n }\n\n _createClass(ReactSwipe, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (this.swiper) {\n this.swiper.addEventListener('touchmove', this._handleSwipeMove, getSafeEventHandlerOpts({\n capture: true,\n passive: false\n }));\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n if (this.swiper) {\n this.swiper.removeEventListener('touchmove', this._handleSwipeMove, getSafeEventHandlerOpts({\n capture: true,\n passive: false\n }));\n }\n }\n }, {\n key: '_onMouseDown',\n value: function _onMouseDown(event) {\n if (!this.props.allowMouseEvents) {\n return;\n }\n\n this.mouseDown = true;\n\n document.addEventListener('mouseup', this._onMouseUp);\n document.addEventListener('mousemove', this._onMouseMove);\n\n this._handleSwipeStart(event);\n }\n }, {\n key: '_onMouseMove',\n value: function _onMouseMove(event) {\n if (!this.mouseDown) {\n return;\n }\n\n this._handleSwipeMove(event);\n }\n }, {\n key: '_onMouseUp',\n value: function _onMouseUp(event) {\n this.mouseDown = false;\n\n document.removeEventListener('mouseup', this._onMouseUp);\n document.removeEventListener('mousemove', this._onMouseMove);\n\n this._handleSwipeEnd(event);\n }\n }, {\n key: '_handleSwipeStart',\n value: function _handleSwipeStart(event) {\n var _getPosition = getPosition(event),\n x = _getPosition.x,\n y = _getPosition.y;\n\n this.moveStart = { x: x, y: y };\n this.props.onSwipeStart(event);\n }\n }, {\n key: '_handleSwipeMove',\n value: function _handleSwipeMove(event) {\n if (!this.moveStart) {\n return;\n }\n\n var _getPosition2 = getPosition(event),\n x = _getPosition2.x,\n y = _getPosition2.y;\n\n var deltaX = x - this.moveStart.x;\n var deltaY = y - this.moveStart.y;\n this.moving = true;\n\n // handling the responsability of cancelling the scroll to\n // the component handling the event\n var shouldPreventDefault = this.props.onSwipeMove({\n x: deltaX,\n y: deltaY\n }, event);\n\n if (shouldPreventDefault && event.cancelable) {\n event.preventDefault();\n }\n\n this.movePosition = { deltaX: deltaX, deltaY: deltaY };\n }\n }, {\n key: '_handleSwipeEnd',\n value: function _handleSwipeEnd(event) {\n this.props.onSwipeEnd(event);\n\n var tolerance = this.props.tolerance;\n\n\n if (this.moving && this.movePosition) {\n if (this.movePosition.deltaX < -tolerance) {\n this.props.onSwipeLeft(1, event);\n } else if (this.movePosition.deltaX > tolerance) {\n this.props.onSwipeRight(1, event);\n }\n if (this.movePosition.deltaY < -tolerance) {\n this.props.onSwipeUp(1, event);\n } else if (this.movePosition.deltaY > tolerance) {\n this.props.onSwipeDown(1, event);\n }\n }\n\n this.moveStart = null;\n this.moving = false;\n this.movePosition = null;\n }\n }, {\n key: '_setSwiperRef',\n value: function _setSwiperRef(node) {\n this.swiper = node;\n this.props.innerRef(node);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n tagName = _props.tagName,\n className = _props.className,\n style = _props.style,\n children = _props.children,\n allowMouseEvents = _props.allowMouseEvents,\n onSwipeUp = _props.onSwipeUp,\n onSwipeDown = _props.onSwipeDown,\n onSwipeLeft = _props.onSwipeLeft,\n onSwipeRight = _props.onSwipeRight,\n onSwipeStart = _props.onSwipeStart,\n onSwipeMove = _props.onSwipeMove,\n onSwipeEnd = _props.onSwipeEnd,\n innerRef = _props.innerRef,\n tolerance = _props.tolerance,\n props = _objectWithoutProperties(_props, ['tagName', 'className', 'style', 'children', 'allowMouseEvents', 'onSwipeUp', 'onSwipeDown', 'onSwipeLeft', 'onSwipeRight', 'onSwipeStart', 'onSwipeMove', 'onSwipeEnd', 'innerRef', 'tolerance']);\n\n return _react2.default.createElement(\n this.props.tagName,\n _extends({\n ref: this._setSwiperRef,\n onMouseDown: this._onMouseDown,\n onTouchStart: this._handleSwipeStart,\n onTouchEnd: this._handleSwipeEnd,\n className: className,\n style: style\n }, props),\n children\n );\n }\n }]);\n\n return ReactSwipe;\n }(_react.Component);\n\n ReactSwipe.displayName = 'ReactSwipe';\n ReactSwipe.propTypes = {\n tagName: _propTypes2.default.string,\n className: _propTypes2.default.string,\n style: _propTypes2.default.object,\n children: _propTypes2.default.node,\n allowMouseEvents: _propTypes2.default.bool,\n onSwipeUp: _propTypes2.default.func,\n onSwipeDown: _propTypes2.default.func,\n onSwipeLeft: _propTypes2.default.func,\n onSwipeRight: _propTypes2.default.func,\n onSwipeStart: _propTypes2.default.func,\n onSwipeMove: _propTypes2.default.func,\n onSwipeEnd: _propTypes2.default.func,\n innerRef: _propTypes2.default.func,\n tolerance: _propTypes2.default.number.isRequired\n };\n ReactSwipe.defaultProps = {\n tagName: 'div',\n allowMouseEvents: false,\n onSwipeUp: function onSwipeUp() {},\n onSwipeDown: function onSwipeDown() {},\n onSwipeLeft: function onSwipeLeft() {},\n onSwipeRight: function onSwipeRight() {},\n onSwipeStart: function onSwipeStart() {},\n onSwipeMove: function onSwipeMove() {},\n onSwipeEnd: function onSwipeEnd() {},\n innerRef: function innerRef() {},\n\n tolerance: 0\n };\n exports.default = ReactSwipe;\n});","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.3\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n // START: Modifications:\n // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n // START: Modifications:\n // Apply guards for `Object.create(null)` handling. See:\n // - https://github.com/FormidableLabs/react-fast-compare/issues/64\n // - https://github.com/epoberezkin/fast-deep-equal/issues/49\n if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString();\n // END: Modifications\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React/Preact\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar InfiniteScroll = function (_Component) {\n _inherits(InfiniteScroll, _Component);\n\n function InfiniteScroll(props) {\n _classCallCheck(this, InfiniteScroll);\n\n var _this = _possibleConstructorReturn(this, (InfiniteScroll.__proto__ || Object.getPrototypeOf(InfiniteScroll)).call(this, props));\n\n _this.scrollListener = _this.scrollListener.bind(_this);\n _this.eventListenerOptions = _this.eventListenerOptions.bind(_this);\n _this.mousewheelListener = _this.mousewheelListener.bind(_this);\n return _this;\n }\n\n _createClass(InfiniteScroll, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.pageLoaded = this.props.pageStart;\n this.options = this.eventListenerOptions();\n this.attachScrollListener();\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate() {\n if (this.props.isReverse && this.loadMore) {\n var parentElement = this.getParentElement(this.scrollComponent);\n parentElement.scrollTop = parentElement.scrollHeight - this.beforeScrollHeight + this.beforeScrollTop;\n this.loadMore = false;\n }\n this.attachScrollListener();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.detachScrollListener();\n this.detachMousewheelListener();\n }\n }, {\n key: 'isPassiveSupported',\n value: function isPassiveSupported() {\n var passive = false;\n\n var testOptions = {\n get passive() {\n passive = true;\n }\n };\n\n try {\n document.addEventListener('test', null, testOptions);\n document.removeEventListener('test', null, testOptions);\n } catch (e) {\n // ignore\n }\n return passive;\n }\n }, {\n key: 'eventListenerOptions',\n value: function eventListenerOptions() {\n var options = this.props.useCapture;\n\n if (this.isPassiveSupported()) {\n options = {\n useCapture: this.props.useCapture,\n passive: true\n };\n } else {\n options = {\n passive: false\n };\n }\n return options;\n }\n\n // Set a defaut loader for all your `InfiniteScroll` components\n\n }, {\n key: 'setDefaultLoader',\n value: function setDefaultLoader(loader) {\n this.defaultLoader = loader;\n }\n }, {\n key: 'detachMousewheelListener',\n value: function detachMousewheelListener() {\n var scrollEl = window;\n if (this.props.useWindow === false) {\n scrollEl = this.scrollComponent.parentNode;\n }\n\n scrollEl.removeEventListener('mousewheel', this.mousewheelListener, this.options ? this.options : this.props.useCapture);\n }\n }, {\n key: 'detachScrollListener',\n value: function detachScrollListener() {\n var scrollEl = window;\n if (this.props.useWindow === false) {\n scrollEl = this.getParentElement(this.scrollComponent);\n }\n\n scrollEl.removeEventListener('scroll', this.scrollListener, this.options ? this.options : this.props.useCapture);\n scrollEl.removeEventListener('resize', this.scrollListener, this.options ? this.options : this.props.useCapture);\n }\n }, {\n key: 'getParentElement',\n value: function getParentElement(el) {\n var scrollParent = this.props.getScrollParent && this.props.getScrollParent();\n if (scrollParent != null) {\n return scrollParent;\n }\n return el && el.parentNode;\n }\n }, {\n key: 'filterProps',\n value: function filterProps(props) {\n return props;\n }\n }, {\n key: 'attachScrollListener',\n value: function attachScrollListener() {\n var parentElement = this.getParentElement(this.scrollComponent);\n\n if (!this.props.hasMore || !parentElement) {\n return;\n }\n\n var scrollEl = window;\n if (this.props.useWindow === false) {\n scrollEl = parentElement;\n }\n\n scrollEl.addEventListener('mousewheel', this.mousewheelListener, this.options ? this.options : this.props.useCapture);\n scrollEl.addEventListener('scroll', this.scrollListener, this.options ? this.options : this.props.useCapture);\n scrollEl.addEventListener('resize', this.scrollListener, this.options ? this.options : this.props.useCapture);\n\n if (this.props.initialLoad) {\n this.scrollListener();\n }\n }\n }, {\n key: 'mousewheelListener',\n value: function mousewheelListener(e) {\n // Prevents Chrome hangups\n // See: https://stackoverflow.com/questions/47524205/random-high-content-download-time-in-chrome/47684257#47684257\n if (e.deltaY === 1 && !this.isPassiveSupported()) {\n e.preventDefault();\n }\n }\n }, {\n key: 'scrollListener',\n value: function scrollListener() {\n var el = this.scrollComponent;\n var scrollEl = window;\n var parentNode = this.getParentElement(el);\n\n var offset = void 0;\n if (this.props.useWindow) {\n var doc = document.documentElement || document.body.parentNode || document.body;\n var scrollTop = scrollEl.pageYOffset !== undefined ? scrollEl.pageYOffset : doc.scrollTop;\n if (this.props.isReverse) {\n offset = scrollTop;\n } else {\n offset = this.calculateOffset(el, scrollTop);\n }\n } else if (this.props.isReverse) {\n offset = parentNode.scrollTop;\n } else {\n offset = el.scrollHeight - parentNode.scrollTop - parentNode.clientHeight;\n }\n\n // Here we make sure the element is visible as well as checking the offset\n if (offset < Number(this.props.threshold) && el && el.offsetParent !== null) {\n this.detachScrollListener();\n this.beforeScrollHeight = parentNode.scrollHeight;\n this.beforeScrollTop = parentNode.scrollTop;\n // Call loadMore after detachScrollListener to allow for non-async loadMore functions\n if (typeof this.props.loadMore === 'function') {\n this.props.loadMore(this.pageLoaded += 1);\n this.loadMore = true;\n }\n }\n }\n }, {\n key: 'calculateOffset',\n value: function calculateOffset(el, scrollTop) {\n if (!el) {\n return 0;\n }\n\n return this.calculateTopPosition(el) + (el.offsetHeight - scrollTop - window.innerHeight);\n }\n }, {\n key: 'calculateTopPosition',\n value: function calculateTopPosition(el) {\n if (!el) {\n return 0;\n }\n return el.offsetTop + this.calculateTopPosition(el.offsetParent);\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var renderProps = this.filterProps(this.props);\n\n var children = renderProps.children,\n element = renderProps.element,\n hasMore = renderProps.hasMore,\n initialLoad = renderProps.initialLoad,\n isReverse = renderProps.isReverse,\n loader = renderProps.loader,\n loadMore = renderProps.loadMore,\n pageStart = renderProps.pageStart,\n ref = renderProps.ref,\n threshold = renderProps.threshold,\n useCapture = renderProps.useCapture,\n useWindow = renderProps.useWindow,\n getScrollParent = renderProps.getScrollParent,\n props = _objectWithoutProperties(renderProps, ['children', 'element', 'hasMore', 'initialLoad', 'isReverse', 'loader', 'loadMore', 'pageStart', 'ref', 'threshold', 'useCapture', 'useWindow', 'getScrollParent']);\n\n props.ref = function (node) {\n _this2.scrollComponent = node;\n if (ref) {\n ref(node);\n }\n };\n\n var childrenArray = [children];\n if (hasMore) {\n if (loader) {\n isReverse ? childrenArray.unshift(loader) : childrenArray.push(loader);\n } else if (this.defaultLoader) {\n isReverse ? childrenArray.unshift(this.defaultLoader) : childrenArray.push(this.defaultLoader);\n }\n }\n return _react2.default.createElement(element, props, childrenArray);\n }\n }]);\n\n return InfiniteScroll;\n}(_react.Component);\n\nInfiniteScroll.propTypes = {\n children: _propTypes2.default.node.isRequired,\n element: _propTypes2.default.node,\n hasMore: _propTypes2.default.bool,\n initialLoad: _propTypes2.default.bool,\n isReverse: _propTypes2.default.bool,\n loader: _propTypes2.default.node,\n loadMore: _propTypes2.default.func.isRequired,\n pageStart: _propTypes2.default.number,\n ref: _propTypes2.default.func,\n getScrollParent: _propTypes2.default.func,\n threshold: _propTypes2.default.number,\n useCapture: _propTypes2.default.bool,\n useWindow: _propTypes2.default.bool\n};\nInfiniteScroll.defaultProps = {\n element: 'div',\n hasMore: false,\n initialLoad: true,\n pageStart: 0,\n ref: null,\n threshold: 250,\n useWindow: true,\n isReverse: false,\n useCapture: false,\n loader: null,\n getScrollParent: null\n};\nexports.default = InfiniteScroll;\nmodule.exports = exports['default'];\n","module.exports = require('./dist/InfiniteScroll')\n","var React = require('react');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar React__default = /*#__PURE__*/_interopDefaultLegacy(React);\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n\n _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nvar canvasStyle = {\n position: 'absolute',\n bottom: 0,\n left: 0,\n height: 0,\n overflow: 'hidden',\n 'padding-top': 0,\n 'padding-bottom': 0,\n border: 'none'\n};\nvar mirrorProps = ['box-sizing', 'width', 'font-size', 'font-weight', 'font-family', 'font-style', 'letter-spacing', 'text-indent', 'white-space', 'word-break', 'overflow-wrap', 'padding-left', 'padding-right'];\n\nfunction omit(obj, omittedKeys) {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n\n var ret = {};\n Object.keys(obj).forEach(function (key) {\n if (omittedKeys.indexOf(key) > -1) {\n return;\n }\n\n ret[key] = obj[key];\n });\n return ret;\n}\n\nvar _excluded = [\"component\", \"className\", \"unsafeHTML\"];\n\nfunction hookNode(node, basedOn) {\n /* eslint-env browser */\n if (basedOn !== 'letters' && basedOn !== 'words') {\n throw new Error(\"Unsupported options basedOn: \" + basedOn);\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n var frag = document.createDocumentFragment();\n var units;\n\n switch (basedOn) {\n case 'words':\n units = node.textContent.split(/\\b|(?=\\W)/);\n break;\n\n case 'letters':\n units = Array.from(node.textContent);\n break;\n }\n\n units.forEach(function (unit) {\n frag.appendChild(dummySpan(unit));\n });\n node.parentNode.replaceChild(frag, node);\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n var nodes = [].slice.call(node.childNodes);\n var len = nodes.length;\n\n for (var i = 0; i < len; i++) {\n hookNode(nodes[i], basedOn);\n }\n }\n}\n\nfunction dummySpan(text) {\n var span = document.createElement('span');\n span.className = 'LinesEllipsis-unit';\n span.textContent = text;\n return span;\n}\n\nfunction unwrapTextNode(node) {\n node.parentNode.replaceChild(document.createTextNode(node.textContent), node);\n}\n\nfunction removeFollowingElementLeaves(node, root) {\n if (!root.contains(node) || node === root) return;\n\n while (node.nextElementSibling) {\n node.parentNode.removeChild(node.nextElementSibling);\n }\n\n removeFollowingElementLeaves(node.parentNode, root);\n}\n\nfunction findBlockAncestor(node) {\n var ndAncestor = node;\n\n while (ndAncestor = ndAncestor.parentNode) {\n if (/p|div|main|section|h\\d|ul|ol|li/.test(ndAncestor.tagName.toLowerCase())) {\n return ndAncestor;\n }\n }\n}\n\nfunction affectLayout(ndUnit) {\n return !!(ndUnit.offsetHeight && (ndUnit.offsetWidth || /\\S/.test(ndUnit.textContent)));\n}\n\nvar defaultProps = {\n component: 'div',\n unsafeHTML: '',\n maxLine: 1,\n ellipsis: '…',\n // …\n ellipsisHTML: undefined,\n className: '',\n basedOn: undefined,\n onReflow: function onReflow() {},\n winWidth: undefined // for the HOC\n\n};\nvar usedProps = Object.keys(defaultProps);\n/**\n * props.unsafeHTML {String} the rich content you want to clamp\n * props.maxLine {Number|String} max lines allowed\n * props.ellipsis {String} the ellipsis indicator\n * props.basedOn {String} letters|words\n * props.className {String}\n */\n\nvar HTMLEllipsis = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(HTMLEllipsis, _React$Component);\n\n function HTMLEllipsis(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this;\n _this.state = {\n html: props.unsafeHTML,\n clamped: false\n };\n _this.canvas = null;\n _this.maxLine = 0;\n _this.nlUnits = [];\n return _this;\n }\n\n var _proto = HTMLEllipsis.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.initCanvas();\n this.reflow(this.props);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (prevProps.winWidth !== this.props.winWidth) {\n this.copyStyleToCanvas();\n }\n\n if (this.props !== prevProps) {\n this.reflow(this.props);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.canvas.parentNode.removeChild(this.canvas);\n this.canvas = null;\n };\n\n _proto.setState = function setState(state, callback) {\n if (typeof state.clamped !== 'undefined') {\n this.clamped = state.clamped;\n }\n\n return _React$Component.prototype.setState.call(this, state, callback);\n };\n\n _proto.initCanvas = function initCanvas() {\n if (this.canvas) return;\n var canvas = this.canvas = document.createElement('div');\n canvas.className = \"LinesEllipsis-canvas \" + this.props.className;\n canvas.setAttribute('aria-hidden', 'true');\n this.copyStyleToCanvas();\n Object.keys(canvasStyle).forEach(function (key) {\n canvas.style[key] = canvasStyle[key];\n });\n document.body.appendChild(canvas);\n };\n\n _proto.copyStyleToCanvas = function copyStyleToCanvas() {\n var _this2 = this;\n\n var targetStyle = window.getComputedStyle(this.target);\n mirrorProps.forEach(function (key) {\n _this2.canvas.style[key] = targetStyle[key];\n });\n };\n\n _proto.reflow = function reflow(props) {\n /* eslint-disable no-control-regex */\n this.maxLine = +props.maxLine || 1;\n this.canvas.innerHTML = props.unsafeHTML;\n var basedOn = props.basedOn || (/^[\\x00-\\x7F]+$/.test(props.unsafeHTML) ? 'words' : 'letters');\n hookNode(this.canvas, basedOn);\n var clamped = this.putEllipsis(this.calcIndexes());\n var newState = {\n clamped: clamped,\n html: this.canvas.innerHTML\n };\n this.setState(newState, props.onReflow.bind(this, newState));\n };\n\n _proto.calcIndexes = function calcIndexes() {\n var indexes = [0];\n var nlUnits = this.nlUnits = Array.from(this.canvas.querySelectorAll('.LinesEllipsis-unit'));\n var len = nlUnits.length;\n if (!nlUnits.length) return indexes;\n var nd1stLayoutUnit = nlUnits.find(affectLayout);\n if (!nd1stLayoutUnit) return indexes;\n var line = 1;\n var offsetTop = nd1stLayoutUnit.offsetTop;\n\n for (var i = 1; i < len; i++) {\n if (affectLayout(nlUnits[i]) && nlUnits[i].offsetTop - offsetTop > 1) {\n line++;\n indexes.push(i);\n offsetTop = nlUnits[i].offsetTop;\n\n if (line > this.maxLine) {\n break;\n }\n }\n }\n\n return indexes;\n };\n\n _proto.putEllipsis = function putEllipsis(indexes) {\n if (indexes.length <= this.maxLine) return false;\n this.nlUnits = this.nlUnits.slice(0, indexes[this.maxLine]);\n var ndPrevUnit = this.nlUnits.pop();\n var ndEllipsis = this.makeEllipsisSpan();\n\n do {\n removeFollowingElementLeaves(ndPrevUnit, this.canvas);\n findBlockAncestor(ndPrevUnit).appendChild(ndEllipsis);\n ndPrevUnit = this.nlUnits.pop();\n } while (ndPrevUnit && (!affectLayout(ndPrevUnit) || ndEllipsis.offsetHeight > ndPrevUnit.offsetHeight || ndEllipsis.offsetTop > ndPrevUnit.offsetTop));\n\n if (ndPrevUnit) {\n unwrapTextNode(ndPrevUnit);\n }\n\n this.nlUnits.forEach(unwrapTextNode);\n return true;\n };\n\n _proto.makeEllipsisSpan = function makeEllipsisSpan() {\n var _this$props = this.props,\n ellipsisHTML = _this$props.ellipsisHTML,\n ellipsis = _this$props.ellipsis;\n var frag = document.createElement('span');\n frag.appendChild(document.createElement('wbr'));\n var ndEllipsis = document.createElement('span');\n ndEllipsis.className = 'LinesEllipsis-ellipsis';\n\n if (ellipsisHTML) {\n ndEllipsis.innerHTML = ellipsisHTML;\n } else {\n ndEllipsis.textContent = ellipsis;\n }\n\n frag.appendChild(ndEllipsis);\n return frag;\n } // expose\n ;\n\n _proto.isClamped = function isClamped() {\n return this.clamped; // do not use state.clamped. #27\n };\n\n _proto.render = function render() {\n var _this3 = this;\n\n var _this$state = this.state,\n html = _this$state.html,\n clamped = _this$state.clamped;\n\n var _this$props2 = this.props,\n Component = _this$props2.component,\n className = _this$props2.className,\n unsafeHTML = _this$props2.unsafeHTML,\n rest = _objectWithoutPropertiesLoose(_this$props2, _excluded);\n\n return /*#__PURE__*/React__default[\"default\"].createElement(Component, _extends({\n className: \"LinesEllipsis \" + (clamped ? 'LinesEllipsis--clamped' : '') + \" \" + className,\n ref: function ref(node) {\n return _this3.target = node;\n }\n }, omit(rest, usedProps)), /*#__PURE__*/React__default[\"default\"].createElement(\"div\", {\n dangerouslySetInnerHTML: {\n __html: clamped ? html : unsafeHTML\n }\n }));\n };\n\n return HTMLEllipsis;\n}(React__default[\"default\"].Component);\n\nHTMLEllipsis.defaultProps = defaultProps;\n\nmodule.exports = HTMLEllipsis;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _default = function _default(position, metric, axis) {\n var positionPercent = position === 0 ? position : position + metric;\n var positionCss = axis === 'horizontal' ? [positionPercent, 0, 0] : [0, positionPercent, 0];\n var transitionProp = 'translate3d';\n var translatedPosition = '(' + positionCss.join(',') + ')';\n return transitionProp + translatedPosition;\n};\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.fadeAnimationHandler = exports.slideStopSwipingHandler = exports.slideSwipeAnimationHandler = exports.slideAnimationHandler = void 0;\n\nvar _react = require(\"react\");\n\nvar _CSSTranslate = _interopRequireDefault(require(\"../../CSSTranslate\"));\n\nvar _utils = require(\"./utils\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * Main animation handler for the default 'sliding' style animation\n * @param props\n * @param state\n */\nvar slideAnimationHandler = function slideAnimationHandler(props, state) {\n var returnStyles = {};\n var selectedItem = state.selectedItem;\n var previousItem = selectedItem;\n var lastPosition = _react.Children.count(props.children) - 1;\n var needClonedSlide = props.infiniteLoop && (selectedItem < 0 || selectedItem > lastPosition); // Handle list position if it needs a clone\n\n if (needClonedSlide) {\n if (previousItem < 0) {\n if (props.centerMode && props.centerSlidePercentage && props.axis === 'horizontal') {\n returnStyles.itemListStyle = (0, _utils.setPosition)(-(lastPosition + 2) * props.centerSlidePercentage - (100 - props.centerSlidePercentage) / 2, props.axis);\n } else {\n returnStyles.itemListStyle = (0, _utils.setPosition)(-(lastPosition + 2) * 100, props.axis);\n }\n } else if (previousItem > lastPosition) {\n returnStyles.itemListStyle = (0, _utils.setPosition)(0, props.axis);\n }\n\n return returnStyles;\n }\n\n var currentPosition = (0, _utils.getPosition)(selectedItem, props); // if 3d is available, let's take advantage of the performance of transform\n\n var transformProp = (0, _CSSTranslate.default)(currentPosition, '%', props.axis);\n var transitionTime = props.transitionTime + 'ms';\n returnStyles.itemListStyle = {\n WebkitTransform: transformProp,\n msTransform: transformProp,\n OTransform: transformProp,\n transform: transformProp\n };\n\n if (!state.swiping) {\n returnStyles.itemListStyle = _objectSpread(_objectSpread({}, returnStyles.itemListStyle), {}, {\n WebkitTransitionDuration: transitionTime,\n MozTransitionDuration: transitionTime,\n OTransitionDuration: transitionTime,\n transitionDuration: transitionTime,\n msTransitionDuration: transitionTime\n });\n }\n\n return returnStyles;\n};\n/**\n * Swiping animation handler for the default 'sliding' style animation\n * @param delta\n * @param props\n * @param state\n * @param setState\n */\n\n\nexports.slideAnimationHandler = slideAnimationHandler;\n\nvar slideSwipeAnimationHandler = function slideSwipeAnimationHandler(delta, props, state, setState) {\n var returnStyles = {};\n var isHorizontal = props.axis === 'horizontal';\n\n var childrenLength = _react.Children.count(props.children);\n\n var initialBoundry = 0;\n var currentPosition = (0, _utils.getPosition)(state.selectedItem, props);\n var finalBoundry = props.infiniteLoop ? (0, _utils.getPosition)(childrenLength - 1, props) - 100 : (0, _utils.getPosition)(childrenLength - 1, props);\n var axisDelta = isHorizontal ? delta.x : delta.y;\n var handledDelta = axisDelta; // prevent user from swiping left out of boundaries\n\n if (currentPosition === initialBoundry && axisDelta > 0) {\n handledDelta = 0;\n } // prevent user from swiping right out of boundaries\n\n\n if (currentPosition === finalBoundry && axisDelta < 0) {\n handledDelta = 0;\n }\n\n var position = currentPosition + 100 / (state.itemSize / handledDelta);\n var hasMoved = Math.abs(axisDelta) > props.swipeScrollTolerance;\n\n if (props.infiniteLoop && hasMoved) {\n // When allowing infinite loop, if we slide left from position 0 we reveal the cloned last slide that appears before it\n // if we slide even further we need to jump to other side so it can continue - and vice versa for the last slide\n if (state.selectedItem === 0 && position > -100) {\n position -= childrenLength * 100;\n } else if (state.selectedItem === childrenLength - 1 && position < -childrenLength * 100) {\n position += childrenLength * 100;\n }\n }\n\n if (!props.preventMovementUntilSwipeScrollTolerance || hasMoved || state.swipeMovementStarted) {\n if (!state.swipeMovementStarted) {\n setState({\n swipeMovementStarted: true\n });\n }\n\n returnStyles.itemListStyle = (0, _utils.setPosition)(position, props.axis);\n } //allows scroll if the swipe was within the tolerance\n\n\n if (hasMoved && !state.cancelClick) {\n setState({\n cancelClick: true\n });\n }\n\n return returnStyles;\n};\n/**\n * Default 'sliding' style animination handler for when a swipe action stops.\n * @param props\n * @param state\n */\n\n\nexports.slideSwipeAnimationHandler = slideSwipeAnimationHandler;\n\nvar slideStopSwipingHandler = function slideStopSwipingHandler(props, state) {\n var currentPosition = (0, _utils.getPosition)(state.selectedItem, props);\n var itemListStyle = (0, _utils.setPosition)(currentPosition, props.axis);\n return {\n itemListStyle: itemListStyle\n };\n};\n/**\n * Main animation handler for the default 'fade' style animation\n * @param props\n * @param state\n */\n\n\nexports.slideStopSwipingHandler = slideStopSwipingHandler;\n\nvar fadeAnimationHandler = function fadeAnimationHandler(props, state) {\n var transitionTime = props.transitionTime + 'ms';\n var transitionTimingFunction = 'ease-in-out';\n var slideStyle = {\n position: 'absolute',\n display: 'block',\n zIndex: -2,\n minHeight: '100%',\n opacity: 0,\n top: 0,\n right: 0,\n left: 0,\n bottom: 0,\n transitionTimingFunction: transitionTimingFunction,\n msTransitionTimingFunction: transitionTimingFunction,\n MozTransitionTimingFunction: transitionTimingFunction,\n WebkitTransitionTimingFunction: transitionTimingFunction,\n OTransitionTimingFunction: transitionTimingFunction\n };\n\n if (!state.swiping) {\n slideStyle = _objectSpread(_objectSpread({}, slideStyle), {}, {\n WebkitTransitionDuration: transitionTime,\n MozTransitionDuration: transitionTime,\n OTransitionDuration: transitionTime,\n transitionDuration: transitionTime,\n msTransitionDuration: transitionTime\n });\n }\n\n return {\n slideStyle: slideStyle,\n selectedStyle: _objectSpread(_objectSpread({}, slideStyle), {}, {\n opacity: 1,\n position: 'relative'\n }),\n prevStyle: _objectSpread({}, slideStyle)\n };\n};\n\nexports.fadeAnimationHandler = fadeAnimationHandler;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _reactEasySwipe = _interopRequireDefault(require(\"react-easy-swipe\"));\n\nvar _cssClasses = _interopRequireDefault(require(\"../../cssClasses\"));\n\nvar _Thumbs = _interopRequireDefault(require(\"../Thumbs\"));\n\nvar _document = _interopRequireDefault(require(\"../../shims/document\"));\n\nvar _window = _interopRequireDefault(require(\"../../shims/window\"));\n\nvar _utils = require(\"./utils\");\n\nvar _animations = require(\"./animations\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar Carousel = /*#__PURE__*/function (_React$Component) {\n _inherits(Carousel, _React$Component);\n\n var _super = _createSuper(Carousel);\n\n // @ts-ignore\n function Carousel(props) {\n var _this;\n\n _classCallCheck(this, Carousel);\n\n _this = _super.call(this, props);\n\n _defineProperty(_assertThisInitialized(_this), \"thumbsRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"carouselWrapperRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"listRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"itemsRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"timer\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"animationHandler\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"setThumbsRef\", function (node) {\n _this.thumbsRef = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setCarouselWrapperRef\", function (node) {\n _this.carouselWrapperRef = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setListRef\", function (node) {\n _this.listRef = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setItemsRef\", function (node, index) {\n if (!_this.itemsRef) {\n _this.itemsRef = [];\n }\n\n _this.itemsRef[index] = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"autoPlay\", function () {\n if (_react.Children.count(_this.props.children) <= 1) {\n return;\n }\n\n _this.clearAutoPlay();\n\n if (!_this.props.autoPlay) {\n return;\n }\n\n _this.timer = setTimeout(function () {\n _this.increment();\n }, _this.props.interval);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"clearAutoPlay\", function () {\n if (_this.timer) clearTimeout(_this.timer);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"resetAutoPlay\", function () {\n _this.clearAutoPlay();\n\n _this.autoPlay();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"stopOnHover\", function () {\n _this.setState({\n isMouseEntered: true\n }, _this.clearAutoPlay);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"startOnLeave\", function () {\n _this.setState({\n isMouseEntered: false\n }, _this.autoPlay);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"isFocusWithinTheCarousel\", function () {\n if (!_this.carouselWrapperRef) {\n return false;\n }\n\n if ((0, _document.default)().activeElement === _this.carouselWrapperRef || _this.carouselWrapperRef.contains((0, _document.default)().activeElement)) {\n return true;\n }\n\n return false;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"navigateWithKeyboard\", function (e) {\n if (!_this.isFocusWithinTheCarousel()) {\n return;\n }\n\n var axis = _this.props.axis;\n var isHorizontal = axis === 'horizontal';\n var keyNames = {\n ArrowUp: 38,\n ArrowRight: 39,\n ArrowDown: 40,\n ArrowLeft: 37\n };\n var nextKey = isHorizontal ? keyNames.ArrowRight : keyNames.ArrowDown;\n var prevKey = isHorizontal ? keyNames.ArrowLeft : keyNames.ArrowUp;\n\n if (nextKey === e.keyCode) {\n _this.increment();\n } else if (prevKey === e.keyCode) {\n _this.decrement();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updateSizes\", function () {\n if (!_this.state.initialized || !_this.itemsRef || _this.itemsRef.length === 0) {\n return;\n }\n\n var isHorizontal = _this.props.axis === 'horizontal';\n var firstItem = _this.itemsRef[0];\n\n if (!firstItem) {\n return;\n }\n\n var itemSize = isHorizontal ? firstItem.clientWidth : firstItem.clientHeight;\n\n _this.setState({\n itemSize: itemSize\n });\n\n if (_this.thumbsRef) {\n _this.thumbsRef.updateSizes();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setMountState\", function () {\n _this.setState({\n hasMount: true\n });\n\n _this.updateSizes();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleClickItem\", function (index, item) {\n if (_react.Children.count(_this.props.children) === 0) {\n return;\n }\n\n if (_this.state.cancelClick) {\n _this.setState({\n cancelClick: false\n });\n\n return;\n }\n\n _this.props.onClickItem(index, item);\n\n if (index !== _this.state.selectedItem) {\n _this.setState({\n selectedItem: index\n });\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleOnChange\", function (index, item) {\n if (_react.Children.count(_this.props.children) <= 1) {\n return;\n }\n\n _this.props.onChange(index, item);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleClickThumb\", function (index, item) {\n _this.props.onClickThumb(index, item);\n\n _this.moveTo(index);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeStart\", function (event) {\n _this.setState({\n swiping: true\n });\n\n _this.props.onSwipeStart(event);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeEnd\", function (event) {\n _this.setState({\n swiping: false,\n cancelClick: false,\n swipeMovementStarted: false\n });\n\n _this.props.onSwipeEnd(event);\n\n _this.clearAutoPlay();\n\n if (_this.state.autoPlay) {\n _this.autoPlay();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeMove\", function (delta, event) {\n _this.props.onSwipeMove(event);\n\n var animationHandlerResponse = _this.props.swipeAnimationHandler(delta, _this.props, _this.state, _this.setState.bind(_assertThisInitialized(_this)));\n\n _this.setState(_objectSpread({}, animationHandlerResponse)); // If we have not moved, we should have an empty object returned\n // Return false to allow scrolling when not swiping\n\n\n return !!Object.keys(animationHandlerResponse).length;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"decrement\", function () {\n var positions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\n _this.moveTo(_this.state.selectedItem - (typeof positions === 'number' ? positions : 1));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"increment\", function () {\n var positions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\n _this.moveTo(_this.state.selectedItem + (typeof positions === 'number' ? positions : 1));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"moveTo\", function (position) {\n if (typeof position !== 'number') {\n return;\n }\n\n var lastPosition = _react.Children.count(_this.props.children) - 1;\n\n if (position < 0) {\n position = _this.props.infiniteLoop ? lastPosition : 0;\n }\n\n if (position > lastPosition) {\n position = _this.props.infiniteLoop ? 0 : lastPosition;\n }\n\n _this.selectItem({\n // if it's not a slider, we don't need to set position here\n selectedItem: position\n }); // don't reset auto play when stop on hover is enabled, doing so will trigger a call to auto play more than once\n // and will result in the interval function not being cleared correctly.\n\n\n if (_this.state.autoPlay && _this.state.isMouseEntered === false) {\n _this.resetAutoPlay();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onClickNext\", function () {\n _this.increment(1);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onClickPrev\", function () {\n _this.decrement(1);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeForward\", function () {\n _this.increment(1);\n\n if (_this.props.emulateTouch) {\n _this.setState({\n cancelClick: true\n });\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeBackwards\", function () {\n _this.decrement(1);\n\n if (_this.props.emulateTouch) {\n _this.setState({\n cancelClick: true\n });\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"changeItem\", function (newIndex) {\n return function (e) {\n if (!(0, _utils.isKeyboardEvent)(e) || e.key === 'Enter') {\n _this.moveTo(newIndex);\n }\n };\n });\n\n _defineProperty(_assertThisInitialized(_this), \"selectItem\", function (state) {\n // Merge in the new state while updating updating previous item\n _this.setState(_objectSpread({\n previousItem: _this.state.selectedItem\n }, state), function () {\n // Run animation handler and update styles based on it\n _this.setState(_this.animationHandler(_this.props, _this.state));\n });\n\n _this.handleOnChange(state.selectedItem, _react.Children.toArray(_this.props.children)[state.selectedItem]);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getInitialImage\", function () {\n var selectedItem = _this.props.selectedItem;\n var item = _this.itemsRef && _this.itemsRef[selectedItem];\n var images = item && item.getElementsByTagName('img') || [];\n return images[0];\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getVariableItemHeight\", function (position) {\n var item = _this.itemsRef && _this.itemsRef[position];\n\n if (_this.state.hasMount && item && item.children.length) {\n var slideImages = item.children[0].getElementsByTagName('img') || [];\n\n if (slideImages.length > 0) {\n var image = slideImages[0];\n\n if (!image.complete) {\n // if the image is still loading, the size won't be available so we trigger a new render after it's done\n var onImageLoad = function onImageLoad() {\n _this.forceUpdate();\n\n image.removeEventListener('load', onImageLoad);\n };\n\n image.addEventListener('load', onImageLoad);\n }\n } // try to get img first, if img not there find first display tag\n\n\n var displayItem = slideImages[0] || item.children[0];\n var height = displayItem.clientHeight;\n return height > 0 ? height : null;\n }\n\n return null;\n });\n\n var initState = {\n initialized: false,\n previousItem: props.selectedItem,\n selectedItem: props.selectedItem,\n hasMount: false,\n isMouseEntered: false,\n autoPlay: props.autoPlay,\n swiping: false,\n swipeMovementStarted: false,\n cancelClick: false,\n itemSize: 1,\n itemListStyle: {},\n slideStyle: {},\n selectedStyle: {},\n prevStyle: {}\n };\n _this.animationHandler = typeof props.animationHandler === 'function' && props.animationHandler || props.animationHandler === 'fade' && _animations.fadeAnimationHandler || _animations.slideAnimationHandler;\n _this.state = _objectSpread(_objectSpread({}, initState), _this.animationHandler(props, initState));\n return _this;\n }\n\n _createClass(Carousel, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (!this.props.children) {\n return;\n }\n\n this.setupCarousel();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (!prevProps.children && this.props.children && !this.state.initialized) {\n this.setupCarousel();\n }\n\n if (!prevProps.autoFocus && this.props.autoFocus) {\n this.forceFocus();\n }\n\n if (prevState.swiping && !this.state.swiping) {\n // We stopped swiping, ensure we are heading to the new/current slide and not stuck\n this.setState(_objectSpread({}, this.props.stopSwipingHandler(this.props, this.state)));\n }\n\n if (prevProps.selectedItem !== this.props.selectedItem || prevProps.centerMode !== this.props.centerMode) {\n this.updateSizes();\n this.moveTo(this.props.selectedItem);\n }\n\n if (prevProps.autoPlay !== this.props.autoPlay) {\n if (this.props.autoPlay) {\n this.setupAutoPlay();\n } else {\n this.destroyAutoPlay();\n }\n\n this.setState({\n autoPlay: this.props.autoPlay\n });\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.destroyCarousel();\n }\n }, {\n key: \"setupCarousel\",\n value: function setupCarousel() {\n var _this2 = this;\n\n this.bindEvents();\n\n if (this.state.autoPlay && _react.Children.count(this.props.children) > 1) {\n this.setupAutoPlay();\n }\n\n if (this.props.autoFocus) {\n this.forceFocus();\n }\n\n this.setState({\n initialized: true\n }, function () {\n var initialImage = _this2.getInitialImage();\n\n if (initialImage && !initialImage.complete) {\n // if it's a carousel of images, we set the mount state after the first image is loaded\n initialImage.addEventListener('load', _this2.setMountState);\n } else {\n _this2.setMountState();\n }\n });\n }\n }, {\n key: \"destroyCarousel\",\n value: function destroyCarousel() {\n if (this.state.initialized) {\n this.unbindEvents();\n this.destroyAutoPlay();\n }\n }\n }, {\n key: \"setupAutoPlay\",\n value: function setupAutoPlay() {\n this.autoPlay();\n var carouselWrapper = this.carouselWrapperRef;\n\n if (this.props.stopOnHover && carouselWrapper) {\n carouselWrapper.addEventListener('mouseenter', this.stopOnHover);\n carouselWrapper.addEventListener('mouseleave', this.startOnLeave);\n }\n }\n }, {\n key: \"destroyAutoPlay\",\n value: function destroyAutoPlay() {\n this.clearAutoPlay();\n var carouselWrapper = this.carouselWrapperRef;\n\n if (this.props.stopOnHover && carouselWrapper) {\n carouselWrapper.removeEventListener('mouseenter', this.stopOnHover);\n carouselWrapper.removeEventListener('mouseleave', this.startOnLeave);\n }\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n // as the widths are calculated, we need to resize\n // the carousel when the window is resized\n (0, _window.default)().addEventListener('resize', this.updateSizes); // issue #2 - image loading smaller\n\n (0, _window.default)().addEventListener('DOMContentLoaded', this.updateSizes);\n\n if (this.props.useKeyboardArrows) {\n (0, _document.default)().addEventListener('keydown', this.navigateWithKeyboard);\n }\n }\n }, {\n key: \"unbindEvents\",\n value: function unbindEvents() {\n // removing listeners\n (0, _window.default)().removeEventListener('resize', this.updateSizes);\n (0, _window.default)().removeEventListener('DOMContentLoaded', this.updateSizes);\n var initialImage = this.getInitialImage();\n\n if (initialImage) {\n initialImage.removeEventListener('load', this.setMountState);\n }\n\n if (this.props.useKeyboardArrows) {\n (0, _document.default)().removeEventListener('keydown', this.navigateWithKeyboard);\n }\n }\n }, {\n key: \"forceFocus\",\n value: function forceFocus() {\n var _this$carouselWrapper;\n\n (_this$carouselWrapper = this.carouselWrapperRef) === null || _this$carouselWrapper === void 0 ? void 0 : _this$carouselWrapper.focus();\n }\n }, {\n key: \"renderItems\",\n value: function renderItems(isClone) {\n var _this3 = this;\n\n if (!this.props.children) {\n return [];\n }\n\n return _react.Children.map(this.props.children, function (item, index) {\n var isSelected = index === _this3.state.selectedItem;\n var isPrevious = index === _this3.state.previousItem;\n var style = isSelected && _this3.state.selectedStyle || isPrevious && _this3.state.prevStyle || _this3.state.slideStyle || {};\n\n if (_this3.props.centerMode && _this3.props.axis === 'horizontal') {\n style = _objectSpread(_objectSpread({}, style), {}, {\n minWidth: _this3.props.centerSlidePercentage + '%'\n });\n }\n\n if (_this3.state.swiping && _this3.state.swipeMovementStarted) {\n style = _objectSpread(_objectSpread({}, style), {}, {\n pointerEvents: 'none'\n });\n }\n\n var slideProps = {\n ref: function ref(e) {\n return _this3.setItemsRef(e, index);\n },\n key: 'itemKey' + index + (isClone ? 'clone' : ''),\n className: _cssClasses.default.ITEM(true, index === _this3.state.selectedItem, index === _this3.state.previousItem),\n onClick: _this3.handleClickItem.bind(_this3, index, item),\n style: style\n };\n return /*#__PURE__*/_react.default.createElement(\"li\", slideProps, _this3.props.renderItem(item, {\n isSelected: index === _this3.state.selectedItem,\n isPrevious: index === _this3.state.previousItem\n }));\n });\n }\n }, {\n key: \"renderControls\",\n value: function renderControls() {\n var _this4 = this;\n\n var _this$props = this.props,\n showIndicators = _this$props.showIndicators,\n labels = _this$props.labels,\n renderIndicator = _this$props.renderIndicator,\n children = _this$props.children;\n\n if (!showIndicators) {\n return null;\n }\n\n return /*#__PURE__*/_react.default.createElement(\"ul\", {\n className: \"control-dots\"\n }, _react.Children.map(children, function (_, index) {\n return renderIndicator && renderIndicator(_this4.changeItem(index), index === _this4.state.selectedItem, index, labels.item);\n }));\n }\n }, {\n key: \"renderStatus\",\n value: function renderStatus() {\n if (!this.props.showStatus) {\n return null;\n }\n\n return /*#__PURE__*/_react.default.createElement(\"p\", {\n className: \"carousel-status\"\n }, this.props.statusFormatter(this.state.selectedItem + 1, _react.Children.count(this.props.children)));\n }\n }, {\n key: \"renderThumbs\",\n value: function renderThumbs() {\n if (!this.props.showThumbs || !this.props.children || _react.Children.count(this.props.children) === 0) {\n return null;\n }\n\n return /*#__PURE__*/_react.default.createElement(_Thumbs.default, {\n ref: this.setThumbsRef,\n onSelectItem: this.handleClickThumb,\n selectedItem: this.state.selectedItem,\n transitionTime: this.props.transitionTime,\n thumbWidth: this.props.thumbWidth,\n labels: this.props.labels,\n emulateTouch: this.props.emulateTouch\n }, this.props.renderThumbs(this.props.children));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this5 = this;\n\n if (!this.props.children || _react.Children.count(this.props.children) === 0) {\n return null;\n }\n\n var isSwipeable = this.props.swipeable && _react.Children.count(this.props.children) > 1;\n var isHorizontal = this.props.axis === 'horizontal';\n var canShowArrows = this.props.showArrows && _react.Children.count(this.props.children) > 1; // show left arrow?\n\n var hasPrev = canShowArrows && (this.state.selectedItem > 0 || this.props.infiniteLoop) || false; // show right arrow\n\n var hasNext = canShowArrows && (this.state.selectedItem < _react.Children.count(this.props.children) - 1 || this.props.infiniteLoop) || false;\n var itemsClone = this.renderItems(true);\n var firstClone = itemsClone.shift();\n var lastClone = itemsClone.pop();\n var swiperProps = {\n className: _cssClasses.default.SLIDER(true, this.state.swiping),\n onSwipeMove: this.onSwipeMove,\n onSwipeStart: this.onSwipeStart,\n onSwipeEnd: this.onSwipeEnd,\n style: this.state.itemListStyle,\n tolerance: this.props.swipeScrollTolerance\n };\n var containerStyles = {};\n\n if (isHorizontal) {\n swiperProps.onSwipeLeft = this.onSwipeForward;\n swiperProps.onSwipeRight = this.onSwipeBackwards;\n\n if (this.props.dynamicHeight) {\n var itemHeight = this.getVariableItemHeight(this.state.selectedItem); // swiperProps.style.height = itemHeight || 'auto';\n\n containerStyles.height = itemHeight || 'auto';\n }\n } else {\n swiperProps.onSwipeUp = this.props.verticalSwipe === 'natural' ? this.onSwipeBackwards : this.onSwipeForward;\n swiperProps.onSwipeDown = this.props.verticalSwipe === 'natural' ? this.onSwipeForward : this.onSwipeBackwards;\n swiperProps.style = _objectSpread(_objectSpread({}, swiperProps.style), {}, {\n height: this.state.itemSize\n });\n containerStyles.height = this.state.itemSize;\n }\n\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n \"aria-label\": this.props.ariaLabel,\n className: _cssClasses.default.ROOT(this.props.className),\n ref: this.setCarouselWrapperRef,\n tabIndex: this.props.useKeyboardArrows ? 0 : undefined\n }, /*#__PURE__*/_react.default.createElement(\"div\", {\n className: _cssClasses.default.CAROUSEL(true),\n style: {\n width: this.props.width\n }\n }, this.renderControls(), this.props.renderArrowPrev(this.onClickPrev, hasPrev, this.props.labels.leftArrow), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: _cssClasses.default.WRAPPER(true, this.props.axis),\n style: containerStyles\n }, isSwipeable ? /*#__PURE__*/_react.default.createElement(_reactEasySwipe.default, _extends({\n tagName: \"ul\",\n innerRef: this.setListRef\n }, swiperProps, {\n allowMouseEvents: this.props.emulateTouch\n }), this.props.infiniteLoop && lastClone, this.renderItems(), this.props.infiniteLoop && firstClone) : /*#__PURE__*/_react.default.createElement(\"ul\", {\n className: _cssClasses.default.SLIDER(true, this.state.swiping),\n ref: function ref(node) {\n return _this5.setListRef(node);\n },\n style: this.state.itemListStyle || {}\n }, this.props.infiniteLoop && lastClone, this.renderItems(), this.props.infiniteLoop && firstClone)), this.props.renderArrowNext(this.onClickNext, hasNext, this.props.labels.rightArrow), this.renderStatus()), this.renderThumbs());\n }\n }]);\n\n return Carousel;\n}(_react.default.Component);\n\nexports.default = Carousel;\n\n_defineProperty(Carousel, \"displayName\", 'Carousel');\n\n_defineProperty(Carousel, \"defaultProps\", {\n ariaLabel: undefined,\n axis: 'horizontal',\n centerSlidePercentage: 80,\n interval: 3000,\n labels: {\n leftArrow: 'previous slide / item',\n rightArrow: 'next slide / item',\n item: 'slide item'\n },\n onClickItem: _utils.noop,\n onClickThumb: _utils.noop,\n onChange: _utils.noop,\n onSwipeStart: function onSwipeStart() {},\n onSwipeEnd: function onSwipeEnd() {},\n onSwipeMove: function onSwipeMove() {\n return false;\n },\n preventMovementUntilSwipeScrollTolerance: false,\n renderArrowPrev: function renderArrowPrev(onClickHandler, hasPrev, label) {\n return /*#__PURE__*/_react.default.createElement(\"button\", {\n type: \"button\",\n \"aria-label\": label,\n className: _cssClasses.default.ARROW_PREV(!hasPrev),\n onClick: onClickHandler\n });\n },\n renderArrowNext: function renderArrowNext(onClickHandler, hasNext, label) {\n return /*#__PURE__*/_react.default.createElement(\"button\", {\n type: \"button\",\n \"aria-label\": label,\n className: _cssClasses.default.ARROW_NEXT(!hasNext),\n onClick: onClickHandler\n });\n },\n renderIndicator: function renderIndicator(onClickHandler, isSelected, index, label) {\n return /*#__PURE__*/_react.default.createElement(\"li\", {\n className: _cssClasses.default.DOT(isSelected),\n onClick: onClickHandler,\n onKeyDown: onClickHandler,\n value: index,\n key: index,\n role: \"button\",\n tabIndex: 0,\n \"aria-label\": \"\".concat(label, \" \").concat(index + 1)\n });\n },\n renderItem: function renderItem(item) {\n return item;\n },\n renderThumbs: function renderThumbs(children) {\n var images = _react.Children.map(children, function (item) {\n var img = item; // if the item is not an image, try to find the first image in the item's children.\n\n if (item.type !== 'img') {\n img = _react.Children.toArray(item.props.children).find(function (children) {\n return children.type === 'img';\n });\n }\n\n if (!img) {\n return undefined;\n }\n\n return img;\n });\n\n if (images.filter(function (image) {\n return image;\n }).length === 0) {\n console.warn(\"No images found! Can't build the thumb list without images. If you don't need thumbs, set showThumbs={false} in the Carousel. Note that it's not possible to get images rendered inside custom components. More info at https://github.com/leandrowd/react-responsive-carousel/blob/master/TROUBLESHOOTING.md\");\n return [];\n }\n\n return images;\n },\n statusFormatter: _utils.defaultStatusFormatter,\n selectedItem: 0,\n showArrows: true,\n showIndicators: true,\n showStatus: true,\n showThumbs: true,\n stopOnHover: true,\n swipeScrollTolerance: 5,\n swipeable: true,\n transitionTime: 350,\n verticalSwipe: 'standard',\n width: '100%',\n animationHandler: 'slide',\n swipeAnimationHandler: _animations.slideSwipeAnimationHandler,\n stopSwipingHandler: _animations.slideStopSwipingHandler\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.setPosition = exports.getPosition = exports.isKeyboardEvent = exports.defaultStatusFormatter = exports.noop = void 0;\n\nvar _react = require(\"react\");\n\nvar _CSSTranslate = _interopRequireDefault(require(\"../../CSSTranslate\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar noop = function noop() {};\n\nexports.noop = noop;\n\nvar defaultStatusFormatter = function defaultStatusFormatter(current, total) {\n return \"\".concat(current, \" of \").concat(total);\n};\n\nexports.defaultStatusFormatter = defaultStatusFormatter;\n\nvar isKeyboardEvent = function isKeyboardEvent(e) {\n return e ? e.hasOwnProperty('key') : false;\n};\n/**\n * Gets the list 'position' relative to a current index\n * @param index\n */\n\n\nexports.isKeyboardEvent = isKeyboardEvent;\n\nvar getPosition = function getPosition(index, props) {\n if (props.infiniteLoop) {\n // index has to be added by 1 because of the first cloned slide\n ++index;\n }\n\n if (index === 0) {\n return 0;\n }\n\n var childrenLength = _react.Children.count(props.children);\n\n if (props.centerMode && props.axis === 'horizontal') {\n var currentPosition = -index * props.centerSlidePercentage;\n var lastPosition = childrenLength - 1;\n\n if (index && (index !== lastPosition || props.infiniteLoop)) {\n currentPosition += (100 - props.centerSlidePercentage) / 2;\n } else if (index === lastPosition) {\n currentPosition += 100 - props.centerSlidePercentage;\n }\n\n return currentPosition;\n }\n\n return -index * 100;\n};\n/**\n * Sets the 'position' transform for sliding animations\n * @param position\n * @param forceReflow\n */\n\n\nexports.getPosition = getPosition;\n\nvar setPosition = function setPosition(position, axis) {\n var style = {};\n ['WebkitTransform', 'MozTransform', 'MsTransform', 'OTransform', 'transform', 'msTransform'].forEach(function (prop) {\n // @ts-ignore\n style[prop] = (0, _CSSTranslate.default)(position, '%', axis);\n });\n return style;\n};\n\nexports.setPosition = setPosition;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _cssClasses = _interopRequireDefault(require(\"../cssClasses\"));\n\nvar _dimensions = require(\"../dimensions\");\n\nvar _CSSTranslate = _interopRequireDefault(require(\"../CSSTranslate\"));\n\nvar _reactEasySwipe = _interopRequireDefault(require(\"react-easy-swipe\"));\n\nvar _window = _interopRequireDefault(require(\"../shims/window\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar isKeyboardEvent = function isKeyboardEvent(e) {\n return e.hasOwnProperty('key');\n};\n\nvar Thumbs = /*#__PURE__*/function (_Component) {\n _inherits(Thumbs, _Component);\n\n var _super = _createSuper(Thumbs);\n\n function Thumbs(_props) {\n var _this;\n\n _classCallCheck(this, Thumbs);\n\n _this = _super.call(this, _props);\n\n _defineProperty(_assertThisInitialized(_this), \"itemsWrapperRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"itemsListRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"thumbsRef\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"setItemsWrapperRef\", function (node) {\n _this.itemsWrapperRef = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setItemsListRef\", function (node) {\n _this.itemsListRef = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setThumbsRef\", function (node, index) {\n if (!_this.thumbsRef) {\n _this.thumbsRef = [];\n }\n\n _this.thumbsRef[index] = node;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updateSizes\", function () {\n if (!_this.props.children || !_this.itemsWrapperRef || !_this.thumbsRef) {\n return;\n }\n\n var total = _react.Children.count(_this.props.children);\n\n var wrapperSize = _this.itemsWrapperRef.clientWidth;\n var itemSize = _this.props.thumbWidth ? _this.props.thumbWidth : (0, _dimensions.outerWidth)(_this.thumbsRef[0]);\n var visibleItems = Math.floor(wrapperSize / itemSize);\n var showArrows = visibleItems < total;\n var lastPosition = showArrows ? total - visibleItems : 0;\n\n _this.setState(function (_state, props) {\n return {\n itemSize: itemSize,\n visibleItems: visibleItems,\n firstItem: showArrows ? _this.getFirstItem(props.selectedItem) : 0,\n lastPosition: lastPosition,\n showArrows: showArrows\n };\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleClickItem\", function (index, item, e) {\n if (!isKeyboardEvent(e) || e.key === 'Enter') {\n var handler = _this.props.onSelectItem;\n\n if (typeof handler === 'function') {\n handler(index, item);\n }\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeStart\", function () {\n _this.setState({\n swiping: true\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeEnd\", function () {\n _this.setState({\n swiping: false\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onSwipeMove\", function (delta) {\n var deltaX = delta.x;\n\n if (!_this.state.itemSize || !_this.itemsWrapperRef || !_this.state.visibleItems) {\n return false;\n }\n\n var leftBoundary = 0;\n\n var childrenLength = _react.Children.count(_this.props.children);\n\n var currentPosition = -(_this.state.firstItem * 100) / _this.state.visibleItems;\n var lastLeftItem = Math.max(childrenLength - _this.state.visibleItems, 0);\n var lastLeftBoundary = -lastLeftItem * 100 / _this.state.visibleItems; // prevent user from swiping left out of boundaries\n\n if (currentPosition === leftBoundary && deltaX > 0) {\n deltaX = 0;\n } // prevent user from swiping right out of boundaries\n\n\n if (currentPosition === lastLeftBoundary && deltaX < 0) {\n deltaX = 0;\n }\n\n var wrapperSize = _this.itemsWrapperRef.clientWidth;\n var position = currentPosition + 100 / (wrapperSize / deltaX); // if 3d isn't available we will use left to move\n\n if (_this.itemsListRef) {\n ['WebkitTransform', 'MozTransform', 'MsTransform', 'OTransform', 'transform', 'msTransform'].forEach(function (prop) {\n _this.itemsListRef.style[prop] = (0, _CSSTranslate.default)(position, '%', _this.props.axis);\n });\n }\n\n return true;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"slideRight\", function (positions) {\n _this.moveTo(_this.state.firstItem - (typeof positions === 'number' ? positions : 1));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"slideLeft\", function (positions) {\n _this.moveTo(_this.state.firstItem + (typeof positions === 'number' ? positions : 1));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"moveTo\", function (position) {\n // position can't be lower than 0\n position = position < 0 ? 0 : position; // position can't be higher than last postion\n\n position = position >= _this.state.lastPosition ? _this.state.lastPosition : position;\n\n _this.setState({\n firstItem: position\n });\n });\n\n _this.state = {\n selectedItem: _props.selectedItem,\n swiping: false,\n showArrows: false,\n firstItem: 0,\n visibleItems: 0,\n lastPosition: 0\n };\n return _this;\n }\n\n _createClass(Thumbs, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.setupThumbs();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n if (this.props.selectedItem !== this.state.selectedItem) {\n this.setState({\n selectedItem: this.props.selectedItem,\n firstItem: this.getFirstItem(this.props.selectedItem)\n });\n }\n\n if (this.props.children === prevProps.children) {\n return;\n } // This will capture any size changes for arrow adjustments etc.\n // usually in the same render cycle so we don't see any flickers\n\n\n this.updateSizes();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.destroyThumbs();\n }\n }, {\n key: \"setupThumbs\",\n value: function setupThumbs() {\n // as the widths are calculated, we need to resize\n // the carousel when the window is resized\n (0, _window.default)().addEventListener('resize', this.updateSizes); // issue #2 - image loading smaller\n\n (0, _window.default)().addEventListener('DOMContentLoaded', this.updateSizes); // when the component is rendered we need to calculate\n // the container size to adjust the responsive behaviour\n\n this.updateSizes();\n }\n }, {\n key: \"destroyThumbs\",\n value: function destroyThumbs() {\n // removing listeners\n (0, _window.default)().removeEventListener('resize', this.updateSizes);\n (0, _window.default)().removeEventListener('DOMContentLoaded', this.updateSizes);\n }\n }, {\n key: \"getFirstItem\",\n value: function getFirstItem(selectedItem) {\n var firstItem = selectedItem;\n\n if (selectedItem >= this.state.lastPosition) {\n firstItem = this.state.lastPosition;\n }\n\n if (selectedItem < this.state.firstItem + this.state.visibleItems) {\n firstItem = this.state.firstItem;\n }\n\n if (selectedItem < this.state.firstItem) {\n firstItem = selectedItem;\n }\n\n return firstItem;\n }\n }, {\n key: \"renderItems\",\n value: function renderItems() {\n var _this2 = this;\n\n return this.props.children.map(function (img, index) {\n var itemClass = _cssClasses.default.ITEM(false, index === _this2.state.selectedItem);\n\n var thumbProps = {\n key: index,\n ref: function ref(e) {\n return _this2.setThumbsRef(e, index);\n },\n className: itemClass,\n onClick: _this2.handleClickItem.bind(_this2, index, _this2.props.children[index]),\n onKeyDown: _this2.handleClickItem.bind(_this2, index, _this2.props.children[index]),\n 'aria-label': \"\".concat(_this2.props.labels.item, \" \").concat(index + 1),\n style: {\n width: _this2.props.thumbWidth\n }\n };\n return /*#__PURE__*/_react.default.createElement(\"li\", _extends({}, thumbProps, {\n role: \"button\",\n tabIndex: 0\n }), img);\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this3 = this;\n\n if (!this.props.children) {\n return null;\n }\n\n var isSwipeable = _react.Children.count(this.props.children) > 1; // show left arrow?\n\n var hasPrev = this.state.showArrows && this.state.firstItem > 0; // show right arrow\n\n var hasNext = this.state.showArrows && this.state.firstItem < this.state.lastPosition; // obj to hold the transformations and styles\n\n var itemListStyles = {};\n var currentPosition = -this.state.firstItem * (this.state.itemSize || 0);\n var transformProp = (0, _CSSTranslate.default)(currentPosition, 'px', this.props.axis);\n var transitionTime = this.props.transitionTime + 'ms';\n itemListStyles = {\n WebkitTransform: transformProp,\n MozTransform: transformProp,\n MsTransform: transformProp,\n OTransform: transformProp,\n transform: transformProp,\n msTransform: transformProp,\n WebkitTransitionDuration: transitionTime,\n MozTransitionDuration: transitionTime,\n MsTransitionDuration: transitionTime,\n OTransitionDuration: transitionTime,\n transitionDuration: transitionTime,\n msTransitionDuration: transitionTime\n };\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: _cssClasses.default.CAROUSEL(false)\n }, /*#__PURE__*/_react.default.createElement(\"div\", {\n className: _cssClasses.default.WRAPPER(false),\n ref: this.setItemsWrapperRef\n }, /*#__PURE__*/_react.default.createElement(\"button\", {\n type: \"button\",\n className: _cssClasses.default.ARROW_PREV(!hasPrev),\n onClick: function onClick() {\n return _this3.slideRight();\n },\n \"aria-label\": this.props.labels.leftArrow\n }), isSwipeable ? /*#__PURE__*/_react.default.createElement(_reactEasySwipe.default, {\n tagName: \"ul\",\n className: _cssClasses.default.SLIDER(false, this.state.swiping),\n onSwipeLeft: this.slideLeft,\n onSwipeRight: this.slideRight,\n onSwipeMove: this.onSwipeMove,\n onSwipeStart: this.onSwipeStart,\n onSwipeEnd: this.onSwipeEnd,\n style: itemListStyles,\n innerRef: this.setItemsListRef,\n allowMouseEvents: this.props.emulateTouch\n }, this.renderItems()) : /*#__PURE__*/_react.default.createElement(\"ul\", {\n className: _cssClasses.default.SLIDER(false, this.state.swiping),\n ref: function ref(node) {\n return _this3.setItemsListRef(node);\n },\n style: itemListStyles\n }, this.renderItems()), /*#__PURE__*/_react.default.createElement(\"button\", {\n type: \"button\",\n className: _cssClasses.default.ARROW_NEXT(!hasNext),\n onClick: function onClick() {\n return _this3.slideLeft();\n },\n \"aria-label\": this.props.labels.rightArrow\n })));\n }\n }]);\n\n return Thumbs;\n}(_react.Component);\n\nexports.default = Thumbs;\n\n_defineProperty(Thumbs, \"displayName\", 'Thumbs');\n\n_defineProperty(Thumbs, \"defaultProps\", {\n axis: 'horizontal',\n labels: {\n leftArrow: 'previous slide / item',\n rightArrow: 'next slide / item',\n item: 'slide item'\n },\n selectedItem: 0,\n thumbWidth: 80,\n transitionTime: 350\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar _default = {\n ROOT: function ROOT(customClassName) {\n return (0, _classnames.default)(_defineProperty({\n 'carousel-root': true\n }, customClassName || '', !!customClassName));\n },\n CAROUSEL: function CAROUSEL(isSlider) {\n return (0, _classnames.default)({\n carousel: true,\n 'carousel-slider': isSlider\n });\n },\n WRAPPER: function WRAPPER(isSlider, axis) {\n return (0, _classnames.default)({\n 'thumbs-wrapper': !isSlider,\n 'slider-wrapper': isSlider,\n 'axis-horizontal': axis === 'horizontal',\n 'axis-vertical': axis !== 'horizontal'\n });\n },\n SLIDER: function SLIDER(isSlider, isSwiping) {\n return (0, _classnames.default)({\n thumbs: !isSlider,\n slider: isSlider,\n animated: !isSwiping\n });\n },\n ITEM: function ITEM(isSlider, selected, previous) {\n return (0, _classnames.default)({\n thumb: !isSlider,\n slide: isSlider,\n selected: selected,\n previous: previous\n });\n },\n ARROW_PREV: function ARROW_PREV(disabled) {\n return (0, _classnames.default)({\n 'control-arrow control-prev': true,\n 'control-disabled': disabled\n });\n },\n ARROW_NEXT: function ARROW_NEXT(disabled) {\n return (0, _classnames.default)({\n 'control-arrow control-next': true,\n 'control-disabled': disabled\n });\n },\n DOT: function DOT(selected) {\n return (0, _classnames.default)({\n dot: true,\n selected: selected\n });\n }\n};\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.outerWidth = void 0;\n\nvar outerWidth = function outerWidth(el) {\n var width = el.offsetWidth;\n var style = getComputedStyle(el);\n width += parseInt(style.marginLeft) + parseInt(style.marginRight);\n return width;\n};\n\nexports.outerWidth = outerWidth;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"Carousel\", {\n enumerable: true,\n get: function get() {\n return _Carousel.default;\n }\n});\nObject.defineProperty(exports, \"CarouselProps\", {\n enumerable: true,\n get: function get() {\n return _types.CarouselProps;\n }\n});\nObject.defineProperty(exports, \"Thumbs\", {\n enumerable: true,\n get: function get() {\n return _Thumbs.default;\n }\n});\n\nvar _Carousel = _interopRequireDefault(require(\"./components/Carousel\"));\n\nvar _types = require(\"./components/Carousel/types\");\n\nvar _Thumbs = _interopRequireDefault(require(\"./components/Thumbs\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _default = function _default() {\n return document;\n};\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _default = function _default() {\n return window;\n};\n\nexports.default = _default;","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","// Generated by CoffeeScript 1.6.2\n(function() {\n 'use strict';\n var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n (function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n return define([], function() {\n return root.i18n = factory();\n });\n } else if (typeof module === 'object' && module.exports) {\n return module.exports = factory();\n } else {\n return root.i18n = factory();\n }\n })((typeof self !== \"undefined\" && self !== null ? self : this), function() {\n var Translator, i18n, translator;\n\n Translator = (function() {\n function Translator() {\n this.translate = __bind(this.translate, this); this.data = {\n values: {},\n contexts: []\n };\n this.globalContext = {};\n }\n\n Translator.prototype.translate = function(text, defaultNumOrFormatting, numOrFormattingOrContext, formattingOrContext, context) {\n var defaultText, formatting, isObject, num;\n\n if (context == null) {\n context = this.globalContext;\n }\n isObject = function(obj) {\n var type;\n\n type = typeof obj;\n return type === \"function\" || type === \"object\" && !!obj;\n };\n if (isObject(defaultNumOrFormatting)) {\n defaultText = null;\n num = null;\n formatting = defaultNumOrFormatting;\n context = numOrFormattingOrContext || this.globalContext;\n } else {\n if (typeof defaultNumOrFormatting === \"number\") {\n defaultText = null;\n num = defaultNumOrFormatting;\n formatting = numOrFormattingOrContext;\n context = formattingOrContext || this.globalContext;\n } else {\n defaultText = defaultNumOrFormatting;\n if (typeof numOrFormattingOrContext === \"number\") {\n num = numOrFormattingOrContext;\n formatting = formattingOrContext;\n context = context;\n } else {\n num = null;\n formatting = numOrFormattingOrContext;\n context = formattingOrContext || this.globalContext;\n }\n }\n }\n if (isObject(text)) {\n if (isObject(text['i18n'])) {\n text = text['i18n'];\n }\n return this.translateHash(text, context);\n } else {\n return this.translateText(text, num, formatting, context, defaultText);\n }\n };\n\n Translator.prototype.add = function(d) {\n var c, k, v, _i, _len, _ref, _ref1, _results;\n\n if ((d.values != null)) {\n _ref = d.values;\n for (k in _ref) {\n v = _ref[k];\n this.data.values[k] = v;\n }\n }\n if ((d.contexts != null)) {\n _ref1 = d.contexts;\n _results = [];\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n c = _ref1[_i];\n _results.push(this.data.contexts.push(c));\n }\n return _results;\n }\n };\n\n Translator.prototype.setContext = function(key, value) {\n return this.globalContext[key] = value;\n };\n\n Translator.prototype.extend = function(ext) {\n return this.extension = ext;\n };\n\n Translator.prototype.clearContext = function(key) {\n return this.globalContext[key] = null;\n };\n\n Translator.prototype.reset = function() {\n this.resetData();\n return this.resetContext();\n };\n\n Translator.prototype.resetData = function() {\n return this.data = {\n values: {},\n contexts: []\n };\n };\n\n Translator.prototype.resetContext = function() {\n return this.globalContext = {};\n };\n\n Translator.prototype.translateHash = function(hash, context) {\n var k, v;\n\n for (k in hash) {\n v = hash[k];\n if (typeof v === \"string\") {\n hash[k] = this.translateText(v, null, null, context);\n }\n }\n return hash;\n };\n\n Translator.prototype.translateText = function(text, num, formatting, context, defaultText) {\n var contextData, result;\n\n if (context == null) {\n context = this.globalContext;\n }\n if (this.data == null) {\n return this.useOriginalText(defaultText || text, num, formatting);\n }\n contextData = this.getContextData(this.data, context);\n if (contextData != null) {\n result = this.findTranslation(text, num, formatting, contextData.values, defaultText);\n }\n if (result == null) {\n result = this.findTranslation(text, num, formatting, this.data.values, defaultText);\n }\n if (result == null) {\n return this.useOriginalText(defaultText || text, num, formatting);\n }\n return result;\n };\n\n Translator.prototype.findTranslation = function(text, num, formatting, data, defaultText) {\n var a, b, c, d, e, result, triple, value, _i, _len;\n\n value = data[text];\n if (value == null) {\n return null;\n }\n if (typeof value === \"object\" && !Array.isArray(value)) {\n if (this.extension && typeof this.extension === \"function\") {\n value = this.extension(text, num, formatting, value);\n value = this.applyNumbers(value, num);\n return this.applyFormatting(value, num, formatting);\n } else {\n return this.useOriginalText(defaultText || text, num, formatting);\n }\n }\n if ((num == null) && !Array.isArray(value)) {\n if (typeof value === \"string\") {\n return this.applyFormatting(value, num, formatting);\n }\n } else {\n if (value instanceof Array || value.length) {\n a = num === null;\n for (_i = 0, _len = value.length; _i < _len; _i++) {\n triple = value[_i];\n b = triple[0] === null;\n c = triple[1] === null;\n d = num >= triple[0];\n e = num <= triple[1];\n if (a && b && c || !a && (!b && d && (c || e) || b && !c && e)) {\n result = this.applyFormatting(triple[2].replace(\"-%n\", String(-num)), num, formatting);\n return this.applyFormatting(result.replace(\"%n\", String(num)), num, formatting);\n }\n }\n }\n }\n return null;\n };\n\n Translator.prototype.applyNumbers = function(str, num) {\n str = str.replace(\"-%n\", String(-num));\n str = str.replace(\"%n\", String(num));\n return str;\n };\n\n Translator.prototype.getContextData = function(data, context) {\n var c, equal, key, value, _i, _len, _ref, _ref1;\n\n if (data.contexts == null) {\n return null;\n }\n _ref = data.contexts;\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n c = _ref[_i];\n equal = true;\n _ref1 = c.matches;\n for (key in _ref1) {\n value = _ref1[key];\n equal = equal && value === context[key];\n }\n if (equal) {\n return c;\n }\n }\n return null;\n };\n\n Translator.prototype.useOriginalText = function(text, num, formatting) {\n if (num == null) {\n return this.applyFormatting(text, num, formatting);\n }\n return this.applyFormatting(text.replace(\"%n\", String(num)), num, formatting);\n };\n\n Translator.prototype.applyFormatting = function(text, num, formatting) {\n var ind, regex;\n\n for (ind in formatting) {\n regex = new RegExp(\"%{\" + ind + \"}\", \"g\");\n text = text.replace(regex, formatting[ind]);\n }\n return text;\n };\n\n return Translator;\n\n })();\n translator = new Translator();\n i18n = translator.translate;\n i18n.translator = translator;\n i18n.create = function(data) {\n var trans;\n\n trans = new Translator();\n if (data != null) {\n trans.add(data);\n }\n trans.translate.create = i18n.create;\n trans.translate.translator = trans;\n return trans.translate;\n };\n return i18n;\n });\n\n}).call(this);\n","const htmlparser = require('htmlparser2');\nconst escapeStringRegexp = require('escape-string-regexp');\nconst { isPlainObject } = require('is-plain-object');\nconst deepmerge = require('deepmerge');\nconst parseSrcset = require('parse-srcset');\nconst { parse: postcssParse } = require('postcss');\n// Tags that can conceivably represent stand-alone media.\nconst mediaTags = [\n 'img', 'audio', 'video', 'picture', 'svg',\n 'object', 'map', 'iframe', 'embed'\n];\n// Tags that are inherently vulnerable to being used in XSS attacks.\nconst vulnerableTags = [ 'script', 'style' ];\n\nfunction each(obj, cb) {\n if (obj) {\n Object.keys(obj).forEach(function (key) {\n cb(obj[key], key);\n });\n }\n}\n\n// Avoid false positives with .__proto__, .hasOwnProperty, etc.\nfunction has(obj, key) {\n return ({}).hasOwnProperty.call(obj, key);\n}\n\n// Returns those elements of `a` for which `cb(a)` returns truthy\nfunction filter(a, cb) {\n const n = [];\n each(a, function(v) {\n if (cb(v)) {\n n.push(v);\n }\n });\n return n;\n}\n\nfunction isEmptyObject(obj) {\n for (const key in obj) {\n if (has(obj, key)) {\n return false;\n }\n }\n return true;\n}\n\nfunction stringifySrcset(parsedSrcset) {\n return parsedSrcset.map(function(part) {\n if (!part.url) {\n throw new Error('URL missing');\n }\n\n return (\n part.url +\n (part.w ? ` ${part.w}w` : '') +\n (part.h ? ` ${part.h}h` : '') +\n (part.d ? ` ${part.d}x` : '')\n );\n }).join(', ');\n}\n\nmodule.exports = sanitizeHtml;\n\n// A valid attribute name.\n// We use a tolerant definition based on the set of strings defined by\n// html.spec.whatwg.org/multipage/parsing.html#before-attribute-name-state\n// and html.spec.whatwg.org/multipage/parsing.html#attribute-name-state .\n// The characters accepted are ones which can be appended to the attribute\n// name buffer without triggering a parse error:\n// * unexpected-equals-sign-before-attribute-name\n// * unexpected-null-character\n// * unexpected-character-in-attribute-name\n// We exclude the empty string because it's impossible to get to the after\n// attribute name state with an empty attribute name buffer.\nconst VALID_HTML_ATTRIBUTE_NAME = /^[^\\0\\t\\n\\f\\r /<=>]+$/;\n\n// Ignore the _recursing flag; it's there for recursive\n// invocation as a guard against this exploit:\n// https://github.com/fb55/htmlparser2/issues/105\n\nfunction sanitizeHtml(html, options, _recursing) {\n if (html == null) {\n return '';\n }\n if (typeof html === 'number') {\n html = html.toString();\n }\n\n let result = '';\n // Used for hot swapping the result variable with an empty string in order to \"capture\" the text written to it.\n let tempResult = '';\n\n function Frame(tag, attribs) {\n const that = this;\n this.tag = tag;\n this.attribs = attribs || {};\n this.tagPosition = result.length;\n this.text = ''; // Node inner text\n this.mediaChildren = [];\n\n this.updateParentNodeText = function() {\n if (stack.length) {\n const parentFrame = stack[stack.length - 1];\n parentFrame.text += that.text;\n }\n };\n\n this.updateParentNodeMediaChildren = function() {\n if (stack.length && mediaTags.includes(this.tag)) {\n const parentFrame = stack[stack.length - 1];\n parentFrame.mediaChildren.push(this.tag);\n }\n };\n }\n\n options = Object.assign({}, sanitizeHtml.defaults, options);\n options.parser = Object.assign({}, htmlParserDefaults, options.parser);\n\n const tagAllowed = function (name) {\n return options.allowedTags === false || (options.allowedTags || []).indexOf(name) > -1;\n };\n\n // vulnerableTags\n vulnerableTags.forEach(function (tag) {\n if (tagAllowed(tag) && !options.allowVulnerableTags) {\n console.warn(`\\n\\nâš ï¸ Your \\`allowedTags\\` option includes, \\`${tag}\\`, which is inherently\\nvulnerable to XSS attacks. Please remove it from \\`allowedTags\\`.\\nOr, to disable this warning, add the \\`allowVulnerableTags\\` option\\nand ensure you are accounting for this risk.\\n\\n`);\n }\n });\n\n // Tags that contain something other than HTML, or where discarding\n // the text when the tag is disallowed makes sense for other reasons.\n // If we are not allowing these tags, we should drop their content too.\n // For other tags you would drop the tag but keep its content.\n const nonTextTagsArray = options.nonTextTags || [\n 'script',\n 'style',\n 'textarea',\n 'option'\n ];\n let allowedAttributesMap;\n let allowedAttributesGlobMap;\n if (options.allowedAttributes) {\n allowedAttributesMap = {};\n allowedAttributesGlobMap = {};\n each(options.allowedAttributes, function(attributes, tag) {\n allowedAttributesMap[tag] = [];\n const globRegex = [];\n attributes.forEach(function(obj) {\n if (typeof obj === 'string' && obj.indexOf('*') >= 0) {\n globRegex.push(escapeStringRegexp(obj).replace(/\\\\\\*/g, '.*'));\n } else {\n allowedAttributesMap[tag].push(obj);\n }\n });\n if (globRegex.length) {\n allowedAttributesGlobMap[tag] = new RegExp('^(' + globRegex.join('|') + ')$');\n }\n });\n }\n const allowedClassesMap = {};\n const allowedClassesGlobMap = {};\n const allowedClassesRegexMap = {};\n each(options.allowedClasses, function(classes, tag) {\n // Implicitly allows the class attribute\n if (allowedAttributesMap) {\n if (!has(allowedAttributesMap, tag)) {\n allowedAttributesMap[tag] = [];\n }\n allowedAttributesMap[tag].push('class');\n }\n\n allowedClassesMap[tag] = classes;\n\n if (Array.isArray(classes)) {\n const globRegex = [];\n allowedClassesMap[tag] = [];\n allowedClassesRegexMap[tag] = [];\n classes.forEach(function(obj) {\n if (typeof obj === 'string' && obj.indexOf('*') >= 0) {\n globRegex.push(escapeStringRegexp(obj).replace(/\\\\\\*/g, '.*'));\n } else if (obj instanceof RegExp) {\n allowedClassesRegexMap[tag].push(obj);\n } else {\n allowedClassesMap[tag].push(obj);\n }\n });\n if (globRegex.length) {\n allowedClassesGlobMap[tag] = new RegExp('^(' + globRegex.join('|') + ')$');\n }\n }\n });\n\n const transformTagsMap = {};\n let transformTagsAll;\n each(options.transformTags, function(transform, tag) {\n let transFun;\n if (typeof transform === 'function') {\n transFun = transform;\n } else if (typeof transform === 'string') {\n transFun = sanitizeHtml.simpleTransform(transform);\n }\n if (tag === '*') {\n transformTagsAll = transFun;\n } else {\n transformTagsMap[tag] = transFun;\n }\n });\n\n let depth;\n let stack;\n let skipMap;\n let transformMap;\n let skipText;\n let skipTextDepth;\n let addedText = false;\n\n initializeState();\n\n const parser = new htmlparser.Parser({\n onopentag: function(name, attribs) {\n // If `enforceHtmlBoundary` is `true` and this has found the opening\n // `html` tag, reset the state.\n if (options.enforceHtmlBoundary && name === 'html') {\n initializeState();\n }\n\n if (skipText) {\n skipTextDepth++;\n return;\n }\n const frame = new Frame(name, attribs);\n stack.push(frame);\n\n let skip = false;\n const hasText = !!frame.text;\n let transformedTag;\n if (has(transformTagsMap, name)) {\n transformedTag = transformTagsMap[name](name, attribs);\n\n frame.attribs = attribs = transformedTag.attribs;\n\n if (transformedTag.text !== undefined) {\n frame.innerText = transformedTag.text;\n }\n\n if (name !== transformedTag.tagName) {\n frame.name = name = transformedTag.tagName;\n transformMap[depth] = transformedTag.tagName;\n }\n }\n if (transformTagsAll) {\n transformedTag = transformTagsAll(name, attribs);\n\n frame.attribs = attribs = transformedTag.attribs;\n if (name !== transformedTag.tagName) {\n frame.name = name = transformedTag.tagName;\n transformMap[depth] = transformedTag.tagName;\n }\n }\n\n if (!tagAllowed(name) || (options.disallowedTagsMode === 'recursiveEscape' && !isEmptyObject(skipMap)) || (options.nestingLimit != null && depth >= options.nestingLimit)) {\n skip = true;\n skipMap[depth] = true;\n if (options.disallowedTagsMode === 'discard' || options.disallowedTagsMode === 'completelyDiscard') {\n if (nonTextTagsArray.indexOf(name) !== -1) {\n skipText = true;\n skipTextDepth = 1;\n }\n }\n skipMap[depth] = true;\n }\n depth++;\n if (skip) {\n if (options.disallowedTagsMode === 'discard' || options.disallowedTagsMode === 'completelyDiscard') {\n // We want the contents but not this tag\n return;\n }\n tempResult = result;\n result = '';\n }\n result += '<' + name;\n\n if (name === 'script') {\n if (options.allowedScriptHostnames || options.allowedScriptDomains) {\n frame.innerText = '';\n }\n }\n\n if (!allowedAttributesMap || has(allowedAttributesMap, name) || allowedAttributesMap['*']) {\n each(attribs, function(value, a) {\n if (!VALID_HTML_ATTRIBUTE_NAME.test(a)) {\n // This prevents part of an attribute name in the output from being\n // interpreted as the end of an attribute, or end of a tag.\n delete frame.attribs[a];\n return;\n }\n // If the value is empty, check if the attribute is in the allowedEmptyAttributes array.\n // If it is not in the allowedEmptyAttributes array, and it is a known non-boolean attribute, delete it\n // List taken from https://html.spec.whatwg.org/multipage/indices.html#attributes-3\n if (value === '' && (!options.allowedEmptyAttributes.includes(a)) &&\n (options.nonBooleanAttributes.includes(a) || options.nonBooleanAttributes.includes('*'))) {\n delete frame.attribs[a];\n return;\n }\n // check allowedAttributesMap for the element and attribute and modify the value\n // as necessary if there are specific values defined.\n let passedAllowedAttributesMapCheck = false;\n if (!allowedAttributesMap ||\n (has(allowedAttributesMap, name) && allowedAttributesMap[name].indexOf(a) !== -1) ||\n (allowedAttributesMap['*'] && allowedAttributesMap['*'].indexOf(a) !== -1) ||\n (has(allowedAttributesGlobMap, name) && allowedAttributesGlobMap[name].test(a)) ||\n (allowedAttributesGlobMap['*'] && allowedAttributesGlobMap['*'].test(a))) {\n passedAllowedAttributesMapCheck = true;\n } else if (allowedAttributesMap && allowedAttributesMap[name]) {\n for (const o of allowedAttributesMap[name]) {\n if (isPlainObject(o) && o.name && (o.name === a)) {\n passedAllowedAttributesMapCheck = true;\n let newValue = '';\n if (o.multiple === true) {\n // verify the values that are allowed\n const splitStrArray = value.split(' ');\n for (const s of splitStrArray) {\n if (o.values.indexOf(s) !== -1) {\n if (newValue === '') {\n newValue = s;\n } else {\n newValue += ' ' + s;\n }\n }\n }\n } else if (o.values.indexOf(value) >= 0) {\n // verified an allowed value matches the entire attribute value\n newValue = value;\n }\n value = newValue;\n }\n }\n }\n if (passedAllowedAttributesMapCheck) {\n if (options.allowedSchemesAppliedToAttributes.indexOf(a) !== -1) {\n if (naughtyHref(name, value)) {\n delete frame.attribs[a];\n return;\n }\n }\n\n if (name === 'script' && a === 'src') {\n\n let allowed = true;\n\n try {\n const parsed = parseUrl(value);\n\n if (options.allowedScriptHostnames || options.allowedScriptDomains) {\n const allowedHostname = (options.allowedScriptHostnames || []).find(function (hostname) {\n return hostname === parsed.url.hostname;\n });\n const allowedDomain = (options.allowedScriptDomains || []).find(function(domain) {\n return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`);\n });\n allowed = allowedHostname || allowedDomain;\n }\n } catch (e) {\n allowed = false;\n }\n\n if (!allowed) {\n delete frame.attribs[a];\n return;\n }\n }\n\n if (name === 'iframe' && a === 'src') {\n let allowed = true;\n try {\n const parsed = parseUrl(value);\n\n if (parsed.isRelativeUrl) {\n // default value of allowIframeRelativeUrls is true\n // unless allowedIframeHostnames or allowedIframeDomains specified\n allowed = has(options, 'allowIframeRelativeUrls')\n ? options.allowIframeRelativeUrls\n : (!options.allowedIframeHostnames && !options.allowedIframeDomains);\n } else if (options.allowedIframeHostnames || options.allowedIframeDomains) {\n const allowedHostname = (options.allowedIframeHostnames || []).find(function (hostname) {\n return hostname === parsed.url.hostname;\n });\n const allowedDomain = (options.allowedIframeDomains || []).find(function(domain) {\n return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`);\n });\n allowed = allowedHostname || allowedDomain;\n }\n } catch (e) {\n // Unparseable iframe src\n allowed = false;\n }\n if (!allowed) {\n delete frame.attribs[a];\n return;\n }\n }\n if (a === 'srcset') {\n try {\n let parsed = parseSrcset(value);\n parsed.forEach(function(value) {\n if (naughtyHref('srcset', value.url)) {\n value.evil = true;\n }\n });\n parsed = filter(parsed, function(v) {\n return !v.evil;\n });\n if (!parsed.length) {\n delete frame.attribs[a];\n return;\n } else {\n value = stringifySrcset(filter(parsed, function(v) {\n return !v.evil;\n }));\n frame.attribs[a] = value;\n }\n } catch (e) {\n // Unparseable srcset\n delete frame.attribs[a];\n return;\n }\n }\n if (a === 'class') {\n const allowedSpecificClasses = allowedClassesMap[name];\n const allowedWildcardClasses = allowedClassesMap['*'];\n const allowedSpecificClassesGlob = allowedClassesGlobMap[name];\n const allowedSpecificClassesRegex = allowedClassesRegexMap[name];\n const allowedWildcardClassesGlob = allowedClassesGlobMap['*'];\n const allowedClassesGlobs = [\n allowedSpecificClassesGlob,\n allowedWildcardClassesGlob\n ]\n .concat(allowedSpecificClassesRegex)\n .filter(function (t) {\n return t;\n });\n if (allowedSpecificClasses && allowedWildcardClasses) {\n value = filterClasses(value, deepmerge(allowedSpecificClasses, allowedWildcardClasses), allowedClassesGlobs);\n } else {\n value = filterClasses(value, allowedSpecificClasses || allowedWildcardClasses, allowedClassesGlobs);\n }\n if (!value.length) {\n delete frame.attribs[a];\n return;\n }\n }\n if (a === 'style') {\n if (options.parseStyleAttributes) {\n try {\n const abstractSyntaxTree = postcssParse(name + ' {' + value + '}', { map: false });\n const filteredAST = filterCss(abstractSyntaxTree, options.allowedStyles);\n\n value = stringifyStyleAttributes(filteredAST);\n\n if (value.length === 0) {\n delete frame.attribs[a];\n return;\n }\n } catch (e) {\n if (typeof window !== 'undefined') {\n console.warn('Failed to parse \"' + name + ' {' + value + '}' + '\", If you\\'re running this in a browser, we recommend to disable style parsing: options.parseStyleAttributes: false, since this only works in a node environment due to a postcss dependency, More info: https://github.com/apostrophecms/sanitize-html/issues/547');\n }\n delete frame.attribs[a];\n return;\n }\n } else if (options.allowedStyles) {\n throw new Error('allowedStyles option cannot be used together with parseStyleAttributes: false.');\n }\n }\n result += ' ' + a;\n if (value && value.length) {\n result += '=\"' + escapeHtml(value, true) + '\"';\n } else if (options.allowedEmptyAttributes.includes(a)) {\n result += '=\"\"';\n }\n } else {\n delete frame.attribs[a];\n }\n });\n }\n if (options.selfClosing.indexOf(name) !== -1) {\n result += ' />';\n } else {\n result += '>';\n if (frame.innerText && !hasText && !options.textFilter) {\n result += escapeHtml(frame.innerText);\n addedText = true;\n }\n }\n if (skip) {\n result = tempResult + escapeHtml(result);\n tempResult = '';\n }\n },\n ontext: function(text) {\n if (skipText) {\n return;\n }\n const lastFrame = stack[stack.length - 1];\n let tag;\n\n if (lastFrame) {\n tag = lastFrame.tag;\n // If inner text was set by transform function then let's use it\n text = lastFrame.innerText !== undefined ? lastFrame.innerText : text;\n }\n\n if (options.disallowedTagsMode === 'completelyDiscard' && !tagAllowed(tag)) {\n text = '';\n } else if ((options.disallowedTagsMode === 'discard' || options.disallowedTagsMode === 'completelyDiscard') && ((tag === 'script') || (tag === 'style'))) {\n // htmlparser2 gives us these as-is. Escaping them ruins the content. Allowing\n // script tags is, by definition, game over for XSS protection, so if that's\n // your concern, don't allow them. The same is essentially true for style tags\n // which have their own collection of XSS vectors.\n result += text;\n } else {\n const escaped = escapeHtml(text, false);\n if (options.textFilter && !addedText) {\n result += options.textFilter(escaped, tag);\n } else if (!addedText) {\n result += escaped;\n }\n }\n if (stack.length) {\n const frame = stack[stack.length - 1];\n frame.text += text;\n }\n },\n onclosetag: function(name, isImplied) {\n\n if (skipText) {\n skipTextDepth--;\n if (!skipTextDepth) {\n skipText = false;\n } else {\n return;\n }\n }\n\n const frame = stack.pop();\n if (!frame) {\n // Do not crash on bad markup\n return;\n }\n\n if (frame.tag !== name) {\n // Another case of bad markup.\n // Push to stack, so that it will be used in future closing tags.\n stack.push(frame);\n return;\n }\n\n skipText = options.enforceHtmlBoundary ? name === 'html' : false;\n depth--;\n const skip = skipMap[depth];\n if (skip) {\n delete skipMap[depth];\n if (options.disallowedTagsMode === 'discard' || options.disallowedTagsMode === 'completelyDiscard') {\n frame.updateParentNodeText();\n return;\n }\n tempResult = result;\n result = '';\n }\n\n if (transformMap[depth]) {\n name = transformMap[depth];\n delete transformMap[depth];\n }\n\n if (options.exclusiveFilter && options.exclusiveFilter(frame)) {\n result = result.substr(0, frame.tagPosition);\n return;\n }\n\n frame.updateParentNodeMediaChildren();\n frame.updateParentNodeText();\n\n if (\n // Already output />\n options.selfClosing.indexOf(name) !== -1 ||\n // Escaped tag, closing tag is implied\n (isImplied && !tagAllowed(name) && [ 'escape', 'recursiveEscape' ].indexOf(options.disallowedTagsMode) >= 0)\n ) {\n if (skip) {\n result = tempResult;\n tempResult = '';\n }\n return;\n }\n\n result += '</' + name + '>';\n if (skip) {\n result = tempResult + escapeHtml(result);\n tempResult = '';\n }\n addedText = false;\n }\n }, options.parser);\n parser.write(html);\n parser.end();\n\n return result;\n\n function initializeState() {\n result = '';\n depth = 0;\n stack = [];\n skipMap = {};\n transformMap = {};\n skipText = false;\n skipTextDepth = 0;\n }\n\n function escapeHtml(s, quote) {\n if (typeof (s) !== 'string') {\n s = s + '';\n }\n if (options.parser.decodeEntities) {\n s = s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n if (quote) {\n s = s.replace(/\"/g, '"');\n }\n }\n // TODO: this is inadequate because it will pass `&0;`. This approach\n // will not work, each & must be considered with regard to whether it\n // is followed by a 100% syntactically valid entity or not, and escaped\n // if it is not. If this bothers you, don't set parser.decodeEntities\n // to false. (The default is true.)\n s = s.replace(/&(?![a-zA-Z0-9#]{1,20};)/g, '&') // Match ampersands not part of existing HTML entity\n .replace(/</g, '<')\n .replace(/>/g, '>');\n if (quote) {\n s = s.replace(/\"/g, '"');\n }\n return s;\n }\n\n function naughtyHref(name, href) {\n // Browsers ignore character codes of 32 (space) and below in a surprising\n // number of situations. Start reading here:\n // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#Embedded_tab\n // eslint-disable-next-line no-control-regex\n href = href.replace(/[\\x00-\\x20]+/g, '');\n // Clobber any comments in URLs, which the browser might\n // interpret inside an XML data island, allowing\n // a javascript: URL to be snuck through\n while (true) {\n const firstIndex = href.indexOf('<!--');\n if (firstIndex === -1) {\n break;\n }\n const lastIndex = href.indexOf('-->', firstIndex + 4);\n if (lastIndex === -1) {\n break;\n }\n href = href.substring(0, firstIndex) + href.substring(lastIndex + 3);\n }\n // Case insensitive so we don't get faked out by JAVASCRIPT #1\n // Allow more characters after the first so we don't get faked\n // out by certain schemes browsers accept\n const matches = href.match(/^([a-zA-Z][a-zA-Z0-9.\\-+]*):/);\n if (!matches) {\n // Protocol-relative URL starting with any combination of '/' and '\\'\n if (href.match(/^[/\\\\]{2}/)) {\n return !options.allowProtocolRelative;\n }\n\n // No scheme\n return false;\n }\n const scheme = matches[1].toLowerCase();\n\n if (has(options.allowedSchemesByTag, name)) {\n return options.allowedSchemesByTag[name].indexOf(scheme) === -1;\n }\n\n return !options.allowedSchemes || options.allowedSchemes.indexOf(scheme) === -1;\n }\n\n function parseUrl(value) {\n value = value.replace(/^(\\w+:)?\\s*[\\\\/]\\s*[\\\\/]/, '$1//');\n if (value.startsWith('relative:')) {\n // An attempt to exploit our workaround for base URLs being\n // mandatory for relative URL validation in the WHATWG\n // URL parser, reject it\n throw new Error('relative: exploit attempt');\n }\n // naughtyHref is in charge of whether protocol relative URLs\n // are cool. Here we are concerned just with allowed hostnames and\n // whether to allow relative URLs.\n //\n // Build a placeholder \"base URL\" against which any reasonable\n // relative URL may be parsed successfully\n let base = 'relative://relative-site';\n for (let i = 0; (i < 100); i++) {\n base += `/${i}`;\n }\n\n const parsed = new URL(value, base);\n\n const isRelativeUrl = parsed && parsed.hostname === 'relative-site' && parsed.protocol === 'relative:';\n return {\n isRelativeUrl,\n url: parsed\n };\n }\n /**\n * Filters user input css properties by allowlisted regex attributes.\n * Modifies the abstractSyntaxTree object.\n *\n * @param {object} abstractSyntaxTree - Object representation of CSS attributes.\n * @property {array[Declaration]} abstractSyntaxTree.nodes[0] - Each object cointains prop and value key, i.e { prop: 'color', value: 'red' }.\n * @param {object} allowedStyles - Keys are properties (i.e color), value is list of permitted regex rules (i.e /green/i).\n * @return {object} - The modified tree.\n */\n function filterCss(abstractSyntaxTree, allowedStyles) {\n if (!allowedStyles) {\n return abstractSyntaxTree;\n }\n\n const astRules = abstractSyntaxTree.nodes[0];\n let selectedRule;\n\n // Merge global and tag-specific styles into new AST.\n if (allowedStyles[astRules.selector] && allowedStyles['*']) {\n selectedRule = deepmerge(\n allowedStyles[astRules.selector],\n allowedStyles['*']\n );\n } else {\n selectedRule = allowedStyles[astRules.selector] || allowedStyles['*'];\n }\n\n if (selectedRule) {\n abstractSyntaxTree.nodes[0].nodes = astRules.nodes.reduce(filterDeclarations(selectedRule), []);\n }\n\n return abstractSyntaxTree;\n }\n\n /**\n * Extracts the style attributes from an AbstractSyntaxTree and formats those\n * values in the inline style attribute format.\n *\n * @param {AbstractSyntaxTree} filteredAST\n * @return {string} - Example: \"color:yellow;text-align:center !important;font-family:helvetica;\"\n */\n function stringifyStyleAttributes(filteredAST) {\n return filteredAST.nodes[0].nodes\n .reduce(function(extractedAttributes, attrObject) {\n extractedAttributes.push(\n `${attrObject.prop}:${attrObject.value}${attrObject.important ? ' !important' : ''}`\n );\n return extractedAttributes;\n }, [])\n .join(';');\n }\n\n /**\n * Filters the existing attributes for the given property. Discards any attributes\n * which don't match the allowlist.\n *\n * @param {object} selectedRule - Example: { color: red, font-family: helvetica }\n * @param {array} allowedDeclarationsList - List of declarations which pass the allowlist.\n * @param {object} attributeObject - Object representing the current css property.\n * @property {string} attributeObject.type - Typically 'declaration'.\n * @property {string} attributeObject.prop - The CSS property, i.e 'color'.\n * @property {string} attributeObject.value - The corresponding value to the css property, i.e 'red'.\n * @return {function} - When used in Array.reduce, will return an array of Declaration objects\n */\n function filterDeclarations(selectedRule) {\n return function (allowedDeclarationsList, attributeObject) {\n // If this property is allowlisted...\n if (has(selectedRule, attributeObject.prop)) {\n const matchesRegex = selectedRule[attributeObject.prop].some(function(regularExpression) {\n return regularExpression.test(attributeObject.value);\n });\n\n if (matchesRegex) {\n allowedDeclarationsList.push(attributeObject);\n }\n }\n return allowedDeclarationsList;\n };\n }\n\n function filterClasses(classes, allowed, allowedGlobs) {\n if (!allowed) {\n // The class attribute is allowed without filtering on this tag\n return classes;\n }\n classes = classes.split(/\\s+/);\n return classes.filter(function(clss) {\n return allowed.indexOf(clss) !== -1 || allowedGlobs.some(function(glob) {\n return glob.test(clss);\n });\n }).join(' ');\n }\n}\n\n// Defaults are accessible to you so that you can use them as a starting point\n// programmatically if you wish\n\nconst htmlParserDefaults = {\n decodeEntities: true\n};\nsanitizeHtml.defaults = {\n allowedTags: [\n // Sections derived from MDN element categories and limited to the more\n // benign categories.\n // https://developer.mozilla.org/en-US/docs/Web/HTML/Element\n // Content sectioning\n 'address', 'article', 'aside', 'footer', 'header',\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup',\n 'main', 'nav', 'section',\n // Text content\n 'blockquote', 'dd', 'div', 'dl', 'dt', 'figcaption', 'figure',\n 'hr', 'li', 'main', 'ol', 'p', 'pre', 'ul',\n // Inline text semantics\n 'a', 'abbr', 'b', 'bdi', 'bdo', 'br', 'cite', 'code', 'data', 'dfn',\n 'em', 'i', 'kbd', 'mark', 'q',\n 'rb', 'rp', 'rt', 'rtc', 'ruby',\n 's', 'samp', 'small', 'span', 'strong', 'sub', 'sup', 'time', 'u', 'var', 'wbr',\n // Table content\n 'caption', 'col', 'colgroup', 'table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr'\n ],\n // Tags that cannot be boolean\n nonBooleanAttributes: [\n 'abbr', 'accept', 'accept-charset', 'accesskey', 'action',\n 'allow', 'alt', 'as', 'autocapitalize', 'autocomplete',\n 'blocking', 'charset', 'cite', 'class', 'color', 'cols',\n 'colspan', 'content', 'contenteditable', 'coords', 'crossorigin',\n 'data', 'datetime', 'decoding', 'dir', 'dirname', 'download',\n 'draggable', 'enctype', 'enterkeyhint', 'fetchpriority', 'for',\n 'form', 'formaction', 'formenctype', 'formmethod', 'formtarget',\n 'headers', 'height', 'hidden', 'high', 'href', 'hreflang',\n 'http-equiv', 'id', 'imagesizes', 'imagesrcset', 'inputmode',\n 'integrity', 'is', 'itemid', 'itemprop', 'itemref', 'itemtype',\n 'kind', 'label', 'lang', 'list', 'loading', 'low', 'max',\n 'maxlength', 'media', 'method', 'min', 'minlength', 'name',\n 'nonce', 'optimum', 'pattern', 'ping', 'placeholder', 'popover',\n 'popovertarget', 'popovertargetaction', 'poster', 'preload',\n 'referrerpolicy', 'rel', 'rows', 'rowspan', 'sandbox', 'scope',\n 'shape', 'size', 'sizes', 'slot', 'span', 'spellcheck', 'src',\n 'srcdoc', 'srclang', 'srcset', 'start', 'step', 'style',\n 'tabindex', 'target', 'title', 'translate', 'type', 'usemap',\n 'value', 'width', 'wrap',\n // Event handlers\n 'onauxclick', 'onafterprint', 'onbeforematch', 'onbeforeprint',\n 'onbeforeunload', 'onbeforetoggle', 'onblur', 'oncancel',\n 'oncanplay', 'oncanplaythrough', 'onchange', 'onclick', 'onclose',\n 'oncontextlost', 'oncontextmenu', 'oncontextrestored', 'oncopy',\n 'oncuechange', 'oncut', 'ondblclick', 'ondrag', 'ondragend',\n 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart',\n 'ondrop', 'ondurationchange', 'onemptied', 'onended',\n 'onerror', 'onfocus', 'onformdata', 'onhashchange', 'oninput',\n 'oninvalid', 'onkeydown', 'onkeypress', 'onkeyup',\n 'onlanguagechange', 'onload', 'onloadeddata', 'onloadedmetadata',\n 'onloadstart', 'onmessage', 'onmessageerror', 'onmousedown',\n 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout',\n 'onmouseover', 'onmouseup', 'onoffline', 'ononline', 'onpagehide',\n 'onpageshow', 'onpaste', 'onpause', 'onplay', 'onplaying',\n 'onpopstate', 'onprogress', 'onratechange', 'onreset', 'onresize',\n 'onrejectionhandled', 'onscroll', 'onscrollend',\n 'onsecuritypolicyviolation', 'onseeked', 'onseeking', 'onselect',\n 'onslotchange', 'onstalled', 'onstorage', 'onsubmit', 'onsuspend',\n 'ontimeupdate', 'ontoggle', 'onunhandledrejection', 'onunload',\n 'onvolumechange', 'onwaiting', 'onwheel'\n ],\n disallowedTagsMode: 'discard',\n allowedAttributes: {\n a: [ 'href', 'name', 'target' ],\n // We don't currently allow img itself by default, but\n // these attributes would make sense if we did.\n img: [ 'src', 'srcset', 'alt', 'title', 'width', 'height', 'loading' ]\n },\n allowedEmptyAttributes: [\n 'alt'\n ],\n // Lots of these won't come up by default because we don't allow them\n selfClosing: [ 'img', 'br', 'hr', 'area', 'base', 'basefont', 'input', 'link', 'meta' ],\n // URL schemes we permit\n allowedSchemes: [ 'http', 'https', 'ftp', 'mailto', 'tel' ],\n allowedSchemesByTag: {},\n allowedSchemesAppliedToAttributes: [ 'href', 'src', 'cite' ],\n allowProtocolRelative: true,\n enforceHtmlBoundary: false,\n parseStyleAttributes: true\n};\n\nsanitizeHtml.simpleTransform = function(newTagName, newAttribs, merge) {\n merge = (merge === undefined) ? true : merge;\n newAttribs = newAttribs || {};\n\n return function(tagName, attribs) {\n let attrib;\n if (merge) {\n for (attrib in newAttribs) {\n attribs[attrib] = newAttribs[attrib];\n }\n } else {\n attribs = newAttribs;\n }\n\n return {\n tagName: newTagName,\n attribs: attribs\n };\n };\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.attributeNames = exports.elementNames = void 0;\nexports.elementNames = new Map([\n \"altGlyph\",\n \"altGlyphDef\",\n \"altGlyphItem\",\n \"animateColor\",\n \"animateMotion\",\n \"animateTransform\",\n \"clipPath\",\n \"feBlend\",\n \"feColorMatrix\",\n \"feComponentTransfer\",\n \"feComposite\",\n \"feConvolveMatrix\",\n \"feDiffuseLighting\",\n \"feDisplacementMap\",\n \"feDistantLight\",\n \"feDropShadow\",\n \"feFlood\",\n \"feFuncA\",\n \"feFuncB\",\n \"feFuncG\",\n \"feFuncR\",\n \"feGaussianBlur\",\n \"feImage\",\n \"feMerge\",\n \"feMergeNode\",\n \"feMorphology\",\n \"feOffset\",\n \"fePointLight\",\n \"feSpecularLighting\",\n \"feSpotLight\",\n \"feTile\",\n \"feTurbulence\",\n \"foreignObject\",\n \"glyphRef\",\n \"linearGradient\",\n \"radialGradient\",\n \"textPath\",\n].map(function (val) { return [val.toLowerCase(), val]; }));\nexports.attributeNames = new Map([\n \"definitionURL\",\n \"attributeName\",\n \"attributeType\",\n \"baseFrequency\",\n \"baseProfile\",\n \"calcMode\",\n \"clipPathUnits\",\n \"diffuseConstant\",\n \"edgeMode\",\n \"filterUnits\",\n \"glyphRef\",\n \"gradientTransform\",\n \"gradientUnits\",\n \"kernelMatrix\",\n \"kernelUnitLength\",\n \"keyPoints\",\n \"keySplines\",\n \"keyTimes\",\n \"lengthAdjust\",\n \"limitingConeAngle\",\n \"markerHeight\",\n \"markerUnits\",\n \"markerWidth\",\n \"maskContentUnits\",\n \"maskUnits\",\n \"numOctaves\",\n \"pathLength\",\n \"patternContentUnits\",\n \"patternTransform\",\n \"patternUnits\",\n \"pointsAtX\",\n \"pointsAtY\",\n \"pointsAtZ\",\n \"preserveAlpha\",\n \"preserveAspectRatio\",\n \"primitiveUnits\",\n \"refX\",\n \"refY\",\n \"repeatCount\",\n \"repeatDur\",\n \"requiredExtensions\",\n \"requiredFeatures\",\n \"specularConstant\",\n \"specularExponent\",\n \"spreadMethod\",\n \"startOffset\",\n \"stdDeviation\",\n \"stitchTiles\",\n \"surfaceScale\",\n \"systemLanguage\",\n \"tableValues\",\n \"targetX\",\n \"targetY\",\n \"textLength\",\n \"viewBox\",\n \"viewTarget\",\n \"xChannelSelector\",\n \"yChannelSelector\",\n \"zoomAndPan\",\n].map(function (val) { return [val.toLowerCase(), val]; }));\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.render = void 0;\n/*\n * Module dependencies\n */\nvar ElementType = __importStar(require(\"domelementtype\"));\nvar entities_1 = require(\"entities\");\n/**\n * Mixed-case SVG and MathML tags & attributes\n * recognized by the HTML parser.\n *\n * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign\n */\nvar foreignNames_js_1 = require(\"./foreignNames.js\");\nvar unencodedElements = new Set([\n \"style\",\n \"script\",\n \"xmp\",\n \"iframe\",\n \"noembed\",\n \"noframes\",\n \"plaintext\",\n \"noscript\",\n]);\nfunction replaceQuotes(value) {\n return value.replace(/\"/g, \""\");\n}\n/**\n * Format attributes\n */\nfunction formatAttributes(attributes, opts) {\n var _a;\n if (!attributes)\n return;\n var encode = ((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) === false\n ? replaceQuotes\n : opts.xmlMode || opts.encodeEntities !== \"utf8\"\n ? entities_1.encodeXML\n : entities_1.escapeAttribute;\n return Object.keys(attributes)\n .map(function (key) {\n var _a, _b;\n var value = (_a = attributes[key]) !== null && _a !== void 0 ? _a : \"\";\n if (opts.xmlMode === \"foreign\") {\n /* Fix up mixed-case attribute names */\n key = (_b = foreignNames_js_1.attributeNames.get(key)) !== null && _b !== void 0 ? _b : key;\n }\n if (!opts.emptyAttrs && !opts.xmlMode && value === \"\") {\n return key;\n }\n return \"\".concat(key, \"=\\\"\").concat(encode(value), \"\\\"\");\n })\n .join(\" \");\n}\n/**\n * Self-enclosing tags\n */\nvar singleTag = new Set([\n \"area\",\n \"base\",\n \"basefont\",\n \"br\",\n \"col\",\n \"command\",\n \"embed\",\n \"frame\",\n \"hr\",\n \"img\",\n \"input\",\n \"isindex\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n/**\n * Renders a DOM node or an array of DOM nodes to a string.\n *\n * Can be thought of as the equivalent of the `outerHTML` of the passed node(s).\n *\n * @param node Node to be rendered.\n * @param options Changes serialization behavior\n */\nfunction render(node, options) {\n if (options === void 0) { options = {}; }\n var nodes = \"length\" in node ? node : [node];\n var output = \"\";\n for (var i = 0; i < nodes.length; i++) {\n output += renderNode(nodes[i], options);\n }\n return output;\n}\nexports.render = render;\nexports.default = render;\nfunction renderNode(node, options) {\n switch (node.type) {\n case ElementType.Root:\n return render(node.children, options);\n // @ts-expect-error We don't use `Doctype` yet\n case ElementType.Doctype:\n case ElementType.Directive:\n return renderDirective(node);\n case ElementType.Comment:\n return renderComment(node);\n case ElementType.CDATA:\n return renderCdata(node);\n case ElementType.Script:\n case ElementType.Style:\n case ElementType.Tag:\n return renderTag(node, options);\n case ElementType.Text:\n return renderText(node, options);\n }\n}\nvar foreignModeIntegrationPoints = new Set([\n \"mi\",\n \"mo\",\n \"mn\",\n \"ms\",\n \"mtext\",\n \"annotation-xml\",\n \"foreignObject\",\n \"desc\",\n \"title\",\n]);\nvar foreignElements = new Set([\"svg\", \"math\"]);\nfunction renderTag(elem, opts) {\n var _a;\n // Handle SVG / MathML in HTML\n if (opts.xmlMode === \"foreign\") {\n /* Fix up mixed-case element names */\n elem.name = (_a = foreignNames_js_1.elementNames.get(elem.name)) !== null && _a !== void 0 ? _a : elem.name;\n /* Exit foreign mode at integration points */\n if (elem.parent &&\n foreignModeIntegrationPoints.has(elem.parent.name)) {\n opts = __assign(__assign({}, opts), { xmlMode: false });\n }\n }\n if (!opts.xmlMode && foreignElements.has(elem.name)) {\n opts = __assign(__assign({}, opts), { xmlMode: \"foreign\" });\n }\n var tag = \"<\".concat(elem.name);\n var attribs = formatAttributes(elem.attribs, opts);\n if (attribs) {\n tag += \" \".concat(attribs);\n }\n if (elem.children.length === 0 &&\n (opts.xmlMode\n ? // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags\n opts.selfClosingTags !== false\n : // User explicitly asked for self-closing tags, even in HTML mode\n opts.selfClosingTags && singleTag.has(elem.name))) {\n if (!opts.xmlMode)\n tag += \" \";\n tag += \"/>\";\n }\n else {\n tag += \">\";\n if (elem.children.length > 0) {\n tag += render(elem.children, opts);\n }\n if (opts.xmlMode || !singleTag.has(elem.name)) {\n tag += \"</\".concat(elem.name, \">\");\n }\n }\n return tag;\n}\nfunction renderDirective(elem) {\n return \"<\".concat(elem.data, \">\");\n}\nfunction renderText(elem, opts) {\n var _a;\n var data = elem.data || \"\";\n // If entities weren't decoded, no need to encode them back\n if (((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) !== false &&\n !(!opts.xmlMode &&\n elem.parent &&\n unencodedElements.has(elem.parent.name))) {\n data =\n opts.xmlMode || opts.encodeEntities !== \"utf8\"\n ? (0, entities_1.encodeXML)(data)\n : (0, entities_1.escapeText)(data);\n }\n return data;\n}\nfunction renderCdata(elem) {\n return \"<![CDATA[\".concat(elem.children[0].data, \"]]>\");\n}\nfunction renderComment(elem) {\n return \"<!--\".concat(elem.data, \"-->\");\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DomHandler = void 0;\nvar domelementtype_1 = require(\"domelementtype\");\nvar node_js_1 = require(\"./node.js\");\n__exportStar(require(\"./node.js\"), exports);\n// Default options\nvar defaultOpts = {\n withStartIndices: false,\n withEndIndices: false,\n xmlMode: false,\n};\nvar DomHandler = /** @class */ (function () {\n /**\n * @param callback Called once parsing has completed.\n * @param options Settings for the handler.\n * @param elementCB Callback whenever a tag is closed.\n */\n function DomHandler(callback, options, elementCB) {\n /** The elements of the DOM */\n this.dom = [];\n /** The root element for the DOM */\n this.root = new node_js_1.Document(this.dom);\n /** Indicated whether parsing has been completed. */\n this.done = false;\n /** Stack of open tags. */\n this.tagStack = [this.root];\n /** A data node that is still being written to. */\n this.lastNode = null;\n /** Reference to the parser instance. Used for location information. */\n this.parser = null;\n // Make it possible to skip arguments, for backwards-compatibility\n if (typeof options === \"function\") {\n elementCB = options;\n options = defaultOpts;\n }\n if (typeof callback === \"object\") {\n options = callback;\n callback = undefined;\n }\n this.callback = callback !== null && callback !== void 0 ? callback : null;\n this.options = options !== null && options !== void 0 ? options : defaultOpts;\n this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;\n }\n DomHandler.prototype.onparserinit = function (parser) {\n this.parser = parser;\n };\n // Resets the handler back to starting state\n DomHandler.prototype.onreset = function () {\n this.dom = [];\n this.root = new node_js_1.Document(this.dom);\n this.done = false;\n this.tagStack = [this.root];\n this.lastNode = null;\n this.parser = null;\n };\n // Signals the handler that parsing is done\n DomHandler.prototype.onend = function () {\n if (this.done)\n return;\n this.done = true;\n this.parser = null;\n this.handleCallback(null);\n };\n DomHandler.prototype.onerror = function (error) {\n this.handleCallback(error);\n };\n DomHandler.prototype.onclosetag = function () {\n this.lastNode = null;\n var elem = this.tagStack.pop();\n if (this.options.withEndIndices) {\n elem.endIndex = this.parser.endIndex;\n }\n if (this.elementCB)\n this.elementCB(elem);\n };\n DomHandler.prototype.onopentag = function (name, attribs) {\n var type = this.options.xmlMode ? domelementtype_1.ElementType.Tag : undefined;\n var element = new node_js_1.Element(name, attribs, undefined, type);\n this.addNode(element);\n this.tagStack.push(element);\n };\n DomHandler.prototype.ontext = function (data) {\n var lastNode = this.lastNode;\n if (lastNode && lastNode.type === domelementtype_1.ElementType.Text) {\n lastNode.data += data;\n if (this.options.withEndIndices) {\n lastNode.endIndex = this.parser.endIndex;\n }\n }\n else {\n var node = new node_js_1.Text(data);\n this.addNode(node);\n this.lastNode = node;\n }\n };\n DomHandler.prototype.oncomment = function (data) {\n if (this.lastNode && this.lastNode.type === domelementtype_1.ElementType.Comment) {\n this.lastNode.data += data;\n return;\n }\n var node = new node_js_1.Comment(data);\n this.addNode(node);\n this.lastNode = node;\n };\n DomHandler.prototype.oncommentend = function () {\n this.lastNode = null;\n };\n DomHandler.prototype.oncdatastart = function () {\n var text = new node_js_1.Text(\"\");\n var node = new node_js_1.CDATA([text]);\n this.addNode(node);\n text.parent = node;\n this.lastNode = text;\n };\n DomHandler.prototype.oncdataend = function () {\n this.lastNode = null;\n };\n DomHandler.prototype.onprocessinginstruction = function (name, data) {\n var node = new node_js_1.ProcessingInstruction(name, data);\n this.addNode(node);\n };\n DomHandler.prototype.handleCallback = function (error) {\n if (typeof this.callback === \"function\") {\n this.callback(error, this.dom);\n }\n else if (error) {\n throw error;\n }\n };\n DomHandler.prototype.addNode = function (node) {\n var parent = this.tagStack[this.tagStack.length - 1];\n var previousSibling = parent.children[parent.children.length - 1];\n if (this.options.withStartIndices) {\n node.startIndex = this.parser.startIndex;\n }\n if (this.options.withEndIndices) {\n node.endIndex = this.parser.endIndex;\n }\n parent.children.push(node);\n if (previousSibling) {\n node.prev = previousSibling;\n previousSibling.next = node;\n }\n node.parent = parent;\n this.lastNode = null;\n };\n return DomHandler;\n}());\nexports.DomHandler = DomHandler;\nexports.default = DomHandler;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cloneNode = exports.hasChildren = exports.isDocument = exports.isDirective = exports.isComment = exports.isText = exports.isCDATA = exports.isTag = exports.Element = exports.Document = exports.CDATA = exports.NodeWithChildren = exports.ProcessingInstruction = exports.Comment = exports.Text = exports.DataNode = exports.Node = void 0;\nvar domelementtype_1 = require(\"domelementtype\");\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nvar Node = /** @class */ (function () {\n function Node() {\n /** Parent of the node */\n this.parent = null;\n /** Previous sibling */\n this.prev = null;\n /** Next sibling */\n this.next = null;\n /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n this.startIndex = null;\n /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n this.endIndex = null;\n }\n Object.defineProperty(Node.prototype, \"parentNode\", {\n // Read-write aliases for properties\n /**\n * Same as {@link parent}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.parent;\n },\n set: function (parent) {\n this.parent = parent;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"previousSibling\", {\n /**\n * Same as {@link prev}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.prev;\n },\n set: function (prev) {\n this.prev = prev;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"nextSibling\", {\n /**\n * Same as {@link next}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.next;\n },\n set: function (next) {\n this.next = next;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Clone this node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\n Node.prototype.cloneNode = function (recursive) {\n if (recursive === void 0) { recursive = false; }\n return cloneNode(this, recursive);\n };\n return Node;\n}());\nexports.Node = Node;\n/**\n * A node that contains some data.\n */\nvar DataNode = /** @class */ (function (_super) {\n __extends(DataNode, _super);\n /**\n * @param data The content of the data node\n */\n function DataNode(data) {\n var _this = _super.call(this) || this;\n _this.data = data;\n return _this;\n }\n Object.defineProperty(DataNode.prototype, \"nodeValue\", {\n /**\n * Same as {@link data}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.data;\n },\n set: function (data) {\n this.data = data;\n },\n enumerable: false,\n configurable: true\n });\n return DataNode;\n}(Node));\nexports.DataNode = DataNode;\n/**\n * Text within the document.\n */\nvar Text = /** @class */ (function (_super) {\n __extends(Text, _super);\n function Text() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = domelementtype_1.ElementType.Text;\n return _this;\n }\n Object.defineProperty(Text.prototype, \"nodeType\", {\n get: function () {\n return 3;\n },\n enumerable: false,\n configurable: true\n });\n return Text;\n}(DataNode));\nexports.Text = Text;\n/**\n * Comments within the document.\n */\nvar Comment = /** @class */ (function (_super) {\n __extends(Comment, _super);\n function Comment() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = domelementtype_1.ElementType.Comment;\n return _this;\n }\n Object.defineProperty(Comment.prototype, \"nodeType\", {\n get: function () {\n return 8;\n },\n enumerable: false,\n configurable: true\n });\n return Comment;\n}(DataNode));\nexports.Comment = Comment;\n/**\n * Processing instructions, including doc types.\n */\nvar ProcessingInstruction = /** @class */ (function (_super) {\n __extends(ProcessingInstruction, _super);\n function ProcessingInstruction(name, data) {\n var _this = _super.call(this, data) || this;\n _this.name = name;\n _this.type = domelementtype_1.ElementType.Directive;\n return _this;\n }\n Object.defineProperty(ProcessingInstruction.prototype, \"nodeType\", {\n get: function () {\n return 1;\n },\n enumerable: false,\n configurable: true\n });\n return ProcessingInstruction;\n}(DataNode));\nexports.ProcessingInstruction = ProcessingInstruction;\n/**\n * A `Node` that can have children.\n */\nvar NodeWithChildren = /** @class */ (function (_super) {\n __extends(NodeWithChildren, _super);\n /**\n * @param children Children of the node. Only certain node types can have children.\n */\n function NodeWithChildren(children) {\n var _this = _super.call(this) || this;\n _this.children = children;\n return _this;\n }\n Object.defineProperty(NodeWithChildren.prototype, \"firstChild\", {\n // Aliases\n /** First child of the node. */\n get: function () {\n var _a;\n return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(NodeWithChildren.prototype, \"lastChild\", {\n /** Last child of the node. */\n get: function () {\n return this.children.length > 0\n ? this.children[this.children.length - 1]\n : null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(NodeWithChildren.prototype, \"childNodes\", {\n /**\n * Same as {@link children}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.children;\n },\n set: function (children) {\n this.children = children;\n },\n enumerable: false,\n configurable: true\n });\n return NodeWithChildren;\n}(Node));\nexports.NodeWithChildren = NodeWithChildren;\nvar CDATA = /** @class */ (function (_super) {\n __extends(CDATA, _super);\n function CDATA() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = domelementtype_1.ElementType.CDATA;\n return _this;\n }\n Object.defineProperty(CDATA.prototype, \"nodeType\", {\n get: function () {\n return 4;\n },\n enumerable: false,\n configurable: true\n });\n return CDATA;\n}(NodeWithChildren));\nexports.CDATA = CDATA;\n/**\n * The root node of the document.\n */\nvar Document = /** @class */ (function (_super) {\n __extends(Document, _super);\n function Document() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = domelementtype_1.ElementType.Root;\n return _this;\n }\n Object.defineProperty(Document.prototype, \"nodeType\", {\n get: function () {\n return 9;\n },\n enumerable: false,\n configurable: true\n });\n return Document;\n}(NodeWithChildren));\nexports.Document = Document;\n/**\n * An element within the DOM.\n */\nvar Element = /** @class */ (function (_super) {\n __extends(Element, _super);\n /**\n * @param name Name of the tag, eg. `div`, `span`.\n * @param attribs Object mapping attribute names to attribute values.\n * @param children Children of the node.\n */\n function Element(name, attribs, children, type) {\n if (children === void 0) { children = []; }\n if (type === void 0) { type = name === \"script\"\n ? domelementtype_1.ElementType.Script\n : name === \"style\"\n ? domelementtype_1.ElementType.Style\n : domelementtype_1.ElementType.Tag; }\n var _this = _super.call(this, children) || this;\n _this.name = name;\n _this.attribs = attribs;\n _this.type = type;\n return _this;\n }\n Object.defineProperty(Element.prototype, \"nodeType\", {\n get: function () {\n return 1;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Element.prototype, \"tagName\", {\n // DOM Level 1 aliases\n /**\n * Same as {@link name}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.name;\n },\n set: function (name) {\n this.name = name;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Element.prototype, \"attributes\", {\n get: function () {\n var _this = this;\n return Object.keys(this.attribs).map(function (name) {\n var _a, _b;\n return ({\n name: name,\n value: _this.attribs[name],\n namespace: (_a = _this[\"x-attribsNamespace\"]) === null || _a === void 0 ? void 0 : _a[name],\n prefix: (_b = _this[\"x-attribsPrefix\"]) === null || _b === void 0 ? void 0 : _b[name],\n });\n });\n },\n enumerable: false,\n configurable: true\n });\n return Element;\n}(NodeWithChildren));\nexports.Element = Element;\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `Element`, `false` otherwise.\n */\nfunction isTag(node) {\n return (0, domelementtype_1.isTag)(node);\n}\nexports.isTag = isTag;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `CDATA`, `false` otherwise.\n */\nfunction isCDATA(node) {\n return node.type === domelementtype_1.ElementType.CDATA;\n}\nexports.isCDATA = isCDATA;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Text`, `false` otherwise.\n */\nfunction isText(node) {\n return node.type === domelementtype_1.ElementType.Text;\n}\nexports.isText = isText;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Comment`, `false` otherwise.\n */\nfunction isComment(node) {\n return node.type === domelementtype_1.ElementType.Comment;\n}\nexports.isComment = isComment;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDirective(node) {\n return node.type === domelementtype_1.ElementType.Directive;\n}\nexports.isDirective = isDirective;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDocument(node) {\n return node.type === domelementtype_1.ElementType.Root;\n}\nexports.isDocument = isDocument;\n/**\n * @param node Node to check.\n * @returns `true` if the node has children, `false` otherwise.\n */\nfunction hasChildren(node) {\n return Object.prototype.hasOwnProperty.call(node, \"children\");\n}\nexports.hasChildren = hasChildren;\n/**\n * Clone a node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nfunction cloneNode(node, recursive) {\n if (recursive === void 0) { recursive = false; }\n var result;\n if (isText(node)) {\n result = new Text(node.data);\n }\n else if (isComment(node)) {\n result = new Comment(node.data);\n }\n else if (isTag(node)) {\n var children = recursive ? cloneChildren(node.children) : [];\n var clone_1 = new Element(node.name, __assign({}, node.attribs), children);\n children.forEach(function (child) { return (child.parent = clone_1); });\n if (node.namespace != null) {\n clone_1.namespace = node.namespace;\n }\n if (node[\"x-attribsNamespace\"]) {\n clone_1[\"x-attribsNamespace\"] = __assign({}, node[\"x-attribsNamespace\"]);\n }\n if (node[\"x-attribsPrefix\"]) {\n clone_1[\"x-attribsPrefix\"] = __assign({}, node[\"x-attribsPrefix\"]);\n }\n result = clone_1;\n }\n else if (isCDATA(node)) {\n var children = recursive ? cloneChildren(node.children) : [];\n var clone_2 = new CDATA(children);\n children.forEach(function (child) { return (child.parent = clone_2); });\n result = clone_2;\n }\n else if (isDocument(node)) {\n var children = recursive ? cloneChildren(node.children) : [];\n var clone_3 = new Document(children);\n children.forEach(function (child) { return (child.parent = clone_3); });\n if (node[\"x-mode\"]) {\n clone_3[\"x-mode\"] = node[\"x-mode\"];\n }\n result = clone_3;\n }\n else if (isDirective(node)) {\n var instruction = new ProcessingInstruction(node.name, node.data);\n if (node[\"x-name\"] != null) {\n instruction[\"x-name\"] = node[\"x-name\"];\n instruction[\"x-publicId\"] = node[\"x-publicId\"];\n instruction[\"x-systemId\"] = node[\"x-systemId\"];\n }\n result = instruction;\n }\n else {\n throw new Error(\"Not implemented yet: \".concat(node.type));\n }\n result.startIndex = node.startIndex;\n result.endIndex = node.endIndex;\n if (node.sourceCodeLocation != null) {\n result.sourceCodeLocation = node.sourceCodeLocation;\n }\n return result;\n}\nexports.cloneNode = cloneNode;\nfunction cloneChildren(childs) {\n var children = childs.map(function (child) { return cloneNode(child, true); });\n for (var i = 1; i < children.length; i++) {\n children[i].prev = children[i - 1];\n children[i - 1].next = children[i];\n }\n return children;\n}\n",null,null,null,null,null,null,null,null,"'use strict';\n\nmodule.exports = string => {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a \\unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n};\n",null,null,null,"\nvar space = require('to-space-case')\n\n/**\n * Export.\n */\n\nmodule.exports = toCamelCase\n\n/**\n * Convert a `string` to camel case.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction toCamelCase(string) {\n return space(string).replace(/\\s(\\w)/g, function (matches, letter) {\n return letter.toUpperCase()\n })\n}\n","\n/**\n * Export.\n */\n\nmodule.exports = toNoCase\n\n/**\n * Test whether a string is camel-case.\n */\n\nvar hasSpace = /\\s/\nvar hasSeparator = /(_|-|\\.|:)/\nvar hasCamel = /([a-z][A-Z]|[A-Z][a-z])/\n\n/**\n * Remove any starting case from a `string`, like camel or snake, but keep\n * spaces and punctuation that may be important otherwise.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction toNoCase(string) {\n if (hasSpace.test(string)) return string.toLowerCase()\n if (hasSeparator.test(string)) return (unseparate(string) || string).toLowerCase()\n if (hasCamel.test(string)) return uncamelize(string).toLowerCase()\n return string.toLowerCase()\n}\n\n/**\n * Separator splitter.\n */\n\nvar separatorSplitter = /[\\W_]+(.|$)/g\n\n/**\n * Un-separate a `string`.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction unseparate(string) {\n return string.replace(separatorSplitter, function (m, next) {\n return next ? ' ' + next : ''\n })\n}\n\n/**\n * Camelcase splitter.\n */\n\nvar camelSplitter = /(.)([A-Z]+)/g\n\n/**\n * Un-camelcase a `string`.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction uncamelize(string) {\n return string.replace(camelSplitter, function (m, previous, uppers) {\n return previous + ' ' + uppers.toLowerCase().split('').join(' ')\n })\n}\n","\nvar clean = require('to-no-case')\n\n/**\n * Export.\n */\n\nmodule.exports = toSpaceCase\n\n/**\n * Convert a `string` to space case.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction toSpaceCase(string) {\n return clean(string).replace(/[\\W_]+(.|$)/g, function (matches, match) {\n return match ? ' ' + match : ''\n }).trim()\n}\n","export function merge(...sets:Array<string>):string {\n\tif (sets.length > 1) {\n\t\tsets[0] = sets[0].slice(0, -1);\n\t\tconst xl = sets.length - 1;\n\t\tfor (let x = 1; x < xl; ++x) {\n\t\t\tsets[x] = sets[x].slice(1, -1);\n\t\t}\n\t\tsets[xl] = sets[xl].slice(1);\n\t\treturn sets.join('');\n\t} else {\n\t\treturn sets[0];\n\t}\n}\n\nexport function subexp(str:string):string {\n\treturn \"(?:\" + str + \")\";\n}\n\nexport function typeOf(o:any):string {\n\treturn o === undefined ? \"undefined\" : (o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase());\n}\n\nexport function toUpperCase(str:string):string {\n\treturn str.toUpperCase();\n}\n\nexport function toArray(obj:any):Array<any> {\n\treturn obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];\n}\n\n\nexport function assign(target: object, source: any): any {\n\tconst obj = target as any;\n\tif (source) {\n\t\tfor (const key in source) {\n\t\t\tobj[key] = source[key];\n\t\t}\n\t}\n\treturn obj;\n}","import { URIRegExps } from \"./uri\";\nimport { merge, subexp } from \"./util\";\n\nexport function buildExps(isIRI:boolean):URIRegExps {\n\tconst\n\t\tALPHA$$ = \"[A-Za-z]\",\n\t\tCR$ = \"[\\\\x0D]\",\n\t\tDIGIT$$ = \"[0-9]\",\n\t\tDQUOTE$$ = \"[\\\\x22]\",\n\t\tHEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"), //case-insensitive\n\t\tLF$$ = \"[\\\\x0A]\",\n\t\tSP$$ = \"[\\\\x20]\",\n\t\tPCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)), //expanded\n\t\tGEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n\t\tSUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n\t\tRESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n\t\tUCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\", //subset, excludes bidi control characters\n\t\tIPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\", //subset\n\t\tUNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n\t\tSCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n\t\tUSERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n\t\tDEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n\t\tDEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$), //relaxed parsing rules\n\t\tIPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n\t\tH16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n\t\tLS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n\t\tIPV6ADDRESS1$ = subexp( subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$), // 6( h16 \":\" ) ls32\n\t\tIPV6ADDRESS2$ = subexp( \"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$), // \"::\" 5( h16 \":\" ) ls32\n\t\tIPV6ADDRESS3$ = subexp(subexp( H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$), //[ h16 ] \"::\" 4( h16 \":\" ) ls32\n\t\tIPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$), //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n\t\tIPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$), //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n\t\tIPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" + H16$ + \"\\\\:\" + LS32$), //[ *3( h16 \":\" ) h16 ] \"::\" h16 \":\" ls32\n\t\tIPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\" + LS32$), //[ *4( h16 \":\" ) h16 ] \"::\" ls32\n\t\tIPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\" + H16$ ), //[ *5( h16 \":\" ) h16 ] \"::\" h16\n\t\tIPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\" ), //[ *6( h16 \":\" ) h16 ] \"::\"\n\t\tIPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n\t\tZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"), //RFC 6874\n\t\tIPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$), //RFC 6874\n\t\tIPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$), //RFC 6874, with relaxed parsing rules\n\t\tIPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n\t\tIP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"), //RFC 6874\n\t\tREG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n\t\tHOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n\t\tPORT$ = subexp(DIGIT$$ + \"*\"),\n\t\tAUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n\t\tPCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n\t\tSEGMENT$ = subexp(PCHAR$ + \"*\"),\n\t\tSEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n\t\tSEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n\t\tPATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n\t\tPATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"), //simplified\n\t\tPATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n\t\tPATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tQUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n\t\tFRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n\t\tHIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tURI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tRELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n\t\tRELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tURI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n\t\tABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n\n\t\tGENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tRELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n\t\tSAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tAUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\"\n\t;\n\n\treturn {\n\t\tNOT_SCHEME : new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n\t\tNOT_USERINFO : new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_HOST : new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH : new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH_NOSCHEME : new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_QUERY : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n\t\tNOT_FRAGMENT : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n\t\tESCAPE : new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tUNRESERVED : new RegExp(UNRESERVED$$, \"g\"),\n\t\tOTHER_CHARS : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n\t\tPCT_ENCODED : new RegExp(PCT_ENCODED$, \"g\"),\n\t\tIPV4ADDRESS : new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n\t\tIPV6ADDRESS : new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\") //RFC 6874, with relaxed parsing rules\n\t};\n}\n\nexport default buildExps(false);\n","import { URIRegExps } from \"./uri\";\nimport { buildExps } from \"./regexps-uri\";\n\nexport default buildExps(true);\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport default punycode;\n","/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/uri-js\n */\n\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this list of\n * conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list\n * of conditions and the following disclaimer in the documentation and/or other materials\n * provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\n\nimport URI_PROTOCOL from \"./regexps-uri\";\nimport IRI_PROTOCOL from \"./regexps-iri\";\nimport punycode from \"punycode\";\nimport { toUpperCase, typeOf, assign } from \"./util\";\n\nexport interface URIComponents {\n\tscheme?:string;\n\tuserinfo?:string;\n\thost?:string;\n\tport?:number|string;\n\tpath?:string;\n\tquery?:string;\n\tfragment?:string;\n\treference?:string;\n\terror?:string;\n}\n\nexport interface URIOptions {\n\tscheme?:string;\n\treference?:string;\n\ttolerant?:boolean;\n\tabsolutePath?:boolean;\n\tiri?:boolean;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n}\n\nexport interface URISchemeHandler<Components extends URIComponents = URIComponents, Options extends URIOptions = URIOptions, ParentComponents extends URIComponents = URIComponents> {\n\tscheme:string;\n\tparse(components:ParentComponents, options:Options):Components;\n\tserialize(components:Components, options:Options):ParentComponents;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n\tabsolutePath?:boolean;\n}\n\nexport interface URIRegExps {\n\tNOT_SCHEME : RegExp,\n\tNOT_USERINFO : RegExp,\n\tNOT_HOST : RegExp,\n\tNOT_PATH : RegExp,\n\tNOT_PATH_NOSCHEME : RegExp,\n\tNOT_QUERY : RegExp,\n\tNOT_FRAGMENT : RegExp,\n\tESCAPE : RegExp,\n\tUNRESERVED : RegExp,\n\tOTHER_CHARS : RegExp,\n\tPCT_ENCODED : RegExp,\n\tIPV4ADDRESS : RegExp,\n\tIPV6ADDRESS : RegExp,\n}\n\nexport const SCHEMES:{[scheme:string]:URISchemeHandler} = {};\n\nexport function pctEncChar(chr:string):string {\n\tconst c = chr.charCodeAt(0);\n\tlet e:string;\n\n\tif (c < 16) e = \"%0\" + c.toString(16).toUpperCase();\n\telse if (c < 128) e = \"%\" + c.toString(16).toUpperCase();\n\telse if (c < 2048) e = \"%\" + ((c >> 6) | 192).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\telse e = \"%\" + ((c >> 12) | 224).toString(16).toUpperCase() + \"%\" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\n\treturn e;\n}\n\nexport function pctDecChars(str:string):string {\n\tlet newStr = \"\";\n\tlet i = 0;\n\tconst il = str.length;\n\n\twhile (i < il) {\n\t\tconst c = parseInt(str.substr(i + 1, 2), 16);\n\n\t\tif (c < 128) {\n\t\t\tnewStr += String.fromCharCode(c);\n\t\t\ti += 3;\n\t\t}\n\t\telse if (c >= 194 && c < 224) {\n\t\t\tif ((il - i) >= 6) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 6);\n\t\t\t}\n\t\t\ti += 6;\n\t\t}\n\t\telse if (c >= 224) {\n\t\t\tif ((il - i) >= 9) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tconst c3 = parseInt(str.substr(i + 7, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 9);\n\t\t\t}\n\t\t\ti += 9;\n\t\t}\n\t\telse {\n\t\t\tnewStr += str.substr(i, 3);\n\t\t\ti += 3;\n\t\t}\n\t}\n\n\treturn newStr;\n}\n\nfunction _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {\n\tfunction decodeUnreserved(str:string):string {\n\t\tconst decStr = pctDecChars(str);\n\t\treturn (!decStr.match(protocol.UNRESERVED) ? str : decStr);\n\t}\n\n\tif (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n\tif (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\n\treturn components;\n};\n\nfunction _stripLeadingZeros(str:string):string {\n\treturn str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\n\nfunction _normalizeIPv4(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV4ADDRESS) || [];\n\tconst [, address] = matches;\n\t\n\tif (address) {\n\t\treturn address.split(\".\").map(_stripLeadingZeros).join(\".\");\n\t} else {\n\t\treturn host;\n\t}\n}\n\nfunction _normalizeIPv6(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV6ADDRESS) || [];\n\tconst [, address, zone] = matches;\n\n\tif (address) {\n\t\tconst [last, first] = address.toLowerCase().split('::').reverse();\n\t\tconst firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n\t\tconst lastFields = last.split(\":\").map(_stripLeadingZeros);\n\t\tconst isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n\t\tconst fieldCount = isLastFieldIPv4Address ? 7 : 8;\n\t\tconst lastFieldsStart = lastFields.length - fieldCount;\n\t\tconst fields = Array<string>(fieldCount);\n\n\t\tfor (let x = 0; x < fieldCount; ++x) {\n\t\t\tfields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n\t\t}\n\n\t\tif (isLastFieldIPv4Address) {\n\t\t\tfields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n\t\t}\n\n\t\tconst allZeroFields = fields.reduce<Array<{index:number,length:number}>>((acc, field, index) => {\n\t\t\tif (!field || field === \"0\") {\n\t\t\t\tconst lastLongest = acc[acc.length - 1];\n\t\t\t\tif (lastLongest && lastLongest.index + lastLongest.length === index) {\n\t\t\t\t\tlastLongest.length++;\n\t\t\t\t} else {\n\t\t\t\t\tacc.push({ index, length : 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\n\t\tconst longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0];\n\n\t\tlet newHost:string;\n\t\tif (longestZeroFields && longestZeroFields.length > 1) {\n\t\t\tconst newFirst = fields.slice(0, longestZeroFields.index) ;\n\t\t\tconst newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n\t\t\tnewHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n\t\t} else {\n\t\t\tnewHost = fields.join(\":\");\n\t\t}\n\n\t\tif (zone) {\n\t\t\tnewHost += \"%\" + zone;\n\t\t}\n\n\t\treturn newHost;\n\t} else {\n\t\treturn host;\n\t}\n}\n\nconst URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nconst NO_MATCH_IS_UNDEFINED = (<RegExpMatchArray>(\"\").match(/(){0}/))[1] === undefined;\n\nexport function parse(uriString:string, options:URIOptions = {}):URIComponents {\n\tconst components:URIComponents = {};\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\n\tif (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n\n\tconst matches = uriString.match(URI_PARSE);\n\n\tif (matches) {\n\t\tif (NO_MATCH_IS_UNDEFINED) {\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1];\n\t\t\tcomponents.userinfo = matches[3];\n\t\t\tcomponents.host = matches[4];\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = matches[7];\n\t\t\tcomponents.fragment = matches[8];\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = matches[5];\n\t\t\t}\n\t\t} else { //IE FIX for improper RegExp matching\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1] || undefined;\n\t\t\tcomponents.userinfo = (uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined);\n\t\t\tcomponents.host = (uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined);\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = (uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined);\n\t\t\tcomponents.fragment = (uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined);\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = (uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined);\n\t\t\t}\n\t\t}\n\n\t\tif (components.host) {\n\t\t\t//normalize IP hosts\n\t\t\tcomponents.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n\t\t}\n\n\t\t//determine reference type\n\t\tif (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n\t\t\tcomponents.reference = \"same-document\";\n\t\t} else if (components.scheme === undefined) {\n\t\t\tcomponents.reference = \"relative\";\n\t\t} else if (components.fragment === undefined) {\n\t\t\tcomponents.reference = \"absolute\";\n\t\t} else {\n\t\t\tcomponents.reference = \"uri\";\n\t\t}\n\n\t\t//check for reference errors\n\t\tif (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n\t\t\tcomponents.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n\t\t}\n\n\t\t//find scheme handler\n\t\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t\t//check if scheme can't handle IRIs\n\t\tif (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n\t\t\t//if host component is a domain name\n\t\t\tif (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\tcomponents.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//convert IRI -> URI\n\t\t\t_normalizeComponentEncoding(components, URI_PROTOCOL);\n\t\t} else {\n\t\t\t//normalize encodings\n\t\t\t_normalizeComponentEncoding(components, protocol);\n\t\t}\n\n\t\t//perform scheme specific parsing\n\t\tif (schemeHandler && schemeHandler.parse) {\n\t\t\tschemeHandler.parse(components, options);\n\t\t}\n\t} else {\n\t\tcomponents.error = components.error || \"URI can not be parsed.\";\n\t}\n\n\treturn components;\n};\n\nfunction _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array<string> = [];\n\n\tif (components.userinfo !== undefined) {\n\t\turiTokens.push(components.userinfo);\n\t\turiTokens.push(\"@\");\n\t}\n\n\tif (components.host !== undefined) {\n\t\t//normalize IP hosts, add brackets and escape zone separator for IPv6\n\t\turiTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\"));\n\t}\n\n\tif (typeof components.port === \"number\" || typeof components.port === \"string\") {\n\t\turiTokens.push(\":\");\n\t\turiTokens.push(String(components.port));\n\t}\n\n\treturn uriTokens.length ? uriTokens.join(\"\") : undefined;\n};\n\nconst RDS1 = /^\\.\\.?\\//;\nconst RDS2 = /^\\/\\.(\\/|$)/;\nconst RDS3 = /^\\/\\.\\.(\\/|$)/;\nconst RDS4 = /^\\.\\.?$/;\nconst RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n\nexport function removeDotSegments(input:string):string {\n\tconst output:Array<string> = [];\n\n\twhile (input.length) {\n\t\tif (input.match(RDS1)) {\n\t\t\tinput = input.replace(RDS1, \"\");\n\t\t} else if (input.match(RDS2)) {\n\t\t\tinput = input.replace(RDS2, \"/\");\n\t\t} else if (input.match(RDS3)) {\n\t\t\tinput = input.replace(RDS3, \"/\");\n\t\t\toutput.pop();\n\t\t} else if (input === \".\" || input === \"..\") {\n\t\t\tinput = \"\";\n\t\t} else {\n\t\t\tconst im = input.match(RDS5);\n\t\t\tif (im) {\n\t\t\t\tconst s = im[0];\n\t\t\t\tinput = input.slice(s.length);\n\t\t\t\toutput.push(s);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unexpected dot segment condition\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output.join(\"\");\n};\n\nexport function serialize(components:URIComponents, options:URIOptions = {}):string {\n\tconst protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array<string> = [];\n\n\t//find scheme handler\n\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t//perform scheme specific serialization\n\tif (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n\n\tif (components.host) {\n\t\t//if host component is an IPv6 address\n\t\tif (protocol.IPV6ADDRESS.test(components.host)) {\n\t\t\t//TODO: normalize IPv6 address as per RFC 5952\n\t\t}\n\n\t\t//if host component is a domain name\n\t\telse if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {\n\t\t\t//convert IDN via punycode\n\t\t\ttry {\n\t\t\t\tcomponents.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));\n\t\t\t} catch (e) {\n\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t}\n\t\t}\n\t}\n\n\t//normalize encoding\n\t_normalizeComponentEncoding(components, protocol);\n\n\tif (options.reference !== \"suffix\" && components.scheme) {\n\t\turiTokens.push(components.scheme);\n\t\turiTokens.push(\":\");\n\t}\n\n\tconst authority = _recomposeAuthority(components, options);\n\tif (authority !== undefined) {\n\t\tif (options.reference !== \"suffix\") {\n\t\t\turiTokens.push(\"//\");\n\t\t}\n\n\t\turiTokens.push(authority);\n\n\t\tif (components.path && components.path.charAt(0) !== \"/\") {\n\t\t\turiTokens.push(\"/\");\n\t\t}\n\t}\n\n\tif (components.path !== undefined) {\n\t\tlet s = components.path;\n\n\t\tif (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n\t\t\ts = removeDotSegments(s);\n\t\t}\n\n\t\tif (authority === undefined) {\n\t\t\ts = s.replace(/^\\/\\//, \"/%2F\"); //don't allow the path to start with \"//\"\n\t\t}\n\n\t\turiTokens.push(s);\n\t}\n\n\tif (components.query !== undefined) {\n\t\turiTokens.push(\"?\");\n\t\turiTokens.push(components.query);\n\t}\n\n\tif (components.fragment !== undefined) {\n\t\turiTokens.push(\"#\");\n\t\turiTokens.push(components.fragment);\n\t}\n\n\treturn uriTokens.join(\"\"); //merge tokens into a string\n};\n\nexport function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {\n\tconst target:URIComponents = {};\n\n\tif (!skipNormalization) {\n\t\tbase = parse(serialize(base, options), options); //normalize base components\n\t\trelative = parse(serialize(relative, options), options); //normalize relative components\n\t}\n\toptions = options || {};\n\n\tif (!options.tolerant && relative.scheme) {\n\t\ttarget.scheme = relative.scheme;\n\t\t//target.authority = relative.authority;\n\t\ttarget.userinfo = relative.userinfo;\n\t\ttarget.host = relative.host;\n\t\ttarget.port = relative.port;\n\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\ttarget.query = relative.query;\n\t} else {\n\t\tif (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n\t\t\t//target.authority = relative.authority;\n\t\t\ttarget.userinfo = relative.userinfo;\n\t\t\ttarget.host = relative.host;\n\t\t\ttarget.port = relative.port;\n\t\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\t\ttarget.query = relative.query;\n\t\t} else {\n\t\t\tif (!relative.path) {\n\t\t\t\ttarget.path = base.path;\n\t\t\t\tif (relative.query !== undefined) {\n\t\t\t\t\ttarget.query = relative.query;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.query = base.query;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (relative.path.charAt(0) === \"/\") {\n\t\t\t\t\ttarget.path = removeDotSegments(relative.path);\n\t\t\t\t} else {\n\t\t\t\t\tif ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n\t\t\t\t\t\ttarget.path = \"/\" + relative.path;\n\t\t\t\t\t} else if (!base.path) {\n\t\t\t\t\t\ttarget.path = relative.path;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n\t\t\t\t\t}\n\t\t\t\t\ttarget.path = removeDotSegments(target.path);\n\t\t\t\t}\n\t\t\t\ttarget.query = relative.query;\n\t\t\t}\n\t\t\t//target.authority = base.authority;\n\t\t\ttarget.userinfo = base.userinfo;\n\t\t\ttarget.host = base.host;\n\t\t\ttarget.port = base.port;\n\t\t}\n\t\ttarget.scheme = base.scheme;\n\t}\n\n\ttarget.fragment = relative.fragment;\n\n\treturn target;\n};\n\nexport function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {\n\tconst schemelessOptions = assign({ scheme : 'null' }, options);\n\treturn serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n};\n\nexport function normalize(uri:string, options?:URIOptions):string;\nexport function normalize(uri:URIComponents, options?:URIOptions):URIComponents;\nexport function normalize(uri:any, options?:URIOptions):any {\n\tif (typeof uri === \"string\") {\n\t\turi = serialize(parse(uri, options), options);\n\t} else if (typeOf(uri) === \"object\") {\n\t\turi = parse(serialize(<URIComponents>uri, options), options);\n\t}\n\n\treturn uri;\n};\n\nexport function equal(uriA:string, uriB:string, options?: URIOptions):boolean;\nexport function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;\nexport function equal(uriA:any, uriB:any, options?:URIOptions):boolean {\n\tif (typeof uriA === \"string\") {\n\t\turiA = serialize(parse(uriA, options), options);\n\t} else if (typeOf(uriA) === \"object\") {\n\t\turiA = serialize(<URIComponents>uriA, options);\n\t}\n\n\tif (typeof uriB === \"string\") {\n\t\turiB = serialize(parse(uriB, options), options);\n\t} else if (typeOf(uriB) === \"object\") {\n\t\turiB = serialize(<URIComponents>uriB, options);\n\t}\n\n\treturn uriA === uriB;\n};\n\nexport function escapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);\n};\n\nexport function unescapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);\n};\n","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"http\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//report missing host\n\t\tif (!components.host) {\n\t\t\tcomponents.error = components.error || \"HTTP URIs must have a host.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\tconst secure = String(components.scheme).toLowerCase() === \"https\";\n\n\t\t//normalize the default port\n\t\tif (components.port === (secure ? 443 : 80) || components.port === \"\") {\n\t\t\tcomponents.port = undefined;\n\t\t}\n\t\t\n\t\t//normalize the empty path\n\t\tif (!components.path) {\n\t\t\tcomponents.path = \"/\";\n\t\t}\n\n\t\t//NOTE: We do not parse query strings for HTTP URIs\n\t\t//as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n\t\t//and not the HTTP spec.\n\n\t\treturn components;\n\t}\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport http from \"./http\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"https\",\n\tdomainHost : http.domainHost,\n\tparse : http.parse,\n\tserialize : http.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nexport interface WSComponents extends URIComponents {\n\tresourceName?: string;\n\tsecure?: boolean;\n}\n\nfunction isSecure(wsComponents:WSComponents):boolean {\n\treturn typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === \"wss\";\n}\n\n//RFC 6455\nconst handler:URISchemeHandler = {\n\tscheme : \"ws\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):WSComponents {\n\t\tconst wsComponents = components as WSComponents;\n\n\t\t//indicate if the secure flag is set\n\t\twsComponents.secure = isSecure(wsComponents);\n\n\t\t//construct resouce name\n\t\twsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : '');\n\t\twsComponents.path = undefined;\n\t\twsComponents.query = undefined;\n\n\t\treturn wsComponents;\n\t},\n\n\tserialize : function (wsComponents:WSComponents, options:URIOptions):URIComponents {\n\t\t//normalize the default port\n\t\tif (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === \"\") {\n\t\t\twsComponents.port = undefined;\n\t\t}\n\n\t\t//ensure scheme matches secure flag\n\t\tif (typeof wsComponents.secure === 'boolean') {\n\t\t\twsComponents.scheme = (wsComponents.secure ? 'wss' : 'ws');\n\t\t\twsComponents.secure = undefined;\n\t\t}\n\n\t\t//reconstruct path from resource name\n\t\tif (wsComponents.resourceName) {\n\t\t\tconst [path, query] = wsComponents.resourceName.split('?');\n\t\t\twsComponents.path = (path && path !== '/' ? path : undefined);\n\t\t\twsComponents.query = query;\n\t\t\twsComponents.resourceName = undefined;\n\t\t}\n\n\t\t//forbid fragment component\n\t\twsComponents.fragment = undefined;\n\n\t\treturn wsComponents;\n\t}\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport ws from \"./ws\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"wss\",\n\tdomainHost : ws.domainHost,\n\tparse : ws.parse,\n\tserialize : ws.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, pctDecChars, unescapeComponent } from \"../uri\";\nimport punycode from \"punycode\";\nimport { merge, subexp, toUpperCase, toArray } from \"../util\";\n\nexport interface MailtoHeaders {\n\t[hfname:string]:string\n}\n\nexport interface MailtoComponents extends URIComponents {\n\tto:Array<string>,\n\theaders?:MailtoHeaders,\n\tsubject?:string,\n\tbody?:string\n}\n\nconst O:MailtoHeaders = {};\nconst isIRI = true;\n\n//RFC 3986\nconst UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nconst HEXDIG$$ = \"[0-9A-Fa-f]\"; //case-insensitive\nconst PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)); //expanded\n\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\"; //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nconst ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nconst QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nconst VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nconst DOT_ATOM_TEXT$ = subexp(ATEXT$$ + \"+\" + subexp(\"\\\\.\" + ATEXT$$ + \"+\") + \"*\");\nconst QUOTED_PAIR$ = subexp(\"\\\\\\\\\" + VCHAR$$);\nconst QCONTENT$ = subexp(QTEXT$$ + \"|\" + QUOTED_PAIR$);\nconst QUOTED_STRING$ = subexp('\\\\\"' + QCONTENT$ + \"*\" + '\\\\\"');\n\n//RFC 6068\nconst DTEXT_NO_OBS$$ = \"[\\\\x21-\\\\x5A\\\\x5E-\\\\x7E]\"; //%d33-90 / %d94-126\nconst SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nconst QCHAR$ = subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$ + \"|\" + SOME_DELIMS$$);\nconst DOMAIN$ = subexp(DOT_ATOM_TEXT$ + \"|\" + \"\\\\[\" + DTEXT_NO_OBS$$ + \"*\" + \"\\\\]\");\nconst LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + \"|\" + QUOTED_STRING$);\nconst ADDR_SPEC$ = subexp(LOCAL_PART$ + \"\\\\@\" + DOMAIN$);\nconst TO$ = subexp(ADDR_SPEC$ + subexp(\"\\\\,\" + ADDR_SPEC$) + \"*\");\nconst HFNAME$ = subexp(QCHAR$ + \"*\");\nconst HFVALUE$ = HFNAME$;\nconst HFIELD$ = subexp(HFNAME$ + \"\\\\=\" + HFVALUE$);\nconst HFIELDS2$ = subexp(HFIELD$ + subexp(\"\\\\&\" + HFIELD$) + \"*\");\nconst HFIELDS$ = subexp(\"\\\\?\" + HFIELDS2$);\nconst MAILTO_URI = new RegExp(\"^mailto\\\\:\" + TO$ + \"?\" + HFIELDS$ + \"?$\");\n\nconst UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nconst PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nconst NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nconst NOT_DOMAIN = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", \"[\\\\[]\", DTEXT_NO_OBS$$, \"[\\\\]]\"), \"g\");\nconst NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nconst NOT_HFVALUE = NOT_HFNAME;\nconst TO = new RegExp(\"^\" + TO$ + \"$\");\nconst HFIELDS = new RegExp(\"^\" + HFIELDS2$ + \"$\");\n\nfunction decodeUnreserved(str:string):string {\n\tconst decStr = pctDecChars(str);\n\treturn (!decStr.match(UNRESERVED) ? str : decStr);\n}\n\nconst handler:URISchemeHandler<MailtoComponents> = {\n\tscheme : \"mailto\",\n\n\tparse : function (components:URIComponents, options:URIOptions):MailtoComponents {\n\t\tconst mailtoComponents = components as MailtoComponents;\n\t\tconst to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(\",\") : []);\n\t\tmailtoComponents.path = undefined;\n\n\t\tif (mailtoComponents.query) {\n\t\t\tlet unknownHeaders = false\n\t\t\tconst headers:MailtoHeaders = {};\n\t\t\tconst hfields = mailtoComponents.query.split(\"&\");\n\n\t\t\tfor (let x = 0, xl = hfields.length; x < xl; ++x) {\n\t\t\t\tconst hfield = hfields[x].split(\"=\");\n\n\t\t\t\tswitch (hfield[0]) {\n\t\t\t\t\tcase \"to\":\n\t\t\t\t\t\tconst toAddrs = hfield[1].split(\",\");\n\t\t\t\t\t\tfor (let x = 0, xl = toAddrs.length; x < xl; ++x) {\n\t\t\t\t\t\t\tto.push(toAddrs[x]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subject\":\n\t\t\t\t\t\tmailtoComponents.subject = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\tmailtoComponents.body = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunknownHeaders = true;\n\t\t\t\t\t\theaders[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unknownHeaders) mailtoComponents.headers = headers;\n\t\t}\n\n\t\tmailtoComponents.query = undefined;\n\n\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\tconst addr = to[x].split(\"@\");\n\n\t\t\taddr[0] = unescapeComponent(addr[0]);\n\n\t\t\tif (!options.unicodeSupport) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\taddr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tmailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taddr[1] = unescapeComponent(addr[1], options).toLowerCase();\n\t\t\t}\n\n\t\t\tto[x] = addr.join(\"@\");\n\t\t}\n\n\t\treturn mailtoComponents;\n\t},\n\n\tserialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents {\n\t\tconst components = mailtoComponents as URIComponents;\n\t\tconst to = toArray(mailtoComponents.to);\n\t\tif (to) {\n\t\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\t\tconst toAddr = String(to[x]);\n\t\t\t\tconst atIdx = toAddr.lastIndexOf(\"@\");\n\t\t\t\tconst localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n\t\t\t\tlet domain = toAddr.slice(atIdx + 1);\n\n\t\t\t\t//convert IDN via punycode\n\t\t\t\ttry {\n\t\t\t\t\tdomain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t\t}\n\n\t\t\t\tto[x] = localPart + \"@\" + domain;\n\t\t\t}\n\n\t\t\tcomponents.path = to.join(\",\");\n\t\t}\n\n\t\tconst headers = mailtoComponents.headers = mailtoComponents.headers || {};\n\n\t\tif (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n\t\tif (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n\n\t\tconst fields = [];\n\t\tfor (const name in headers) {\n\t\t\tif (headers[name] !== O[name]) {\n\t\t\t\tfields.push(\n\t\t\t\t\tname.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) +\n\t\t\t\t\t\"=\" +\n\t\t\t\t\theaders[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (fields.length) {\n\t\t\tcomponents.query = fields.join(\"&\");\n\t\t}\n\n\t\treturn components;\n\t}\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, SCHEMES } from \"../uri\";\n\nexport interface URNComponents extends URIComponents {\n\tnid?:string;\n\tnss?:string;\n}\n\nexport interface URNOptions extends URIOptions {\n\tnid?:string;\n}\n\nconst NID$ = \"(?:[0-9A-Za-z][0-9A-Za-z\\\\-]{1,31})\";\nconst PCT_ENCODED$ = \"(?:\\\\%[0-9A-Fa-f]{2})\";\nconst TRANS$$ = \"[0-9A-Za-z\\\\(\\\\)\\\\+\\\\,\\\\-\\\\.\\\\:\\\\=\\\\@\\\\;\\\\$\\\\_\\\\!\\\\*\\\\'\\\\/\\\\?\\\\#]\";\nconst NSS$ = \"(?:(?:\" + PCT_ENCODED$ + \"|\" + TRANS$$ + \")+)\";\nconst URN_SCHEME = new RegExp(\"^urn\\\\:(\" + NID$ + \")$\");\nconst URN_PATH = new RegExp(\"^(\" + NID$ + \")\\\\:(\" + NSS$ + \")$\");\nconst URN_PARSE = /^([^\\:]+)\\:(.*)/;\nconst URN_EXCLUDED = /[\\x00-\\x20\\\\\\\"\\&\\<\\>\\[\\]\\^\\`\\{\\|\\}\\~\\x7F-\\xFF]/g;\n\n//RFC 2141\nconst handler:URISchemeHandler<URNComponents,URNOptions> = {\n\tscheme : \"urn\",\n\n\tparse : function (components:URIComponents, options:URNOptions):URNComponents {\n\t\tconst matches = components.path && components.path.match(URN_PARSE);\n\t\tlet urnComponents = components as URNComponents;\n\n\t\tif (matches) {\n\t\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\t\tconst nid = matches[1].toLowerCase();\n\t\t\tconst nss = matches[2];\n\t\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\t\turnComponents.nid = nid;\n\t\t\turnComponents.nss = nss;\n\t\t\turnComponents.path = undefined;\n\n\t\t\tif (schemeHandler) {\n\t\t\t\turnComponents = schemeHandler.parse(urnComponents, options) as URNComponents;\n\t\t\t}\n\t\t} else {\n\t\t\turnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n\t\t}\n\n\t\treturn urnComponents;\n\t},\n\n\tserialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents {\n\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\tconst nid = urnComponents.nid;\n\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\tif (schemeHandler) {\n\t\t\turnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents;\n\t\t}\n\n\t\tconst uriComponents = urnComponents as URIComponents;\n\t\tconst nss = urnComponents.nss;\n\t\turiComponents.path = `${nid || options.nid}:${nss}`;\n\n\t\treturn uriComponents;\n\t},\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { URNComponents } from \"./urn\";\nimport { SCHEMES } from \"../uri\";\n\nexport interface UUIDComponents extends URNComponents {\n\tuuid?: string;\n}\n\nconst UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\nconst UUID_PARSE = /^[0-9A-Fa-f\\-]{36}/;\n\n//RFC 4122\nconst handler:URISchemeHandler<UUIDComponents, URIOptions, URNComponents> = {\n\tscheme : \"urn:uuid\",\n\n\tparse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents {\n\t\tconst uuidComponents = urnComponents as UUIDComponents;\n\t\tuuidComponents.uuid = uuidComponents.nss;\n\t\tuuidComponents.nss = undefined;\n\n\t\tif (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n\t\t\tuuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n\t\t}\n\n\t\treturn uuidComponents;\n\t},\n\n\tserialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents {\n\t\tconst urnComponents = uuidComponents as URNComponents;\n\t\t//normalize UUID\n\t\turnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n\t\treturn urnComponents;\n\t},\n};\n\nexport default handler;","import { SCHEMES } from \"./uri\";\n\nimport http from \"./schemes/http\";\nSCHEMES[http.scheme] = http;\n\nimport https from \"./schemes/https\";\nSCHEMES[https.scheme] = https;\n\nimport ws from \"./schemes/ws\";\nSCHEMES[ws.scheme] = ws;\n\nimport wss from \"./schemes/wss\";\nSCHEMES[wss.scheme] = wss;\n\nimport mailto from \"./schemes/mailto\";\nSCHEMES[mailto.scheme] = mailto;\n\nimport urn from \"./schemes/urn\";\nSCHEMES[urn.scheme] = urn;\n\nimport uuid from \"./schemes/urn-uuid\";\nSCHEMES[uuid.scheme] = uuid;\n\nexport * from \"./uri\";\n","/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n var printWarning = function printWarning(format, args) {\n var len = arguments.length;\n args = new Array(len > 1 ? len - 1 : 0);\n for (var key = 1; key < len; key++) {\n args[key - 1] = arguments[key];\n }\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n if (!condition) {\n printWarning.apply(null, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n","var map = {\n\t\"./add_to_cart.svg\": [\n\t\t1811,\n\t\t9,\n\t\t1811\n\t],\n\t\"./arrow.svg\": [\n\t\t7492,\n\t\t9,\n\t\t7492\n\t],\n\t\"./arrowDown.svg\": [\n\t\t7937,\n\t\t9,\n\t\t7937\n\t],\n\t\"./back.svg\": [\n\t\t6294,\n\t\t9,\n\t\t6294\n\t],\n\t\"./calendar.svg\": [\n\t\t2041,\n\t\t9,\n\t\t2041\n\t],\n\t\"./calendar_aoh.svg\": [\n\t\t5774,\n\t\t9,\n\t\t5774\n\t],\n\t\"./cancel.svg\": [\n\t\t8322,\n\t\t9,\n\t\t8322\n\t],\n\t\"./cart.svg\": [\n\t\t1526,\n\t\t9,\n\t\t1526\n\t],\n\t\"./cart_view_less.svg\": [\n\t\t8303,\n\t\t9,\n\t\t8303\n\t],\n\t\"./cart_view_more.svg\": [\n\t\t8627,\n\t\t9,\n\t\t8627\n\t],\n\t\"./check.svg\": [\n\t\t5029,\n\t\t9,\n\t\t5029\n\t],\n\t\"./checkmark.svg\": [\n\t\t8623,\n\t\t9,\n\t\t8623\n\t],\n\t\"./checkmark_green.svg\": [\n\t\t1132,\n\t\t9,\n\t\t1132\n\t],\n\t\"./clock.svg\": [\n\t\t803,\n\t\t9,\n\t\t803\n\t],\n\t\"./closeBig.svg\": [\n\t\t8934,\n\t\t9,\n\t\t8934\n\t],\n\t\"./close_black.svg\": [\n\t\t5850,\n\t\t9,\n\t\t5850\n\t],\n\t\"./close_white.svg\": [\n\t\t6881,\n\t\t9,\n\t\t6881\n\t],\n\t\"./dark_left_arrow.svg\": [\n\t\t6784,\n\t\t9\n\t],\n\t\"./dark_right_arrow.svg\": [\n\t\t3050,\n\t\t9\n\t],\n\t\"./delete.svg\": [\n\t\t8188,\n\t\t9,\n\t\t8188\n\t],\n\t\"./doc.svg\": [\n\t\t886,\n\t\t9,\n\t\t886\n\t],\n\t\"./docx.svg\": [\n\t\t2704,\n\t\t9,\n\t\t2704\n\t],\n\t\"./download.svg\": [\n\t\t2205,\n\t\t9,\n\t\t2205\n\t],\n\t\"./duplicate_cart.svg\": [\n\t\t8511,\n\t\t9,\n\t\t8511\n\t],\n\t\"./edit.svg\": [\n\t\t1581,\n\t\t9,\n\t\t1581\n\t],\n\t\"./edit_aoh.svg\": [\n\t\t6569,\n\t\t9,\n\t\t6569\n\t],\n\t\"./error.svg\": [\n\t\t4845,\n\t\t9\n\t],\n\t\"./exported_list.svg\": [\n\t\t6113,\n\t\t9,\n\t\t6113\n\t],\n\t\"./file.svg\": [\n\t\t6920,\n\t\t9,\n\t\t6920\n\t],\n\t\"./folder.svg\": [\n\t\t4871,\n\t\t9,\n\t\t4871\n\t],\n\t\"./go_to_wish_list.svg\": [\n\t\t5544,\n\t\t9,\n\t\t5544\n\t],\n\t\"./info.svg\": [\n\t\t502,\n\t\t9,\n\t\t502\n\t],\n\t\"./info2.svg\": [\n\t\t8646,\n\t\t9,\n\t\t8646\n\t],\n\t\"./left_arrow.svg\": [\n\t\t3038,\n\t\t9\n\t],\n\t\"./link.svg\": [\n\t\t3897,\n\t\t9,\n\t\t3897\n\t],\n\t\"./menu.svg\": [\n\t\t16,\n\t\t9,\n\t\t16\n\t],\n\t\"./menu_2.svg\": [\n\t\t153,\n\t\t9,\n\t\t153\n\t],\n\t\"./more.svg\": [\n\t\t4886,\n\t\t9,\n\t\t4886\n\t],\n\t\"./more_in.svg\": [\n\t\t6371,\n\t\t9,\n\t\t6371\n\t],\n\t\"./move.png\": [\n\t\t5786,\n\t\t1,\n\t\t5786\n\t],\n\t\"./move.svg\": [\n\t\t1074,\n\t\t9,\n\t\t1074\n\t],\n\t\"./move_to_cart.svg\": [\n\t\t3982,\n\t\t9,\n\t\t3982\n\t],\n\t\"./move_to_wish_list.svg\": [\n\t\t6885,\n\t\t9,\n\t\t6885\n\t],\n\t\"./nickname.svg\": [\n\t\t6183,\n\t\t9,\n\t\t6183\n\t],\n\t\"./pdf.svg\": [\n\t\t1048,\n\t\t9,\n\t\t1048\n\t],\n\t\"./pencil.svg\": [\n\t\t6131,\n\t\t9,\n\t\t6131\n\t],\n\t\"./pencil_section.svg\": [\n\t\t9674,\n\t\t9\n\t],\n\t\"./ppt.svg\": [\n\t\t7675,\n\t\t9,\n\t\t7675\n\t],\n\t\"./pptx.svg\": [\n\t\t490,\n\t\t9,\n\t\t490\n\t],\n\t\"./process.svg\": [\n\t\t5233,\n\t\t9,\n\t\t5233\n\t],\n\t\"./profile-notification.svg\": [\n\t\t3271,\n\t\t9,\n\t\t3271\n\t],\n\t\"./proof.svg\": [\n\t\t9625,\n\t\t9\n\t],\n\t\"./proof_approval.svg\": [\n\t\t4159,\n\t\t9,\n\t\t4159\n\t],\n\t\"./receipt.svg\": [\n\t\t495,\n\t\t9,\n\t\t495\n\t],\n\t\"./reorder.svg\": [\n\t\t1513,\n\t\t9,\n\t\t1513\n\t],\n\t\"./right_arrow.svg\": [\n\t\t8052,\n\t\t9\n\t],\n\t\"./search.svg\": [\n\t\t978,\n\t\t9,\n\t\t2914\n\t],\n\t\"./sort.svg\": [\n\t\t503,\n\t\t9,\n\t\t503\n\t],\n\t\"./success.svg\": [\n\t\t2021,\n\t\t9,\n\t\t2021\n\t],\n\t\"./tick.svg\": [\n\t\t6738,\n\t\t9\n\t],\n\t\"./uncheck.svg\": [\n\t\t2730,\n\t\t9,\n\t\t2730\n\t],\n\t\"./upload.svg\": [\n\t\t2625,\n\t\t9,\n\t\t2625\n\t],\n\t\"./user.svg\": [\n\t\t155,\n\t\t9,\n\t\t155\n\t],\n\t\"./warning.svg\": [\n\t\t4051,\n\t\t9,\n\t\t4051\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(2).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__.t(id, ids[1] | 16)\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 2042;\nmodule.exports = webpackAsyncContext;","module.exports = React;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + {\"16\":\"5900c197\",\"153\":\"0cedf808\",\"155\":\"490a6b08\",\"490\":\"95a2c579\",\"495\":\"1eb21b03\",\"502\":\"dc571d87\",\"503\":\"d47aeea2\",\"787\":\"65f77b4c\",\"803\":\"8feced02\",\"886\":\"d2bc0191\",\"1048\":\"fdc3aa2d\",\"1074\":\"6f4ac598\",\"1132\":\"2c3258e9\",\"1513\":\"f5476e7a\",\"1526\":\"9272cffb\",\"1581\":\"901c3d3e\",\"1811\":\"2ec14343\",\"2021\":\"8997ab66\",\"2041\":\"205d420a\",\"2205\":\"913822c0\",\"2625\":\"2f4533d1\",\"2704\":\"82bac80f\",\"2730\":\"9ffaa347\",\"2914\":\"aeb1f3da\",\"3271\":\"6aa3c643\",\"3897\":\"89dd0c20\",\"3982\":\"38477891\",\"4051\":\"2ac64249\",\"4159\":\"bc7286b2\",\"4871\":\"3c054607\",\"4886\":\"98fa0696\",\"5029\":\"93992100\",\"5233\":\"e376e434\",\"5544\":\"6632e497\",\"5774\":\"f419dfba\",\"5786\":\"cb35663b\",\"5850\":\"b8fcda6a\",\"6113\":\"03285f7f\",\"6131\":\"232ace37\",\"6183\":\"fc696a15\",\"6294\":\"a894a431\",\"6371\":\"8999427d\",\"6569\":\"3a10cdf2\",\"6881\":\"8f143ec5\",\"6885\":\"86a1a9e4\",\"6920\":\"665d6e14\",\"7492\":\"6c4dbbb4\",\"7675\":\"a4ea6108\",\"7937\":\"c66b3b19\",\"8188\":\"ce01ebb8\",\"8303\":\"c4aa263a\",\"8322\":\"f74716d9\",\"8511\":\"fad1f403\",\"8623\":\"db56ab2d\",\"8627\":\"443397cf\",\"8646\":\"c1184df1\",\"8934\":\"a389e4c4\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"StandardV17:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/ustorethemes/StandardV17/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkStandardV17\"] = self[\"webpackChunkStandardV17\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","const __WEBPACK_NAMESPACE_OBJECT__ = ReactDOM;","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Pop = \"POP\",\n\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Push = \"PUSH\",\n\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n /**\n * A URL pathname, beginning with a /.\n */\n pathname: string;\n\n /**\n * A URL search string, beginning with a ?.\n */\n search: string;\n\n /**\n * A URL fragment identifier, beginning with a #.\n */\n hash: string;\n}\n\n// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location<State = any> extends Path {\n /**\n * A value of arbitrary data associated with this location.\n */\n state: State;\n\n /**\n * A unique string associated with this location. May be used to safely store\n * and retrieve data in some other storage API, like `localStorage`.\n *\n * Note: This value is always \"default\" on the initial location.\n */\n key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n /**\n * The action that triggered the change.\n */\n action: Action;\n\n /**\n * The new location.\n */\n location: Location;\n\n /**\n * The delta between this location and the former location in the history stack\n */\n delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. This may be either a URL or the pieces\n * of a URL path.\n */\nexport type To = string | Partial<Path>;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n /**\n * The last action that modified the current location. This will always be\n * Action.Pop when a history instance is first created. This value is mutable.\n */\n readonly action: Action;\n\n /**\n * The current location. This value is mutable.\n */\n readonly location: Location;\n\n /**\n * Returns a valid href for the given `to` value that may be used as\n * the value of an <a href> attribute.\n *\n * @param to - The destination URL\n */\n createHref(to: To): string;\n\n /**\n * Returns a URL for the given `to` value\n *\n * @param to - The destination URL\n */\n createURL(to: To): URL;\n\n /**\n * Encode a location the same way window.history would do (no-op for memory\n * history) so we ensure our PUSH/REPLACE navigations for data routers\n * behave the same as POP\n *\n * @param to Unencoded path\n */\n encodeLocation(to: To): Path;\n\n /**\n * Pushes a new location onto the history stack, increasing its length by one.\n * If there were any entries in the stack after the current one, they are\n * lost.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n push(to: To, state?: any): void;\n\n /**\n * Replaces the current location in the history stack with a new one. The\n * location that was replaced will no longer be available.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n replace(to: To, state?: any): void;\n\n /**\n * Navigates `n` entries backward/forward in the history stack relative to the\n * current index. For example, a \"back\" navigation would use go(-1).\n *\n * @param delta - The delta in the stack index\n */\n go(delta: number): void;\n\n /**\n * Sets up a listener that will be called whenever the current location\n * changes.\n *\n * @param listener - A function that will be called when the location changes\n * @returns unlisten - A function that may be used to stop listening\n */\n listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n usr: any;\n key?: string;\n idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial<Location>;\n\nexport type MemoryHistoryOptions = {\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n /**\n * The current index in the history stack.\n */\n readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n options: MemoryHistoryOptions = {}\n): MemoryHistory {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries: Location[]; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) =>\n createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index === 0 ? \"default\" : undefined\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n function clampIndex(n: number): number {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation(): Location {\n return entries[index];\n }\n function createMemoryLocation(\n to: To,\n state: any = null,\n key?: string\n ): Location {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n\n function createHref(to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n let history: MemoryHistory = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to: To) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\",\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn: Listener) {\n listener = fn;\n return () => {\n listener = null;\n };\n },\n };\n\n return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n options: BrowserHistoryOptions = {}\n): BrowserHistory {\n function createBrowserLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let { pathname, search, hash } = window.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createBrowserHref(window: Window, to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n options: HashHistoryOptions = {}\n): HashHistory {\n function createHashLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n } = parsePath(window.location.hash.substr(1));\n\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route (<Route path=\"*\">) since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createHashHref(window: Window, to: To) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n\n function validateHashLocation(location: Location, to: To) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant<T>(\n value: T | null | undefined,\n message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\nexport function warning(cond: any, message: string) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience, so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n return {\n usr: location.state,\n key: location.key,\n idx: index,\n };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n current: string | Location,\n to: To,\n state: any = null,\n key?: string\n): Readonly<Location> {\n let location: Readonly<Location> = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...(typeof to === \"string\" ? parsePath(to) : to),\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: (to && (to as Location).key) || key || createKey(),\n };\n return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n}: Partial<Path>) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial<Path> {\n let parsedPath: Partial<Path> = {};\n\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n\n if (path) {\n parsedPath.pathname = path;\n }\n }\n\n return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n window?: Window;\n v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n createHref: (window: Window, to: To) => string,\n validateLocation: ((location: Location, to: To) => void) | null,\n options: UrlHistoryOptions = {}\n): UrlHistory {\n let { window = document.defaultView!, v5Compat = false } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n let index = getIndex()!;\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n\n function getIndex(): number {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n\n function push(to: To, state?: any) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n\n function replace(to: To, state?: any) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n\n function createURL(to: To): URL {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base =\n window.location.origin !== \"null\"\n ? window.location.origin\n : window.location.href;\n\n let href = typeof to === \"string\" ? to : createPath(to);\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href}`\n );\n return new URL(href, base);\n }\n\n let history: History = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn: Listener) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n },\n };\n\n return history;\n}\n\n//#endregion\n","import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath, warning } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n [routeId: string]: any;\n}\n\nexport enum ResultType {\n data = \"data\",\n deferred = \"deferred\",\n redirect = \"redirect\",\n error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n type: ResultType.data;\n data: any;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n type: ResultType.deferred;\n deferredData: DeferredData;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n type: ResultType.redirect;\n status: number;\n location: string;\n revalidate: boolean;\n reloadDocument?: boolean;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n type: ResultType.error;\n error: any;\n headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n | SuccessResult\n | DeferredResult\n | RedirectResult\n | ErrorResult;\n\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase<LowerCaseFormMethod>;\n\n/**\n * Users can specify either lowercase or uppercase form methods on `<Form>`,\n * useSubmit(), `<fetcher.Form>`, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude<FormMethod, \"get\">;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude<V7_FormMethod, \"GET\">;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\n };\n\n/**\n * @private\n * Arguments passed to route loader/action functions. Same for now but we keep\n * this as a private implementation detail in case they diverge in the future.\n */\ninterface DataFunctionArgs<Context> {\n request: Request;\n params: Params;\n context?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs<Context = any>\n extends DataFunctionArgs<Context> {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs<Context = any>\n extends DataFunctionArgs<Context> {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable<unknown> | null;\n\n/**\n * Route loader function signature\n */\nexport interface LoaderFunction<Context = any> {\n (args: LoaderFunctionArgs<Context>):\n | Promise<DataFunctionValue>\n | DataFunctionValue;\n}\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction<Context = any> {\n (args: ActionFunctionArgs<Context>):\n | Promise<DataFunctionValue>\n | DataFunctionValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\n currentUrl: URL;\n currentParams: AgnosticDataRouteMatch[\"params\"];\n nextUrl: URL;\n nextParams: AgnosticDataRouteMatch[\"params\"];\n formMethod?: Submission[\"formMethod\"];\n formAction?: Submission[\"formAction\"];\n formEncType?: Submission[\"formEncType\"];\n text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionResult?: any;\n defaultShouldRevalidate: boolean;\n}\n\n/**\n * Route shouldRevalidate function signature. This runs after any submission\n * (navigation or fetcher), so we flatten the navigation/fetcher submission\n * onto the arguments. It shouldn't matter whether it came from a navigation\n * or a fetcher, what really matters is the URLs and the formData since loaders\n * have to re-run based on the data models that were potentially mutated.\n */\nexport interface ShouldRevalidateFunction {\n (args: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record<string, any>;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set<ImmutableRouteKey>([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne<T, Key = keyof T> = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit<T, K> & Required<Pick<T, K>> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction<R extends AgnosticRouteObject> {\n (): Promise<RequireOne<Omit<R, ImmutableRouteKey>>>;\n}\n\n/**\n * Base RouteObject with common props shared by all types of routes\n */\ntype AgnosticBaseRouteObject = {\n caseSensitive?: boolean;\n path?: string;\n id?: string;\n loader?: LoaderFunction;\n action?: ActionFunction;\n hasErrorBoundary?: boolean;\n shouldRevalidate?: ShouldRevalidateFunction;\n handle?: any;\n lazy?: LazyRouteFunction<AgnosticBaseRouteObject>;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n children?: undefined;\n index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n children?: AgnosticRouteObject[];\n index?: false;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport type AgnosticRouteObject =\n | AgnosticIndexRouteObject\n | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n children?: AgnosticDataRouteObject[];\n id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n | AgnosticDataIndexRouteObject\n | AgnosticDataNonIndexRouteObject;\n\nexport type RouteManifest = Record<string, AgnosticDataRouteObject | undefined>;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam<Path extends string> =\n // split path into individual path segments\n Path extends `${infer L}/${infer R}`\n ? _PathParam<L> | _PathParam<R>\n : // find params after `:`\n Path extends `:${infer Param}`\n ? Param extends `${infer Optional}?`\n ? Optional\n : Param\n : // otherwise, there aren't any params present\n never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\nexport type PathParam<Path extends string> =\n // check if path is just a wildcard\n Path extends \"*\" | \"/*\"\n ? \"*\"\n : // look for wildcard at the end of the path\n Path extends `${infer Rest}/*`\n ? \"*\" | _PathParam<Rest>\n : // look for params in the absence of wildcards\n _PathParam<Path>;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise, return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey<Segment extends string> =\n // if you could not find path params, fallback to `string`\n [PathParam<Segment>] extends [never] ? string : PathParam<Segment>;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params<Key extends string = string> = {\n readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params<ParamKey>;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The route object that was used to match.\n */\n route: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n extends AgnosticRouteMatch<string, AgnosticDataRouteObject> {}\n\nfunction isIndexRoute(\n route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n routes: AgnosticRouteObject[],\n mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: number[] = [],\n manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n return routes.map((route, index) => {\n let treePath = [...parentPath, index];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\n\n return pathOrLayoutRoute;\n }\n });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nexport function matchRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial<Location> | string,\n basename = \"/\"\n): AgnosticRouteMatch<string, RouteObjectType>[] | null {\n let location =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n let pathname = stripBasename(location.pathname || \"/\", basename);\n\n if (pathname == null) {\n return null;\n }\n\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n matches = matchRouteBranch<string, RouteObjectType>(\n branches[i],\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n safelyDecodeURI(pathname)\n );\n }\n\n return matches;\n}\n\nexport interface UIMatch<Data = unknown, Handle = unknown> {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\n}\n\ninterface RouteMeta<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n route: RouteObjectType;\n}\n\ninterface RouteBranch<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n path: string;\n score: number;\n routesMeta: RouteMeta<RouteObjectType>[];\n}\n\nfunction flattenRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n branches: RouteBranch<RouteObjectType>[] = [],\n parentsMeta: RouteMeta<RouteObjectType>[] = [],\n parentPath = \"\"\n): RouteBranch<RouteObjectType>[] {\n let flattenRoute = (\n route: RouteObjectType,\n index: number,\n relativePath?: string\n ) => {\n let meta: RouteMeta<RouteObjectType> = {\n relativePath:\n relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route,\n };\n\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path ` +\n `\"${parentPath}\" is not valid. An absolute child route path ` +\n `must start with the combined path of all its parent routes.`\n );\n\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n\n // Add the children before adding this route to the array, so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true,\n `Index routes must not have child routes. Please remove ` +\n `all child routes from route path \"${path}\".`\n );\n\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta,\n });\n };\n routes.forEach((route, index) => {\n // coarse-grain check for optional params\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n\n return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n\n let [first, ...rest] = segments;\n\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n let result: string[] = [];\n\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children, so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explode _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(\n ...restExploded.map((subpath) =>\n subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n\n // Then, if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n\n // for absolute paths, ensure `/` instead of empty segment\n return result.map((exploded) =>\n path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n branches.sort((a, b) =>\n a.score !== b.score\n ? b.score - a.score // Higher score first\n : compareIndexes(\n a.routesMeta.map((meta) => meta.childrenIndex),\n b.routesMeta.map((meta) => meta.childrenIndex)\n )\n );\n}\n\nconst paramRe = /^:\\w+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n\n if (index) {\n initialScore += indexRouteValue;\n }\n\n return segments\n .filter((s) => !isSplat(s))\n .reduce(\n (score, segment) =>\n score +\n (paramRe.test(segment)\n ? dynamicSegmentValue\n : segment === \"\"\n ? emptySegmentValue\n : staticSegmentValue),\n initialScore\n );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n let siblings =\n a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n return siblings\n ? // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\n\nfunction matchRouteBranch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n branch: RouteBranch<RouteObjectType>,\n pathname: string\n): AgnosticRouteMatch<ParamKey, RouteObjectType>[] | null {\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: AgnosticRouteMatch<ParamKey, RouteObjectType>[] = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname =\n matchedPathname === \"/\"\n ? pathname\n : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n\n if (!match) return null;\n\n Object.assign(matchedParams, match.params);\n\n let route = meta.route;\n\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams as Params<ParamKey>,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route,\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n\n return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nexport function generatePath<Path extends string>(\n originalPath: Path,\n params: {\n [key in PathParam<Path>]: string | null;\n } = {} as any\n): string {\n let path: string = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n path = path.replace(/\\*$/, \"/*\") as Path;\n }\n\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam<Path>;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:(\\w+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam<Path>];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern<Path extends string = string> {\n /**\n * A string to match against a URL pathname. May contain `:id`-style segments\n * to indicate placeholders for dynamic parameters. May also end with `/*` to\n * indicate matching the rest of the URL pathname.\n */\n path: Path;\n /**\n * Should be `true` if the static portions of the `path` should be matched in\n * the same case.\n */\n caseSensitive?: boolean;\n /**\n * Should be `true` if this pattern should match the entire URL pathname.\n */\n end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch<ParamKey extends string = string> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params<ParamKey>;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The pattern that was used to match.\n */\n pattern: PathPattern;\n}\n\ntype Mutable<T> = {\n -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nexport function matchPath<\n ParamKey extends ParamParseKey<Path>,\n Path extends string\n>(\n pattern: PathPattern<Path> | Path,\n pathname: string\n): PathMatch<ParamKey> | null {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n\n let [matcher, compiledParams] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n\n let match = pathname.match(matcher);\n if (!match) return null;\n\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params: Params = compiledParams.reduce<Mutable<Params>>(\n (memo, { paramName, isOptional }, index) => {\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname\n .slice(0, matchedPathname.length - splatValue.length)\n .replace(/(.)\\/+$/, \"$1\");\n }\n\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = safelyDecodeURIComponent(value || \"\", paramName);\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n\n let params: CompiledPathParam[] = [];\n let regexpSource =\n \"^\" +\n path\n .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(/\\/:(\\w+)(\\?)?/g, (_: string, paramName: string, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n });\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\n regexpSource +=\n path === \"*\" || path === \"/*\"\n ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex, so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n // Nothing to match for \"\" or \"/\"\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, params];\n}\n\nfunction safelyDecodeURI(value: string) {\n try {\n return decodeURI(value);\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is is a ` +\n `malformed URL segment. This is probably due to a bad percent ` +\n `encoding (${error}).`\n );\n\n return value;\n }\n}\n\nfunction safelyDecodeURIComponent(value: string, paramName: string) {\n try {\n return decodeURIComponent(value);\n } catch (error) {\n warning(\n false,\n `The value for the URL param \"${paramName}\" will not be decoded because` +\n ` the string \"${value}\" is a malformed URL segment. This is probably` +\n ` due to a bad percent encoding (${error}).`\n );\n\n return value;\n }\n}\n\n/**\n * @private\n */\nexport function stripBasename(\n pathname: string,\n basename: string\n): string | null {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\")\n ? basename.length - 1\n : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\",\n } = typeof to === \"string\" ? parsePath(to) : to;\n\n let pathname = toPathname\n ? toPathname.startsWith(\"/\")\n ? toPathname\n : resolvePathname(toPathname, fromPathname)\n : fromPathname;\n\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash),\n };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n\n relativeSegments.forEach((segment) => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction getInvalidPathError(\n char: string,\n field: string,\n dest: string,\n path: Partial<Path>\n) {\n return (\n `Cannot include a '${char}' character in a manually specified ` +\n `\\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the ` +\n `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n `a string in <Link to=\"...\"> and the router will parse it for you.`\n );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * <Route path=\"/\">\n * <Route path=\"accounts\" element={<Link to=\"..\"}>\n * </Route>\n *\n * <Route path=\"/\">\n * <Route path=\"accounts\">\n * <Route element={<AccountsLayout />}> // <-- Does not contribute\n * <Route index element={<Link to=\"..\"} /> // <-- Does not contribute\n * </Route\n * </Route>\n * </Route>\n */\nexport function getPathContributingMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n return matches.filter(\n (match, index) =>\n index === 0 || (match.route.path && match.route.path.length > 0)\n );\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string,\n isPathRelative = false\n): Path {\n let to: Partial<Path>;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n let from: string;\n\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `<Link to>` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (toPathname == null) {\n from = locationPathname;\n } else if (isPathRelative) {\n let fromSegments = routePathnames[routePathnames.length - 1]\n .replace(/^\\//, \"\")\n .split(\"/\");\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"path\", each leading .. segment means \"go up one URL segment\"\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n fromSegments.pop();\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = \"/\" + fromSegments.join(\"/\");\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how <a href> works and a major reason we call this a\n // \"to\" value instead of a \"href\".\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n // If there are more \"..\" segments than parent routes, resolve relative to\n // the root / URL.\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n\n let path = resolvePath(to, from);\n\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash =\n toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash =\n (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (\n !path.pathname.endsWith(\"/\") &&\n (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\n\n/**\n * @private\n */\nexport function getToPathname(to: To): string | undefined {\n // Empty strings should be treated the same as / paths\n return to === \"\" || (to as Path).pathname === \"\"\n ? \"/\"\n : typeof to === \"string\"\n ? parsePath(to).pathname\n : to.pathname;\n}\n\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = <Data>(\n data: Data,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n return new Response(JSON.stringify(data), {\n ...responseInit,\n headers,\n });\n};\n\nexport interface TrackedPromise extends Promise<any> {\n _tracked?: boolean;\n _data?: any;\n _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n private pendingKeysSet: Set<string> = new Set<string>();\n private controller: AbortController;\n private abortPromise: Promise<void>;\n private unlistenAbortSignal: () => void;\n private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n new Set();\n data: Record<string, unknown>;\n init?: ResponseInit;\n deferredKeys: string[] = [];\n\n constructor(data: Record<string, unknown>, responseInit?: ResponseInit) {\n invariant(\n data && typeof data === \"object\" && !Array.isArray(data),\n \"defer() only accepts plain objects\"\n );\n\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject: (e: AbortedDeferredError) => void;\n this.abortPromise = new Promise((_, r) => (reject = r));\n this.controller = new AbortController();\n let onAbort = () =>\n reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () =>\n this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n\n this.data = Object.entries(data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: this.trackPromise(key, value),\n }),\n {}\n );\n\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n\n this.init = responseInit;\n }\n\n private trackPromise(\n key: string,\n value: Promise<unknown> | unknown\n ): TrackedPromise | unknown {\n if (!(value instanceof Promise)) {\n return value;\n }\n\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n (data) => this.onSettle(promise, key, undefined, data as unknown),\n (error) => this.onSettle(promise, key, error as unknown)\n );\n\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n return promise;\n }\n\n private onSettle(\n promise: TrackedPromise,\n key: string,\n error: unknown,\n data?: unknown\n ): unknown {\n if (\n this.controller.signal.aborted &&\n error instanceof AbortedDeferredError\n ) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", { get: () => error });\n return Promise.reject(error);\n }\n\n this.pendingKeysSet.delete(key);\n\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n\n // If the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", { get: () => error });\n this.emit(false, key);\n return Promise.reject(error);\n }\n\n Object.defineProperty(promise, \"_data\", { get: () => data });\n this.emit(false, key);\n return data;\n }\n\n private emit(aborted: boolean, settledKey?: string) {\n this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n }\n\n subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n\n async resolveData(signal: AbortSignal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise((resolve) => {\n this.subscribe((aborted) => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n\n get unwrappedData() {\n invariant(\n this.data !== null && this.done,\n \"Can only unwrap data on initialized and settled deferreds\"\n );\n\n return Object.entries(this.data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: unwrapTrackedPromise(value),\n }),\n {}\n );\n }\n\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n return (\n value instanceof Promise && (value as TrackedPromise)._tracked === true\n );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\n\nexport type DeferFunction = (\n data: Record<string, unknown>,\n init?: number | ResponseInit\n) => DeferredData;\n\nexport const defer: DeferFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n url: string,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private internal: boolean;\n\n constructor(\n status: number,\n statusText: string | undefined,\n data: any,\n internal = false\n ) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n return (\n error != null &&\n typeof error.status === \"number\" &&\n typeof error.statusText === \"string\" &&\n typeof error.internal === \"boolean\" &&\n \"data\" in error\n );\n}\n","import type { History, Location, Path, To } from \"./history\";\nimport {\n Action as HistoryAction,\n createLocation,\n createPath,\n invariant,\n parsePath,\n warning,\n} from \"./history\";\nimport type {\n ActionFunction,\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n AgnosticRouteObject,\n DataResult,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n ImmutableRouteKey,\n LoaderFunction,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n stripBasename,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the basename for the router\n */\n get basename(): RouterInit[\"basename\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the current state of the router\n */\n get state(): RouterState;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the routes for this router instance\n */\n get routes(): AgnosticDataRouteObject[];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Initialize the router, including adding history listeners and kicking off\n * initial data fetches. Returns a function to cleanup listeners and abort\n * any in-progress loads\n */\n initialize(): Router;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Subscribe to router.state updates\n *\n * @param fn function to call with the new state\n */\n subscribe(fn: RouterSubscriber): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Enable scroll restoration behavior in the router\n *\n * @param savedScrollPositions Object that will manage positions, in case\n * it's being restored from sessionStorage\n * @param getScrollPosition Function to get the active Y scroll position\n * @param getKey Function to get the key to use for restoration\n */\n enableScrollRestoration(\n savedScrollPositions: Record<string, number>,\n getScrollPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Navigate forward/backward in the history stack\n * @param to Delta to move in the history stack\n */\n navigate(to: number): Promise<void>;\n\n /**\n * Navigate to the given path\n * @param to Path to navigate to\n * @param opts Navigation options (method, submission, etc.)\n */\n navigate(to: To | null, opts?: RouterNavigateOptions): Promise<void>;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a fetcher load/submission\n *\n * @param key Fetcher key\n * @param routeId Route that owns the fetcher\n * @param href href to fetch\n * @param opts Fetcher options, (method, submission, etc.)\n */\n fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a revalidation of all current route loaders and fetcher loads\n */\n revalidate(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to create an href for the given location\n * @param location\n */\n createHref(location: Location | URL): string;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to URL encode a destination path according to the internal\n * history implementation\n * @param to\n */\n encodeLocation(to: To): Path;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get/create a fetcher for the given key\n * @param key\n */\n getFetcher<TData = any>(key: string): Fetcher<TData>;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete the fetcher for a given key\n * @param key\n */\n deleteFetcher(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Cleanup listeners and abort any in-progress loads\n */\n dispose(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get a navigation blocker\n * @param key The identifier for the blocker\n * @param fn The blocker function implementation\n */\n getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete a navigation blocker\n * @param key The identifier for the blocker\n */\n deleteBlocker(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal fetch AbortControllers accessed by unit tests\n */\n _internalFetchControllers: Map<string, AbortController>;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal pending DeferredData instances accessed by unit tests\n */\n _internalActiveDeferreds: Map<string, DeferredData>;\n}\n\n/**\n * State maintained internally by the router. During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n /**\n * The action of the most recent navigation\n */\n historyAction: HistoryAction;\n\n /**\n * The current location reflected by the router\n */\n location: Location;\n\n /**\n * The current set of route matches\n */\n matches: AgnosticDataRouteMatch[];\n\n /**\n * Tracks whether we've completed our initial data load\n */\n initialized: boolean;\n\n /**\n * Current scroll position we should start at for a new view\n * - number -> scroll position to restore to\n * - false -> do not restore scroll at all (used during submissions)\n * - null -> don't have a saved position, scroll to hash or top of page\n */\n restoreScrollPosition: number | false | null;\n\n /**\n * Indicate whether this navigation should skip resetting the scroll position\n * if we are unable to restore the scroll position\n */\n preventScrollReset: boolean;\n\n /**\n * Tracks the state of the current navigation\n */\n navigation: Navigation;\n\n /**\n * Tracks any in-progress revalidations\n */\n revalidation: RevalidationState;\n\n /**\n * Data from the loaders for the current matches\n */\n loaderData: RouteData;\n\n /**\n * Data from the action for the current matches\n */\n actionData: RouteData | null;\n\n /**\n * Errors caught from loaders for the current matches\n */\n errors: RouteData | null;\n\n /**\n * Map of current fetchers\n */\n fetchers: Map<string, Fetcher>;\n\n /**\n * Map of current blockers\n */\n blockers: Map<string, Blocker>;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n Pick<RouterState, \"loaderData\" | \"actionData\" | \"errors\">\n>;\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_prependBasename: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial<FutureConfig>;\n hydrationData?: HydrationState;\n window?: Window;\n}\n\n/**\n * State returned from a server-side query() call\n */\nexport interface StaticHandlerContext {\n basename: Router[\"basename\"];\n location: RouterState[\"location\"];\n matches: RouterState[\"matches\"];\n loaderData: RouterState[\"loaderData\"];\n actionData: RouterState[\"actionData\"];\n errors: RouterState[\"errors\"];\n statusCode: number;\n loaderHeaders: Record<string, Headers>;\n actionHeaders: Record<string, Headers>;\n activeDeferreds: Record<string, DeferredData> | null;\n _deepestRenderedBoundaryId?: string | null;\n}\n\n/**\n * A StaticHandler instance manages a singular SSR navigation/fetch event\n */\nexport interface StaticHandler {\n dataRoutes: AgnosticDataRouteObject[];\n query(\n request: Request,\n opts?: { requestContext?: unknown }\n ): Promise<StaticHandlerContext | Response>;\n queryRoute(\n request: Request,\n opts?: { routeId?: string; requestContext?: unknown }\n ): Promise<any>;\n}\n\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n unstable_flushSync: boolean;\n }\n ): void;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n (location: Location, matches: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n Idle: {\n state: \"idle\";\n location: undefined;\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n formData: undefined;\n json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\n };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates<TData = any> = {\n Idle: {\n state: \"idle\";\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\n };\n};\n\nexport type Fetcher<TData = any> =\n FetcherStates<TData>[keyof FetcherStates<TData>];\n\ninterface BlockerBlocked {\n state: \"blocked\";\n reset(): void;\n proceed(): void;\n location: Location;\n}\n\ninterface BlockerUnblocked {\n state: \"unblocked\";\n reset: undefined;\n proceed: undefined;\n location: undefined;\n}\n\ninterface BlockerProceeding {\n state: \"proceeding\";\n reset: undefined;\n proceed: undefined;\n location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n /**\n * startNavigation does not need to complete the navigation because we\n * redirected or got interrupted\n */\n shortCircuited?: boolean;\n}\n\ninterface HandleActionResult extends ShortCircuitable {\n /**\n * Error thrown from the current action, keyed by the route containing the\n * error boundary to render the error. To be committed to the state after\n * loaders have completed\n */\n pendingActionError?: RouteData;\n /**\n * Data returned from the current action, keyed by the route owning the action.\n * To be committed to the state after loaders have completed\n */\n pendingActionData?: RouteData;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n /**\n * loaderData returned from the current set of loaders\n */\n loaderData?: RouterState[\"loaderData\"];\n /**\n * errors thrown from the current set of loaders\n */\n errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n routeId: string;\n path: string;\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\n}\n\n/**\n * Wrapper object to allow us to throw any response out from callLoaderOrAction\n * for queryRouter while preserving whether or not it was thrown or returned\n * from the loader/action\n */\ninterface QueryRouteResponse {\n type: ResultType.data | ResultType.error;\n response: Response;\n}\n\nconst validMutationMethodsArr: MutationFormMethod[] = [\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n];\nconst validMutationMethods = new Set<MutationFormMethod>(\n validMutationMethodsArr\n);\n\nconst validRequestMethodsArr: FormMethod[] = [\n \"get\",\n ...validMutationMethodsArr,\n];\nconst validRequestMethods = new Set<FormMethod>(validRequestMethodsArr);\n\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\n\nexport const IDLE_NAVIGATION: NavigationStates[\"Idle\"] = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_FETCHER: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_BLOCKER: BlockerUnblocked = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined,\n};\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nconst defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Create a router and listen to history POP navigations\n */\nexport function createRouter(init: RouterInit): Router {\n const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_prependBasename: false,\n ...init.future,\n };\n // Cleanup function for history\n let unlistenHistory: (() => void) | null = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set<RouterSubscriber>();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions: Record<string, number> | null = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition: GetScrollPositionFunction | null = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from <ScrollRestoration /> until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialErrors: RouteData | null = null;\n\n if (initialMatches == null) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname,\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n }\n\n let initialized =\n // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n !initialMatches.some((m) => m.route.lazy) &&\n // And we have to either have no loaders or have been provided hydrationData\n (!initialMatches.some((m) => m.route.loader) || init.hydrationData != null);\n\n let router: Router;\n let state: RouterState = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n fetchers: new Map(),\n blockers: new Map(),\n };\n\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction: HistoryAction = HistoryAction.Pop;\n\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n\n // AbortController for the active navigation\n let pendingNavigationController: AbortController | null;\n\n // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map<string, Set<string>> = new Map<\n string,\n Set<string>\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = null;\n\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidator()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes: string[] = [];\n\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads: string[] = [];\n\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map<string, AbortController>();\n\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map<string, number>();\n\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set<string>();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map<string, FetchLoadMatch>();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map<string, number>();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set<string>();\n\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map<string, DeferredData>();\n\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map<string, BlockerFunction>();\n\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let ignoreNextHistoryUpdate = false;\n\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (ignoreNextHistoryUpdate) {\n ignoreNextHistoryUpdate = false;\n return;\n }\n\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location \" +\n \"that was not created by @remix-run/router. This will fail silently in \" +\n \"production. This can happen if you are navigating outside the router \" +\n \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n \"router navigation APIs. This can also happen if you are using \" +\n \"createHashRouter and the user manually changes the URL.\"\n );\n\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction,\n });\n\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n ignoreNextHistoryUpdate = true;\n init.history.go(delta * -1);\n\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location,\n });\n // Re-do the same POP navigation we just blocked\n init.history.go(delta);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\n if (!state.initialized) {\n startNavigation(HistoryAction.Pop, state.location);\n }\n\n return router;\n }\n\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n\n // Subscribe to state updates for the router\n function subscribe(fn: RouterSubscriber) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n\n // Update our state and notify the calling context of the change\n function updateState(\n newState: Partial<RouterState>,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\n }\n\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(\n location: Location,\n newState: Partial<Omit<RouterState, \"action\" | \"location\" | \"navigation\">>,\n { flushSync }: { flushSync?: boolean } = {}\n ): void {\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload =\n state.actionData != null &&\n state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n state.navigation.state === \"loading\" &&\n location.state?._isRedirect !== true;\n\n let actionData: RouteData | null;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData\n ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n )\n : state.loaderData;\n\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset =\n pendingPreventScrollReset === true ||\n (state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n location.state?._isRedirect !== true);\n\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n\n if (isUninterruptedRevalidation) {\n // If this was an uninterrupted revalidation then do not touch history\n } else if (pendingAction === HistoryAction.Pop) {\n // Do nothing for POP - URL has already been updated\n } else if (pendingAction === HistoryAction.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === HistoryAction.Replace) {\n init.history.replace(location, location.state);\n }\n\n let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set<string>([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\n ...newState, // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(\n location,\n newState.matches || state.matches\n ),\n preventScrollReset,\n blockers,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n cancelledFetcherLoads = [];\n }\n\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(\n to: number | To | null,\n opts?: RouterNavigateOptions\n ): Promise<void> {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\n\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation),\n };\n\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n let historyAction = HistoryAction.Push;\n\n if (userReplace === true) {\n historyAction = HistoryAction.Replace;\n } else if (userReplace === false) {\n // no-op\n } else if (\n submission != null &&\n isMutationMethod(submission.formMethod) &&\n submission.formAction === state.location.pathname + state.location.search\n ) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = HistoryAction.Replace;\n }\n\n let preventScrollReset =\n opts && \"preventScrollReset\" in opts\n ? opts.preventScrollReset === true\n : undefined;\n\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\n\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation,\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync,\n });\n }\n\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true,\n });\n return;\n }\n\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n { overrideNavigation: state.navigation }\n );\n }\n\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(\n historyAction: HistoryAction,\n location: Location,\n opts?: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: boolean;\n }\n ): Promise<void> {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation =\n (opts && opts.startUninterruptedRevalidation) === true;\n\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a <Form method=\"post\">\n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\n return;\n }\n\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let pendingActionData: RouteData | undefined;\n let pendingError: RouteData | undefined;\n\n if (opts && opts.pendingError) {\n // If we have a pendingError, it means the user attempted a GET submission\n // with binary FormData so assign here and skip to handleLoaders. That\n // way we handle calling loaders above the boundary etc. It's not really\n // different from an actionError in that sense.\n pendingError = {\n [findNearestBoundary(matches).route.id]: opts.pendingError,\n };\n } else if (\n opts &&\n opts.submission &&\n isMutationMethod(opts.submission.formMethod)\n ) {\n // Call action if we received an action submission\n let actionOutput = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n { replace: opts.replace, flushSync }\n );\n\n if (actionOutput.shortCircuited) {\n return;\n }\n\n pendingActionData = actionOutput.pendingActionData;\n pendingError = actionOutput.pendingActionError;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n\n // Create a GET request for the loaders\n request = new Request(request.url, { signal: request.signal });\n }\n\n // Call loaders\n let { shortCircuited, loaderData, errors } = await handleLoaders(\n request,\n location,\n matches,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.fetcherSubmission,\n opts && opts.replace,\n flushSync,\n pendingActionData,\n pendingError\n );\n\n if (shortCircuited) {\n return;\n }\n\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n loaderData,\n errors,\n });\n }\n\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(\n request: Request,\n location: Location,\n submission: Submission,\n matches: AgnosticDataRouteMatch[],\n opts: { replace?: boolean; flushSync?: boolean } = {}\n ): Promise<HandleActionResult> {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\n\n // Call our action and get the result\n let result: DataResult;\n let actionMatch = getTargetMatch(matches, location);\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id,\n }),\n };\n } else {\n result = await callLoaderOrAction(\n \"action\",\n request,\n actionMatch,\n matches,\n manifest,\n mapRouteProperties,\n basename\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n }\n\n if (isRedirectResult(result)) {\n let replace: boolean;\n if (opts && opts.replace != null) {\n replace = opts.replace;\n } else {\n // If the user didn't explicity indicate replace behavior, replace if\n // we redirected to the exact same location we're currently at to avoid\n // double back-buttons\n replace =\n result.location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(state, result, { submission, replace });\n return { shortCircuited: true };\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n // By default, all submissions are REPLACE navigations, but if the\n // action threw an error that'll be rendered in an errorElement, we fall\n // back to PUSH so that the user can use the back button to get back to\n // the pre-submission form location to try again\n if ((opts && opts.replace) !== true) {\n pendingAction = HistoryAction.Push;\n }\n\n return {\n // Send back an empty object we can use to clear out any prior actionData\n pendingActionData: {},\n pendingActionError: { [boundaryMatch.route.id]: result.error },\n };\n }\n\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n return {\n pendingActionData: { [actionMatch.route.id]: result.data },\n };\n }\n\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n overrideNavigation?: Navigation,\n submission?: Submission,\n fetcherSubmission?: Submission,\n replace?: boolean,\n flushSync?: boolean,\n pendingActionData?: RouteData,\n pendingError?: RouteData\n ): Promise<HandleLoadersResult> {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation =\n overrideNavigation || getLoadingNavigation(location, submission);\n\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionData,\n pendingError\n );\n\n // Cancel pending deferreds for no-longer-matched routes or routes we're\n // about to reload. Note that if this is an action reload we would have\n // already cancelled all pending deferreds so this would be a no-op\n cancelActiveDeferreds(\n (routeId) =>\n !(matches && matches.some((m) => m.route.id === routeId)) ||\n (matchesToLoad && matchesToLoad.some((m) => m.route.id === routeId))\n );\n\n pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingError || null,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\n );\n return { shortCircuited: true };\n }\n\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n if (!isUninterruptedRevalidation) {\n revalidatingFetchers.forEach((rf) => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n let actionData = pendingActionData || state.actionData;\n updateState(\n {\n navigation: loadingNavigation,\n ...(actionData\n ? Object.keys(actionData).length === 0\n ? { actionData: null }\n : { actionData }\n : {}),\n ...(revalidatingFetchers.length > 0\n ? { fetchers: new Map(state.fetchers) }\n : {}),\n },\n {\n flushSync,\n }\n );\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n\n let { results, loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n request\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect(results);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(state, redirect.result, { replace });\n return { shortCircuited: true };\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n matchesToLoad,\n loaderResults,\n pendingError,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe((aborted) => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\n }\n\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ) {\n if (isServer) {\n throw new Error(\n \"router.fetch() was called during the server render, but it shouldn't be. \" +\n \"You are likely calling a useFetcher() method in the body of your component. \" +\n \"Try moving it to a useEffect or a callback.\"\n );\n }\n\n if (fetchControllers.has(key)) abortFetcher(key);\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\n return;\n }\n\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, { routeId, path });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\n }\n\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n requestMatches: AgnosticDataRouteMatch[],\n flushSync: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action && !match.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\n\n // Call the action for the fetcher\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let actionResult = await callLoaderOrAction(\n \"action\",\n fetchRequest,\n match,\n requestMatches,\n manifest,\n mapRouteProperties,\n basename\n );\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by our own fetcher\n // re-submit which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n\n if (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(state, actionResult, {\n fetcherSubmission: submission,\n });\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, basename)\n : state.matches;\n\n invariant(matches, \"Didn't find any matches after fetcher action\");\n\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n { [match.route.id]: actionResult.data },\n undefined // No need to send through errors since we short circuit above\n );\n\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers\n .filter((rf) => rf.key !== key)\n .forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n let { results, loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n revalidationRequest\n );\n\n if (abortController.signal.aborted) {\n return;\n }\n\n abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n let redirect = findRedirect(results);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(state, redirect.result);\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n state.matches,\n matchesToLoad,\n loaderResults,\n undefined,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n abortStaleFetchLoads(loadId);\n\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (\n state.navigation.state === \"loading\" &&\n loadId > pendingNavigationLoadId\n ) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers),\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n fetchers: new Map(state.fetchers),\n });\n isRevalidationRequired = false;\n }\n }\n\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n flushSync: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\n\n // Call the loader for this fetcher route match\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let result: DataResult = await callLoaderOrAction(\n \"loader\",\n fetchRequest,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename\n );\n\n // Deferred isn't supported for fetcher loads, await everything and treat it\n // as a normal load. resolveDeferredData will return undefined if this\n // fetcher gets aborted, so we just leave result untouched and short circuit\n // below if that happens\n if (isDeferredResult(result)) {\n result =\n (await resolveDeferredData(result, fetchRequest.signal, true)) ||\n result;\n }\n\n // We can delete this so long as we weren't aborted by our our own fetcher\n // re-load which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n\n if (fetchRequest.signal.aborted) {\n return;\n }\n\n if (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(state, result);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\n }\n\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(\n state: RouterState,\n redirect: RedirectResult,\n {\n submission,\n fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.revalidate) {\n isRevalidationRequired = true;\n }\n\n let redirectLocation = createLocation(state.location, redirect.location, {\n _isRedirect: true,\n });\n invariant(\n redirectLocation,\n \"Expected a location on the redirect navigation\"\n );\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.reloadDocument) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(redirect.location)) {\n const url = init.history.createURL(redirect.location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(redirect.location);\n } else {\n routerWindow.location.assign(redirect.location);\n }\n return;\n }\n }\n\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n\n let redirectHistoryAction =\n replace === true ? HistoryAction.Replace : HistoryAction.Push;\n\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let { formMethod, formAction, formEncType } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: redirect.location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n }\n }\n\n async function callLoadersAndMaybeResolveData(\n currentMatches: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n fetchersToLoad: RevalidatingFetcher[],\n request: Request\n ) {\n // Call all navigation loaders and revalidating fetcher loaders in parallel,\n // then slice off the results into separate arrays so we can handle them\n // accordingly\n let results = await Promise.all([\n ...matchesToLoad.map((match) =>\n callLoaderOrAction(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename\n )\n ),\n ...fetchersToLoad.map((f) => {\n if (f.matches && f.match && f.controller) {\n return callLoaderOrAction(\n \"loader\",\n createClientSideRequest(init.history, f.path, f.controller.signal),\n f.match,\n f.matches,\n manifest,\n mapRouteProperties,\n basename\n );\n } else {\n let error: ErrorResult = {\n type: ResultType.error,\n error: getInternalRouterError(404, { pathname: f.path }),\n };\n return error;\n }\n }),\n ]);\n let loaderResults = results.slice(0, matchesToLoad.length);\n let fetcherResults = results.slice(matchesToLoad.length);\n\n await Promise.all([\n resolveDeferredResults(\n currentMatches,\n matchesToLoad,\n loaderResults,\n loaderResults.map(() => request.signal),\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\n true\n ),\n ]);\n\n return { results, loaderResults, fetcherResults };\n }\n\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.push(key);\n abortFetcher(key);\n }\n });\n }\n\n function updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher<TData = any>(key: string): Fetcher<TData> {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n function abortFetcher(key: string) {\n let controller = fetchControllers.get(key);\n invariant(controller, `Expected fetch controller: ${key}`);\n controller.abort();\n fetchControllers.delete(key);\n }\n\n function markFetchersDone(keys: string[]) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n\n function abortStaleFetchLoads(landedId: number): boolean {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n\n function getBlocker(key: string, fn: BlockerFunction) {\n let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n\n return blocker;\n }\n\n function deleteBlocker(key: string) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key: string, newBlocker: Blocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(\n (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ blockers });\n }\n\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n }: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n }): string | undefined {\n if (blockerFunctions.size === 0) {\n return;\n }\n\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n\n function cancelActiveDeferreds(\n predicate?: (routeId: string) => boolean\n ): string[] {\n let cancelledRouteIds: string[] = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the <ScrollRestoration> component\n function enableScrollRestoration(\n positions: Record<string, number>,\n getPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || null;\n\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered <ScrollRestoration/>\n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n\n function getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n router = {\n get basename() {\n return basename;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to: To) => init.history.createHref(to),\n encodeLocation: (to: To) => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n */\n async function query(\n request: Request,\n { requestContext }: { requestContext?: unknown } = {}\n ): Promise<StaticHandlerContext | Response> {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, { method });\n let { matches: methodNotAllowedMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n } else if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let result = await queryImpl(request, location, matches, requestContext);\n if (isResponse(result)) {\n return result;\n }\n\n // When returning StaticHandlerContext, we patch back in the location here\n // since we need it for React Context. But this helps keep our submit and\n // loadRouteData operating on a Request instead of a Location\n return { location, basename, ...result };\n }\n\n /**\n * The queryRoute() method is intended for targeted route requests, either\n * for fetch ?_data requests or resource route requests. In this case, we\n * are only ever calling a single action or loader, and we are returning the\n * returned value directly. In most cases, this will be a Response returned\n * from the action/loader, but it may be a primitive or other value as well -\n * and in such cases the calling context should handle that accordingly.\n *\n * We do respect the throw/return differentiation, so if an action/loader\n * throws, then this method will throw the value. This is important so we\n * can do proper boundary identification in Remix where a thrown Response\n * must go to the Catch Boundary but a returned Response is happy-path.\n *\n * One thing to note is that any Router-initiated Errors that make sense\n * to associate with a status code will be thrown as an ErrorResponse\n * instance which include the raw Error, such that the calling context can\n * serialize the error as they see fit while including the proper response\n * code. Examples here are 404 and 405 errors that occur prior to reaching\n * any user-defined loaders.\n */\n async function queryRoute(\n request: Request,\n {\n routeId,\n requestContext,\n }: { requestContext?: unknown; routeId?: string } = {}\n ): Promise<any> {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, { method });\n } else if (!matches) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let match = routeId\n ? matches.find((m) => m.route.id === routeId)\n : getTargetMatch(matches, location);\n\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId,\n });\n } else if (!match) {\n // This should never hit I don't think?\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n match\n );\n if (isResponse(result)) {\n return result;\n }\n\n let error = result.errors ? Object.values(result.errors)[0] : undefined;\n if (error !== undefined) {\n // If we got back result.errors, that means the loader/action threw\n // _something_ that wasn't a Response, but it's not guaranteed/required\n // to be an `instanceof Error` either, so we have to use throw here to\n // preserve the \"error\" state outside of queryImpl.\n throw error;\n }\n\n // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n\n if (result.loaderData) {\n let data = Object.values(result.loaderData)[0];\n if (result.activeDeferreds?.[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n\n return undefined;\n }\n\n async function queryImpl(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n routeMatch?: AgnosticDataRouteMatch\n ): Promise<Omit<StaticHandlerContext, \"location\" | \"basename\"> | Response> {\n invariant(\n request.signal,\n \"query()/queryRoute() requests must contain an AbortController signal\"\n );\n\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(\n request,\n matches,\n routeMatch || getTargetMatch(matches, location),\n requestContext,\n routeMatch != null\n );\n return result;\n }\n\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n routeMatch\n );\n return isResponse(result)\n ? result\n : {\n ...result,\n actionData: null,\n actionHeaders: {},\n };\n } catch (e) {\n // If the user threw/returned a Response in callLoaderOrAction, we throw\n // it to bail out and then return or throw here based on whether the user\n // returned or threw\n if (isQueryRouteResponse(e)) {\n if (e.type === ResultType.error) {\n throw e.response;\n }\n return e.response;\n }\n // Redirects are always returned since they don't propagate to catch\n // boundaries\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n\n async function submit(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n actionMatch: AgnosticDataRouteMatch,\n requestContext: unknown,\n isRouteRequest: boolean\n ): Promise<Omit<StaticHandlerContext, \"location\" | \"basename\"> | Response> {\n let result: DataResult;\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id,\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n } else {\n result = await callLoaderOrAction(\n \"action\",\n request,\n actionMatch,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n );\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\n }\n }\n\n if (isRedirectResult(result)) {\n // Uhhhh - this should never happen, we should always throw these from\n // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n // can get back on the \"throw all redirect responses\" train here should\n // this ever happen :/\n throw new Response(null, {\n status: result.status,\n headers: {\n Location: result.location,\n },\n });\n }\n\n if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, { type: \"defer-action\" });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n }\n\n if (isRouteRequest) {\n // Note: This should only be non-Response values if we get here, since\n // isRouteRequest should throw any Response received in callLoaderOrAction\n if (isErrorResult(result)) {\n throw result.error;\n }\n\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: { [actionMatch.route.id]: result.data },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n let context = await loadRouteData(\n request,\n matches,\n requestContext,\n undefined,\n {\n [boundaryMatch.route.id]: result.error,\n }\n );\n\n // action status codes take precedence over loader status codes\n return {\n ...context,\n statusCode: isRouteErrorResponse(result.error)\n ? result.error.status\n : 500,\n actionData: null,\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n // Create a GET request for the loaders\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal,\n });\n let context = await loadRouteData(loaderRequest, matches, requestContext);\n\n return {\n ...context,\n // action status codes take precedence over loader status codes\n ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n actionData: {\n [actionMatch.route.id]: result.data,\n },\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n async function loadRouteData(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n routeMatch?: AgnosticDataRouteMatch,\n pendingActionError?: RouteData\n ): Promise<\n | Omit<\n StaticHandlerContext,\n \"location\" | \"basename\" | \"actionData\" | \"actionHeaders\"\n >\n | Response\n > {\n let isRouteRequest = routeMatch != null;\n\n // Short circuit if we have no loaders to run (queryRoute())\n if (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch?.route.id,\n });\n }\n\n let requestMatches = routeMatch\n ? [routeMatch]\n : getLoaderMatchesUntilBoundary(\n matches,\n Object.keys(pendingActionError || {})[0]\n );\n let matchesToLoad = requestMatches.filter(\n (m) => m.route.loader || m.route.lazy\n );\n\n // Short circuit if we have no loaders to run (query())\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce(\n (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n {}\n ),\n errors: pendingActionError || null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let results = await Promise.all([\n ...matchesToLoad.map((match) =>\n callLoaderOrAction(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n )\n ),\n ]);\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\n }\n\n // Process and commit output from loaders\n let activeDeferreds = new Map<string, DeferredData>();\n let context = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingActionError,\n activeDeferreds\n );\n\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set<string>(\n matchesToLoad.map((match) => match.route.id)\n );\n matches.forEach((match) => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n\n return {\n ...context,\n matches,\n activeDeferreds:\n activeDeferreds.size > 0\n ? Object.fromEntries(activeDeferreds.entries())\n : null,\n };\n }\n\n return {\n dataRoutes,\n query,\n queryRoute,\n };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n routes: AgnosticDataRouteObject[],\n context: StaticHandlerContext,\n error: any\n) {\n let newContext: StaticHandlerContext = {\n ...context,\n statusCode: 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error,\n },\n };\n return newContext;\n}\n\nfunction isSubmissionNavigation(\n opts: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getPathContributingMatches(contextualMatches).map((m) => m.pathnameBase),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\n} {\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod }),\n };\n }\n\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n\n return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n matches: AgnosticDataRouteMatch[],\n boundaryId?: string\n) {\n let boundaryMatches = matches;\n if (boundaryId) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n boundaryMatches = matches.slice(0, index);\n }\n }\n return boundaryMatches;\n}\n\nfunction getMatchesToLoad(\n history: History,\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n submission: Submission | undefined,\n location: Location,\n isRevalidationRequired: boolean,\n cancelledDeferredRoutes: string[],\n cancelledFetcherLoads: string[],\n deletedFetchers: Set<string>,\n fetchLoadMatches: Map<string, FetchLoadMatch>,\n fetchRedirectIds: Set<string>,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionData?: RouteData,\n pendingError?: RouteData\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n let actionResult = pendingError\n ? Object.values(pendingError)[0]\n : pendingActionData\n ? Object.values(pendingActionData)[0]\n : undefined;\n\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryId = pendingError ? Object.keys(pendingError)[0] : undefined;\n let boundaryMatches = getLoaderMatchesUntilBoundary(matches, boundaryId);\n\n let navigationMatches = boundaryMatches.filter((match, index) => {\n if (match.route.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\n if (match.route.loader == null) {\n return false;\n }\n\n // Always call the loader on new route instances and pending defer cancellations\n if (\n isNewLoader(state.loaderData, state.matches[index], match) ||\n cancelledDeferredRoutes.some((id) => id === match.route.id)\n ) {\n return true;\n }\n\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n\n return shouldRevalidateLoader(match, {\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params,\n ...submission,\n actionResult,\n defaultShouldRevalidate:\n // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n // Clicked the same link, resubmitted a GET form\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate if fetcher won't be present in the subsequent render\n if (\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.includes(key)) {\n // Always revalidate if the fetcher was cancelled\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params,\n ...submission,\n actionResult,\n defaultShouldRevalidate: isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\n });\n }\n });\n\n return [navigationMatches, revalidatingFetchers];\n}\n\nfunction isNewLoader(\n currentLoaderData: RouteData,\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n (currentPath != null &&\n currentPath.endsWith(\"*\") &&\n currentMatch.params[\"*\"] !== match.params[\"*\"])\n );\n}\n\nfunction shouldRevalidateLoader(\n loaderMatch: AgnosticDataRouteMatch,\n arg: ShouldRevalidateFunctionArgs\n) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n\n return arg.defaultShouldRevalidate;\n}\n\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record<string, any> = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n basename: string,\n opts: {\n isStaticRequest?: boolean;\n isRouteRequest?: boolean;\n requestContext?: unknown;\n } = {}\n): Promise<DataResult> {\n let resultType;\n let result;\n let onReject: (() => void) | undefined;\n\n let runHandler = (handler: ActionFunction | LoaderFunction) => {\n // Setup a promise we can race against so that abort signals short circuit\n let reject: () => void;\n let abortPromise = new Promise((_, r) => (reject = r));\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n return Promise.race([\n handler({\n request,\n params: match.params,\n context: opts.requestContext,\n }),\n abortPromise,\n ]);\n };\n\n try {\n let handler = match.route[type];\n\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let values = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n ]);\n if (handlerError) {\n throw handlerError;\n }\n result = values[0];\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n handler = match.route[type];\n if (handler) {\n // Handler still run even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, data: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\n }\n\n invariant(\n result !== undefined,\n `You defined ${type === \"action\" ? \"an action\" : \"a loader\"} for route ` +\n `\"${match.route.id}\" but didn't return anything from your \\`${type}\\` ` +\n `function. Please return a value or \\`null\\`.`\n );\n } catch (e) {\n resultType = ResultType.error;\n result = e;\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n\n if (isResponse(result)) {\n let status = result.status;\n\n // Process redirects\n if (redirectStatusCodes.has(status)) {\n let location = result.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n\n // Support relative routing in internal redirects\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n location = normalizeTo(\n new URL(request.url),\n matches.slice(0, matches.indexOf(match) + 1),\n basename,\n true,\n location\n );\n } else if (!opts.isStaticRequest) {\n // Strip off the protocol+origin for same-origin + same-basename absolute\n // redirects. If this is a static request, we can let it go back to the\n // browser as-is\n let currentUrl = new URL(request.url);\n let url = location.startsWith(\"//\")\n ? new URL(currentUrl.protocol + location)\n : new URL(location);\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n location = url.pathname + url.search + url.hash;\n }\n }\n\n // Don't process redirects in the router during static requests requests.\n // Instead, throw the Response and let the server handle it with an HTTP\n // redirect. We also update the Location header in place in this flow so\n // basename and relative routing is taken into account\n if (opts.isStaticRequest) {\n result.headers.set(\"Location\", location);\n throw result;\n }\n\n return {\n type: ResultType.redirect,\n status,\n location,\n revalidate: result.headers.get(\"X-Remix-Revalidate\") !== null,\n reloadDocument: result.headers.get(\"X-Remix-Reload-Document\") !== null,\n };\n }\n\n // For SSR single-route requests, we want to hand Responses back directly\n // without unwrapping. We do this with the QueryRouteResponse wrapper\n // interface so we can know whether it was returned or thrown\n if (opts.isRouteRequest) {\n let queryRouteResponse: QueryRouteResponse = {\n type:\n resultType === ResultType.error ? ResultType.error : ResultType.data,\n response: result,\n };\n throw queryRouteResponse;\n }\n\n let data: any;\n let contentType = result.headers.get(\"Content-Type\");\n // Check between word boundaries instead of startsWith() due to the last\n // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n data = await result.json();\n } else {\n data = await result.text();\n }\n\n if (resultType === ResultType.error) {\n return {\n type: resultType,\n error: new ErrorResponseImpl(status, result.statusText, data),\n headers: result.headers,\n };\n }\n\n return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n if (resultType === ResultType.error) {\n return { type: resultType, error: result };\n }\n\n if (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\n }\n\n return { type: ResultType.data, data: result };\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n history: History,\n location: string | Location,\n signal: AbortSignal,\n submission?: Submission\n): Request {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init: RequestInit = { signal };\n\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\n return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n let searchParams = new URLSearchParams();\n\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\n\nfunction processRouteLoaderData(\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingError: RouteData | undefined,\n activeDeferreds: Map<string, DeferredData>\n): {\n loaderData: RouterState[\"loaderData\"];\n errors: RouterState[\"errors\"] | null;\n statusCode: number;\n loaderHeaders: Record<string, Headers>;\n} {\n // Fill in loaderData/errors from our loaders\n let loaderData: RouterState[\"loaderData\"] = {};\n let errors: RouterState[\"errors\"] | null = null;\n let statusCode: number | undefined;\n let foundError = false;\n let loaderHeaders: Record<string, Headers> = {};\n\n // Process loader results into state.loaderData/state.errors\n results.forEach((result, index) => {\n let id = matchesToLoad[index].route.id;\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n // Look upwards from the matched route for the closest ancestor\n // error boundary, defaulting to the root match\n let boundaryMatch = findNearestBoundary(matches, id);\n let error = result.error;\n // If we have a pending action error, we report it at the highest-route\n // that throws a loader error, and then clear it out to indicate that\n // it was consumed\n if (pendingError) {\n error = Object.values(pendingError)[0];\n pendingError = undefined;\n }\n\n errors = errors || {};\n\n // Prefer higher error values if lower errors bubble to the same boundary\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n\n // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\n\n // Once we find our first (highest) error, we set the status code and\n // prevent deeper status codes from overriding\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error)\n ? result.error.status\n : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n if (isDeferredResult(result)) {\n activeDeferreds.set(id, result.deferredData);\n loaderData[id] = result.deferredData.data;\n } else {\n loaderData[id] = result.data;\n }\n\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (\n result.statusCode != null &&\n result.statusCode !== 200 &&\n !foundError\n ) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n });\n\n // If we didn't consume the pending action error (i.e., all loaders\n // resolved), then consume it here. Also clear out any loaderData for the\n // throwing route\n if (pendingError) {\n errors = pendingError;\n loaderData[Object.keys(pendingError)[0]] = undefined;\n }\n\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders,\n };\n}\n\nfunction processLoaderData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingError: RouteData | undefined,\n revalidatingFetchers: RevalidatingFetcher[],\n fetcherResults: DataResult[],\n activeDeferreds: Map<string, DeferredData>\n): {\n loaderData: RouterState[\"loaderData\"];\n errors?: RouterState[\"errors\"];\n} {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingError,\n activeDeferreds\n );\n\n // Process results from our revalidating fetchers\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let { key, match, controller } = revalidatingFetchers[index];\n invariant(\n fetcherResults !== undefined && fetcherResults[index] !== undefined,\n \"Did not find corresponding fetcher result\"\n );\n let result = fetcherResults[index];\n\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error,\n };\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n loaderData: RouteData,\n newLoaderData: RouteData,\n matches: AgnosticDataRouteMatch[],\n errors: RouteData | null | undefined\n): RouteData {\n let mergedLoaderData = { ...newLoaderData };\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n } else {\n // No-op - this is so we ignore existing data if we have a key in the\n // incoming object with an undefined value, which is how we unset a prior\n // loaderData if we encounter a loader error\n }\n } else if (loaderData[id] !== undefined && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\n mergedLoaderData[id] = loaderData[id];\n }\n\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n matches: AgnosticDataRouteMatch[],\n routeId?: string\n): AgnosticDataRouteMatch {\n let eligibleMatches = routeId\n ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n : [...matches];\n return (\n eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n matches[0]\n );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n matches: AgnosticDataRouteMatch[];\n route: AgnosticDataRouteObject;\n} {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route =\n routes.length === 1\n ? routes[0]\n : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`,\n };\n\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route,\n },\n ],\n route,\n };\n}\n\nfunction getInternalRouterError(\n status: number,\n {\n pathname,\n routeId,\n method,\n type,\n }: {\n pathname?: string;\n routeId?: string;\n method?: string;\n type?: \"defer-action\" | \"invalid-body\";\n } = {}\n) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method} request to \"${pathname}\" but ` +\n `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n `did not provide an \\`action\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n\n return new ErrorResponseImpl(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(\n results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return { result, idx: i };\n }\n }\n}\n\nfunction stripHashFromPath(path: To) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n return (result && result.type) === ResultType.redirect;\n}\n\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\n}\n\nfunction isResponse(value: any): value is Response {\n return (\n value != null &&\n typeof value.status === \"number\" &&\n typeof value.statusText === \"string\" &&\n typeof value.headers === \"object\" &&\n typeof value.body !== \"undefined\"\n );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n if (!isResponse(result)) {\n return false;\n }\n\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isQueryRouteResponse(obj: any): obj is QueryRouteResponse {\n return (\n obj &&\n isResponse(obj.response) &&\n (obj.type === ResultType.data || obj.type === ResultType.error)\n );\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: (AgnosticDataRouteMatch | null)[],\n results: DataResult[],\n signals: (AbortSignal | null)[],\n isFetcher: boolean,\n currentLoaderData?: RouteData\n) {\n for (let index = 0; index < results.length; index++) {\n let result = results[index];\n let match = matchesToLoad[index];\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\n let currentMatch = currentMatches.find(\n (m) => m.route.id === match!.route.id\n );\n let isRevalidatingLoader =\n currentMatch != null &&\n !isNewRouteInstance(currentMatch, match) &&\n (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n if (isDeferredResult(result) && (isFetcher || isRevalidatingLoader)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n let signal = signals[index];\n invariant(\n signal,\n \"Expected an AbortSignal for revalidating fetcher deferred result\"\n );\n await resolveDeferredData(result, signal, isFetcher).then((result) => {\n if (result) {\n results[index] = result || results[index];\n }\n });\n }\n }\n}\n\nasync function resolveDeferredData(\n result: DeferredResult,\n signal: AbortSignal,\n unwrap = false\n): Promise<SuccessResult | ErrorResult | undefined> {\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData,\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e,\n };\n }\n }\n\n return {\n type: ResultType.data,\n data: result.deferredData.data,\n };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\nfunction getTargetMatch(\n matches: AgnosticDataRouteMatch[],\n location: Location | string\n) {\n let search =\n typeof location === \"string\" ? parsePath(location).search : location.search;\n if (\n matches[matches.length - 1].route.index &&\n hasNakedIndexQuery(search || \"\")\n ) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\n\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map<string, Set<string>>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map<string, Set<string>>\n) {\n if (transitions.size > 0) {\n let json: Record<string, string[]> = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\n\n//#endregion\n","import * as React from \"react\";\nimport type {\n AgnosticIndexRouteObject,\n AgnosticNonIndexRouteObject,\n AgnosticRouteMatch,\n History,\n LazyRouteFunction,\n Location,\n Action as NavigationType,\n RelativeRoutingType,\n Router,\n StaticHandlerContext,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticIndexRouteObject[\"path\"];\n id?: AgnosticIndexRouteObject[\"id\"];\n loader?: AgnosticIndexRouteObject[\"loader\"];\n action?: AgnosticIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticIndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction<RouteObject>;\n}\n\nexport interface NonIndexRouteObject {\n caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticNonIndexRouteObject[\"path\"];\n id?: AgnosticNonIndexRouteObject[\"id\"];\n loader?: AgnosticNonIndexRouteObject[\"loader\"];\n action?: AgnosticNonIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticNonIndexRouteObject[\"handle\"];\n index?: false;\n children?: RouteObject[];\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction<RouteObject>;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n children?: DataRouteObject[];\n id: string;\n};\n\nexport interface RouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch<ParamKey, RouteObjectType> {}\n\nexport interface DataRouteMatch extends RouteMatch<string, DataRouteObject> {}\n\nexport interface DataRouterContextObject extends NavigationContextObject {\n router: Router;\n staticContext?: StaticHandlerContext;\n}\n\nexport const DataRouterContext =\n React.createContext<DataRouterContextObject | null>(null);\nif (__DEV__) {\n DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext<TrackedPromise | null>(null);\nif (__DEV__) {\n AwaitContext.displayName = \"Await\";\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n unstable_viewTransition?: boolean;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `<Router>` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n createHref: History[\"createHref\"];\n // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n encodeLocation?: History[\"encodeLocation\"];\n go: History[\"go\"];\n push(to: To, state?: any, opts?: NavigateOptions): void;\n replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n}\n\nexport const NavigationContext = React.createContext<NavigationContextObject>(\n null!\n);\n\nif (__DEV__) {\n NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n location: Location;\n navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext<LocationContextObject>(\n null!\n);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n isDataRoute: boolean;\n}\n\nexport const RouteContext = React.createContext<RouteContextObject>({\n outlet: null,\n matches: [],\n isDataRoute: false,\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext<any>(null);\n\nif (__DEV__) {\n RouteErrorContext.displayName = \"RouteError\";\n}\n","import * as React from \"react\";\nimport type {\n Blocker,\n BlockerFunction,\n Location,\n ParamParseKey,\n Params,\n Path,\n PathMatch,\n PathPattern,\n RelativeRoutingType,\n Router as RemixRouter,\n RevalidationState,\n To,\n UIMatch,\n} from \"@remix-run/router\";\nimport {\n IDLE_BLOCKER,\n Action as NavigationType,\n UNSAFE_convertRouteMatchToUiMatch as convertRouteMatchToUiMatch,\n UNSAFE_getPathContributingMatches as getPathContributingMatches,\n UNSAFE_invariant as invariant,\n isRouteErrorResponse,\n joinPaths,\n matchPath,\n matchRoutes,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\n\nimport type {\n DataRouteMatch,\n NavigateOptions,\n RouteContextObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n RouteErrorContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/hooks/use-href\n */\nexport function useHref(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a <Router> component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname =\n pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a `<Router>`.\n *\n * @see https://reactrouter.com/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/hooks/use-location\n */\nexport function useLocation(): Location {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a <Router> component.`\n );\n\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * `<NavLink>`.\n *\n * @see https://reactrouter.com/hooks/use-match\n */\nexport function useMatch<\n ParamKey extends ParamParseKey<Path>,\n Path extends string\n>(pattern: PathPattern<Path> | Path): PathMatch<ParamKey> | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a <Router> component.`\n );\n\n let { pathname } = useLocation();\n return React.useMemo(\n () => matchPath<ParamKey, Path>(pattern, pathname),\n [pathname, pattern]\n );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n (to: To, options?: NavigateOptions): void;\n (delta: number): void;\n}\n\nconst navigateEffectWarning =\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`;\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(\n cb: Parameters<typeof React.useLayoutEffect>[0]\n) {\n let isStatic = React.useContext(NavigationContext).static;\n if (!isStatic) {\n // We should be able to get rid of this once react 18.3 is released\n // See: https://github.com/facebook/react/pull/26395\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(cb);\n }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by `<Link>`s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n let { isDataRoute } = React.useContext(RouteContext);\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\n\nfunction useNavigateUnstable(): NavigateFunction {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a <Router> component.`\n );\n\n let dataRouterContext = React.useContext(DataRouterContext);\n let { basename, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getPathContributingMatches(matches).map((match) => match.pathnameBase)\n );\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our history listener yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history (but only if we're not in a data router,\n // otherwise it'll prepend the basename inside of the router).\n // If this is a root navigation, then we navigate to the raw basename\n // which allows the basename to have full control over the presence of a\n // trailing slash on root links\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\"\n ? basename\n : joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state,\n options\n );\n },\n [\n basename,\n navigator,\n routePathnamesJson,\n locationPathname,\n dataRouterContext,\n ]\n );\n\n return navigate;\n}\n\nconst OutletContext = React.createContext<unknown>(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/hooks/use-outlet-context\n */\nexport function useOutletContext<Context = unknown>(): Context {\n return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `<Outlet>` to render child routes.\n *\n * @see https://reactrouter.com/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return (\n <OutletContext.Provider value={context}>{outlet}</OutletContext.Provider>\n );\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/hooks/use-params\n */\nexport function useParams<\n ParamsOrKey extends string | Record<string, string | undefined> = string\n>(): Readonly<\n [ParamsOrKey] extends [string] ? Params<ParamsOrKey> : Partial<ParamsOrKey>\n> {\n let { matches } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getPathContributingMatches(matches).map((match) => match.pathnameBase)\n );\n\n return React.useMemo(\n () =>\n resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `<Outlet>` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/hooks/use-routes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial<Location> | string\n): React.ReactElement | null {\n return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nexport function useRoutesImpl(\n routes: RouteObject[],\n locationArg?: Partial<Location> | string,\n dataRouterState?: RemixRouter[\"state\"]\n): React.ReactElement | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a <Router> component.`\n );\n\n let { navigator } = React.useContext(NavigationContext);\n let { matches: parentMatches } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (__DEV__) {\n // You won't get a warning about 2 different <Routes> under a <Route>\n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // <Routes>\n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // <Route path=\"blog\" element={<Blog />} />\n // <Route path=\"blog/feed\" element={<BlogFeed />} />\n // </Routes>\n //\n // function Blog() {\n // return (\n // <Routes>\n // <Route path=\"post/:id\" element={<Post />} />\n // </Routes>\n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant <Routes> (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under <Route path=\"${parentPath}\">) but the ` +\n `parent route path has no trailing \"*\". This means if you navigate ` +\n `deeper, the parent won't match anymore and therefore the child ` +\n `routes will never render.\\n\\n` +\n `Please change the parent <Route path=\"${parentPath}\"> to <Route ` +\n `path=\"${parentPath === \"/\" ? \"*\" : `${parentPath}/*`}\">.`\n );\n }\n\n let locationFromContext = useLocation();\n\n let location;\n if (locationArg) {\n let parsedLocationArg =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n invariant(\n parentPathnameBase === \"/\" ||\n parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`<Routes location>\\` or \\`useRoutes(routes, location)\\`, ` +\n `the location pathname must begin with the portion of the URL pathname that was ` +\n `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n let remainingPathname =\n parentPathnameBase === \"/\"\n ? pathname\n : pathname.slice(parentPathnameBase.length) || \"/\";\n\n let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n if (__DEV__) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n\n warning(\n matches == null ||\n matches[matches.length - 1].route.element !== undefined ||\n matches[matches.length - 1].route.Component !== undefined,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" ` +\n `does not have an element or Component. This means it will render an <Outlet /> with a ` +\n `null value by default resulting in an \"empty\" page.`\n );\n }\n\n let renderedMatches = _renderMatches(\n matches &&\n matches.map((match) =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathname).pathname\n : match.pathname,\n ]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathnameBase).pathname\n : match.pathnameBase,\n ]),\n })\n ),\n parentMatches,\n dataRouterState\n );\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return (\n <LocationContext.Provider\n value={{\n location: {\n pathname: \"/\",\n search: \"\",\n hash: \"\",\n state: null,\n key: \"default\",\n ...location,\n },\n navigationType: NavigationType.Pop,\n }}\n >\n {renderedMatches}\n </LocationContext.Provider>\n );\n }\n\n return renderedMatches;\n}\n\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error)\n ? `${error.status} ${error.statusText}`\n : error instanceof Error\n ? error.message\n : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n\n let devInfo = null;\n if (__DEV__) {\n console.error(\n \"Error handled by React Router default ErrorBoundary:\",\n error\n );\n\n devInfo = (\n <>\n <p>💿 Hey developer 👋</p>\n <p>\n You can provide a way better UX than this when your app throws errors\n by providing your own <code style={codeStyles}>ErrorBoundary</code> or{\" \"}\n <code style={codeStyles}>errorElement</code> prop on your route.\n </p>\n </>\n );\n }\n\n return (\n <>\n <h2>Unexpected Application Error!</h2>\n <h3 style={{ fontStyle: \"italic\" }}>{message}</h3>\n {stack ? <pre style={preStyles}>{stack}</pre> : null}\n {devInfo}\n </>\n );\n}\n\nconst defaultErrorElement = <DefaultErrorComponent />;\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n location: Location;\n revalidation: RevalidationState;\n error: any;\n component: React.ReactNode;\n routeContext: RouteContextObject;\n}>;\n\ntype RenderErrorBoundaryState = {\n location: Location;\n revalidation: RevalidationState;\n error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n RenderErrorBoundaryProps,\n RenderErrorBoundaryState\n> {\n constructor(props: RenderErrorBoundaryProps) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error,\n };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error: error };\n }\n\n static getDerivedStateFromProps(\n props: RenderErrorBoundaryProps,\n state: RenderErrorBoundaryState\n ) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (\n state.location !== props.location ||\n (state.revalidation !== \"idle\" && props.revalidation === \"idle\")\n ) {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation,\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error || state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"React Router caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n return this.state.error ? (\n <RouteContext.Provider value={this.props.routeContext}>\n <RouteErrorContext.Provider\n value={this.state.error}\n children={this.props.component}\n />\n </RouteContext.Provider>\n ) : (\n this.props.children\n );\n }\n}\n\ninterface RenderedRouteProps {\n routeContext: RouteContextObject;\n match: RouteMatch<string, RouteObject>;\n children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n let dataRouterContext = React.useContext(DataRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (\n dataRouterContext &&\n dataRouterContext.static &&\n dataRouterContext.staticContext &&\n (match.route.errorElement || match.route.ErrorBoundary)\n ) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n\n return (\n <RouteContext.Provider value={routeContext}>\n {children}\n </RouteContext.Provider>\n );\n}\n\nexport function _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = [],\n dataRouterState: RemixRouter[\"state\"] | null = null\n): React.ReactElement | null {\n if (matches == null) {\n if (dataRouterState?.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches as DataRouteMatch[];\n } else {\n return null;\n }\n }\n\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id]\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for errors on route IDs: ${Object.keys(\n errors\n ).join(\",\")}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n\n return renderedMatches.reduceRight((outlet, match, index) => {\n let error = match.route.id ? errors?.[match.route.id] : null;\n // Only data routers handle errors\n let errorElement: React.ReactNode | null = null;\n if (dataRouterState) {\n errorElement = match.route.errorElement || defaultErrorElement;\n }\n let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children: React.ReactNode;\n if (error) {\n children = errorElement;\n } else if (match.route.Component) {\n // Note: This is a de-optimized path since React won't re-use the\n // ReactElement since it's identity changes with each new\n // React.createElement call. We keep this so folks can use\n // `<Route Component={...}>` in `<Routes>` but generally `Component`\n // usage is only advised in `RouterProvider` when we can convert it to\n // `element` ahead of time.\n children = <match.route.Component />;\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return (\n <RenderedRoute\n match={match}\n routeContext={{\n outlet,\n matches,\n isDataRoute: dataRouterState != null,\n }}\n children={children}\n />\n );\n };\n // Only wrap in an error boundary within data router usages when we have an\n // ErrorBoundary/errorElement on this route. Otherwise let it bubble up to\n // an ancestor ErrorBoundary/errorElement\n return dataRouterState &&\n (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? (\n <RenderErrorBoundary\n location={dataRouterState.location}\n revalidation={dataRouterState.revalidation}\n component={errorElement}\n error={error}\n children={getChildren()}\n routeContext={{ outlet: null, matches, isDataRoute: true }}\n />\n ) : (\n getChildren()\n );\n }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n UseBlocker = \"useBlocker\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n}\n\nenum DataRouterStateHook {\n UseBlocker = \"useBlocker\",\n UseLoaderData = \"useLoaderData\",\n UseActionData = \"useActionData\",\n UseRouteError = \"useRouteError\",\n UseNavigation = \"useNavigation\",\n UseRouteLoaderData = \"useRouteLoaderData\",\n UseMatches = \"useMatches\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n UseRouteId = \"useRouteId\",\n}\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\nfunction useRouteContext(hookName: DataRouterStateHook) {\n let route = React.useContext(RouteContext);\n invariant(route, getDataRouterConsoleError(hookName));\n return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName: DataRouterStateHook) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `${hookName} can only be used on routes that contain a unique \"id\"`\n );\n return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nexport function useRouteId() {\n return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return React.useMemo(\n () => ({\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation,\n }),\n [dataRouterContext.router.revalidate, state.revalidation]\n );\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches(): UIMatch[] {\n let { matches, loaderData } = useDataRouterState(\n DataRouterStateHook.UseMatches\n );\n return React.useMemo(\n () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n [matches, loaderData]\n );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n\n if (state.errors && state.errors[routeId] != null) {\n console.error(\n `You cannot \\`useLoaderData\\` in an errorElement (routeId: ${routeId})`\n );\n return undefined;\n }\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error) {\n return error;\n }\n\n // Otherwise look for errors from our data router state\n return state.errors?.[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `<Await />` value\n */\nexport function useAsyncValue(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `<Await />` value\n */\nexport function useAsyncError(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._error;\n}\n\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation. Mostly used to avoid\n * using half-filled form data. This does not handle hard-reloads or\n * cross-origin navigations.\n */\nexport function useBlocker(shouldBlock: boolean | BlockerFunction): Blocker {\n let { router, basename } = useDataRouterContext(DataRouterHook.UseBlocker);\n let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n\n let [blockerKey, setBlockerKey] = React.useState(\"\");\n let blockerFunction = React.useCallback<BlockerFunction>(\n (arg) => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n\n // If they provided us a function and we've got an active basename, strip\n // it from the locations we expose to the user to match the behavior of\n // useLocation\n let { currentLocation, nextLocation, historyAction } = arg;\n return shouldBlock({\n currentLocation: {\n ...currentLocation,\n pathname:\n stripBasename(currentLocation.pathname, basename) ||\n currentLocation.pathname,\n },\n nextLocation: {\n ...nextLocation,\n pathname:\n stripBasename(nextLocation.pathname, basename) ||\n nextLocation.pathname,\n },\n historyAction,\n });\n },\n [basename, shouldBlock]\n );\n\n // This effect is in charge of blocker key assignment and deletion (which is\n // tightly coupled to the key)\n React.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n\n // This effect handles assigning the blockerFunction. This is to handle\n // unstable blocker function identities, and happens only after the prior\n // effect so we don't get an orphaned blockerFunction in the router with a\n // key of \"\". Until then we just have the IDLE_BLOCKER.\n React.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n\n // Prefer the blocker from `state` not `router.state` since DataRouterContext\n // is memoized so this ensures we update on blocker state updates\n return blockerKey && state.blockers.has(blockerKey)\n ? state.blockers.get(blockerKey)!\n : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable(): NavigateFunction {\n let { router } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our router subscriber yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n router.navigate(to);\n } else {\n router.navigate(to, { fromRouteId: id, ...options });\n }\n },\n [router, id]\n );\n\n return navigate;\n}\n\nconst alreadyWarned: Record<string, boolean> = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n","import type {\n InitialEntry,\n LazyRouteFunction,\n Location,\n MemoryHistory,\n RelativeRoutingType,\n Router as RemixRouter,\n RouterState,\n RouterSubscriber,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\nimport {\n AbortedDeferredError,\n Action as NavigationType,\n createMemoryHistory,\n UNSAFE_getPathContributingMatches as getPathContributingMatches,\n UNSAFE_invariant as invariant,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\nimport * as React from \"react\";\n\nimport type {\n DataRouteObject,\n IndexRouteObject,\n Navigator,\n NonIndexRouteObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n} from \"./context\";\nimport {\n _renderMatches,\n useAsyncValue,\n useInRouterContext,\n useLocation,\n useNavigate,\n useOutlet,\n useRoutes,\n useRoutesImpl,\n} from \"./hooks\";\n\nexport interface FutureConfig {\n v7_startTransition: boolean;\n}\n\nexport interface RouterProviderProps {\n fallbackElement?: React.ReactNode;\n router: RemixRouter;\n future?: Partial<FutureConfig>;\n}\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n future,\n}: RouterProviderProps): React.ReactElement {\n let [state, setStateImpl] = React.useState(router.state);\n let { v7_startTransition } = future || {};\n\n let setState = React.useCallback<RouterSubscriber>(\n (newState: RouterState) => {\n if (v7_startTransition && startTransitionImpl) {\n startTransitionImpl(() => setStateImpl(newState));\n } else {\n setStateImpl(newState);\n }\n },\n [setStateImpl, v7_startTransition]\n );\n\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n let dataRouterContext = React.useMemo(\n () => ({\n router,\n navigator,\n static: false,\n basename,\n }),\n [router, navigator, basename]\n );\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a <script> here\n // containing the hydrated server-side staticContext (from StaticRouterProvider).\n // useId relies on the component tree structure to generate deterministic id's\n // so we need to ensure it remains the same on the client even though\n // we don't need the <script> tag\n return (\n <>\n <DataRouterContext.Provider value={dataRouterContext}>\n <DataRouterStateContext.Provider value={state}>\n <Router\n basename={basename}\n location={state.location}\n navigationType={state.historyAction}\n navigator={navigator}\n >\n {state.initialized ? (\n <DataRoutes routes={router.routes} state={state} />\n ) : (\n fallbackElement\n )}\n </Router>\n </DataRouterStateContext.Provider>\n </DataRouterContext.Provider>\n {null}\n </>\n );\n}\n\nfunction DataRoutes({\n routes,\n state,\n}: {\n routes: DataRouteObject[];\n state: RouterState;\n}): React.ReactElement | null {\n return useRoutesImpl(routes, undefined, state);\n}\n\nexport interface MemoryRouterProps {\n basename?: string;\n children?: React.ReactNode;\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n future?: Partial<FutureConfig>;\n}\n\n/**\n * A `<Router>` that stores all entries in memory.\n *\n * @see https://reactrouter.com/router-components/memory-router\n */\nexport function MemoryRouter({\n basename,\n children,\n initialEntries,\n initialIndex,\n future,\n}: MemoryRouterProps): React.ReactElement {\n let historyRef = React.useRef<MemoryHistory>();\n if (historyRef.current == null) {\n historyRef.current = createMemoryHistory({\n initialEntries,\n initialIndex,\n v5Compat: true,\n });\n }\n\n let history = historyRef.current;\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location,\n });\n let { v7_startTransition } = future || {};\n let setState = React.useCallback(\n (newState: { action: NavigationType; location: Location }) => {\n v7_startTransition && startTransitionImpl\n ? startTransitionImpl(() => setStateImpl(newState))\n : setStateImpl(newState);\n },\n [setStateImpl, v7_startTransition]\n );\n\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n return (\n <Router\n basename={basename}\n children={children}\n location={state.location}\n navigationType={state.action}\n navigator={history}\n />\n );\n}\n\nexport interface NavigateProps {\n to: To;\n replace?: boolean;\n state?: any;\n relative?: RelativeRoutingType;\n}\n\n/**\n * Changes the current location.\n *\n * Note: This API is mostly useful in React.Component subclasses that are not\n * able to use hooks. In functional components, we recommend you use the\n * `useNavigate` hook instead.\n *\n * @see https://reactrouter.com/components/navigate\n */\nexport function Navigate({\n to,\n replace,\n state,\n relative,\n}: NavigateProps): null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of\n // the router loaded. We can help them understand how to avoid that.\n `<Navigate> may be used only in the context of a <Router> component.`\n );\n\n warning(\n !React.useContext(NavigationContext).static,\n `<Navigate> must not be used on the initial render in a <StaticRouter>. ` +\n `This is a no-op, but you should modify your code so the <Navigate> is ` +\n `only ever rendered in response to some user interaction or state change.`\n );\n\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let navigate = useNavigate();\n\n // Resolve the path outside of the effect so that when effects run twice in\n // StrictMode they navigate to the same place\n let path = resolveTo(\n to,\n getPathContributingMatches(matches).map((match) => match.pathnameBase),\n locationPathname,\n relative === \"path\"\n );\n let jsonPath = JSON.stringify(path);\n\n React.useEffect(\n () => navigate(JSON.parse(jsonPath), { replace, state, relative }),\n [navigate, jsonPath, relative, replace, state]\n );\n\n return null;\n}\n\nexport interface OutletProps {\n context?: unknown;\n}\n\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/components/outlet\n */\nexport function Outlet(props: OutletProps): React.ReactElement | null {\n return useOutlet(props.context);\n}\n\nexport interface PathRouteProps {\n caseSensitive?: NonIndexRouteObject[\"caseSensitive\"];\n path?: NonIndexRouteObject[\"path\"];\n id?: NonIndexRouteObject[\"id\"];\n lazy?: LazyRouteFunction<NonIndexRouteObject>;\n loader?: NonIndexRouteObject[\"loader\"];\n action?: NonIndexRouteObject[\"action\"];\n hasErrorBoundary?: NonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: NonIndexRouteObject[\"shouldRevalidate\"];\n handle?: NonIndexRouteObject[\"handle\"];\n index?: false;\n children?: React.ReactNode;\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n}\n\nexport interface LayoutRouteProps extends PathRouteProps {}\n\nexport interface IndexRouteProps {\n caseSensitive?: IndexRouteObject[\"caseSensitive\"];\n path?: IndexRouteObject[\"path\"];\n id?: IndexRouteObject[\"id\"];\n lazy?: LazyRouteFunction<IndexRouteObject>;\n loader?: IndexRouteObject[\"loader\"];\n action?: IndexRouteObject[\"action\"];\n hasErrorBoundary?: IndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: IndexRouteObject[\"shouldRevalidate\"];\n handle?: IndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n}\n\nexport type RouteProps = PathRouteProps | LayoutRouteProps | IndexRouteProps;\n\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/components/route\n */\nexport function Route(_props: RouteProps): React.ReactElement | null {\n invariant(\n false,\n `A <Route> is only ever to be used as the child of <Routes> element, ` +\n `never rendered directly. Please wrap your <Route> in a <Routes>.`\n );\n}\n\nexport interface RouterProps {\n basename?: string;\n children?: React.ReactNode;\n location: Partial<Location> | string;\n navigationType?: NavigationType;\n navigator: Navigator;\n static?: boolean;\n}\n\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a `<Router>` directly. Instead, you'll render a\n * router that is more specific to your environment such as a `<BrowserRouter>`\n * in web browsers or a `<StaticRouter>` for server rendering.\n *\n * @see https://reactrouter.com/router-components/router\n */\nexport function Router({\n basename: basenameProp = \"/\",\n children = null,\n location: locationProp,\n navigationType = NavigationType.Pop,\n navigator,\n static: staticProp = false,\n}: RouterProps): React.ReactElement | null {\n invariant(\n !useInRouterContext(),\n `You cannot render a <Router> inside another <Router>.` +\n ` You should never have more than one in your app.`\n );\n\n // Preserve trailing slashes on basename, so we can let the user control\n // the enforcement of trailing slashes throughout the app\n let basename = basenameProp.replace(/^\\/*/, \"/\");\n let navigationContext = React.useMemo(\n () => ({ basename, navigator, static: staticProp }),\n [basename, navigator, staticProp]\n );\n\n if (typeof locationProp === \"string\") {\n locationProp = parsePath(locationProp);\n }\n\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n state = null,\n key = \"default\",\n } = locationProp;\n\n let locationContext = React.useMemo(() => {\n let trailingPathname = stripBasename(pathname, basename);\n\n if (trailingPathname == null) {\n return null;\n }\n\n return {\n location: {\n pathname: trailingPathname,\n search,\n hash,\n state,\n key,\n },\n navigationType,\n };\n }, [basename, pathname, search, hash, state, key, navigationType]);\n\n warning(\n locationContext != null,\n `<Router basename=\"${basename}\"> is not able to match the URL ` +\n `\"${pathname}${search}${hash}\" because it does not start with the ` +\n `basename, so the <Router> won't render anything.`\n );\n\n if (locationContext == null) {\n return null;\n }\n\n return (\n <NavigationContext.Provider value={navigationContext}>\n <LocationContext.Provider children={children} value={locationContext} />\n </NavigationContext.Provider>\n );\n}\n\nexport interface RoutesProps {\n children?: React.ReactNode;\n location?: Partial<Location> | string;\n}\n\n/**\n * A container for a nested tree of `<Route>` elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/components/routes\n */\nexport function Routes({\n children,\n location,\n}: RoutesProps): React.ReactElement | null {\n return useRoutes(createRoutesFromChildren(children), location);\n}\n\nexport interface AwaitResolveRenderFunction {\n (data: Awaited<any>): React.ReactNode;\n}\n\nexport interface AwaitProps {\n children: React.ReactNode | AwaitResolveRenderFunction;\n errorElement?: React.ReactNode;\n resolve: TrackedPromise | any;\n}\n\n/**\n * Component to use for rendering lazily loaded data from returning defer()\n * in a loader function\n */\nexport function Await({ children, errorElement, resolve }: AwaitProps) {\n return (\n <AwaitErrorBoundary resolve={resolve} errorElement={errorElement}>\n <ResolveAwait>{children}</ResolveAwait>\n </AwaitErrorBoundary>\n );\n}\n\ntype AwaitErrorBoundaryProps = React.PropsWithChildren<{\n errorElement?: React.ReactNode;\n resolve: TrackedPromise | any;\n}>;\n\ntype AwaitErrorBoundaryState = {\n error: any;\n};\n\nenum AwaitRenderStatus {\n pending,\n success,\n error,\n}\n\nconst neverSettledPromise = new Promise(() => {});\n\nclass AwaitErrorBoundary extends React.Component<\n AwaitErrorBoundaryProps,\n AwaitErrorBoundaryState\n> {\n constructor(props: AwaitErrorBoundaryProps) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"<Await> caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n let { children, errorElement, resolve } = this.props;\n\n let promise: TrackedPromise | null = null;\n let status: AwaitRenderStatus = AwaitRenderStatus.pending;\n\n if (!(resolve instanceof Promise)) {\n // Didn't get a promise - provide as a resolved promise\n status = AwaitRenderStatus.success;\n promise = Promise.resolve();\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n Object.defineProperty(promise, \"_data\", { get: () => resolve });\n } else if (this.state.error) {\n // Caught a render error, provide it as a rejected promise\n status = AwaitRenderStatus.error;\n let renderError = this.state.error;\n promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n Object.defineProperty(promise, \"_error\", { get: () => renderError });\n } else if ((resolve as TrackedPromise)._tracked) {\n // Already tracked promise - check contents\n promise = resolve;\n status =\n promise._error !== undefined\n ? AwaitRenderStatus.error\n : promise._data !== undefined\n ? AwaitRenderStatus.success\n : AwaitRenderStatus.pending;\n } else {\n // Raw (untracked) promise - track it\n status = AwaitRenderStatus.pending;\n Object.defineProperty(resolve, \"_tracked\", { get: () => true });\n promise = resolve.then(\n (data: any) =>\n Object.defineProperty(resolve, \"_data\", { get: () => data }),\n (error: any) =>\n Object.defineProperty(resolve, \"_error\", { get: () => error })\n );\n }\n\n if (\n status === AwaitRenderStatus.error &&\n promise._error instanceof AbortedDeferredError\n ) {\n // Freeze the UI by throwing a never resolved promise\n throw neverSettledPromise;\n }\n\n if (status === AwaitRenderStatus.error && !errorElement) {\n // No errorElement, throw to the nearest route-level error boundary\n throw promise._error;\n }\n\n if (status === AwaitRenderStatus.error) {\n // Render via our errorElement\n return <AwaitContext.Provider value={promise} children={errorElement} />;\n }\n\n if (status === AwaitRenderStatus.success) {\n // Render children with resolved value\n return <AwaitContext.Provider value={promise} children={children} />;\n }\n\n // Throw to the suspense boundary\n throw promise;\n }\n}\n\n/**\n * @private\n * Indirection to leverage useAsyncValue for a render-prop API on `<Await>`\n */\nfunction ResolveAwait({\n children,\n}: {\n children: React.ReactNode | AwaitResolveRenderFunction;\n}) {\n let data = useAsyncValue();\n let toRender = typeof children === \"function\" ? children(data) : children;\n return <>{toRender}</>;\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `<Route>` element or an array of them. Used internally by\n * `<Routes>` to create a route config from its children.\n *\n * @see https://reactrouter.com/utils/create-routes-from-children\n */\nexport function createRoutesFromChildren(\n children: React.ReactNode,\n parentPath: number[] = []\n): RouteObject[] {\n let routes: RouteObject[] = [];\n\n React.Children.forEach(children, (element, index) => {\n if (!React.isValidElement(element)) {\n // Ignore non-elements. This allows people to more easily inline\n // conditionals in their route config.\n return;\n }\n\n let treePath = [...parentPath, index];\n\n if (element.type === React.Fragment) {\n // Transparently support React.Fragment and its children.\n routes.push.apply(\n routes,\n createRoutesFromChildren(element.props.children, treePath)\n );\n return;\n }\n\n invariant(\n element.type === Route,\n `[${\n typeof element.type === \"string\" ? element.type : element.type.name\n }] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`\n );\n\n invariant(\n !element.props.index || !element.props.children,\n \"An index route cannot have child routes.\"\n );\n\n let route: RouteObject = {\n id: element.props.id || treePath.join(\"-\"),\n caseSensitive: element.props.caseSensitive,\n element: element.props.element,\n Component: element.props.Component,\n index: element.props.index,\n path: element.props.path,\n loader: element.props.loader,\n action: element.props.action,\n errorElement: element.props.errorElement,\n ErrorBoundary: element.props.ErrorBoundary,\n hasErrorBoundary:\n element.props.ErrorBoundary != null ||\n element.props.errorElement != null,\n shouldRevalidate: element.props.shouldRevalidate,\n handle: element.props.handle,\n lazy: element.props.lazy,\n };\n\n if (element.props.children) {\n route.children = createRoutesFromChildren(\n element.props.children,\n treePath\n );\n }\n\n routes.push(route);\n });\n\n return routes;\n}\n\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\nexport function renderMatches(\n matches: RouteMatch[] | null\n): React.ReactElement | null {\n return _renderMatches(matches);\n}\n","import type {\n FormEncType,\n HTMLFormMethod,\n RelativeRoutingType,\n} from \"@remix-run/router\";\nimport { stripBasename, UNSAFE_warning as warning } from \"@remix-run/router\";\n\nexport const defaultMethod: HTMLFormMethod = \"get\";\nconst defaultEncType: FormEncType = \"application/x-www-form-urlencoded\";\n\nexport function isHtmlElement(object: any): object is HTMLElement {\n return object != null && typeof object.tagName === \"string\";\n}\n\nexport function isButtonElement(object: any): object is HTMLButtonElement {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\n\nexport function isFormElement(object: any): object is HTMLFormElement {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\n\nexport function isInputElement(object: any): object is HTMLInputElement {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\n\ntype LimitedMouseEvent = Pick<\n MouseEvent,\n \"button\" | \"metaKey\" | \"altKey\" | \"ctrlKey\" | \"shiftKey\"\n>;\n\nfunction isModifiedEvent(event: LimitedMouseEvent) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nexport function shouldProcessLinkClick(\n event: LimitedMouseEvent,\n target?: string\n) {\n return (\n event.button === 0 && // Ignore everything but left clicks\n (!target || target === \"_self\") && // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // Ignore clicks with modifier keys\n );\n}\n\nexport type ParamKeyValuePair = [string, string];\n\nexport type URLSearchParamsInit =\n | string\n | ParamKeyValuePair[]\n | Record<string, string | string[]>\n | URLSearchParams;\n\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n * let searchParams = new URLSearchParams([\n * ['sort', 'name'],\n * ['sort', 'price']\n * ]);\n *\n * you can do:\n *\n * let searchParams = createSearchParams({\n * sort: ['name', 'price']\n * });\n */\nexport function createSearchParams(\n init: URLSearchParamsInit = \"\"\n): URLSearchParams {\n return new URLSearchParams(\n typeof init === \"string\" ||\n Array.isArray(init) ||\n init instanceof URLSearchParams\n ? init\n : Object.keys(init).reduce((memo, key) => {\n let value = init[key];\n return memo.concat(\n Array.isArray(value) ? value.map((v) => [key, v]) : [[key, value]]\n );\n }, [] as ParamKeyValuePair[])\n );\n}\n\nexport function getSearchParamsForLocation(\n locationSearch: string,\n defaultSearchParams: URLSearchParams | null\n) {\n let searchParams = createSearchParams(locationSearch);\n\n if (defaultSearchParams) {\n // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n // web extensions. Relevant Bugzilla tickets:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n defaultSearchParams.forEach((_, key) => {\n if (!searchParams.has(key)) {\n defaultSearchParams.getAll(key).forEach((value) => {\n searchParams.append(key, value);\n });\n }\n });\n }\n\n return searchParams;\n}\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\nexport type SubmitTarget =\n | HTMLFormElement\n | HTMLButtonElement\n | HTMLInputElement\n | FormData\n | URLSearchParams\n | JsonValue\n | null;\n\n// One-time check for submitter support\nlet _formDataSupportsSubmitter: boolean | null = null;\n\nfunction isFormDataSubmitterSupported() {\n if (_formDataSupportsSubmitter === null) {\n try {\n new FormData(\n document.createElement(\"form\"),\n // @ts-expect-error if FormData supports the submitter parameter, this will throw\n 0\n );\n _formDataSupportsSubmitter = false;\n } catch (e) {\n _formDataSupportsSubmitter = true;\n }\n }\n return _formDataSupportsSubmitter;\n}\n\nexport interface SubmitOptions {\n /**\n * The HTTP method used to submit the form. Overrides `<form method>`.\n * Defaults to \"GET\".\n */\n method?: HTMLFormMethod;\n\n /**\n * The action URL path used to submit the form. Overrides `<form action>`.\n * Defaults to the path of the current route.\n */\n action?: string;\n\n /**\n * The encoding used to submit the form. Overrides `<form encType>`.\n * Defaults to \"application/x-www-form-urlencoded\".\n */\n encType?: FormEncType;\n\n /**\n * Indicate a specific fetcherKey to use when using navigate=false\n */\n fetcherKey?: string;\n\n /**\n * navigate=false will use a fetcher instead of a navigation\n */\n navigate?: boolean;\n\n /**\n * Set `true` to replace the current entry in the browser's history stack\n * instead of creating a new one (i.e. stay on \"the same page\"). Defaults\n * to `false`.\n */\n replace?: boolean;\n\n /**\n * State object to add to the history stack entry for this navigation\n */\n state?: any;\n\n /**\n * Determines whether the form action is relative to the route hierarchy or\n * the pathname. Use this if you want to opt out of navigating the route\n * hierarchy and want to instead route based on /-delimited URL segments\n */\n relative?: RelativeRoutingType;\n\n /**\n * In browser-based environments, prevent resetting scroll after this\n * navigation when using the <ScrollRestoration> component\n */\n preventScrollReset?: boolean;\n\n /**\n * Enable flushSync for this navigation's state updates\n */\n unstable_flushSync?: boolean;\n\n /**\n * Enable view transitions on this submission navigation\n */\n unstable_viewTransition?: boolean;\n}\n\nconst supportedFormEncTypes: Set<FormEncType> = new Set([\n \"application/x-www-form-urlencoded\",\n \"multipart/form-data\",\n \"text/plain\",\n]);\n\nfunction getFormEncType(encType: string | null) {\n if (encType != null && !supportedFormEncTypes.has(encType as FormEncType)) {\n warning(\n false,\n `\"${encType}\" is not a valid \\`encType\\` for \\`<Form>\\`/\\`<fetcher.Form>\\` ` +\n `and will default to \"${defaultEncType}\"`\n );\n\n return null;\n }\n return encType;\n}\n\nexport function getFormSubmissionInfo(\n target: SubmitTarget,\n basename: string\n): {\n action: string | null;\n method: string;\n encType: string;\n formData: FormData | undefined;\n body: any;\n} {\n let method: string;\n let action: string | null;\n let encType: string;\n let formData: FormData | undefined;\n let body: any;\n\n if (isFormElement(target)) {\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n\n formData = new FormData(target);\n } else if (\n isButtonElement(target) ||\n (isInputElement(target) &&\n (target.type === \"submit\" || target.type === \"image\"))\n ) {\n let form = target.form;\n\n if (form == null) {\n throw new Error(\n `Cannot submit a <button> or <input type=\"submit\"> without a <form>`\n );\n }\n\n // <button>/<input type=\"submit\"> may override attributes of <form>\n\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"formaction\") || form.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n\n method =\n target.getAttribute(\"formmethod\") ||\n form.getAttribute(\"method\") ||\n defaultMethod;\n encType =\n getFormEncType(target.getAttribute(\"formenctype\")) ||\n getFormEncType(form.getAttribute(\"enctype\")) ||\n defaultEncType;\n\n // Build a FormData object populated from a form and submitter\n formData = new FormData(form, target);\n\n // If this browser doesn't support the `FormData(el, submitter)` format,\n // then tack on the submitter value at the end. This is a lightweight\n // solution that is not 100% spec compliant. For complete support in older\n // browsers, consider using the `formdata-submitter-polyfill` package\n if (!isFormDataSubmitterSupported()) {\n let { name, type, value } = target;\n if (type === \"image\") {\n let prefix = name ? `${name}.` : \"\";\n formData.append(`${prefix}x`, \"0\");\n formData.append(`${prefix}y`, \"0\");\n } else if (name) {\n formData.append(name, value);\n }\n }\n } else if (isHtmlElement(target)) {\n throw new Error(\n `Cannot submit element that is not <form>, <button>, or ` +\n `<input type=\"submit|image\">`\n );\n } else {\n method = defaultMethod;\n action = null;\n encType = defaultEncType;\n body = target;\n }\n\n // Send body for <Form encType=\"text/plain\" so we encode it into text\n if (formData && encType === \"text/plain\") {\n body = formData;\n formData = undefined;\n }\n\n return { action, method: method.toLowerCase(), encType, formData, body };\n}\n","/**\n * NOTE: If you refactor this to split up the modules into separate files,\n * you'll need to update the rollup config for react-router-dom-v5-compat.\n */\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport type {\n DataRouteObject,\n FutureConfig,\n Location,\n NavigateOptions,\n NavigationType,\n Navigator,\n RelativeRoutingType,\n RouteObject,\n RouterProviderProps,\n To,\n} from \"react-router\";\nimport {\n Router,\n createPath,\n useHref,\n useLocation,\n useMatches,\n useNavigate,\n useNavigation,\n useResolvedPath,\n useBlocker,\n UNSAFE_DataRouterContext as DataRouterContext,\n UNSAFE_DataRouterStateContext as DataRouterStateContext,\n UNSAFE_NavigationContext as NavigationContext,\n UNSAFE_RouteContext as RouteContext,\n UNSAFE_mapRouteProperties as mapRouteProperties,\n UNSAFE_useRouteId as useRouteId,\n UNSAFE_useRoutesImpl as useRoutesImpl,\n} from \"react-router\";\nimport type {\n BrowserHistory,\n Fetcher,\n FormEncType,\n FormMethod,\n FutureConfig as RouterFutureConfig,\n GetScrollRestorationKeyFunction,\n HashHistory,\n History,\n HTMLFormMethod,\n HydrationState,\n Router as RemixRouter,\n V7_FormMethod,\n RouterState,\n RouterSubscriber,\n BlockerFunction,\n} from \"@remix-run/router\";\nimport {\n createRouter,\n createBrowserHistory,\n createHashHistory,\n joinPaths,\n stripBasename,\n UNSAFE_ErrorResponseImpl as ErrorResponseImpl,\n UNSAFE_invariant as invariant,\n UNSAFE_warning as warning,\n matchPath,\n IDLE_FETCHER,\n} from \"@remix-run/router\";\n\nimport type {\n SubmitOptions,\n ParamKeyValuePair,\n URLSearchParamsInit,\n SubmitTarget,\n} from \"./dom\";\nimport {\n createSearchParams,\n defaultMethod,\n getFormSubmissionInfo,\n getSearchParamsForLocation,\n shouldProcessLinkClick,\n} from \"./dom\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Re-exports\n////////////////////////////////////////////////////////////////////////////////\n\nexport type {\n FormEncType,\n FormMethod,\n GetScrollRestorationKeyFunction,\n ParamKeyValuePair,\n SubmitOptions,\n URLSearchParamsInit,\n V7_FormMethod,\n};\nexport { createSearchParams };\n\n// Note: Keep in sync with react-router exports!\nexport type {\n ActionFunction,\n ActionFunctionArgs,\n AwaitProps,\n unstable_Blocker,\n unstable_BlockerFunction,\n DataRouteMatch,\n DataRouteObject,\n ErrorResponse,\n Fetcher,\n Hash,\n IndexRouteObject,\n IndexRouteProps,\n JsonFunction,\n LazyRouteFunction,\n LayoutRouteProps,\n LoaderFunction,\n LoaderFunctionArgs,\n Location,\n MemoryRouterProps,\n NavigateFunction,\n NavigateOptions,\n NavigateProps,\n Navigation,\n Navigator,\n NonIndexRouteObject,\n OutletProps,\n Params,\n ParamParseKey,\n Path,\n PathMatch,\n Pathname,\n PathParam,\n PathPattern,\n PathRouteProps,\n RedirectFunction,\n RelativeRoutingType,\n RouteMatch,\n RouteObject,\n RouteProps,\n RouterProps,\n RouterProviderProps,\n RoutesProps,\n Search,\n ShouldRevalidateFunction,\n ShouldRevalidateFunctionArgs,\n To,\n UIMatch,\n} from \"react-router\";\nexport {\n AbortedDeferredError,\n Await,\n MemoryRouter,\n Navigate,\n NavigationType,\n Outlet,\n Route,\n Router,\n Routes,\n createMemoryRouter,\n createPath,\n createRoutesFromChildren,\n createRoutesFromElements,\n defer,\n isRouteErrorResponse,\n generatePath,\n json,\n matchPath,\n matchRoutes,\n parsePath,\n redirect,\n redirectDocument,\n renderMatches,\n resolvePath,\n useActionData,\n useAsyncError,\n useAsyncValue,\n useBlocker,\n useHref,\n useInRouterContext,\n useLoaderData,\n useLocation,\n useMatch,\n useMatches,\n useNavigate,\n useNavigation,\n useNavigationType,\n useOutlet,\n useOutletContext,\n useParams,\n useResolvedPath,\n useRevalidator,\n useRouteError,\n useRouteLoaderData,\n useRoutes,\n} from \"react-router\";\n\n///////////////////////////////////////////////////////////////////////////////\n// DANGER! PLEASE READ ME!\n// We provide these exports as an escape hatch in the event that you need any\n// routing data that we don't provide an explicit API for. With that said, we\n// want to cover your use case if we can, so if you feel the need to use these\n// we want to hear from you. Let us know what you're building and we'll do our\n// best to make sure we can support you!\n//\n// We consider these exports an implementation detail and do not guarantee\n// against any breaking changes, regardless of the semver release. Use with\n// extreme caution and only if you understand the consequences. Godspeed.\n///////////////////////////////////////////////////////////////////////////////\n\n/** @internal */\nexport {\n UNSAFE_DataRouterContext,\n UNSAFE_DataRouterStateContext,\n UNSAFE_NavigationContext,\n UNSAFE_LocationContext,\n UNSAFE_RouteContext,\n UNSAFE_useRouteId,\n} from \"react-router\";\n//#endregion\n\ndeclare global {\n var __staticRouterHydrationData: HydrationState | undefined;\n interface Document {\n startViewTransition(cb: () => Promise<void> | void): ViewTransition;\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Routers\n////////////////////////////////////////////////////////////////////////////////\n\ninterface DOMRouterOpts {\n basename?: string;\n future?: Partial<Omit<RouterFutureConfig, \"v7_prependBasename\">>;\n hydrationData?: HydrationState;\n window?: Window;\n}\n\nexport function createBrowserRouter(\n routes: RouteObject[],\n opts?: DOMRouterOpts\n): RemixRouter {\n return createRouter({\n basename: opts?.basename,\n future: {\n ...opts?.future,\n v7_prependBasename: true,\n },\n history: createBrowserHistory({ window: opts?.window }),\n hydrationData: opts?.hydrationData || parseHydrationData(),\n routes,\n mapRouteProperties,\n window: opts?.window,\n }).initialize();\n}\n\nexport function createHashRouter(\n routes: RouteObject[],\n opts?: DOMRouterOpts\n): RemixRouter {\n return createRouter({\n basename: opts?.basename,\n future: {\n ...opts?.future,\n v7_prependBasename: true,\n },\n history: createHashHistory({ window: opts?.window }),\n hydrationData: opts?.hydrationData || parseHydrationData(),\n routes,\n mapRouteProperties,\n window: opts?.window,\n }).initialize();\n}\n\nfunction parseHydrationData(): HydrationState | undefined {\n let state = window?.__staticRouterHydrationData;\n if (state && state.errors) {\n state = {\n ...state,\n errors: deserializeErrors(state.errors),\n };\n }\n return state;\n}\n\nfunction deserializeErrors(\n errors: RemixRouter[\"state\"][\"errors\"]\n): RemixRouter[\"state\"][\"errors\"] {\n if (!errors) return null;\n let entries = Object.entries(errors);\n let serialized: RemixRouter[\"state\"][\"errors\"] = {};\n for (let [key, val] of entries) {\n // Hey you! If you change this, please change the corresponding logic in\n // serializeErrors in react-router-dom/server.tsx :)\n if (val && val.__type === \"RouteErrorResponse\") {\n serialized[key] = new ErrorResponseImpl(\n val.status,\n val.statusText,\n val.data,\n val.internal === true\n );\n } else if (val && val.__type === \"Error\") {\n // Attempt to reconstruct the right type of Error (i.e., ReferenceError)\n if (val.__subType) {\n let ErrorConstructor = window[val.__subType];\n if (typeof ErrorConstructor === \"function\") {\n try {\n // @ts-expect-error\n let error = new ErrorConstructor(val.message);\n // Wipe away the client-side stack trace. Nothing to fill it in with\n // because we don't serialize SSR stack traces for security reasons\n error.stack = \"\";\n serialized[key] = error;\n } catch (e) {\n // no-op - fall through and create a normal Error\n }\n }\n }\n\n if (serialized[key] == null) {\n let error = new Error(val.message);\n // Wipe away the client-side stack trace. Nothing to fill it in with\n // because we don't serialize SSR stack traces for security reasons\n error.stack = \"\";\n serialized[key] = error;\n }\n } else {\n serialized[key] = val;\n }\n }\n return serialized;\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Contexts\n////////////////////////////////////////////////////////////////////////////////\n\ntype ViewTransitionContextObject =\n | {\n isTransitioning: false;\n }\n | {\n isTransitioning: true;\n flushSync: boolean;\n currentLocation: Location;\n nextLocation: Location;\n };\n\nconst ViewTransitionContext = React.createContext<ViewTransitionContextObject>({\n isTransitioning: false,\n});\nif (__DEV__) {\n ViewTransitionContext.displayName = \"ViewTransition\";\n}\n\nexport { ViewTransitionContext as UNSAFE_ViewTransitionContext };\n\n// TODO: (v7) Change the useFetcher data from `any` to `unknown`\ntype FetchersContextObject = Map<string, any>;\n\nconst FetchersContext = React.createContext<FetchersContextObject>(new Map());\nif (__DEV__) {\n FetchersContext.displayName = \"Fetchers\";\n}\n\nexport { FetchersContext as UNSAFE_FetchersContext };\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Components\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\nconst FLUSH_SYNC = \"flushSync\";\nconst flushSyncImpl = ReactDOM[FLUSH_SYNC];\n\nfunction startTransitionSafe(cb: () => void) {\n if (startTransitionImpl) {\n startTransitionImpl(cb);\n } else {\n cb();\n }\n}\n\nfunction flushSyncSafe(cb: () => void) {\n if (flushSyncImpl) {\n flushSyncImpl(cb);\n } else {\n cb();\n }\n}\n\ninterface ViewTransition {\n finished: Promise<void>;\n ready: Promise<void>;\n updateCallbackDone: Promise<void>;\n skipTransition(): void;\n}\n\nclass Deferred<T> {\n status: \"pending\" | \"resolved\" | \"rejected\" = \"pending\";\n promise: Promise<T>;\n // @ts-expect-error - no initializer\n resolve: (value: T) => void;\n // @ts-expect-error - no initializer\n reject: (reason?: unknown) => void;\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = (value) => {\n if (this.status === \"pending\") {\n this.status = \"resolved\";\n resolve(value);\n }\n };\n this.reject = (reason) => {\n if (this.status === \"pending\") {\n this.status = \"rejected\";\n reject(reason);\n }\n };\n });\n }\n}\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n future,\n}: RouterProviderProps): React.ReactElement {\n let [state, setStateImpl] = React.useState(router.state);\n let [pendingState, setPendingState] = React.useState<RouterState>();\n let [vtContext, setVtContext] = React.useState<ViewTransitionContextObject>({\n isTransitioning: false,\n });\n let [renderDfd, setRenderDfd] = React.useState<Deferred<void>>();\n let [transition, setTransition] = React.useState<ViewTransition>();\n let [interruption, setInterruption] = React.useState<{\n state: RouterState;\n currentLocation: Location;\n nextLocation: Location;\n }>();\n let fetcherData = React.useRef<Map<string, any>>(new Map());\n let { v7_startTransition } = future || {};\n\n let optInStartTransition = React.useCallback(\n (cb: () => void) => {\n if (v7_startTransition) {\n startTransitionSafe(cb);\n } else {\n cb();\n }\n },\n [v7_startTransition]\n );\n\n let setState = React.useCallback<RouterSubscriber>(\n (\n newState: RouterState,\n {\n deletedFetchers,\n unstable_flushSync: flushSync,\n unstable_viewTransitionOpts: viewTransitionOpts,\n }\n ) => {\n deletedFetchers.forEach((key) => fetcherData.current.delete(key));\n newState.fetchers.forEach((fetcher, key) => {\n if (fetcher.data !== undefined) {\n fetcherData.current.set(key, fetcher.data);\n }\n });\n\n let isViewTransitionUnavailable =\n router.window == null ||\n typeof router.window.document.startViewTransition !== \"function\";\n\n // If this isn't a view transition or it's not available in this browser,\n // just update and be done with it\n if (!viewTransitionOpts || isViewTransitionUnavailable) {\n if (flushSync) {\n flushSyncSafe(() => setStateImpl(newState));\n } else {\n optInStartTransition(() => setStateImpl(newState));\n }\n return;\n }\n\n // flushSync + startViewTransition\n if (flushSync) {\n // Flush through the context to mark DOM elements as transition=ing\n flushSyncSafe(() => {\n // Cancel any pending transitions\n if (transition) {\n renderDfd && renderDfd.resolve();\n transition.skipTransition();\n }\n setVtContext({\n isTransitioning: true,\n flushSync: true,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation,\n });\n });\n\n // Update the DOM\n let t = router.window!.document.startViewTransition(() => {\n flushSyncSafe(() => setStateImpl(newState));\n });\n\n // Clean up after the animation completes\n t.finished.finally(() => {\n flushSyncSafe(() => {\n setRenderDfd(undefined);\n setTransition(undefined);\n setPendingState(undefined);\n setVtContext({ isTransitioning: false });\n });\n });\n\n flushSyncSafe(() => setTransition(t));\n return;\n }\n\n // startTransition + startViewTransition\n if (transition) {\n // Interrupting an in-progress transition, cancel and let everything flush\n // out, and then kick off a new transition from the interruption state\n renderDfd && renderDfd.resolve();\n transition.skipTransition();\n setInterruption({\n state: newState,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation,\n });\n } else {\n // Completed navigation update with opted-in view transitions, let 'er rip\n setPendingState(newState);\n setVtContext({\n isTransitioning: true,\n flushSync: false,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation,\n });\n }\n },\n [router.window, transition, renderDfd, fetcherData, optInStartTransition]\n );\n\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n // When we start a view transition, create a Deferred we can use for the\n // eventual \"completed\" render\n React.useEffect(() => {\n if (vtContext.isTransitioning && !vtContext.flushSync) {\n setRenderDfd(new Deferred<void>());\n }\n }, [vtContext]);\n\n // Once the deferred is created, kick off startViewTransition() to update the\n // DOM and then wait on the Deferred to resolve (indicating the DOM update has\n // happened)\n React.useEffect(() => {\n if (renderDfd && pendingState && router.window) {\n let newState = pendingState;\n let renderPromise = renderDfd.promise;\n let transition = router.window.document.startViewTransition(async () => {\n optInStartTransition(() => setStateImpl(newState));\n await renderPromise;\n });\n transition.finished.finally(() => {\n setRenderDfd(undefined);\n setTransition(undefined);\n setPendingState(undefined);\n setVtContext({ isTransitioning: false });\n });\n setTransition(transition);\n }\n }, [optInStartTransition, pendingState, renderDfd, router.window]);\n\n // When the new location finally renders and is committed to the DOM, this\n // effect will run to resolve the transition\n React.useEffect(() => {\n if (\n renderDfd &&\n pendingState &&\n state.location.key === pendingState.location.key\n ) {\n renderDfd.resolve();\n }\n }, [renderDfd, transition, state.location, pendingState]);\n\n // If we get interrupted with a new navigation during a transition, we skip\n // the active transition, let it cleanup, then kick it off again here\n React.useEffect(() => {\n if (!vtContext.isTransitioning && interruption) {\n setPendingState(interruption.state);\n setVtContext({\n isTransitioning: true,\n flushSync: false,\n currentLocation: interruption.currentLocation,\n nextLocation: interruption.nextLocation,\n });\n setInterruption(undefined);\n }\n }, [vtContext.isTransitioning, interruption]);\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n let dataRouterContext = React.useMemo(\n () => ({\n router,\n navigator,\n static: false,\n basename,\n }),\n [router, navigator, basename]\n );\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a <script> here\n // containing the hydrated server-side staticContext (from StaticRouterProvider).\n // useId relies on the component tree structure to generate deterministic id's\n // so we need to ensure it remains the same on the client even though\n // we don't need the <script> tag\n return (\n <>\n <DataRouterContext.Provider value={dataRouterContext}>\n <DataRouterStateContext.Provider value={state}>\n <FetchersContext.Provider value={fetcherData.current}>\n <ViewTransitionContext.Provider value={vtContext}>\n <Router\n basename={basename}\n location={state.location}\n navigationType={state.historyAction}\n navigator={navigator}\n >\n {state.initialized ? (\n <DataRoutes routes={router.routes} state={state} />\n ) : (\n fallbackElement\n )}\n </Router>\n </ViewTransitionContext.Provider>\n </FetchersContext.Provider>\n </DataRouterStateContext.Provider>\n </DataRouterContext.Provider>\n {null}\n </>\n );\n}\n\nfunction DataRoutes({\n routes,\n state,\n}: {\n routes: DataRouteObject[];\n state: RouterState;\n}): React.ReactElement | null {\n return useRoutesImpl(routes, undefined, state);\n}\n\nexport interface BrowserRouterProps {\n basename?: string;\n children?: React.ReactNode;\n future?: Partial<FutureConfig>;\n window?: Window;\n}\n\n/**\n * A `<Router>` for use in web browsers. Provides the cleanest URLs.\n */\nexport function BrowserRouter({\n basename,\n children,\n future,\n window,\n}: BrowserRouterProps) {\n let historyRef = React.useRef<BrowserHistory>();\n if (historyRef.current == null) {\n historyRef.current = createBrowserHistory({ window, v5Compat: true });\n }\n\n let history = historyRef.current;\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location,\n });\n let { v7_startTransition } = future || {};\n let setState = React.useCallback(\n (newState: { action: NavigationType; location: Location }) => {\n v7_startTransition && startTransitionImpl\n ? startTransitionImpl(() => setStateImpl(newState))\n : setStateImpl(newState);\n },\n [setStateImpl, v7_startTransition]\n );\n\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n return (\n <Router\n basename={basename}\n children={children}\n location={state.location}\n navigationType={state.action}\n navigator={history}\n />\n );\n}\n\nexport interface HashRouterProps {\n basename?: string;\n children?: React.ReactNode;\n future?: Partial<FutureConfig>;\n window?: Window;\n}\n\n/**\n * A `<Router>` for use in web browsers. Stores the location in the hash\n * portion of the URL so it is not sent to the server.\n */\nexport function HashRouter({\n basename,\n children,\n future,\n window,\n}: HashRouterProps) {\n let historyRef = React.useRef<HashHistory>();\n if (historyRef.current == null) {\n historyRef.current = createHashHistory({ window, v5Compat: true });\n }\n\n let history = historyRef.current;\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location,\n });\n let { v7_startTransition } = future || {};\n let setState = React.useCallback(\n (newState: { action: NavigationType; location: Location }) => {\n v7_startTransition && startTransitionImpl\n ? startTransitionImpl(() => setStateImpl(newState))\n : setStateImpl(newState);\n },\n [setStateImpl, v7_startTransition]\n );\n\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n return (\n <Router\n basename={basename}\n children={children}\n location={state.location}\n navigationType={state.action}\n navigator={history}\n />\n );\n}\n\nexport interface HistoryRouterProps {\n basename?: string;\n children?: React.ReactNode;\n future?: FutureConfig;\n history: History;\n}\n\n/**\n * A `<Router>` that accepts a pre-instantiated history object. It's important\n * to note that using your own history object is highly discouraged and may add\n * two versions of the history library to your bundles unless you use the same\n * version of the history library that React Router uses internally.\n */\nfunction HistoryRouter({\n basename,\n children,\n future,\n history,\n}: HistoryRouterProps) {\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location,\n });\n let { v7_startTransition } = future || {};\n let setState = React.useCallback(\n (newState: { action: NavigationType; location: Location }) => {\n v7_startTransition && startTransitionImpl\n ? startTransitionImpl(() => setStateImpl(newState))\n : setStateImpl(newState);\n },\n [setStateImpl, v7_startTransition]\n );\n\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n\n return (\n <Router\n basename={basename}\n children={children}\n location={state.location}\n navigationType={state.action}\n navigator={history}\n />\n );\n}\n\nif (__DEV__) {\n HistoryRouter.displayName = \"unstable_HistoryRouter\";\n}\n\nexport { HistoryRouter as unstable_HistoryRouter };\n\nexport interface LinkProps\n extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"href\"> {\n reloadDocument?: boolean;\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n to: To;\n unstable_viewTransition?: boolean;\n}\n\nconst isBrowser =\n typeof window !== \"undefined\" &&\n typeof window.document !== \"undefined\" &&\n typeof window.document.createElement !== \"undefined\";\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\n/**\n * The public API for rendering a history-aware `<a>`.\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n function LinkWithRef(\n {\n onClick,\n relative,\n reloadDocument,\n replace,\n state,\n target,\n to,\n preventScrollReset,\n unstable_viewTransition,\n ...rest\n },\n ref\n ) {\n let { basename } = React.useContext(NavigationContext);\n\n // Rendered into <a href> for absolute URLs\n let absoluteHref;\n let isExternal = false;\n\n if (typeof to === \"string\" && ABSOLUTE_URL_REGEX.test(to)) {\n // Render the absolute href server- and client-side\n absoluteHref = to;\n\n // Only check for external origins client-side\n if (isBrowser) {\n try {\n let currentUrl = new URL(window.location.href);\n let targetUrl = to.startsWith(\"//\")\n ? new URL(currentUrl.protocol + to)\n : new URL(to);\n let path = stripBasename(targetUrl.pathname, basename);\n\n if (targetUrl.origin === currentUrl.origin && path != null) {\n // Strip the protocol/origin/basename for same-origin absolute URLs\n to = path + targetUrl.search + targetUrl.hash;\n } else {\n isExternal = true;\n }\n } catch (e) {\n // We can't do external URL detection without a valid URL\n warning(\n false,\n `<Link to=\"${to}\"> contains an invalid URL which will probably break ` +\n `when clicked - please update to a valid URL path.`\n );\n }\n }\n }\n\n // Rendered into <a href> for relative URLs\n let href = useHref(to, { relative });\n\n let internalOnClick = useLinkClickHandler(to, {\n replace,\n state,\n target,\n preventScrollReset,\n relative,\n unstable_viewTransition,\n });\n function handleClick(\n event: React.MouseEvent<HTMLAnchorElement, MouseEvent>\n ) {\n if (onClick) onClick(event);\n if (!event.defaultPrevented) {\n internalOnClick(event);\n }\n }\n\n return (\n // eslint-disable-next-line jsx-a11y/anchor-has-content\n <a\n {...rest}\n href={absoluteHref || href}\n onClick={isExternal || reloadDocument ? onClick : handleClick}\n ref={ref}\n target={target}\n />\n );\n }\n);\n\nif (__DEV__) {\n Link.displayName = \"Link\";\n}\n\ntype NavLinkRenderProps = {\n isActive: boolean;\n isPending: boolean;\n isTransitioning: boolean;\n};\n\nexport interface NavLinkProps\n extends Omit<LinkProps, \"className\" | \"style\" | \"children\"> {\n children?: React.ReactNode | ((props: NavLinkRenderProps) => React.ReactNode);\n caseSensitive?: boolean;\n className?: string | ((props: NavLinkRenderProps) => string | undefined);\n end?: boolean;\n style?:\n | React.CSSProperties\n | ((props: NavLinkRenderProps) => React.CSSProperties | undefined);\n}\n\n/**\n * A `<Link>` wrapper that knows if it's \"active\" or not.\n */\nexport const NavLink = React.forwardRef<HTMLAnchorElement, NavLinkProps>(\n function NavLinkWithRef(\n {\n \"aria-current\": ariaCurrentProp = \"page\",\n caseSensitive = false,\n className: classNameProp = \"\",\n end = false,\n style: styleProp,\n to,\n unstable_viewTransition,\n children,\n ...rest\n },\n ref\n ) {\n let path = useResolvedPath(to, { relative: rest.relative });\n let location = useLocation();\n let routerState = React.useContext(DataRouterStateContext);\n let { navigator } = React.useContext(NavigationContext);\n let isTransitioning =\n routerState != null &&\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useViewTransitionState(path) &&\n unstable_viewTransition === true;\n\n let toPathname = navigator.encodeLocation\n ? navigator.encodeLocation(path).pathname\n : path.pathname;\n let locationPathname = location.pathname;\n let nextLocationPathname =\n routerState && routerState.navigation && routerState.navigation.location\n ? routerState.navigation.location.pathname\n : null;\n\n if (!caseSensitive) {\n locationPathname = locationPathname.toLowerCase();\n nextLocationPathname = nextLocationPathname\n ? nextLocationPathname.toLowerCase()\n : null;\n toPathname = toPathname.toLowerCase();\n }\n\n // If the `to` has a trailing slash, look at that exact spot. Otherwise,\n // we're looking for a slash _after_ what's in `to`. For example:\n //\n // <NavLink to=\"/users\"> and <NavLink to=\"/users/\">\n // both want to look for a / at index 6 to match URL `/users/matt`\n const endSlashPosition =\n toPathname !== \"/\" && toPathname.endsWith(\"/\")\n ? toPathname.length - 1\n : toPathname.length;\n let isActive =\n locationPathname === toPathname ||\n (!end &&\n locationPathname.startsWith(toPathname) &&\n locationPathname.charAt(endSlashPosition) === \"/\");\n\n let isPending =\n nextLocationPathname != null &&\n (nextLocationPathname === toPathname ||\n (!end &&\n nextLocationPathname.startsWith(toPathname) &&\n nextLocationPathname.charAt(toPathname.length) === \"/\"));\n\n let renderProps = {\n isActive,\n isPending,\n isTransitioning,\n };\n\n let ariaCurrent = isActive ? ariaCurrentProp : undefined;\n\n let className: string | undefined;\n if (typeof classNameProp === \"function\") {\n className = classNameProp(renderProps);\n } else {\n // If the className prop is not a function, we use a default `active`\n // class for <NavLink />s that are active. In v5 `active` was the default\n // value for `activeClassName`, but we are removing that API and can still\n // use the old default behavior for a cleaner upgrade path and keep the\n // simple styling rules working as they currently do.\n className = [\n classNameProp,\n isActive ? \"active\" : null,\n isPending ? \"pending\" : null,\n isTransitioning ? \"transitioning\" : null,\n ]\n .filter(Boolean)\n .join(\" \");\n }\n\n let style =\n typeof styleProp === \"function\" ? styleProp(renderProps) : styleProp;\n\n return (\n <Link\n {...rest}\n aria-current={ariaCurrent}\n className={className}\n ref={ref}\n style={style}\n to={to}\n unstable_viewTransition={unstable_viewTransition}\n >\n {typeof children === \"function\" ? children(renderProps) : children}\n </Link>\n );\n }\n);\n\nif (__DEV__) {\n NavLink.displayName = \"NavLink\";\n}\n\nexport interface FetcherFormProps\n extends React.FormHTMLAttributes<HTMLFormElement> {\n /**\n * The HTTP verb to use when the form is submit. Supports \"get\", \"post\",\n * \"put\", \"delete\", \"patch\".\n */\n method?: HTMLFormMethod;\n\n /**\n * `<form encType>` - enhancing beyond the normal string type and limiting\n * to the built-in browser supported values\n */\n encType?:\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"text/plain\";\n\n /**\n * Normal `<form action>` but supports React Router's relative paths.\n */\n action?: string;\n\n /**\n * Determines whether the form action is relative to the route hierarchy or\n * the pathname. Use this if you want to opt out of navigating the route\n * hierarchy and want to instead route based on /-delimited URL segments\n */\n relative?: RelativeRoutingType;\n\n /**\n * Prevent the scroll position from resetting to the top of the viewport on\n * completion of the navigation when using the <ScrollRestoration> component\n */\n preventScrollReset?: boolean;\n\n /**\n * A function to call when the form is submitted. If you call\n * `event.preventDefault()` then this form will not do anything.\n */\n onSubmit?: React.FormEventHandler<HTMLFormElement>;\n}\n\nexport interface FormProps extends FetcherFormProps {\n /**\n * Indicate a specific fetcherKey to use when using navigate=false\n */\n fetcherKey?: string;\n\n /**\n * navigate=false will use a fetcher instead of a navigation\n */\n navigate?: boolean;\n\n /**\n * Forces a full document navigation instead of a fetch.\n */\n reloadDocument?: boolean;\n\n /**\n * Replaces the current entry in the browser history stack when the form\n * navigates. Use this if you don't want the user to be able to click \"back\"\n * to the page with the form on it.\n */\n replace?: boolean;\n\n /**\n * State object to add to the history stack entry for this navigation\n */\n state?: any;\n\n /**\n * Enable view transitions on this Form navigation\n */\n unstable_viewTransition?: boolean;\n}\n\ntype HTMLSubmitEvent = React.BaseSyntheticEvent<\n SubmitEvent,\n Event,\n HTMLFormElement\n>;\n\ntype HTMLFormSubmitter = HTMLButtonElement | HTMLInputElement;\n\n/**\n * A `@remix-run/router`-aware `<form>`. It behaves like a normal form except\n * that the interaction with the server is with `fetch` instead of new document\n * requests, allowing components to add nicer UX to the page as the form is\n * submitted and returns with data.\n */\nexport const Form = React.forwardRef<HTMLFormElement, FormProps>(\n (\n {\n fetcherKey,\n navigate,\n reloadDocument,\n replace,\n state,\n method = defaultMethod,\n action,\n onSubmit,\n relative,\n preventScrollReset,\n unstable_viewTransition,\n ...props\n },\n forwardedRef\n ) => {\n let submit = useSubmit();\n let formAction = useFormAction(action, { relative });\n let formMethod: HTMLFormMethod =\n method.toLowerCase() === \"get\" ? \"get\" : \"post\";\n\n let submitHandler: React.FormEventHandler<HTMLFormElement> = (event) => {\n onSubmit && onSubmit(event);\n if (event.defaultPrevented) return;\n event.preventDefault();\n\n let submitter = (event as unknown as HTMLSubmitEvent).nativeEvent\n .submitter as HTMLFormSubmitter | null;\n\n let submitMethod =\n (submitter?.getAttribute(\"formmethod\") as HTMLFormMethod | undefined) ||\n method;\n\n submit(submitter || event.currentTarget, {\n fetcherKey,\n method: submitMethod,\n navigate,\n replace,\n state,\n relative,\n preventScrollReset,\n unstable_viewTransition,\n });\n };\n\n return (\n <form\n ref={forwardedRef}\n method={formMethod}\n action={formAction}\n onSubmit={reloadDocument ? onSubmit : submitHandler}\n {...props}\n />\n );\n }\n);\n\nif (__DEV__) {\n Form.displayName = \"Form\";\n}\n\nexport interface ScrollRestorationProps {\n getKey?: GetScrollRestorationKeyFunction;\n storageKey?: string;\n}\n\n/**\n * This component will emulate the browser's scroll restoration on location\n * changes.\n */\nexport function ScrollRestoration({\n getKey,\n storageKey,\n}: ScrollRestorationProps) {\n useScrollRestoration({ getKey, storageKey });\n return null;\n}\n\nif (__DEV__) {\n ScrollRestoration.displayName = \"ScrollRestoration\";\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hooks\n////////////////////////////////////////////////////////////////////////////////\n\nenum DataRouterHook {\n UseScrollRestoration = \"useScrollRestoration\",\n UseSubmit = \"useSubmit\",\n UseSubmitFetcher = \"useSubmitFetcher\",\n UseFetcher = \"useFetcher\",\n useViewTransitionState = \"useViewTransitionState\",\n}\n\nenum DataRouterStateHook {\n UseFetcher = \"useFetcher\",\n UseFetchers = \"useFetchers\",\n UseScrollRestoration = \"useScrollRestoration\",\n}\n\n// Internal hooks\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\n// External hooks\n\n/**\n * Handles the click behavior for router `<Link>` components. This is useful if\n * you need to create custom `<Link>` components with the same click behavior we\n * use in our exported `<Link>`.\n */\nexport function useLinkClickHandler<E extends Element = HTMLAnchorElement>(\n to: To,\n {\n target,\n replace: replaceProp,\n state,\n preventScrollReset,\n relative,\n unstable_viewTransition,\n }: {\n target?: React.HTMLAttributeAnchorTarget;\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_viewTransition?: boolean;\n } = {}\n): (event: React.MouseEvent<E, MouseEvent>) => void {\n let navigate = useNavigate();\n let location = useLocation();\n let path = useResolvedPath(to, { relative });\n\n return React.useCallback(\n (event: React.MouseEvent<E, MouseEvent>) => {\n if (shouldProcessLinkClick(event, target)) {\n event.preventDefault();\n\n // If the URL hasn't changed, a regular <a> will do a replace instead of\n // a push, so do the same here unless the replace prop is explicitly set\n let replace =\n replaceProp !== undefined\n ? replaceProp\n : createPath(location) === createPath(path);\n\n navigate(to, {\n replace,\n state,\n preventScrollReset,\n relative,\n unstable_viewTransition,\n });\n }\n },\n [\n location,\n navigate,\n path,\n replaceProp,\n state,\n target,\n to,\n preventScrollReset,\n relative,\n unstable_viewTransition,\n ]\n );\n}\n\n/**\n * A convenient wrapper for reading and writing search parameters via the\n * URLSearchParams interface.\n */\nexport function useSearchParams(\n defaultInit?: URLSearchParamsInit\n): [URLSearchParams, SetURLSearchParams] {\n warning(\n typeof URLSearchParams !== \"undefined\",\n `You cannot use the \\`useSearchParams\\` hook in a browser that does not ` +\n `support the URLSearchParams API. If you need to support Internet ` +\n `Explorer 11, we recommend you load a polyfill such as ` +\n `https://github.com/ungap/url-search-params\\n\\n` +\n `If you're unsure how to load polyfills, we recommend you check out ` +\n `https://polyfill.io/v3/ which provides some recommendations about how ` +\n `to load polyfills only for users that need them, instead of for every ` +\n `user.`\n );\n\n let defaultSearchParamsRef = React.useRef(createSearchParams(defaultInit));\n let hasSetSearchParamsRef = React.useRef(false);\n\n let location = useLocation();\n let searchParams = React.useMemo(\n () =>\n // Only merge in the defaults if we haven't yet called setSearchParams.\n // Once we call that we want those to take precedence, otherwise you can't\n // remove a param with setSearchParams({}) if it has an initial value\n getSearchParamsForLocation(\n location.search,\n hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current\n ),\n [location.search]\n );\n\n let navigate = useNavigate();\n let setSearchParams = React.useCallback<SetURLSearchParams>(\n (nextInit, navigateOptions) => {\n const newSearchParams = createSearchParams(\n typeof nextInit === \"function\" ? nextInit(searchParams) : nextInit\n );\n hasSetSearchParamsRef.current = true;\n navigate(\"?\" + newSearchParams, navigateOptions);\n },\n [navigate, searchParams]\n );\n\n return [searchParams, setSearchParams];\n}\n\nexport type SetURLSearchParams = (\n nextInit?:\n | URLSearchParamsInit\n | ((prev: URLSearchParams) => URLSearchParamsInit),\n navigateOpts?: NavigateOptions\n) => void;\n\n/**\n * Submits a HTML `<form>` to the server without reloading the page.\n */\nexport interface SubmitFunction {\n (\n /**\n * Specifies the `<form>` to be submitted to the server, a specific\n * `<button>` or `<input type=\"submit\">` to use to submit the form, or some\n * arbitrary data to submit.\n *\n * Note: When using a `<button>` its `name` and `value` will also be\n * included in the form data that is submitted.\n */\n target: SubmitTarget,\n\n /**\n * Options that override the `<form>`'s own attributes. Required when\n * submitting arbitrary data without a backing `<form>`.\n */\n options?: SubmitOptions\n ): void;\n}\n\n/**\n * Submits a fetcher `<form>` to the server without reloading the page.\n */\nexport interface FetcherSubmitFunction {\n (\n target: SubmitTarget,\n // Fetchers cannot replace or set state because they are not navigation events\n options?: Omit<SubmitOptions, \"replace\" | \"state\">\n ): void;\n}\n\nfunction validateClientSideSubmission() {\n if (typeof document === \"undefined\") {\n throw new Error(\n \"You are calling submit during the server render. \" +\n \"Try calling submit within a `useEffect` or callback instead.\"\n );\n }\n}\n\nlet fetcherId = 0;\nlet getUniqueFetcherId = () => `__${String(++fetcherId)}__`;\n\n/**\n * Returns a function that may be used to programmatically submit a form (or\n * some arbitrary data) to the server.\n */\nexport function useSubmit(): SubmitFunction {\n let { router } = useDataRouterContext(DataRouterHook.UseSubmit);\n let { basename } = React.useContext(NavigationContext);\n let currentRouteId = useRouteId();\n\n return React.useCallback<SubmitFunction>(\n (target, options = {}) => {\n validateClientSideSubmission();\n\n let { action, method, encType, formData, body } = getFormSubmissionInfo(\n target,\n basename\n );\n\n if (options.navigate === false) {\n let key = options.fetcherKey || getUniqueFetcherId();\n router.fetch(key, currentRouteId, options.action || action, {\n preventScrollReset: options.preventScrollReset,\n formData,\n body,\n formMethod: options.method || (method as HTMLFormMethod),\n formEncType: options.encType || (encType as FormEncType),\n unstable_flushSync: options.unstable_flushSync,\n });\n } else {\n router.navigate(options.action || action, {\n preventScrollReset: options.preventScrollReset,\n formData,\n body,\n formMethod: options.method || (method as HTMLFormMethod),\n formEncType: options.encType || (encType as FormEncType),\n replace: options.replace,\n state: options.state,\n fromRouteId: currentRouteId,\n unstable_flushSync: options.unstable_flushSync,\n unstable_viewTransition: options.unstable_viewTransition,\n });\n }\n },\n [router, basename, currentRouteId]\n );\n}\n\n// v7: Eventually we should deprecate this entirely in favor of using the\n// router method directly?\nexport function useFormAction(\n action?: string,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n let { basename } = React.useContext(NavigationContext);\n let routeContext = React.useContext(RouteContext);\n invariant(routeContext, \"useFormAction must be used inside a RouteContext\");\n\n let [match] = routeContext.matches.slice(-1);\n // Shallow clone path so we can modify it below, otherwise we modify the\n // object referenced by useMemo inside useResolvedPath\n let path = { ...useResolvedPath(action ? action : \".\", { relative }) };\n\n // Previously we set the default action to \".\". The problem with this is that\n // `useResolvedPath(\".\")` excludes search params of the resolved URL. This is\n // the intended behavior of when \".\" is specifically provided as\n // the form action, but inconsistent w/ browsers when the action is omitted.\n // https://github.com/remix-run/remix/issues/927\n let location = useLocation();\n if (action == null) {\n // Safe to write to this directly here since if action was undefined, we\n // would have called useResolvedPath(\".\") which will never include a search\n path.search = location.search;\n\n // When grabbing search params from the URL, remove any included ?index param\n // since it might not apply to our contextual route. We add it back based\n // on match.route.index below\n let params = new URLSearchParams(path.search);\n if (params.has(\"index\") && params.get(\"index\") === \"\") {\n params.delete(\"index\");\n path.search = params.toString() ? `?${params.toString()}` : \"\";\n }\n }\n\n if ((!action || action === \".\") && match.route.index) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the form action. If this is a root navigation, then just use\n // the raw basename which allows the basename to have full control over the\n // presence of a trailing slash on root actions\n if (basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\n}\n\nexport type FetcherWithComponents<TData> = Fetcher<TData> & {\n Form: React.ForwardRefExoticComponent<\n FetcherFormProps & React.RefAttributes<HTMLFormElement>\n >;\n submit: FetcherSubmitFunction;\n load: (href: string, opts?: { unstable_flushSync?: boolean }) => void;\n};\n\n// TODO: (v7) Change the useFetcher generic default from `any` to `unknown`\n\n/**\n * Interacts with route loaders and actions without causing a navigation. Great\n * for any interaction that stays on the same page.\n */\nexport function useFetcher<TData = any>({\n key,\n}: { key?: string } = {}): FetcherWithComponents<TData> {\n let { router } = useDataRouterContext(DataRouterHook.UseFetcher);\n let state = useDataRouterState(DataRouterStateHook.UseFetcher);\n let fetcherData = React.useContext(FetchersContext);\n let route = React.useContext(RouteContext);\n let routeId = route.matches[route.matches.length - 1]?.route.id;\n\n invariant(fetcherData, `useFetcher must be used inside a FetchersContext`);\n invariant(route, `useFetcher must be used inside a RouteContext`);\n invariant(\n routeId != null,\n `useFetcher can only be used on routes that contain a unique \"id\"`\n );\n\n // Fetcher key handling\n let [fetcherKey, setFetcherKey] = React.useState<string>(key || \"\");\n if (key && key !== fetcherKey) {\n setFetcherKey(key);\n } else if (!fetcherKey) {\n setFetcherKey(getUniqueFetcherId());\n }\n\n // Registration/cleanup\n React.useEffect(() => {\n router.getFetcher(fetcherKey);\n return () => {\n // Tell the router we've unmounted - if v7_fetcherPersist is enabled this\n // will not delete immediately but instead queue up a delete after the\n // fetcher returns to an `idle` state\n router.deleteFetcher(fetcherKey);\n };\n }, [router, fetcherKey]);\n\n // Fetcher additions\n let load = React.useCallback(\n (href: string, opts?: { unstable_flushSync?: boolean }) => {\n invariant(routeId, \"No routeId available for fetcher.load()\");\n router.fetch(fetcherKey, routeId, href, opts);\n },\n [fetcherKey, routeId, router]\n );\n\n let submitImpl = useSubmit();\n let submit = React.useCallback<FetcherSubmitFunction>(\n (target, opts) => {\n submitImpl(target, {\n ...opts,\n navigate: false,\n fetcherKey,\n });\n },\n [fetcherKey, submitImpl]\n );\n\n let FetcherForm = React.useMemo(() => {\n let FetcherForm = React.forwardRef<HTMLFormElement, FetcherFormProps>(\n (props, ref) => {\n return (\n <Form {...props} navigate={false} fetcherKey={fetcherKey} ref={ref} />\n );\n }\n );\n if (__DEV__) {\n FetcherForm.displayName = \"fetcher.Form\";\n }\n return FetcherForm;\n }, [fetcherKey]);\n\n // Exposed FetcherWithComponents\n let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;\n let data = fetcherData.get(fetcherKey);\n let fetcherWithComponents = React.useMemo(\n () => ({\n Form: FetcherForm,\n submit,\n load,\n ...fetcher,\n data,\n }),\n [FetcherForm, submit, load, fetcher, data]\n );\n\n return fetcherWithComponents;\n}\n\n/**\n * Provides all fetchers currently on the page. Useful for layouts and parent\n * routes that need to provide pending/optimistic UI regarding the fetch.\n */\nexport function useFetchers(): (Fetcher & { key: string })[] {\n let state = useDataRouterState(DataRouterStateHook.UseFetchers);\n return Array.from(state.fetchers.entries()).map(([key, fetcher]) => ({\n ...fetcher,\n key,\n }));\n}\n\nconst SCROLL_RESTORATION_STORAGE_KEY = \"react-router-scroll-positions\";\nlet savedScrollPositions: Record<string, number> = {};\n\n/**\n * When rendered inside a RouterProvider, will restore scroll positions on navigations\n */\nfunction useScrollRestoration({\n getKey,\n storageKey,\n}: {\n getKey?: GetScrollRestorationKeyFunction;\n storageKey?: string;\n} = {}) {\n let { router } = useDataRouterContext(DataRouterHook.UseScrollRestoration);\n let { restoreScrollPosition, preventScrollReset } = useDataRouterState(\n DataRouterStateHook.UseScrollRestoration\n );\n let { basename } = React.useContext(NavigationContext);\n let location = useLocation();\n let matches = useMatches();\n let navigation = useNavigation();\n\n // Trigger manual scroll restoration while we're active\n React.useEffect(() => {\n window.history.scrollRestoration = \"manual\";\n return () => {\n window.history.scrollRestoration = \"auto\";\n };\n }, []);\n\n // Save positions on pagehide\n usePageHide(\n React.useCallback(() => {\n if (navigation.state === \"idle\") {\n let key = (getKey ? getKey(location, matches) : null) || location.key;\n savedScrollPositions[key] = window.scrollY;\n }\n try {\n sessionStorage.setItem(\n storageKey || SCROLL_RESTORATION_STORAGE_KEY,\n JSON.stringify(savedScrollPositions)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${error}).`\n );\n }\n window.history.scrollRestoration = \"auto\";\n }, [storageKey, getKey, navigation.state, location, matches])\n );\n\n // Read in any saved scroll locations\n if (typeof document !== \"undefined\") {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(() => {\n try {\n let sessionPositions = sessionStorage.getItem(\n storageKey || SCROLL_RESTORATION_STORAGE_KEY\n );\n if (sessionPositions) {\n savedScrollPositions = JSON.parse(sessionPositions);\n }\n } catch (e) {\n // no-op, use default empty object\n }\n }, [storageKey]);\n\n // Enable scroll restoration in the router\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(() => {\n let getKeyWithoutBasename: GetScrollRestorationKeyFunction | undefined =\n getKey && basename !== \"/\"\n ? (location, matches) =>\n getKey(\n // Strip the basename to match useLocation()\n {\n ...location,\n pathname:\n stripBasename(location.pathname, basename) ||\n location.pathname,\n },\n matches\n )\n : getKey;\n let disableScrollRestoration = router?.enableScrollRestoration(\n savedScrollPositions,\n () => window.scrollY,\n getKeyWithoutBasename\n );\n return () => disableScrollRestoration && disableScrollRestoration();\n }, [router, basename, getKey]);\n\n // Restore scrolling when state.restoreScrollPosition changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(() => {\n // Explicit false means don't do anything (used for submissions)\n if (restoreScrollPosition === false) {\n return;\n }\n\n // been here before, scroll to it\n if (typeof restoreScrollPosition === \"number\") {\n window.scrollTo(0, restoreScrollPosition);\n return;\n }\n\n // try to scroll to the hash\n if (location.hash) {\n let el = document.getElementById(\n decodeURIComponent(location.hash.slice(1))\n );\n if (el) {\n el.scrollIntoView();\n return;\n }\n }\n\n // Don't reset if this navigation opted out\n if (preventScrollReset === true) {\n return;\n }\n\n // otherwise go to the top on new locations\n window.scrollTo(0, 0);\n }, [location, restoreScrollPosition, preventScrollReset]);\n }\n}\n\nexport { useScrollRestoration as UNSAFE_useScrollRestoration };\n\n/**\n * Setup a callback to be fired on the window's `beforeunload` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nexport function useBeforeUnload(\n callback: (event: BeforeUnloadEvent) => any,\n options?: { capture?: boolean }\n): void {\n let { capture } = options || {};\n React.useEffect(() => {\n let opts = capture != null ? { capture } : undefined;\n window.addEventListener(\"beforeunload\", callback, opts);\n return () => {\n window.removeEventListener(\"beforeunload\", callback, opts);\n };\n }, [callback, capture]);\n}\n\n/**\n * Setup a callback to be fired on the window's `pagehide` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes. This event is better supported than beforeunload across browsers.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction usePageHide(\n callback: (event: PageTransitionEvent) => any,\n options?: { capture?: boolean }\n): void {\n let { capture } = options || {};\n React.useEffect(() => {\n let opts = capture != null ? { capture } : undefined;\n window.addEventListener(\"pagehide\", callback, opts);\n return () => {\n window.removeEventListener(\"pagehide\", callback, opts);\n };\n }, [callback, capture]);\n}\n\n/**\n * Wrapper around useBlocker to show a window.confirm prompt to users instead\n * of building a custom UI with useBlocker.\n *\n * Warning: This has *a lot of rough edges* and behaves very differently (and\n * very incorrectly in some cases) across browsers if user click addition\n * back/forward navigations while the confirm is open. Use at your own risk.\n */\nfunction usePrompt({\n when,\n message,\n}: {\n when: boolean | BlockerFunction;\n message: string;\n}) {\n let blocker = useBlocker(when);\n\n React.useEffect(() => {\n if (blocker.state === \"blocked\") {\n let proceed = window.confirm(message);\n if (proceed) {\n // This timeout is needed to avoid a weird \"race\" on POP navigations\n // between the `window.history` revert navigation and the result of\n // `window.confirm`\n setTimeout(blocker.proceed, 0);\n } else {\n blocker.reset();\n }\n }\n }, [blocker, message]);\n\n React.useEffect(() => {\n if (blocker.state === \"blocked\" && !when) {\n blocker.reset();\n }\n }, [blocker, when]);\n}\n\nexport { usePrompt as unstable_usePrompt };\n\n/**\n * Return a boolean indicating if there is an active view transition to the\n * given href. You can use this value to render CSS classes or viewTransitionName\n * styles onto your elements\n *\n * @param href The destination href\n * @param [opts.relative] Relative routing type (\"route\" | \"path\")\n */\nfunction useViewTransitionState(\n to: To,\n opts: { relative?: RelativeRoutingType } = {}\n) {\n let vtContext = React.useContext(ViewTransitionContext);\n\n invariant(\n vtContext != null,\n \"`unstable_useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. \" +\n \"Did you accidentally import `RouterProvider` from `react-router`?\"\n );\n\n let { basename } = useDataRouterContext(\n DataRouterHook.useViewTransitionState\n );\n let path = useResolvedPath(to, { relative: opts.relative });\n if (!vtContext.isTransitioning) {\n return false;\n }\n\n let currentPath =\n stripBasename(vtContext.currentLocation.pathname, basename) ||\n vtContext.currentLocation.pathname;\n let nextPath =\n stripBasename(vtContext.nextLocation.pathname, basename) ||\n vtContext.nextLocation.pathname;\n\n // Transition is active if we're going to or coming from the indicated\n // destination. This ensures that other PUSH navigations that reverse\n // an indicated transition apply. I.e., on the list view you have:\n //\n // <NavLink to=\"/details/1\" unstable_viewTransition>\n //\n // If you click the breadcrumb back to the list view:\n //\n // <NavLink to=\"/list\" unstable_viewTransition>\n //\n // We should apply the transition because it's indicated as active going\n // from /list -> /details/1 and therefore should be active on the reverse\n // (even though this isn't strictly a POP reverse)\n return (\n matchPath(path.pathname, nextPath) != null ||\n matchPath(path.pathname, currentPath) != null\n );\n}\n\nexport { useViewTransitionState as unstable_useViewTransitionState };\n\n//#endregion\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher)\n * are most useful.\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through,\n * as-is, to `callback` when the throttled-function is executed.\n * @param {object} [options] - An object to configure options.\n * @param {boolean} [options.noTrailing] - Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds\n * while the throttled-function is being called. If noTrailing is false or unspecified, callback will be executed\n * one final time after the last throttled-function call. (After the throttled-function has not been called for\n * `delay` milliseconds, the internal counter is reset).\n * @param {boolean} [options.noLeading] - Optional, defaults to false. If noLeading is false, the first throttled-function call will execute callback\n * immediately. If noLeading is true, the first the callback execution will be skipped. It should be noted that\n * callback will never executed if both noLeading = true and noTrailing = true.\n * @param {boolean} [options.debounceMode] - If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is\n * false (at end), schedule `callback` to execute after `delay` ms.\n *\n * @returns {Function} A new, throttled, function.\n */\nexport default function (delay, callback, options) {\n\tconst {\n\t\tnoTrailing = false,\n\t\tnoLeading = false,\n\t\tdebounceMode = undefined\n\t} = options || {};\n\t/*\n\t * After wrapper has stopped being called, this timeout ensures that\n\t * `callback` is executed at the proper times in `throttle` and `end`\n\t * debounce modes.\n\t */\n\tlet timeoutID;\n\tlet cancelled = false;\n\n\t// Keep track of the last time `callback` was executed.\n\tlet lastExec = 0;\n\n\t// Function to clear existing timeout\n\tfunction clearExistingTimeout() {\n\t\tif (timeoutID) {\n\t\t\tclearTimeout(timeoutID);\n\t\t}\n\t}\n\n\t// Function to cancel next exec\n\tfunction cancel(options) {\n\t\tconst { upcomingOnly = false } = options || {};\n\t\tclearExistingTimeout();\n\t\tcancelled = !upcomingOnly;\n\t}\n\n\t/*\n\t * The `wrapper` function encapsulates all of the throttling / debouncing\n\t * functionality and when executed will limit the rate at which `callback`\n\t * is executed.\n\t */\n\tfunction wrapper(...arguments_) {\n\t\tlet self = this;\n\t\tlet elapsed = Date.now() - lastExec;\n\n\t\tif (cancelled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Execute `callback` and update the `lastExec` timestamp.\n\t\tfunction exec() {\n\t\t\tlastExec = Date.now();\n\t\t\tcallback.apply(self, arguments_);\n\t\t}\n\n\t\t/*\n\t\t * If `debounceMode` is true (at begin) this is used to clear the flag\n\t\t * to allow future `callback` executions.\n\t\t */\n\t\tfunction clear() {\n\t\t\ttimeoutID = undefined;\n\t\t}\n\n\t\tif (!noLeading && debounceMode && !timeoutID) {\n\t\t\t/*\n\t\t\t * Since `wrapper` is being called for the first time and\n\t\t\t * `debounceMode` is true (at begin), execute `callback`\n\t\t\t * and noLeading != true.\n\t\t\t */\n\t\t\texec();\n\t\t}\n\n\t\tclearExistingTimeout();\n\n\t\tif (debounceMode === undefined && elapsed > delay) {\n\t\t\tif (noLeading) {\n\t\t\t\t/*\n\t\t\t\t * In throttle mode with noLeading, if `delay` time has\n\t\t\t\t * been exceeded, update `lastExec` and schedule `callback`\n\t\t\t\t * to execute after `delay` ms.\n\t\t\t\t */\n\t\t\t\tlastExec = Date.now();\n\t\t\t\tif (!noTrailing) {\n\t\t\t\t\ttimeoutID = setTimeout(debounceMode ? clear : exec, delay);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t/*\n\t\t\t\t * In throttle mode without noLeading, if `delay` time has been exceeded, execute\n\t\t\t\t * `callback`.\n\t\t\t\t */\n\t\t\t\texec();\n\t\t\t}\n\t\t} else if (noTrailing !== true) {\n\t\t\t/*\n\t\t\t * In trailing throttle mode, since `delay` time has not been\n\t\t\t * exceeded, schedule `callback` to execute `delay` ms after most\n\t\t\t * recent execution.\n\t\t\t *\n\t\t\t * If `debounceMode` is true (at begin), schedule `clear` to execute\n\t\t\t * after `delay` ms.\n\t\t\t *\n\t\t\t * If `debounceMode` is false (at end), schedule `callback` to\n\t\t\t * execute after `delay` ms.\n\t\t\t */\n\t\t\ttimeoutID = setTimeout(\n\t\t\t\tdebounceMode ? clear : exec,\n\t\t\t\tdebounceMode === undefined ? delay - elapsed : delay\n\t\t\t);\n\t\t}\n\t}\n\n\twrapper.cancel = cancel;\n\n\t// Return the wrapper function.\n\treturn wrapper;\n}\n","/* eslint-disable no-undefined */\n\nimport throttle from './throttle.js';\n\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the debounced-function is executed.\n * @param {object} [options] - An object to configure options.\n * @param {boolean} [options.atBegin] - Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n * after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n * (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n *\n * @returns {Function} A new, debounced function.\n */\nexport default function (delay, callback, options) {\n\tconst { atBegin = false } = options || {};\n\treturn throttle(delay, callback, { debounceMode: atBegin !== false });\n}\n","export const getConfig = () => ({\n publicRuntimeConfig: {\n assetPrefix: '/ustorethemes/AquaBlueAdvanced',\n apiUrl: `${process.env.REACT_APP_USTORE_REMOTE_SERVER_URL}/uStoreRestAPI`,\n classicUrl: '/ustore',\n themeCustomizationUrl: '/uStoreThemeCustomizations',\n serverDomain: 'http://localhost:3000'\n }\n})\n","const USTORE_THEME_PREFIX = 'ustorethemes'\n\nconst { location } = window\n\nlet assetPrefix = ''\nlet exec = null\nif (location.pathname.toLowerCase().includes(USTORE_THEME_PREFIX)) {\n exec = (/(.*?\\/ustorethemes\\/.*?)\\//i).exec(location.pathname)\n assetPrefix = exec?.[1] ?? ''\n} else {\n exec = (/(^.*)\\/[a-z]{2}-[a-z]{2}(\\/)(.*)$/i).exec(location.pathname)\n assetPrefix = exec?.[1] ?? ''\n if (!exec) {\n exec = (/(^.*)\\/[a-z]{2}-[a-z]{2}$/i).exec(location.pathname)\n if (exec?.[1] === '') {\n assetPrefix = ''\n }\n } else {\n assetPrefix = exec?.[1] ?? ''\n }\n}\n\nexport default assetPrefix.toLowerCase().includes(USTORE_THEME_PREFIX) ?\n [\n '',\n '/',\n `${assetPrefix}/:storeFriendlyID/:languageCode`,\n `${assetPrefix}/:storeFriendlyID/:languageCode/:page`,\n `${assetPrefix}/:storeFriendlyID/:languageCode/:page/:id`,\n `${assetPrefix}/:storeFriendlyID/:languageCode/:page/:id/:name`,\n ]\n :\n [\n '',\n '/',\n `${assetPrefix}/:languageCode`,\n `${assetPrefix}/:languageCode/:page`,\n `${assetPrefix}/:languageCode/:page/:id`,\n `${assetPrefix}/:languageCode/:page/:id/:name`,\n ]\n","\nclass Logger {\n\n get logger() {\n if(!this._logger){\n this._logger = require('logdown')('ustore')\n this._logger.isEnabled = process.env.NODE_ENV !== \"production\"\n }\n return this._logger;\n }\n\n log(...args){\n this.logger.log(...args);\n }\n\n warn(...args){\n this.logger.warn(...args);\n }\n\n info(...args){\n this.logger.info(...args);\n }\n\n error(...args){\n this.logger.error(...args);\n }\n}\n\nconst logger = new Logger()\nexport default logger\n","/**\n * Tokenizer results.\n */\ninterface LexToken {\n type:\n | \"OPEN\"\n | \"CLOSE\"\n | \"PATTERN\"\n | \"NAME\"\n | \"CHAR\"\n | \"ESCAPED_CHAR\"\n | \"MODIFIER\"\n | \"END\";\n index: number;\n value: string;\n}\n\n/**\n * Tokenize input string.\n */\nfunction lexer(str: string): LexToken[] {\n const tokens: LexToken[] = [];\n let i = 0;\n\n while (i < str.length) {\n const char = str[i];\n\n if (char === \"*\" || char === \"+\" || char === \"?\") {\n tokens.push({ type: \"MODIFIER\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \"\\\\\") {\n tokens.push({ type: \"ESCAPED_CHAR\", index: i++, value: str[i++] });\n continue;\n }\n\n if (char === \"{\") {\n tokens.push({ type: \"OPEN\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \"}\") {\n tokens.push({ type: \"CLOSE\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \":\") {\n let name = \"\";\n let j = i + 1;\n\n while (j < str.length) {\n const code = str.charCodeAt(j);\n\n if (\n // `0-9`\n (code >= 48 && code <= 57) ||\n // `A-Z`\n (code >= 65 && code <= 90) ||\n // `a-z`\n (code >= 97 && code <= 122) ||\n // `_`\n code === 95\n ) {\n name += str[j++];\n continue;\n }\n\n break;\n }\n\n if (!name) throw new TypeError(`Missing parameter name at ${i}`);\n\n tokens.push({ type: \"NAME\", index: i, value: name });\n i = j;\n continue;\n }\n\n if (char === \"(\") {\n let count = 1;\n let pattern = \"\";\n let j = i + 1;\n\n if (str[j] === \"?\") {\n throw new TypeError(`Pattern cannot start with \"?\" at ${j}`);\n }\n\n while (j < str.length) {\n if (str[j] === \"\\\\\") {\n pattern += str[j++] + str[j++];\n continue;\n }\n\n if (str[j] === \")\") {\n count--;\n if (count === 0) {\n j++;\n break;\n }\n } else if (str[j] === \"(\") {\n count++;\n if (str[j + 1] !== \"?\") {\n throw new TypeError(`Capturing groups are not allowed at ${j}`);\n }\n }\n\n pattern += str[j++];\n }\n\n if (count) throw new TypeError(`Unbalanced pattern at ${i}`);\n if (!pattern) throw new TypeError(`Missing pattern at ${i}`);\n\n tokens.push({ type: \"PATTERN\", index: i, value: pattern });\n i = j;\n continue;\n }\n\n tokens.push({ type: \"CHAR\", index: i, value: str[i++] });\n }\n\n tokens.push({ type: \"END\", index: i, value: \"\" });\n\n return tokens;\n}\n\nexport interface ParseOptions {\n /**\n * Set the default delimiter for repeat parameters. (default: `'/'`)\n */\n delimiter?: string;\n /**\n * List of characters to automatically consider prefixes when parsing.\n */\n prefixes?: string;\n}\n\n/**\n * Parse a string for the raw tokens.\n */\nexport function parse(str: string, options: ParseOptions = {}): Token[] {\n const tokens = lexer(str);\n const { prefixes = \"./\" } = options;\n const defaultPattern = `[^${escapeString(options.delimiter || \"/#?\")}]+?`;\n const result: Token[] = [];\n let key = 0;\n let i = 0;\n let path = \"\";\n\n const tryConsume = (type: LexToken[\"type\"]): string | undefined => {\n if (i < tokens.length && tokens[i].type === type) return tokens[i++].value;\n };\n\n const mustConsume = (type: LexToken[\"type\"]): string => {\n const value = tryConsume(type);\n if (value !== undefined) return value;\n const { type: nextType, index } = tokens[i];\n throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}`);\n };\n\n const consumeText = (): string => {\n let result = \"\";\n let value: string | undefined;\n while ((value = tryConsume(\"CHAR\") || tryConsume(\"ESCAPED_CHAR\"))) {\n result += value;\n }\n return result;\n };\n\n while (i < tokens.length) {\n const char = tryConsume(\"CHAR\");\n const name = tryConsume(\"NAME\");\n const pattern = tryConsume(\"PATTERN\");\n\n if (name || pattern) {\n let prefix = char || \"\";\n\n if (prefixes.indexOf(prefix) === -1) {\n path += prefix;\n prefix = \"\";\n }\n\n if (path) {\n result.push(path);\n path = \"\";\n }\n\n result.push({\n name: name || key++,\n prefix,\n suffix: \"\",\n pattern: pattern || defaultPattern,\n modifier: tryConsume(\"MODIFIER\") || \"\",\n });\n continue;\n }\n\n const value = char || tryConsume(\"ESCAPED_CHAR\");\n if (value) {\n path += value;\n continue;\n }\n\n if (path) {\n result.push(path);\n path = \"\";\n }\n\n const open = tryConsume(\"OPEN\");\n if (open) {\n const prefix = consumeText();\n const name = tryConsume(\"NAME\") || \"\";\n const pattern = tryConsume(\"PATTERN\") || \"\";\n const suffix = consumeText();\n\n mustConsume(\"CLOSE\");\n\n result.push({\n name: name || (pattern ? key++ : \"\"),\n pattern: name && !pattern ? defaultPattern : pattern,\n prefix,\n suffix,\n modifier: tryConsume(\"MODIFIER\") || \"\",\n });\n continue;\n }\n\n mustConsume(\"END\");\n }\n\n return result;\n}\n\nexport interface TokensToFunctionOptions {\n /**\n * When `true` the regexp will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * Function for encoding input strings for output.\n */\n encode?: (value: string, token: Key) => string;\n /**\n * When `false` the function can produce an invalid (unmatched) path. (default: `true`)\n */\n validate?: boolean;\n}\n\n/**\n * Compile a string to a template function for the path.\n */\nexport function compile<P extends object = object>(\n str: string,\n options?: ParseOptions & TokensToFunctionOptions\n) {\n return tokensToFunction<P>(parse(str, options), options);\n}\n\nexport type PathFunction<P extends object = object> = (data?: P) => string;\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nexport function tokensToFunction<P extends object = object>(\n tokens: Token[],\n options: TokensToFunctionOptions = {}\n): PathFunction<P> {\n const reFlags = flags(options);\n const { encode = (x: string) => x, validate = true } = options;\n\n // Compile all the tokens into regexps.\n const matches = tokens.map((token) => {\n if (typeof token === \"object\") {\n return new RegExp(`^(?:${token.pattern})$`, reFlags);\n }\n });\n\n return (data: Record<string, any> | null | undefined) => {\n let path = \"\";\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (typeof token === \"string\") {\n path += token;\n continue;\n }\n\n const value = data ? data[token.name] : undefined;\n const optional = token.modifier === \"?\" || token.modifier === \"*\";\n const repeat = token.modifier === \"*\" || token.modifier === \"+\";\n\n if (Array.isArray(value)) {\n if (!repeat) {\n throw new TypeError(\n `Expected \"${token.name}\" to not repeat, but got an array`\n );\n }\n\n if (value.length === 0) {\n if (optional) continue;\n\n throw new TypeError(`Expected \"${token.name}\" to not be empty`);\n }\n\n for (let j = 0; j < value.length; j++) {\n const segment = encode(value[j], token);\n\n if (validate && !(matches[i] as RegExp).test(segment)) {\n throw new TypeError(\n `Expected all \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`\n );\n }\n\n path += token.prefix + segment + token.suffix;\n }\n\n continue;\n }\n\n if (typeof value === \"string\" || typeof value === \"number\") {\n const segment = encode(String(value), token);\n\n if (validate && !(matches[i] as RegExp).test(segment)) {\n throw new TypeError(\n `Expected \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`\n );\n }\n\n path += token.prefix + segment + token.suffix;\n continue;\n }\n\n if (optional) continue;\n\n const typeOfMessage = repeat ? \"an array\" : \"a string\";\n throw new TypeError(`Expected \"${token.name}\" to be ${typeOfMessage}`);\n }\n\n return path;\n };\n}\n\nexport interface RegexpToFunctionOptions {\n /**\n * Function for decoding strings for params.\n */\n decode?: (value: string, token: Key) => string;\n}\n\n/**\n * A match result contains data about the path match.\n */\nexport interface MatchResult<P extends object = object> {\n path: string;\n index: number;\n params: P;\n}\n\n/**\n * A match is either `false` (no match) or a match result.\n */\nexport type Match<P extends object = object> = false | MatchResult<P>;\n\n/**\n * The match function takes a string and returns whether it matched the path.\n */\nexport type MatchFunction<P extends object = object> = (\n path: string\n) => Match<P>;\n\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nexport function match<P extends object = object>(\n str: Path,\n options?: ParseOptions & TokensToRegexpOptions & RegexpToFunctionOptions\n) {\n const keys: Key[] = [];\n const re = pathToRegexp(str, keys, options);\n return regexpToFunction<P>(re, keys, options);\n}\n\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nexport function regexpToFunction<P extends object = object>(\n re: RegExp,\n keys: Key[],\n options: RegexpToFunctionOptions = {}\n): MatchFunction<P> {\n const { decode = (x: string) => x } = options;\n\n return function (pathname: string) {\n const m = re.exec(pathname);\n if (!m) return false;\n\n const { 0: path, index } = m;\n const params = Object.create(null);\n\n for (let i = 1; i < m.length; i++) {\n if (m[i] === undefined) continue;\n\n const key = keys[i - 1];\n\n if (key.modifier === \"*\" || key.modifier === \"+\") {\n params[key.name] = m[i].split(key.prefix + key.suffix).map((value) => {\n return decode(value, key);\n });\n } else {\n params[key.name] = decode(m[i], key);\n }\n }\n\n return { path, index, params };\n };\n}\n\n/**\n * Escape a regular expression string.\n */\nfunction escapeString(str: string) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\n\n/**\n * Get the flags for a regexp from the options.\n */\nfunction flags(options?: { sensitive?: boolean }) {\n return options && options.sensitive ? \"\" : \"i\";\n}\n\n/**\n * Metadata about a key.\n */\nexport interface Key {\n name: string | number;\n prefix: string;\n suffix: string;\n pattern: string;\n modifier: string;\n}\n\n/**\n * A token is a string (nothing special) or key metadata (capture group).\n */\nexport type Token = string | Key;\n\n/**\n * Pull out keys from a regexp.\n */\nfunction regexpToRegexp(path: RegExp, keys?: Key[]): RegExp {\n if (!keys) return path;\n\n const groupsRegex = /\\((?:\\?<(.*?)>)?(?!\\?)/g;\n\n let index = 0;\n let execResult = groupsRegex.exec(path.source);\n while (execResult) {\n keys.push({\n // Use parenthesized substring match if available, index otherwise\n name: execResult[1] || index++,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\",\n });\n execResult = groupsRegex.exec(path.source);\n }\n\n return path;\n}\n\n/**\n * Transform an array into a regexp.\n */\nfunction arrayToRegexp(\n paths: Array<string | RegExp>,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n): RegExp {\n const parts = paths.map((path) => pathToRegexp(path, keys, options).source);\n return new RegExp(`(?:${parts.join(\"|\")})`, flags(options));\n}\n\n/**\n * Create a path regexp from string input.\n */\nfunction stringToRegexp(\n path: string,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n) {\n return tokensToRegexp(parse(path, options), keys, options);\n}\n\nexport interface TokensToRegexpOptions {\n /**\n * When `true` the regexp will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * When `true` the regexp won't allow an optional trailing delimiter to match. (default: `false`)\n */\n strict?: boolean;\n /**\n * When `true` the regexp will match to the end of the string. (default: `true`)\n */\n end?: boolean;\n /**\n * When `true` the regexp will match from the beginning of the string. (default: `true`)\n */\n start?: boolean;\n /**\n * Sets the final character for non-ending optimistic matches. (default: `/`)\n */\n delimiter?: string;\n /**\n * List of characters that can also be \"end\" characters.\n */\n endsWith?: string;\n /**\n * Encode path tokens for use in the `RegExp`.\n */\n encode?: (value: string) => string;\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n */\nexport function tokensToRegexp(\n tokens: Token[],\n keys?: Key[],\n options: TokensToRegexpOptions = {}\n) {\n const {\n strict = false,\n start = true,\n end = true,\n encode = (x: string) => x,\n delimiter = \"/#?\",\n endsWith = \"\",\n } = options;\n const endsWithRe = `[${escapeString(endsWith)}]|$`;\n const delimiterRe = `[${escapeString(delimiter)}]`;\n let route = start ? \"^\" : \"\";\n\n // Iterate over the tokens and create our regexp string.\n for (const token of tokens) {\n if (typeof token === \"string\") {\n route += escapeString(encode(token));\n } else {\n const prefix = escapeString(encode(token.prefix));\n const suffix = escapeString(encode(token.suffix));\n\n if (token.pattern) {\n if (keys) keys.push(token);\n\n if (prefix || suffix) {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n const mod = token.modifier === \"*\" ? \"?\" : \"\";\n route += `(?:${prefix}((?:${token.pattern})(?:${suffix}${prefix}(?:${token.pattern}))*)${suffix})${mod}`;\n } else {\n route += `(?:${prefix}(${token.pattern})${suffix})${token.modifier}`;\n }\n } else {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n route += `((?:${token.pattern})${token.modifier})`;\n } else {\n route += `(${token.pattern})${token.modifier}`;\n }\n }\n } else {\n route += `(?:${prefix}${suffix})${token.modifier}`;\n }\n }\n }\n\n if (end) {\n if (!strict) route += `${delimiterRe}?`;\n\n route += !options.endsWith ? \"$\" : `(?=${endsWithRe})`;\n } else {\n const endToken = tokens[tokens.length - 1];\n const isEndDelimited =\n typeof endToken === \"string\"\n ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1\n : endToken === undefined;\n\n if (!strict) {\n route += `(?:${delimiterRe}(?=${endsWithRe}))?`;\n }\n\n if (!isEndDelimited) {\n route += `(?=${delimiterRe}|${endsWithRe})`;\n }\n }\n\n return new RegExp(route, flags(options));\n}\n\n/**\n * Supported `path-to-regexp` input types.\n */\nexport type Path = string | RegExp | Array<string | RegExp>;\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n */\nexport function pathToRegexp(\n path: Path,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n) {\n if (path instanceof RegExp) return regexpToRegexp(path, keys);\n if (Array.isArray(path)) return arrayToRegexp(path, keys, options);\n return stringToRegexp(path, keys, options);\n}\n","import {getConfig} from '../../ui.config'\nimport routes from '$routes'\nimport logger from './logger'\nimport { pathToRegexp } from 'path-to-regexp'\n\nexport const extractPage = (asPath) => asPath.substring(1).split('/')[0]\n\nexport const dashToCamel = (str) => str.replace(/\\W+(.)/g, (x, chr) => chr.toUpperCase())\n\nexport const camelToPascal = (str) => str.replace(/^([a-z])/, (x, chr) => chr.toUpperCase())\n\nexport const decodeStringForURL = (string) => string ? string.replace(new RegExp(' ', 'g'), '-') : ''\n\nexport const queryOrCookieStrToObj = (str, splitter) => {\n const res = {}\n\n if (str && str !== '') {\n const splitBy = splitter ? splitter : /[&;]\\s?/g\n\n str\n .replace(/^(.*)\\?/, '')\n .split(splitBy)\n .forEach(pair => {\n const [key, value] = pair.split(/=(.+)/)\n res[key] = value\n })\n }\n\n return res\n}\n\nexport const getHeader = (req, key) => !!req && req.headers ? queryOrCookieStrToObj(req.headers.cookie, /[;]\\s?/g)[key] : null\n\nexport const extractPathParams = (routesArray, asPath) => {\n const query = {}\n routesArray.forEach(r => {\n const pathParams = []\n const pathParamsRegex = pathToRegexp(r, pathParams)\n const params = pathParamsRegex.exec(asPath)\n\n if (pathParams && pathParams.length && params && params.length) {\n pathParams.forEach((p, i) => {\n query[p.name] = params[i + 1]\n })\n }\n })\n\n return query\n}\n\nexport const createContext = () => {\n const asPath = window.location.href.replace(window.location.origin, '')\n const query = extractPathParams(routes, asPath)\n\n return {\n query: Object.assign(queryOrCookieStrToObj(window.location.search), query),\n asPath: asPath\n }\n}\n\nexport const formatNumByLocale = (amount, locale) => {\n try {\n return amount && locale ? new Intl.NumberFormat(locale).format(amount) : amount\n } catch (error) {\n logger.error('Error on formatting number, defaulting to \"en-US\". Error: ' + error)\n return amount && locale ? new Intl.NumberFormat('en-US').format(amount) : amount\n }\n}\n\nexport const formatDateByLocale = (date, locale) => {\n if (!date) {\n return date\n }\n const utcDate = new Date(date)\n const options = { month: 'long', day: '2-digit', year: 'numeric' }\n try {\n return date ? new Intl.DateTimeFormat(locale, options).format(utcDate) : date\n }\n catch (error) {\n logger.error('Error on formatting date, defaulting to \"en-US\". Error: ' + error)\n return new Intl.DateTimeFormat('en-US', options).format(utcDate)\n }\n}\n\nexport const cleanPath = (p, assetPrefix) => p.replace(assetPrefix, '').substring(0, p.indexOf('?') > 0 ? p.indexOf('?') : p.length).replace(/#|\\?.*$/, '')\n\nexport const getCurrentCulture = (context = {}) => context.CultureCode\n\nexport const getNextConfig = () => {\n const { publicRuntimeConfig } = getConfig() || {\n publicRuntimeConfig: {\n serverDomain: 'http',\n apiUrl: 'http',\n themeCustomizationUrl: 'http'\n }\n }\n const settingToFix = ['apiUrl', 'themeCustomizationUrl']\n let domain = publicRuntimeConfig.serverDomain\n domain = window.location.protocol + '//' + window.location.hostname + (window.location.port !== '' ? ':' + window.location.port : '')\n const baseUrl = /(.*)(\\/[a-z]{2}-[A-Za-z]{2})/.exec(window.location.pathname)\n publicRuntimeConfig.baseUrl = baseUrl && baseUrl.length > 1 ? baseUrl[1] : ''\n\n settingToFix.forEach(k => {\n if (!publicRuntimeConfig[k].startsWith('http')) {\n publicRuntimeConfig[k] = `${domain}${publicRuntimeConfig[k]}`\n }\n })\n\n return publicRuntimeConfig\n}\n\nexport const getBaseUrlComponents = (url) => {\n const reg = url.toLowerCase().includes('ustorethemes')\n ? /(.*?\\/ustorethemes\\/.*?\\/\\d+)(\\/[a-z]{2}-[a-z]+[?/]|$)/i\n : /(.*?)(\\/[a-z]{2}-[a-z]+[?/]|$)/i\n\n const res = reg.exec(url)\n\n if (!res) {\n return null\n }\n\n const storeBaseURL = res[1]\n const assetsPrefix = storeBaseURL.replace(/(http|https):\\/\\/.*?([?/]|$)/i,'/')\n\n return {\n assetsPrefix: assetsPrefix.length === 1 ? '' : assetsPrefix,\n storeBaseURL,\n cultureCode: res[2].replace(/\\//g, '')\n }\n}\n\nexport const replaceCultureCodeInURL = (url, newCultureCode) => {\n const { storeBaseURL, cultureCode } = getBaseUrlComponents(url)\n console.log(url,'==>',newCultureCode,'=>',url.replace(`${storeBaseURL}${cultureCode}`, `${storeBaseURL}/${newCultureCode}/`))\n return url.replace(`${storeBaseURL}/${cultureCode}/`, `${storeBaseURL}/${newCultureCode}/`)\n}\n","import { queryOrCookieStrToObj } from \"./utils\"\n\nexport const storefrontCookies = {\n storeBaseURL: '_storeBaseURL',\n token: '_token',\n storeID: '_storeID',\n userID: '_userID',\n cartUrl: '_cartUrl',\n logoutUrl: '_logoutUrl',\n language: '_language',\n currencyID: '_currencyID',\n currencyGUID: '_currencyGUID',\n cookieRibbonNotShownYet: '_cookieRibbonNotShownYet',\n showThemeAsDraft: '_showThemeAsDraft'\n}\n\nexport class CookiesManager {\n static _cookieType = {\n StrictlyNecessary: \"T001\",\n Preferences: \"T002\",\n }\n\n static _cookiePermission = {\n [this._cookieType.StrictlyNecessary]: true,\n [this._cookieType.Preferences]: true\n }\n\n static _strictlyNecessaryStorefrontCookies = [\n storefrontCookies.token,\n storefrontCookies.storeBaseURL,\n storefrontCookies.logoutUrl,\n storefrontCookies.cartUrl,\n storefrontCookies.storeID,\n storefrontCookies.userID,\n storefrontCookies.cookieRibbonNotShownYet,\n storefrontCookies.showThemeAsDraft\n ]\n\n static _preferencesStorefrontCookies = [\n storefrontCookies.language,\n storefrontCookies.currencyID,\n storefrontCookies.currencyGUID\n ]\n\n static isCookieAllowed = (key) => {\n const isStrictlyNecessary = (key) => this._strictlyNecessaryStorefrontCookies.findIndex(v => key === v) !== -1\n if (isStrictlyNecessary(key) && this._cookiePermission[this._cookieType.StrictlyNecessary]) {\n return true\n }\n\n const isPreferences = (key) => this._preferencesStorefrontCookies.findIndex(v => key === v) !== -1\n return !!(isPreferences(key) && this._cookiePermission[this._cookieType.Preferences]);\n\n\n }\n\n // Private method for the internal usage\n static _setCookie = (key, value, days, path) => {\n if (key === storefrontCookies.token) {\n window.sessionStorage.setItem(key, value)\n return\n }\n let expires = \"\";\n if (days) {\n const date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = `; expires=${date.toUTCString()}`;\n }\n\n let sameSite = \"\";\n if (window.location.protocol === \"https:\" && window.location !== window.parent.location) {\n sameSite = \"; SameSite=None; Secure\";\n }\n\n document.cookie = `${key}=${value || \"\"}${expires}; path=${path || \"/\"}${sameSite}`;\n }\n\n static setCookie = (cookieData) => {\n const { key, value, days, path } = cookieData\n if (this.isCookieAllowed(key)) {\n this._setCookie(key, value, days, path);\n }\n }\n\n static getCookie = (key) => {\n if (key === storefrontCookies.token) {\n return window.sessionStorage.getItem(key)\n }\n return queryOrCookieStrToObj(document.cookie, /[;]\\s?/g)[key]\n }\n\n static deleteCookie = (key) => {\n if (key === storefrontCookies.token) {\n window.sessionStorage.removeItem(key)\n return\n }\n const cookieIndex = Object.values(storefrontCookies).findIndex(cookieName => cookieName === key);\n if (cookieIndex === -1) {\n console.log('Warning! Be sure that you use `cookies` object to manage cookies')\n }\n\n document.cookie = `${key}=;expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/`;\n }\n}\n\nexport const reactCookiesForRibbon = [\n {\n name: storefrontCookies.token,\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_auth'\n },\n {\n name: storefrontCookies.language,\n expiration: { amount: '30', units: 'lblDays' },\n description: 'CookieDescription_language'\n },\n {\n name: storefrontCookies.storeID,\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_storeID'\n },\n {\n name: storefrontCookies.currencyID,\n expiration: { amount: '30', units: 'lblDays' },\n description: 'CookieDescription_currency'\n },\n {\n name: storefrontCookies.currencyGUID,\n expiration: { amount: '30', units: 'lblDays' },\n description: 'CookieDescription_currency'\n },\n {\n name: storefrontCookies.userID,\n expiration: { amount: '30', units: 'lblDays' },\n description: 'CookieDescription_userID'\n },\n {\n name: storefrontCookies.cartUrl,\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_navigation'\n },\n {\n name: storefrontCookies.logoutUrl,\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_navigation'\n },\n {\n name: storefrontCookies.storeBaseURL,\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_storeBaseURL'\n },\n {\n name: storefrontCookies.cookieRibbonNotShownYet,\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_cookieRibbonNotShownYet'\n },\n {\n name: storefrontCookies.showThemeAsDraft,\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_showThemeAsDraft'\n }\n]\n\nexport const legacyCookiesForRibbon = [\n { name: 'LogoutURL', expiration: { units: 'GdprRibbon.SessionCookieType' }, description: 'CookieDescription_navigation' },\n {\n name: 'XXX_S_CustomerID',\n expiration: { amount: '30', units: 'lblDays' },\n description: 'CookieDescription_CustomerID'\n },\n {\n name: 'cultureID',\n expiration: { amount: '30', units: 'lblDays' },\n description: 'CookieDescription_language'\n },\n {\n name: 'CurrencyID',\n expiration: { amount: '30', units: 'lblDays' },\n description: 'CookieDescription_currency'\n },\n {\n name: 'sID',\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_storeID'\n },\n {\n name: 'encryptedOrderProductId',\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_encryptedOrderProductId'\n },\n {\n name: 'uStoreCustomerApp',\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_uStoreCustomerApp'\n },\n {\n name: 'ASP.NET_SessionID',\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_SessionID'\n },\n {\n name: '__AntiXsrfToken',\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_AntiXsrfToken'\n },\n {\n name: 'XXX_S_RegisteredCustomerID',\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_CustomerID'\n },\n {\n name: 'uStoreCustomerApp_SameSite',\n expiration: { units: 'GdprRibbon.SessionCookieType' },\n description: 'CookieDescription_SameSite'\n },\n]\n\nexport const getCookiesForRibbon = (cookiesData = {\n initial: legacyCookiesForRibbon,\n additional: reactCookiesForRibbon\n}) => {\n const { initial, additional } = cookiesData\n return initial\n ? additional\n ? [...initial, ...additional]\n : [...initial]\n : []\n}\n","import {http, UStoreProvider} from '@ustore/core'\nimport {USER_ID_EXPIRATION_DAYS} from './initialLoad'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport {CookiesManager, storefrontCookies} from '$ustoreinternal/services/cookies'\nimport {getNextConfig, getBaseUrlComponents} from '$ustoreinternal/services/utils'\n\nexport const redirectToStoreErrorPage = () => {\n redirectToLegacy('ShowMessage.aspx?ErrorCode=0')\n}\n\nexport const redirectToGenericErrorPage = () => {\n redirectToLegacy(`errorPage.aspx`)\n}\n\nexport const loginByUrlCall = async (publicRuntimeConfig, url) => {\n ['securityToken', 'storeBaseURL', 'storeID', 'FriendlyID'].forEach(key => themeContext.deleteKey(key))\n\n const currentUser = themeContext.get('userID') || CookiesManager.getCookie(storefrontCookies.userID)\n\n const loginResponse = await http.post(`${publicRuntimeConfig.apiUrl}/v1/store/loginByUrl`, {\n FullURL: url,\n UserID: currentUser\n }, {auth: false})\n\n if (!loginResponse.URL) {\n redirectToFullURL(loginResponse.URL)\n }\n\n if ((!loginResponse.Token || !loginResponse.Token.Token) && !loginResponse.URL) {\n // in case no new token returned, or API failed, redirect to logout.\n redirectToGenericErrorPage()\n return null\n }\n\n return loginResponse\n}\n\nexport const returnToUrl = (loginResponse) => {\n let returnURL = loginResponse.URL\n\n if (returnURL) {\n returnURL += returnURL.includes('?') ? '&ShowRibbon=true' : '?ShowRibbon=true'\n // check if return URL is logout page, and if so, append the ShowRibbon=true\n if (returnURL.toLowerCase().includes('logout.aspx')) {\n returnURL += '&forceLogin=true'\n }\n\n redirectToFullURL(returnURL)\n return false\n }\n return true\n}\n\nexport const setCookies = (storeBaseFromURL, shouldCookieRibbonBeShown, loginResponse) => {\n CookiesManager.setCookie({key: storefrontCookies.token, value: themeContext.get('securityToken')})\n CookiesManager.setCookie({key: storefrontCookies.storeID, value: themeContext.get('storeID')})\n CookiesManager.setCookie({key: storefrontCookies.storeBaseURL, value: storeBaseFromURL})\n CookiesManager.setCookie({key: storefrontCookies.cookieRibbonNotShownYet, value: shouldCookieRibbonBeShown})\n // need to save the user ID to the cookie, so that if he closes the browser and reopens he wont lose his data.\n CookiesManager.setCookie({\n key: storefrontCookies.userID,\n value: loginResponse.UserID,\n days: USER_ID_EXPIRATION_DAYS\n })\n}\n\nexport const saveInfoFromApi = (loginResponse) => {\n // save info from API to context and cookie\n themeContext.set('storeBaseURL', undefined)\n themeContext.set('securityToken', loginResponse.Token.Token)\n themeContext.set('storeID', loginResponse.StoreID)\n themeContext.set('userID', loginResponse.UserID)\n}\n\nexport const redirectToLegacy = (legacyURL) => {\n const {classicUrl} = themeContext.get()\n window.location.href = `${classicUrl}/${legacyURL}`\n\n return {}\n}\n\nexport const redirectToFullURL = (newURL) => {\n window.location.href = newURL\n\n}\n\nexport const loginByUrl = async (storeBaseFromURL, shouldCookieRibbonBeShown) => {\n const url = window ? window.location.href : ''\n const publicRuntimeConfig = getNextConfig()\n const loginResponse = await loginByUrlCall(publicRuntimeConfig, url)\n if (loginResponse) {\n saveInfoFromApi(loginResponse)\n setCookies(storeBaseFromURL, shouldCookieRibbonBeShown, loginResponse)\n\n // raise the showRibbon flag, so if not redirecting to logout, NG will show the cookie ribbon.\n UStoreProvider.state.customState.set('showCookieRibbon', JSON.parse(shouldCookieRibbonBeShown))\n\n if (returnToUrl(loginResponse)) {\n window.location.reload()\n }\n }\n}\n\nexport const redirectToLogout = async () => {\n const {securityToken, storeFriendlyID, storeID, languageCode, logoutUrl} = themeContext.get()\n const storeType = UStoreProvider && UStoreProvider.state.get().currentStore && UStoreProvider.state.get().currentStore.StoreType\n CookiesManager.deleteCookie(storefrontCookies.token)\n\n if (storeType === 3 && logoutUrl) {\n redirectToFullURL(decodeURIComponent(logoutUrl))\n } else if (!storeType || storeType === 2) {\n const res = getBaseUrlComponents(window.location.href)\n if (!res) return\n\n const {storeBaseURL: storeBaseFromURL} = res\n let shouldCookieRibbonBeShown = CookiesManager.getCookie(storefrontCookies.cookieRibbonNotShownYet) || ' true'\n\n await loginByUrl(storeBaseFromURL, shouldCookieRibbonBeShown)\n } else {\n redirectToLegacy(`logout.aspx?SecurityToken=${securityToken}&StoreGuid=${storeID}&storeid=${storeFriendlyID}ShowRibbon=false&forceLogin=true&NgLanguageCode=${languageCode}`)\n }\n}\n","import {\n dashToCamel,\n createContext,\n getNextConfig, queryOrCookieStrToObj, getBaseUrlComponents, replaceCultureCodeInURL\n} from '$ustoreinternal/services/utils'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport { UStoreProvider, http } from '@ustore/core'\nimport pages from '$themepages/index'\nimport { initiateThemeState } from '$themeservices/initThemeState'\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport {\n redirectToFullURL,\n redirectToStoreErrorPage,\n redirectToGenericErrorPage,\n redirectToLogout,\n} from './redirect'\n\nexport const USER_ID_EXPIRATION_DAYS = 30\n\nconst getUserInitialProps = async (initialPropsFunctionName, ctx) => {\n const routedPage = Object.keys(pages).filter(p => p.toLowerCase() === initialPropsFunctionName.toLowerCase())\n\n if (routedPage.length > 0 && pages[routedPage].getInitialProps) {\n return await pages[routedPage].getInitialProps({query: ctx})\n }\n\n return pages.Home.getInitialProps ? await pages.Home.getInitialProps({query: ctx}) : {}\n}\n\nexport const initAndLogin = async (ctx, url) => {\n const publicRuntimeConfig = getNextConfig()\n const res = getBaseUrlComponents(url)\n\n if (!res) return\n\n if (url.indexOf('connect-logged-out') > -1) {\n return\n }\n\n let securityTokenFromUrl = ''\n const { storeBaseURL: storeBaseFromURL, cultureCode: cultureCodeFromURL } = res\n const storedCultureCode = CookiesManager.getCookie(storefrontCookies.language)\n if (storedCultureCode && storedCultureCode !== cultureCodeFromURL) {\n redirectToFullURL(replaceCultureCodeInURL(url, storedCultureCode))\n return false\n }\n\n if (themeContext.get('ssoToken')) {\n const newSecurityToken = await UStoreProvider.api.store.loginBySSOToken(themeContext.get('ssoToken'))\n themeContext.set('securityToken', newSecurityToken.Token)\n securityTokenFromUrl = newSecurityToken.Token\n const currentUrl = new URL(window.location.href)\n currentUrl.searchParams.delete('SsoToken')\n window.history.replaceState(window.history.state, '', currentUrl.href)\n }\n\n const storeBaseFromMem = themeContext.get('storeBaseURL') || CookiesManager.getCookie(storefrontCookies.storeBaseURL)\n let shouldCookieRibbonBeShown = CookiesManager.getCookie(storefrontCookies.cookieRibbonNotShownYet) || ' true'\n\n const searchStr = window.location.search.substring(1)\n\n if (searchStr) {\n const q = queryOrCookieStrToObj(searchStr)\n\n if (q.SecurityToken) {\n securityTokenFromUrl = q.SecurityToken\n }\n if (q.ShowRibbon) {\n shouldCookieRibbonBeShown = q.ShowRibbon.toLowerCase()\n }\n }\n\n const shouldCallLoginByUrl = !!url && !securityTokenFromUrl &&\n (themeContext.get('securityToken') === undefined || !themeContext.get('securityToken') ||\n (storeBaseFromMem && storeBaseFromURL !== storeBaseFromMem))\n const date = new Date();\n date.setTime(date.getTime() + (USER_ID_EXPIRATION_DAYS * 24 * 60 * 60 * 1000));\n\n if (shouldCallLoginByUrl) {\n ['securityToken', 'storeBaseURL', 'storeID', 'FriendlyID'].forEach(key => themeContext.deleteKey(key))\n\n const currentUser = themeContext.get('userID') || CookiesManager.getCookie(storefrontCookies.userID)\n\n let loginResponse = await http.post(`${publicRuntimeConfig.apiUrl}/v1/store/loginByUrl`, { FullURL: url, UserID: currentUser }, { auth: false })\n\n if ((!loginResponse.Token || !loginResponse.Token.Token) && !loginResponse.URL) {\n // in case no new token returned, or API failed, redirect to logout.\n redirectToGenericErrorPage(ctx)\n return false\n }\n\n // save info from API to context and cookie\n themeContext.set('storeBaseURL', undefined)\n themeContext.set('securityToken', loginResponse.Token.Token)\n themeContext.set('storeID', loginResponse.StoreID)\n themeContext.set('userID', loginResponse.UserID)\n\n CookiesManager.setCookie({ key: storefrontCookies.token, value: themeContext.get('securityToken') })\n CookiesManager.setCookie({ key: storefrontCookies.storeID, value: themeContext.get('storeID') })\n CookiesManager.setCookie({ key: storefrontCookies.storeBaseURL, value: storeBaseFromURL })\n CookiesManager.setCookie({ key: storefrontCookies.cookieRibbonNotShownYet, value: shouldCookieRibbonBeShown })\n // need to save the user ID to the cookie, so that if he closes the browser and reopens he wont lose his data.\n CookiesManager.setCookie({ key: storefrontCookies.userID, value: loginResponse.UserID, days: USER_ID_EXPIRATION_DAYS })\n\n // raise the showRibbon flag, so if not redirecting to logout, NG will show the cookie ribbon.\n UStoreProvider.state.customState.set('showCookieRibbon', JSON.parse(shouldCookieRibbonBeShown))\n\n let returnURL = loginResponse.URL\n\n if (returnURL) {\n returnURL += returnURL.includes('?') ? '&ShowRibbon=true' : '?ShowRibbon=true'\n // check if return URL is logout page, and if so, append the ShowRibbon=true\n if (returnURL.toLowerCase().includes('logout.aspx')) {\n UStoreProvider.contextService.clear()\n returnURL += '&forceLogin=true'\n }\n\n redirectToFullURL(returnURL)\n return false\n }\n }\n else {\n CookiesManager.setCookie({ key: storefrontCookies.token, value: themeContext.get('securityToken') })\n CookiesManager.setCookie({ key: storefrontCookies.storeID, value: themeContext.get('storeID') })\n CookiesManager.setCookie({ key: storefrontCookies.storeBaseURL, value: storeBaseFromURL })\n CookiesManager.setCookie({ key: storefrontCookies.cookieRibbonNotShownYet, value: shouldCookieRibbonBeShown })\n // need to save the user ID to the cookie, so that if he closes the browser and reopens he wont lose his data.\n CookiesManager.setCookie({ key: storefrontCookies.userID, value: themeContext.get('userID'), days: USER_ID_EXPIRATION_DAYS })\n\n UStoreProvider.state.customState.set('showCookieRibbon', JSON.parse(shouldCookieRibbonBeShown))\n }\n\n themeContext.set('storeBaseURL', storeBaseFromURL)\n\n await UStoreProvider.init(publicRuntimeConfig, {\n ...themeContext.get(),\n onAccessDenied: () => redirectToLogout(),\n onStoreNotAvailable: () => redirectToStoreErrorPage(),\n onGeneralError: () => redirectToGenericErrorPage(),\n }).then(() => {\n initiateThemeState()\n })\n\n return true\n}\n\nexport const initialLoad = async (ctxParam) => {\n const ctx = ctxParam || createContext()\n\n themeContext.updateRouteParams(ctx)\n\n const fullUrl = window.location.href\n let shouldContinue = await initAndLogin(ctx, fullUrl)\n\n // if should not continue, do not load further data.\n if (!shouldContinue) return {}\n // }\n\n const { page } = themeContext.get()\n const initialPropsFunctionName = dashToCamel(page)\n\n //sets the user initial props to custom state.\n const userInitialProps = await getUserInitialProps(initialPropsFunctionName, ctx)\n if (userInitialProps) {\n UStoreProvider.state.customState.setBulk(userInitialProps)\n }\n\n const userCustomState = { customState: { ...UStoreProvider.state.get().customState, ...userInitialProps } }\n\n // returns the state from the component to be rendered.\n return { state: { ...UStoreProvider.state.get(), ...userCustomState }, context: ctx.query }\n}\n","import { UStoreProvider } from '@ustore/core'\n\nexport const initiateThemeState = async () => {\n const { Categories: categoriesTree } = await UStoreProvider.api.categories.getCategoryTree(3)\n const firstLevelCategories = categoriesTree.map((node) => node.Category)\n UStoreProvider.state.customState.set('categories', firstLevelCategories)\n UStoreProvider.state.customState.set('categoriesTree', categoriesTree)\n\n if (UStoreProvider.state.get().currentStore) {\n const { RequireOrderApproval: requireOrderApproval } = UStoreProvider.state.get().currentStore\n\n if (requireOrderApproval) {\n const userOrdersSummary = await UStoreProvider.api.orders.getUserOrdersSummary()\n UStoreProvider.state.customState.set('userOrdersSummary', userOrdersSummary)\n }\n }\n}\n","import {\n queryOrCookieStrToObj, extractPathParams\n} from '$ustoreinternal/services/utils'\nimport routes from '$routes'\nimport { USER_ID_EXPIRATION_DAYS } from '$ustoreinternal/services/initialLoad'\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport { UStoreProvider } from '@ustore/core'\nimport { getConfig } from '../../ui.config'\n\nconst { publicRuntimeConfig } = getConfig()\n\nclass ThemeContext {\n constructor() {\n this.context = { ...publicRuntimeConfig, ...{ page: 'home' } }\n }\n\n get(key) {\n return key ? this.context[key] : this.context\n }\n\n set(key, value) {\n this.context[key] = value\n }\n\n deleteKey(key) {\n delete this.context[key]\n }\n\n escapeRegExp(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&') // $& means the whole matched string\n }\n\n updateRouteParams() {\n const asPath = window.location.pathname\n\n this.set('page', 'home')\n this.deleteKey('id')\n\n this.context = { ...this.context, ...extractPathParams(routes, asPath) }\n }\n\n // init the application context in the follow uses cases:\n // 1. in the client only from the query string\n // 2. in the client only from the cookies (cookies are using also inserted to the request header)\n init(params) {\n if (params) {\n if (params.languageCode) {\n this.context.languageCode = params.languageCode\n }\n }\n\n const searchStr = window.location.search.substring(1)\n\n if (searchStr) {\n const q = queryOrCookieStrToObj(searchStr)\n\n if (q.SecurityToken) {\n this.context.securityToken = q.SecurityToken\n CookiesManager.setCookie({ key: storefrontCookies.token, value: this.context.securityToken })\n }\n\n if (q.CultureCode) {\n this.context.languageCode = q.CultureCode\n }\n\n if (q.StoreGuid) {\n this.context.storeID = q.StoreGuid\n CookiesManager.setCookie({ key: storefrontCookies.storeID, value: this.context.storeID })\n }\n\n if (q.currencyFriendlyID) {\n this.context.currencyFriendlyID = q.currencyFriendlyID\n }\n\n if (q.UserID) {\n this.context.userID = q.UserID\n CookiesManager.setCookie({ key: storefrontCookies.userID, value: this.context.userID, days: USER_ID_EXPIRATION_DAYS })\n }\n\n if (q.ShowRibbon) {\n UStoreProvider.state.customState.set('showCookieRibbon', (q.ShowRibbon.toLowerCase() === 'true'))\n CookiesManager.setCookie({ key: storefrontCookies.cookieRibbonNotShownYet, value: q.ShowRibbon.toLowerCase() })\n }\n\n if (q.CurrencyID) {\n UStoreProvider.state.customState.set('currencyID', (q.CurrencyID))\n this.context.currencyID = q.CurrencyID\n }\n\n if (q.cartUrl) {\n UStoreProvider.state.customState.set('cartUrl', (q.cartUrl))\n this.context.cartUrl = q.cartUrl\n CookiesManager.setCookie({ key: storefrontCookies.cartUrl, value: q.cartUrl })\n }\n\n if (q.logoutUrl) {\n UStoreProvider.state.customState.set('logoutUrl', (q.logoutUrl))\n this.context.logoutUrl = q.logoutUrl\n CookiesManager.setCookie({ key: storefrontCookies.logoutUrl, value: q.logoutUrl })\n }\n if (q.SsoToken) {\n UStoreProvider.state.customState.set('ssoToken', q.SsoToken)\n this.context.ssoToken = q.SsoToken\n }\n }\n\n this.context.languageCode = CookiesManager.getCookie(storefrontCookies.language) || this.context.languageCode\n this.context.showThemeAsDraft = CookiesManager.getCookie(storefrontCookies.showThemeAsDraft) || this.context.showThemeAsDraft\n this.context.securityToken = CookiesManager.getCookie(storefrontCookies.token) || this.context.securityToken\n this.context.storeID = CookiesManager.getCookie(storefrontCookies.storeID) || this.context.storeID\n this.context.currencyFriendlyID = CookiesManager.getCookie(storefrontCookies.currencyID) || this.context.currencyFriendlyID\n this.context.userID = CookiesManager.getCookie(storefrontCookies.userID) || this.context.userID\n\n this.context.CurrencyID = CookiesManager.getCookie(storefrontCookies.currencyGUID) || this.context.CurrencyID\n this.context.cartUrl = CookiesManager.getCookie(storefrontCookies.cartUrl) || this.context.cartUrl\n this.context.logoutUrl = CookiesManager.getCookie(storefrontCookies.logoutUrl) || this.context.logoutUrl\n\n if (UStoreProvider.state.get() && UStoreProvider.state.get().currentUser) {\n this.context.userID = UStoreProvider.state.get().currentUser.ID\n CookiesManager.setCookie({ key: storefrontCookies.userID, value: this.context.userID, days: USER_ID_EXPIRATION_DAYS })\n }\n\n const asPath = window.location.pathname\n\n // analise the routes and extract the route variables (i.e ':page')\n this.context = {...this.context, ...extractPathParams(routes, asPath)}\n }\n}\n\nconst themeContext = new ThemeContext()\nexport default themeContext\n","import themeContext from '$ustoreinternal/services/themeContext'\nimport enUs from './en-US'\nimport frFr from './fr-FR'\nimport deDE from './de-DE'\nimport jaJP from './ja-JP'\nimport enGB from './en-GB'\nimport esES from './es-ES'\nimport nlNL from './nl-NL'\nimport ptBR from './pt-BR'\nimport React from 'react'\nconst i18n = require('roddeh-i18n')\n\nconst fixTranslation = (v) => {\n const reFormat = /{\\s*(.*?)\\s*}/igm\n return v.replace(reFormat, '%{$1}')\n}\nconst fixTranslationValues = (t) => {\n if (!t) {\n return ''\n }\n\n return Object\n .entries(t)\n .map(([k, v]) => ({ key: k, value: fixTranslation(v) }))\n .reduce((r, i) => ({ ...r, ...{ [i.key]: i.value } }), {})\n}\n\nconst localizations = {\n 'en-US': i18n.create({ values: fixTranslationValues(enUs) }),\n 'fr-FR': i18n.create({ values: fixTranslationValues(frFr) }),\n 'de-DE': i18n.create({ values: fixTranslationValues(deDE) }),\n 'ja-JP': i18n.create({ values: fixTranslationValues(jaJP) }),\n 'en-GB': i18n.create({ values: fixTranslationValues(enGB) }),\n 'es-ES': i18n.create({ values: fixTranslationValues(esES) }),\n 'nl-NL': i18n.create({ values: fixTranslationValues(nlNL) }),\n 'pt-BR': i18n.create({ values: fixTranslationValues(ptBR) })\n}\n\nconst NO_LOCALIZATION = '[no localization]'\nexport const t = function () {\n const languageCode = themeContext.get('languageCode')\n\n if (!languageCode) {\n return ''\n }\n\n const globalLocalization = window.uStoreLocalization || {}\n\n if (typeof globalLocalization[languageCode] !== 'function') {\n globalLocalization[languageCode] = i18n.create({ values: fixTranslationValues(globalLocalization[languageCode]) })\n }\n\n const args = [...arguments]\n if (args.length > 1 && typeof args[1] === 'string') {\n args[1] = fixTranslation(args[1])\n }\n const globalTranslation = globalLocalization[languageCode] ? globalLocalization[languageCode](...args) : NO_LOCALIZATION\n const bundledTranslation = localizations[languageCode] ? localizations[languageCode](...args) : NO_LOCALIZATION\n\n if (bundledTranslation !== arguments[0] && bundledTranslation !== NO_LOCALIZATION) {\n return bundledTranslation\n }\n\n return globalTranslation === arguments[0] ? NO_LOCALIZATION : globalTranslation\n}\n\nexport const mt = function () {\n return t(...arguments).split('\\n').map((item, key) => <span key={key}>{item}<br/></span>)\n}\n\nexport default localizations\n","import './LoadingDots.scss'\n\nconst LoadingDots = ({ className }) => {\n return (\n <div className={`loading-dots ${className ?? ''}`}>\n <div className='loading-dot'></div>\n <div className='loading-dot'></div>\n <div className='loading-dot'></div>\n <div className='loading-dot'></div>\n </div>\n )\n}\n\nexport default LoadingDots\n","/**\n * Component for button in the system\n *\n * @param {string} text - the text on the button\n * @param {function} onClick - a function to call when the button was clicked\n * @param {string} [className] - a class name to place on button element\n * @param {boolean} [isLoading] - if true the ui will show LoadingDots instead of the text\n * @param {boolean} [disabled] - if true the ui will show a disabled button\n */\nimport LoadingDots from './LoadingDots'\n\nconst Button = ({ text, onClick, className, isLoading, disabled }) => {\n return (\n <div disabled={disabled}\n className={`${className} button truncate `}\n onClick={(e) => !disabled && onClick(e)}\n >\n <span className={`${isLoading ? 'text-hidden' : ''}`}>{text}</span>\n {isLoading && <LoadingDots />}\n </div>\n )\n}\n\nexport default Button\n","import React, { Component, createRef } from 'react'\n\nclass ClickOutside extends Component {\n constructor (props) {\n super(props)\n\n this.wrapperRef = createRef()\n this.handleClickOutside = this.handleClickOutside.bind(this)\n }\n\n componentDidMount () {\n document.addEventListener('mousedown', this.handleClickOutside)\n }\n\n componentWillUnmount () {\n document.removeEventListener('mousedown', this.handleClickOutside)\n }\n\n handleClickOutside (event) {\n if (this.wrapperRef && !this.wrapperRef.current.contains(event.target)) {\n this.props.trigger(event)\n }\n }\n\n render () {\n return <div className={this.props.className} ref={this.wrapperRef}>{this.props.children}</div>\n }\n}\n\nexport default ClickOutside\n","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport PropTypes from 'prop-types';\n\n// https://github.com/twbs/bootstrap/blob/v4.0.0-alpha.4/js/src/modal.js#L436-L443\nexport function getScrollbarWidth() {\n var scrollDiv = document.createElement('div');\n // .modal-scrollbar-measure styles // https://github.com/twbs/bootstrap/blob/v4.0.0-alpha.4/scss/_modal.scss#L106-L113\n scrollDiv.style.position = 'absolute';\n scrollDiv.style.top = '-9999px';\n scrollDiv.style.width = '50px';\n scrollDiv.style.height = '50px';\n scrollDiv.style.overflow = 'scroll';\n document.body.appendChild(scrollDiv);\n var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n}\nexport function setScrollbarWidth(padding) {\n document.body.style.paddingRight = padding > 0 ? \"\".concat(padding, \"px\") : null;\n}\nexport function isBodyOverflowing() {\n return document.body.clientWidth < window.innerWidth;\n}\nexport function getOriginalBodyPadding() {\n var style = window.getComputedStyle(document.body, null);\n return parseInt(style && style.getPropertyValue('padding-right') || 0, 10);\n}\nexport function conditionallyUpdateScrollbar() {\n var scrollbarWidth = getScrollbarWidth();\n // https://github.com/twbs/bootstrap/blob/v4.0.0-alpha.6/js/src/modal.js#L433\n var fixedContent = document.querySelectorAll('.fixed-top, .fixed-bottom, .is-fixed, .sticky-top')[0];\n var bodyPadding = fixedContent ? parseInt(fixedContent.style.paddingRight || 0, 10) : 0;\n if (isBodyOverflowing()) {\n setScrollbarWidth(bodyPadding + scrollbarWidth);\n }\n}\nvar globalCssModule;\nexport function setGlobalCssModule(cssModule) {\n globalCssModule = cssModule;\n}\nexport function mapToCssModules() {\n var className = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var cssModule = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalCssModule;\n if (!cssModule) return className;\n return className.split(' ').map(function (c) {\n return cssModule[c] || c;\n }).join(' ');\n}\n\n/**\n * Returns a new object with the key/value pairs from `obj` that are not in the array `omitKeys`.\n */\nexport function omit(obj, omitKeys) {\n var result = {};\n Object.keys(obj).forEach(function (key) {\n if (omitKeys.indexOf(key) === -1) {\n result[key] = obj[key];\n }\n });\n return result;\n}\n\n/**\n * Returns a filtered copy of an object with only the specified keys.\n */\nexport function pick(obj, keys) {\n var pickKeys = Array.isArray(keys) ? keys : [keys];\n var length = pickKeys.length;\n var key;\n var result = {};\n while (length > 0) {\n length -= 1;\n key = pickKeys[length];\n result[key] = obj[key];\n }\n return result;\n}\nvar warned = {};\nexport function warnOnce(message) {\n if (!warned[message]) {\n /* istanbul ignore else */\n if (typeof console !== 'undefined') {\n console.error(message); // eslint-disable-line no-console\n }\n\n warned[message] = true;\n }\n}\nexport function deprecated(propType, explanation) {\n return function validate(props, propName, componentName) {\n if (props[propName] !== null && typeof props[propName] !== 'undefined') {\n warnOnce(\"\\\"\".concat(propName, \"\\\" property of \\\"\").concat(componentName, \"\\\" has been deprecated.\\n\").concat(explanation));\n }\n for (var _len = arguments.length, rest = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n rest[_key - 3] = arguments[_key];\n }\n return propType.apply(void 0, [props, propName, componentName].concat(rest));\n };\n}\n\n// Shim Element if needed (e.g. in Node environment)\nvar Element = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === 'object' && window.Element || function () {};\nexport function DOMElement(props, propName, componentName) {\n if (!(props[propName] instanceof Element)) {\n return new Error('Invalid prop `' + propName + '` supplied to `' + componentName + '`. Expected prop to be an instance of Element. Validation failed.');\n }\n}\nexport var targetPropType = PropTypes.oneOfType([PropTypes.string, PropTypes.func, DOMElement, PropTypes.shape({\n current: PropTypes.any\n})]);\nexport var tagPropType = PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.shape({\n $$typeof: PropTypes.symbol,\n render: PropTypes.func\n}), PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.shape({\n $$typeof: PropTypes.symbol,\n render: PropTypes.func\n})]))]);\n\n// These are all setup to match what is in the bootstrap _variables.scss\n// https://github.com/twbs/bootstrap/blob/v4-dev/scss/_variables.scss\nexport var TransitionTimeouts = {\n Fade: 150,\n // $transition-fade\n Collapse: 350,\n // $transition-collapse\n Modal: 300,\n // $modal-transition\n Carousel: 600,\n // $carousel-transition\n Offcanvas: 300 // $offcanvas-transition\n};\n\n// Duplicated Transition.propType keys to ensure that Reactstrap builds\n// for distribution properly exclude these keys for nested child HTML attributes\n// since `react-transition-group` removes propTypes in production builds.\nexport var TransitionPropTypeKeys = ['in', 'mountOnEnter', 'unmountOnExit', 'appear', 'enter', 'exit', 'timeout', 'onEnter', 'onEntering', 'onEntered', 'onExit', 'onExiting', 'onExited'];\nexport var TransitionStatuses = {\n ENTERING: 'entering',\n ENTERED: 'entered',\n EXITING: 'exiting',\n EXITED: 'exited'\n};\nexport var keyCodes = {\n esc: 27,\n space: 32,\n enter: 13,\n tab: 9,\n up: 38,\n down: 40,\n home: 36,\n end: 35,\n n: 78,\n p: 80\n};\nexport var PopperPlacements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\nexport var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nexport function isReactRefObj(target) {\n if (target && _typeof(target) === 'object') {\n return 'current' in target;\n }\n return false;\n}\nfunction getTag(value) {\n if (value == null) {\n return value === undefined ? '[object Undefined]' : '[object Null]';\n }\n return Object.prototype.toString.call(value);\n}\nexport function isObject(value) {\n var type = _typeof(value);\n return value != null && (type === 'object' || type === 'function');\n}\nexport function toNumber(value) {\n var type = _typeof(value);\n var NAN = 0 / 0;\n if (type === 'number') {\n return value;\n }\n if (type === 'symbol' || type === 'object' && getTag(value) === '[object Symbol]') {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf === 'function' ? value.valueOf() : value;\n value = isObject(other) ? \"\".concat(other) : other;\n }\n if (type !== 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(/^\\s+|\\s+$/g, '');\n var isBinary = /^0b[01]+$/i.test(value);\n return isBinary || /^0o[0-7]+$/i.test(value) ? parseInt(value.slice(2), isBinary ? 2 : 8) : /^[-+]0x[0-9a-f]+$/i.test(value) ? NAN : +value;\n}\nexport function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n var tag = getTag(value);\n return tag === '[object Function]' || tag === '[object AsyncFunction]' || tag === '[object GeneratorFunction]' || tag === '[object Proxy]';\n}\nexport function findDOMElements(target) {\n if (isReactRefObj(target)) {\n return target.current;\n }\n if (isFunction(target)) {\n return target();\n }\n if (typeof target === 'string' && canUseDOM) {\n var selection = document.querySelectorAll(target);\n if (!selection.length) {\n selection = document.querySelectorAll(\"#\".concat(target));\n }\n if (!selection.length) {\n throw new Error(\"The target '\".concat(target, \"' could not be identified in the dom, tip: check spelling\"));\n }\n return selection;\n }\n return target;\n}\nexport function isArrayOrNodeList(els) {\n if (els === null) {\n return false;\n }\n return Array.isArray(els) || canUseDOM && typeof els.length === 'number';\n}\nexport function getTarget(target, allElements) {\n var els = findDOMElements(target);\n if (allElements) {\n if (isArrayOrNodeList(els)) {\n return els;\n }\n if (els === null) {\n return [];\n }\n return [els];\n }\n if (isArrayOrNodeList(els)) {\n return els[0];\n }\n return els;\n}\nexport var defaultToggleEvents = ['touchstart', 'click'];\nexport function addMultipleEventListeners(_els, handler, _events, useCapture) {\n var els = _els;\n if (!isArrayOrNodeList(els)) {\n els = [els];\n }\n var events = _events;\n if (typeof events === 'string') {\n events = events.split(/\\s+/);\n }\n if (!isArrayOrNodeList(els) || typeof handler !== 'function' || !Array.isArray(events)) {\n throw new Error(\"\\n The first argument of this function must be DOM node or an array on DOM nodes or NodeList.\\n The second must be a function.\\n The third is a string or an array of strings that represents DOM events\\n \");\n }\n Array.prototype.forEach.call(events, function (event) {\n Array.prototype.forEach.call(els, function (el) {\n el.addEventListener(event, handler, useCapture);\n });\n });\n return function removeEvents() {\n Array.prototype.forEach.call(events, function (event) {\n Array.prototype.forEach.call(els, function (el) {\n el.removeEventListener(event, handler, useCapture);\n });\n });\n };\n}\nexport var focusableElements = ['a[href]', 'area[href]', 'input:not([disabled]):not([type=hidden])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'object', 'embed', '[tabindex]:not(.modal):not(.offcanvas)', 'audio[controls]', 'video[controls]', '[contenteditable]:not([contenteditable=\"false\"])'];","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"cssModule\", \"type\", \"bsSize\", \"valid\", \"invalid\", \"tag\", \"addon\", \"plaintext\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n/* eslint react/prefer-stateless-function: 0 */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, warnOnce, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n type: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n bsSize: PropTypes.string,\n valid: PropTypes.bool,\n invalid: PropTypes.bool,\n tag: tagPropType,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n plaintext: PropTypes.bool,\n addon: PropTypes.bool,\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nvar Input = /*#__PURE__*/function (_React$Component) {\n _inherits(Input, _React$Component);\n var _super = _createSuper(Input);\n function Input(props) {\n var _this;\n _classCallCheck(this, Input);\n _this = _super.call(this, props);\n _this.getRef = _this.getRef.bind(_assertThisInitialized(_this));\n _this.focus = _this.focus.bind(_assertThisInitialized(_this));\n return _this;\n }\n _createClass(Input, [{\n key: \"getRef\",\n value: function getRef(ref) {\n if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n this.ref = ref;\n }\n }, {\n key: \"focus\",\n value: function focus() {\n if (this.ref) {\n this.ref.focus();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n className = _this$props.className,\n cssModule = _this$props.cssModule,\n _this$props$type = _this$props.type,\n type = _this$props$type === void 0 ? 'text' : _this$props$type,\n bsSize = _this$props.bsSize,\n valid = _this$props.valid,\n invalid = _this$props.invalid,\n tag = _this$props.tag,\n addon = _this$props.addon,\n plaintext = _this$props.plaintext,\n innerRef = _this$props.innerRef,\n attributes = _objectWithoutProperties(_this$props, _excluded);\n var checkInput = ['switch', 'radio', 'checkbox'].indexOf(type) > -1;\n var isNotaNumber = /\\D/g;\n var textareaInput = type === 'textarea';\n var selectInput = type === 'select';\n var rangeInput = type === 'range';\n var Tag = tag || (selectInput || textareaInput ? type : 'input');\n var formControlClass = 'form-control';\n if (plaintext) {\n formControlClass = \"\".concat(formControlClass, \"-plaintext\");\n Tag = tag || 'input';\n } else if (rangeInput) {\n formControlClass = 'form-range';\n } else if (selectInput) {\n formControlClass = 'form-select';\n } else if (checkInput) {\n if (addon) {\n formControlClass = null;\n } else {\n formControlClass = 'form-check-input';\n }\n }\n if (attributes.size && isNotaNumber.test(attributes.size)) {\n warnOnce('Please use the prop \"bsSize\" instead of the \"size\" to bootstrap\\'s input sizing.');\n bsSize = attributes.size;\n delete attributes.size;\n }\n var classes = mapToCssModules(classNames(className, invalid && 'is-invalid', valid && 'is-valid', bsSize ? selectInput ? \"form-select-\".concat(bsSize) : \"form-control-\".concat(bsSize) : false, formControlClass), cssModule);\n if (Tag === 'input' || tag && typeof tag === 'function') {\n attributes.type = type === 'switch' ? 'checkbox' : type;\n }\n if (attributes.children && !(plaintext || type === 'select' || typeof Tag !== 'string' || Tag === 'select')) {\n warnOnce(\"Input with a type of \\\"\".concat(type, \"\\\" cannot have children. Please use \\\"value\\\"/\\\"defaultValue\\\" instead.\"));\n delete attributes.children;\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n ref: innerRef,\n className: classes,\n \"aria-invalid\": invalid\n }));\n }\n }]);\n return Input;\n}(React.Component);\nInput.propTypes = propTypes;\nexport default Input;","import * as React from 'react';\nexport var ManagerReferenceNodeContext = React.createContext();\nexport var ManagerReferenceNodeSetterContext = React.createContext();\nexport function Manager(_ref) {\n var children = _ref.children;\n\n var _React$useState = React.useState(null),\n referenceNode = _React$useState[0],\n setReferenceNode = _React$useState[1];\n\n var hasUnmounted = React.useRef(false);\n React.useEffect(function () {\n return function () {\n hasUnmounted.current = true;\n };\n }, []);\n var handleSetReferenceNode = React.useCallback(function (node) {\n if (!hasUnmounted.current) {\n setReferenceNode(node);\n }\n }, []);\n return /*#__PURE__*/React.createElement(ManagerReferenceNodeContext.Provider, {\n value: referenceNode\n }, /*#__PURE__*/React.createElement(ManagerReferenceNodeSetterContext.Provider, {\n value: handleSetReferenceNode\n }, children));\n}","import React from 'react';\n\n/**\n * DropdownContext\n * {\n * toggle: PropTypes.func.isRequired,\n * isOpen: PropTypes.bool.isRequired,\n * direction: PropTypes.oneOf(['up', 'down', 'start', 'end']).isRequired,\n * inNavbar: PropTypes.bool.isRequired,\n * disabled: PropTypes.bool\n * }\n */\nexport var DropdownContext = /*#__PURE__*/React.createContext({});","import React from 'react';\nexport var InputGroupContext = /*#__PURE__*/React.createContext({});","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"cssModule\", \"direction\", \"isOpen\", \"group\", \"size\", \"nav\", \"setActiveFromChild\", \"active\", \"tag\", \"menuRole\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n/* eslint react/no-find-dom-node: 0 */\n// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-find-dom-node.md\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Manager } from 'react-popper';\nimport classNames from 'classnames';\nimport { DropdownContext } from './DropdownContext';\nimport { mapToCssModules, omit, keyCodes, tagPropType } from './utils';\nimport { InputGroupContext } from './InputGroupContext';\nvar propTypes = {\n a11y: PropTypes.bool,\n disabled: PropTypes.bool,\n direction: PropTypes.oneOf(['up', 'down', 'start', 'end', 'left', 'right']),\n group: PropTypes.bool,\n isOpen: PropTypes.bool,\n nav: PropTypes.bool,\n active: PropTypes.bool,\n size: PropTypes.string,\n tag: tagPropType,\n toggle: PropTypes.func,\n children: PropTypes.node,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n dropup: PropTypes.bool,\n inNavbar: PropTypes.bool,\n setActiveFromChild: PropTypes.bool,\n menuRole: PropTypes.oneOf(['listbox', 'menu'])\n};\nvar defaultProps = {\n a11y: true,\n isOpen: false,\n direction: 'down',\n nav: false,\n active: false,\n inNavbar: false,\n setActiveFromChild: false\n};\nvar preventDefaultKeys = [keyCodes.space, keyCodes.enter, keyCodes.up, keyCodes.down, keyCodes.end, keyCodes.home];\nvar Dropdown = /*#__PURE__*/function (_React$Component) {\n _inherits(Dropdown, _React$Component);\n var _super = _createSuper(Dropdown);\n function Dropdown(props) {\n var _this;\n _classCallCheck(this, Dropdown);\n _this = _super.call(this, props);\n _this.addEvents = _this.addEvents.bind(_assertThisInitialized(_this));\n _this.handleDocumentClick = _this.handleDocumentClick.bind(_assertThisInitialized(_this));\n _this.handleKeyDown = _this.handleKeyDown.bind(_assertThisInitialized(_this));\n _this.removeEvents = _this.removeEvents.bind(_assertThisInitialized(_this));\n _this.toggle = _this.toggle.bind(_assertThisInitialized(_this));\n _this.handleMenuRef = _this.handleMenuRef.bind(_assertThisInitialized(_this));\n _this.handleToggleRef = _this.handleToggleRef.bind(_assertThisInitialized(_this));\n _this.containerRef = /*#__PURE__*/React.createRef();\n _this.menuRef = /*#__PURE__*/React.createRef();\n _this.toggleRef = /*#__PURE__*/React.createRef();\n // ref for DropdownToggle\n return _this;\n }\n _createClass(Dropdown, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.handleProps();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n if (this.props.isOpen !== prevProps.isOpen) {\n this.handleProps();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.removeEvents();\n }\n }, {\n key: \"handleMenuRef\",\n value: function handleMenuRef(menuRef) {\n this.menuRef.current = menuRef;\n }\n }, {\n key: \"handleToggleRef\",\n value: function handleToggleRef(toggleRef) {\n this.toggleRef.current = toggleRef;\n }\n }, {\n key: \"handleDocumentClick\",\n value: function handleDocumentClick(e) {\n if (e && (e.which === 3 || e.type === 'keyup' && e.which !== keyCodes.tab)) return;\n var container = this.getContainer();\n var menu = this.getMenu();\n var toggle = this.getToggle();\n var targetIsToggle = toggle.contains(e.target);\n var clickIsInMenu = menu && menu.contains(e.target) && menu !== e.target;\n var clickIsInInput = false;\n if (container) {\n // this is only for InputGroup with type dropdown\n clickIsInInput = container.classList.contains('input-group') && container.classList.contains('dropdown') && e.target.tagName === 'INPUT';\n }\n if ((targetIsToggle && !clickIsInInput || clickIsInMenu) && (e.type !== 'keyup' || e.which === keyCodes.tab)) {\n return;\n }\n this.toggle(e);\n }\n }, {\n key: \"handleKeyDown\",\n value: function handleKeyDown(e) {\n var _this2 = this;\n var isTargetMenuItem = e.target.getAttribute('role') === 'menuitem' || e.target.getAttribute('role') === 'option';\n var isTargetMenuCtrl = this.getMenuCtrl() === e.target;\n var isTab = keyCodes.tab === e.which;\n if (/input|textarea/i.test(e.target.tagName) || isTab && !this.props.a11y || isTab && !(isTargetMenuItem || isTargetMenuCtrl)) {\n return;\n }\n if (preventDefaultKeys.indexOf(e.which) !== -1 || e.which >= 48 && e.which <= 90) {\n e.preventDefault();\n }\n if (this.props.disabled) return;\n if (isTargetMenuCtrl) {\n if ([keyCodes.space, keyCodes.enter, keyCodes.up, keyCodes.down].indexOf(e.which) > -1) {\n // Open the menu (if not open) and focus the first menu item\n if (!this.props.isOpen) {\n this.toggle(e);\n }\n setTimeout(function () {\n var _this2$getMenuItems$;\n return (_this2$getMenuItems$ = _this2.getMenuItems()[0]) === null || _this2$getMenuItems$ === void 0 ? void 0 : _this2$getMenuItems$.focus();\n });\n } else if (this.props.isOpen && isTab) {\n var _this$getMenuItems$;\n // Focus the first menu item if tabbing from an open menu. We need this\n // for cases where the DropdownMenu sets a custom container, which may\n // not be the natural next item to tab to from the DropdownToggle.\n e.preventDefault();\n (_this$getMenuItems$ = this.getMenuItems()[0]) === null || _this$getMenuItems$ === void 0 ? void 0 : _this$getMenuItems$.focus();\n } else if (this.props.isOpen && e.which === keyCodes.esc) {\n this.toggle(e);\n }\n }\n if (this.props.isOpen && isTargetMenuItem) {\n if ([keyCodes.tab, keyCodes.esc].indexOf(e.which) > -1) {\n this.toggle(e);\n this.getMenuCtrl().focus();\n } else if ([keyCodes.space, keyCodes.enter].indexOf(e.which) > -1) {\n e.target.click();\n this.getMenuCtrl().focus();\n } else if ([keyCodes.down, keyCodes.up].indexOf(e.which) > -1 || [keyCodes.n, keyCodes.p].indexOf(e.which) > -1 && e.ctrlKey) {\n var $menuitems = this.getMenuItems();\n var index = $menuitems.indexOf(e.target);\n if (keyCodes.up === e.which || keyCodes.p === e.which && e.ctrlKey) {\n index = index !== 0 ? index - 1 : $menuitems.length - 1;\n } else if (keyCodes.down === e.which || keyCodes.n === e.which && e.ctrlKey) {\n index = index === $menuitems.length - 1 ? 0 : index + 1;\n }\n $menuitems[index].focus();\n } else if (keyCodes.end === e.which) {\n var _$menuitems = this.getMenuItems();\n _$menuitems[_$menuitems.length - 1].focus();\n } else if (keyCodes.home === e.which) {\n var _$menuitems2 = this.getMenuItems();\n _$menuitems2[0].focus();\n } else if (e.which >= 48 && e.which <= 90) {\n var _$menuitems3 = this.getMenuItems();\n var charPressed = String.fromCharCode(e.which).toLowerCase();\n for (var i = 0; i < _$menuitems3.length; i += 1) {\n var firstLetter = _$menuitems3[i].textContent && _$menuitems3[i].textContent[0].toLowerCase();\n if (firstLetter === charPressed) {\n _$menuitems3[i].focus();\n break;\n }\n }\n }\n }\n }\n }, {\n key: \"handleProps\",\n value: function handleProps() {\n if (this.props.isOpen) {\n this.addEvents();\n } else {\n this.removeEvents();\n }\n }\n }, {\n key: \"getContextValue\",\n value: function getContextValue() {\n return {\n toggle: this.toggle,\n isOpen: this.props.isOpen,\n direction: this.props.direction === 'down' && this.props.dropup ? 'up' : this.props.direction,\n inNavbar: this.props.inNavbar,\n disabled: this.props.disabled,\n // Callback that should be called by DropdownMenu to provide a ref to\n // a HTML tag that's used for the DropdownMenu\n onMenuRef: this.handleMenuRef,\n onToggleRef: this.handleToggleRef,\n menuRole: this.props.menuRole\n };\n }\n }, {\n key: \"getContainer\",\n value: function getContainer() {\n return this.containerRef.current;\n }\n }, {\n key: \"getMenu\",\n value: function getMenu() {\n return this.menuRef.current;\n }\n }, {\n key: \"getToggle\",\n value: function getToggle() {\n return this.toggleRef.current;\n }\n }, {\n key: \"getMenuCtrl\",\n value: function getMenuCtrl() {\n if (this._$menuCtrl) return this._$menuCtrl;\n this._$menuCtrl = this.getToggle();\n return this._$menuCtrl;\n }\n }, {\n key: \"getItemType\",\n value: function getItemType() {\n if (this.props.menuRole === 'listbox') {\n return 'option';\n }\n return 'menuitem';\n }\n }, {\n key: \"getMenuItems\",\n value: function getMenuItems() {\n // In a real menu with a child DropdownMenu, `this.getMenu()` should never\n // be null, but it is sometimes null in tests. To mitigate that, we just\n // use `this.getContainer()` as the fallback `menuContainer`.\n var menuContainer = this.getMenu() || this.getContainer();\n return [].slice.call(menuContainer.querySelectorAll(\"[role=\\\"\".concat(this.getItemType(), \"\\\"]\")));\n }\n }, {\n key: \"addEvents\",\n value: function addEvents() {\n var _this3 = this;\n ['click', 'touchstart', 'keyup'].forEach(function (event) {\n return document.addEventListener(event, _this3.handleDocumentClick, true);\n });\n }\n }, {\n key: \"removeEvents\",\n value: function removeEvents() {\n var _this4 = this;\n ['click', 'touchstart', 'keyup'].forEach(function (event) {\n return document.removeEventListener(event, _this4.handleDocumentClick, true);\n });\n }\n }, {\n key: \"toggle\",\n value: function toggle(e) {\n if (this.props.disabled) {\n return e && e.preventDefault();\n }\n return this.props.toggle(e);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _classNames,\n _this5 = this;\n var _omit = omit(this.props, ['toggle', 'disabled', 'inNavbar', 'a11y']),\n className = _omit.className,\n cssModule = _omit.cssModule,\n direction = _omit.direction,\n isOpen = _omit.isOpen,\n group = _omit.group,\n size = _omit.size,\n nav = _omit.nav,\n setActiveFromChild = _omit.setActiveFromChild,\n active = _omit.active,\n tag = _omit.tag,\n menuRole = _omit.menuRole,\n attrs = _objectWithoutProperties(_omit, _excluded);\n var Tag = tag || (nav ? 'li' : 'div');\n var subItemIsActive = false;\n if (setActiveFromChild) {\n React.Children.map(this.props.children[1].props.children, function (dropdownItem) {\n if (dropdownItem && dropdownItem.props.active) subItemIsActive = true;\n });\n }\n var classes = mapToCssModules(classNames(className, nav && active ? 'active' : false, setActiveFromChild && subItemIsActive ? 'active' : false, (_classNames = {\n 'btn-group': group\n }, _defineProperty(_classNames, \"btn-group-\".concat(size), !!size), _defineProperty(_classNames, \"dropdown\", !group), _defineProperty(_classNames, \"dropup\", direction === 'up'), _defineProperty(_classNames, \"dropstart\", direction === 'start' || direction === 'left'), _defineProperty(_classNames, \"dropend\", direction === 'end' || direction === 'right'), _defineProperty(_classNames, \"show\", isOpen), _defineProperty(_classNames, 'nav-item', nav), _classNames)), cssModule);\n if (this.context.insideInputGroup) {\n return /*#__PURE__*/React.createElement(DropdownContext.Provider, {\n value: this.getContextValue()\n }, /*#__PURE__*/React.createElement(Manager, null, React.Children.map(this.props.children, function (child) {\n return /*#__PURE__*/React.cloneElement(child, {\n onKeyDown: _this5.handleKeyDown\n });\n })));\n }\n return /*#__PURE__*/React.createElement(DropdownContext.Provider, {\n value: this.getContextValue()\n }, /*#__PURE__*/React.createElement(Manager, null, /*#__PURE__*/React.createElement(Tag, _extends({}, attrs, _defineProperty({}, typeof Tag === 'string' ? 'ref' : 'innerRef', this.containerRef), {\n onKeyDown: this.handleKeyDown,\n className: classes\n }))));\n }\n }]);\n return Dropdown;\n}(React.Component);\nDropdown.propTypes = propTypes;\nDropdown.defaultProps = defaultProps;\nDropdown.contextType = InputGroupContext;\nexport default Dropdown;","import * as React from 'react';\n\n/**\n * Takes an argument and if it's an array, returns the first item in the array,\n * otherwise returns the argument. Used for Preact compatibility.\n */\nexport var unwrapArray = function unwrapArray(arg) {\n return Array.isArray(arg) ? arg[0] : arg;\n};\n/**\n * Takes a maybe-undefined function and arbitrary args and invokes the function\n * only if it is defined.\n */\n\nexport var safeInvoke = function safeInvoke(fn) {\n if (typeof fn === 'function') {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return fn.apply(void 0, args);\n }\n};\n/**\n * Sets a ref using either a ref callback or a ref object\n */\n\nexport var setRef = function setRef(ref, node) {\n // if its a function call it\n if (typeof ref === 'function') {\n return safeInvoke(ref, node);\n } // otherwise we should treat it as a ref object\n else if (ref != null) {\n ref.current = node;\n }\n};\n/**\n * Simple ponyfill for Object.fromEntries\n */\n\nexport var fromEntries = function fromEntries(entries) {\n return entries.reduce(function (acc, _ref) {\n var key = _ref[0],\n value = _ref[1];\n acc[key] = value;\n return acc;\n }, {});\n};\n/**\n * Small wrapper around `useLayoutEffect` to get rid of the warning on SSR envs\n */\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' && window.document && window.document.createElement ? React.useLayoutEffect : React.useEffect;","import * as React from 'react';\nimport warning from 'warning';\nimport { ManagerReferenceNodeSetterContext } from './Manager';\nimport { safeInvoke, unwrapArray, setRef } from './utils';\nexport function Reference(_ref) {\n var children = _ref.children,\n innerRef = _ref.innerRef;\n var setReferenceNode = React.useContext(ManagerReferenceNodeSetterContext);\n var refHandler = React.useCallback(function (node) {\n setRef(innerRef, node);\n safeInvoke(setReferenceNode, node);\n }, [innerRef, setReferenceNode]); // ran on unmount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n\n React.useEffect(function () {\n return function () {\n return setRef(innerRef, null);\n };\n }, []);\n React.useEffect(function () {\n warning(Boolean(setReferenceNode), '`Reference` should not be used outside of a `Manager` component.');\n }, [setReferenceNode]);\n return unwrapArray(children)({\n ref: refHandler\n });\n}","var _excluded = [\"className\", \"cssModule\", \"variant\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\nvar propTypes = {\n /** Disable the button if needed */\n active: PropTypes.bool,\n /** Aria label */\n 'aria-label': PropTypes.string,\n /** Function to be triggered on click */\n onClick: PropTypes.func,\n /** Change the variant to white */\n variant: PropTypes.oneOf(['white']),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func])\n};\nfunction CloseButton(props) {\n var className = props.className,\n cssModule = props.cssModule,\n variant = props.variant,\n innerRef = props.innerRef,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'btn-close', variant && \"btn-close-\".concat(variant)));\n return /*#__PURE__*/React.createElement(\"button\", _extends({\n ref: innerRef,\n type: \"button\",\n className: classes\n }, _objectSpread({\n 'aria-label': 'close'\n }, attributes)));\n}\nCloseButton.propTypes = propTypes;\nexport default CloseButton;","var _excluded = [\"active\", \"aria-label\", \"block\", \"className\", \"close\", \"cssModule\", \"color\", \"outline\", \"size\", \"tag\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React, { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nimport CloseButton from './CloseButton';\nvar propTypes = {\n /** Manually set the visual state of the button to active */\n active: PropTypes.bool,\n /** Aria label */\n 'aria-label': PropTypes.string,\n block: PropTypes.bool,\n /** Pass children so this component can wrap them */\n children: PropTypes.node,\n /** Add custom class */\n className: PropTypes.string,\n /** Change existing className with a new className */\n cssModule: PropTypes.object,\n /** Use the button as a close button */\n close: PropTypes.bool,\n /** Change color of Button to one of the available colors */\n color: PropTypes.string,\n /** Disables the button */\n disabled: PropTypes.bool,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n /** Function to be triggered on click */\n onClick: PropTypes.func,\n /** Adds outline to the button */\n outline: PropTypes.bool,\n /** Make the button bigger or smaller */\n size: PropTypes.string,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction Button(props) {\n var onClick = useCallback(function (e) {\n if (props.disabled) {\n e.preventDefault();\n return;\n }\n if (props.onClick) {\n return props.onClick(e);\n }\n }, [props.onClick, props.disabled]);\n var active = props.active,\n ariaLabel = props['aria-label'],\n block = props.block,\n className = props.className,\n close = props.close,\n cssModule = props.cssModule,\n _props$color = props.color,\n color = _props$color === void 0 ? 'secondary' : _props$color,\n outline = props.outline,\n size = props.size,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'button' : _props$tag,\n innerRef = props.innerRef,\n attributes = _objectWithoutProperties(props, _excluded);\n if (close) {\n return /*#__PURE__*/React.createElement(CloseButton, attributes);\n }\n var btnOutlineColor = \"btn\".concat(outline ? '-outline' : '', \"-\").concat(color);\n var classes = mapToCssModules(classNames(className, 'btn', btnOutlineColor, size ? \"btn-\".concat(size) : false, block ? 'd-block w-100' : false, {\n active: active,\n disabled: props.disabled\n }), cssModule);\n if (attributes.href && Tag === 'button') {\n Tag = 'a';\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({\n type: Tag === 'button' && attributes.onClick ? 'button' : undefined\n }, attributes, {\n className: classes,\n ref: innerRef,\n onClick: onClick,\n \"aria-label\": ariaLabel\n }));\n}\nButton.propTypes = propTypes;\nexport default Button;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"color\", \"cssModule\", \"caret\", \"split\", \"nav\", \"tag\", \"innerRef\"];\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Reference } from 'react-popper';\nimport { DropdownContext } from './DropdownContext';\nimport { mapToCssModules, tagPropType } from './utils';\nimport Button from './Button';\nvar propTypes = {\n caret: PropTypes.bool,\n color: PropTypes.string,\n children: PropTypes.node,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n disabled: PropTypes.bool,\n onClick: PropTypes.func,\n 'aria-haspopup': PropTypes.bool,\n split: PropTypes.bool,\n tag: tagPropType,\n nav: PropTypes.bool,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func])\n};\nvar defaultProps = {\n color: 'secondary',\n 'aria-haspopup': true\n};\nvar DropdownToggle = /*#__PURE__*/function (_React$Component) {\n _inherits(DropdownToggle, _React$Component);\n var _super = _createSuper(DropdownToggle);\n function DropdownToggle(props) {\n var _this;\n _classCallCheck(this, DropdownToggle);\n _this = _super.call(this, props);\n _this.onClick = _this.onClick.bind(_assertThisInitialized(_this));\n return _this;\n }\n _createClass(DropdownToggle, [{\n key: \"onClick\",\n value: function onClick(e) {\n if (this.props.disabled || this.context.disabled) {\n e.preventDefault();\n return;\n }\n if (this.props.nav && !this.props.tag) {\n e.preventDefault();\n }\n if (this.props.onClick) {\n this.props.onClick(e);\n }\n this.context.toggle(e);\n }\n }, {\n key: \"getRole\",\n value: function getRole() {\n return this.context.menuRole || this.props['aria-haspopup'];\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n var _this$props = this.props,\n className = _this$props.className,\n color = _this$props.color,\n cssModule = _this$props.cssModule,\n caret = _this$props.caret,\n split = _this$props.split,\n nav = _this$props.nav,\n tag = _this$props.tag,\n innerRef = _this$props.innerRef,\n props = _objectWithoutProperties(_this$props, _excluded);\n var ariaLabel = props['aria-label'] || 'Toggle Dropdown';\n var classes = mapToCssModules(classNames(className, {\n 'dropdown-toggle': caret || split,\n 'dropdown-toggle-split': split,\n 'nav-link': nav\n }), cssModule);\n var children = typeof props.children !== 'undefined' ? props.children : /*#__PURE__*/React.createElement(\"span\", {\n className: \"visually-hidden\"\n }, ariaLabel);\n var Tag;\n if (nav && !tag) {\n Tag = 'a';\n props.href = '#';\n } else if (!tag) {\n Tag = Button;\n props.color = color;\n props.cssModule = cssModule;\n } else {\n Tag = tag;\n }\n if (this.context.inNavbar) {\n return /*#__PURE__*/React.createElement(Tag, _extends({}, props, {\n className: classes,\n onClick: this.onClick,\n ref: this.context.onToggleRef,\n \"aria-expanded\": this.context.isOpen,\n \"aria-haspopup\": this.getRole(),\n children: children\n }));\n }\n return /*#__PURE__*/React.createElement(Reference, {\n innerRef: innerRef\n }, function (_ref) {\n var ref = _ref.ref;\n var handleRef = function handleRef(tagRef) {\n ref(tagRef);\n var onToggleRef = _this2.context.onToggleRef;\n if (onToggleRef) onToggleRef(tagRef);\n };\n return /*#__PURE__*/React.createElement(Tag, _extends({}, props, _defineProperty({}, typeof Tag === 'string' ? 'ref' : 'innerRef', handleRef), {\n className: classes,\n onClick: _this2.onClick,\n \"aria-expanded\": _this2.context.isOpen,\n \"aria-haspopup\": _this2.getRole(),\n children: children\n }));\n });\n }\n }]);\n return DropdownToggle;\n}(React.Component);\nDropdownToggle.propTypes = propTypes;\nDropdownToggle.defaultProps = defaultProps;\nDropdownToggle.contextType = DropdownContext;\nexport default DropdownToggle;","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { createPopper as defaultCreatePopper } from '@popperjs/core';\nimport isEqual from 'react-fast-compare';\nimport { fromEntries, useIsomorphicLayoutEffect } from './utils';\nvar EMPTY_MODIFIERS = [];\nexport var usePopper = function usePopper(referenceElement, popperElement, options) {\n if (options === void 0) {\n options = {};\n }\n\n var prevOptions = React.useRef(null);\n var optionsWithDefaults = {\n onFirstUpdate: options.onFirstUpdate,\n placement: options.placement || 'bottom',\n strategy: options.strategy || 'absolute',\n modifiers: options.modifiers || EMPTY_MODIFIERS\n };\n\n var _React$useState = React.useState({\n styles: {\n popper: {\n position: optionsWithDefaults.strategy,\n left: '0',\n top: '0'\n },\n arrow: {\n position: 'absolute'\n }\n },\n attributes: {}\n }),\n state = _React$useState[0],\n setState = _React$useState[1];\n\n var updateStateModifier = React.useMemo(function () {\n return {\n name: 'updateState',\n enabled: true,\n phase: 'write',\n fn: function fn(_ref) {\n var state = _ref.state;\n var elements = Object.keys(state.elements);\n ReactDOM.flushSync(function () {\n setState({\n styles: fromEntries(elements.map(function (element) {\n return [element, state.styles[element] || {}];\n })),\n attributes: fromEntries(elements.map(function (element) {\n return [element, state.attributes[element]];\n }))\n });\n });\n },\n requires: ['computeStyles']\n };\n }, []);\n var popperOptions = React.useMemo(function () {\n var newOptions = {\n onFirstUpdate: optionsWithDefaults.onFirstUpdate,\n placement: optionsWithDefaults.placement,\n strategy: optionsWithDefaults.strategy,\n modifiers: [].concat(optionsWithDefaults.modifiers, [updateStateModifier, {\n name: 'applyStyles',\n enabled: false\n }])\n };\n\n if (isEqual(prevOptions.current, newOptions)) {\n return prevOptions.current || newOptions;\n } else {\n prevOptions.current = newOptions;\n return newOptions;\n }\n }, [optionsWithDefaults.onFirstUpdate, optionsWithDefaults.placement, optionsWithDefaults.strategy, optionsWithDefaults.modifiers, updateStateModifier]);\n var popperInstanceRef = React.useRef();\n useIsomorphicLayoutEffect(function () {\n if (popperInstanceRef.current) {\n popperInstanceRef.current.setOptions(popperOptions);\n }\n }, [popperOptions]);\n useIsomorphicLayoutEffect(function () {\n if (referenceElement == null || popperElement == null) {\n return;\n }\n\n var createPopper = options.createPopper || defaultCreatePopper;\n var popperInstance = createPopper(referenceElement, popperElement, popperOptions);\n popperInstanceRef.current = popperInstance;\n return function () {\n popperInstance.destroy();\n popperInstanceRef.current = null;\n };\n }, [referenceElement, popperElement, options.createPopper]);\n return {\n state: popperInstanceRef.current ? popperInstanceRef.current.state : null,\n styles: state.styles,\n attributes: state.attributes,\n update: popperInstanceRef.current ? popperInstanceRef.current.update : null,\n forceUpdate: popperInstanceRef.current ? popperInstanceRef.current.forceUpdate : null\n };\n};","import * as React from 'react';\nimport { ManagerReferenceNodeContext } from './Manager';\nimport { unwrapArray, setRef } from './utils';\nimport { usePopper } from './usePopper';\n\nvar NOOP = function NOOP() {\n return void 0;\n};\n\nvar NOOP_PROMISE = function NOOP_PROMISE() {\n return Promise.resolve(null);\n};\n\nvar EMPTY_MODIFIERS = [];\nexport function Popper(_ref) {\n var _ref$placement = _ref.placement,\n placement = _ref$placement === void 0 ? 'bottom' : _ref$placement,\n _ref$strategy = _ref.strategy,\n strategy = _ref$strategy === void 0 ? 'absolute' : _ref$strategy,\n _ref$modifiers = _ref.modifiers,\n modifiers = _ref$modifiers === void 0 ? EMPTY_MODIFIERS : _ref$modifiers,\n referenceElement = _ref.referenceElement,\n onFirstUpdate = _ref.onFirstUpdate,\n innerRef = _ref.innerRef,\n children = _ref.children;\n var referenceNode = React.useContext(ManagerReferenceNodeContext);\n\n var _React$useState = React.useState(null),\n popperElement = _React$useState[0],\n setPopperElement = _React$useState[1];\n\n var _React$useState2 = React.useState(null),\n arrowElement = _React$useState2[0],\n setArrowElement = _React$useState2[1];\n\n React.useEffect(function () {\n setRef(innerRef, popperElement);\n }, [innerRef, popperElement]);\n var options = React.useMemo(function () {\n return {\n placement: placement,\n strategy: strategy,\n onFirstUpdate: onFirstUpdate,\n modifiers: [].concat(modifiers, [{\n name: 'arrow',\n enabled: arrowElement != null,\n options: {\n element: arrowElement\n }\n }])\n };\n }, [placement, strategy, onFirstUpdate, modifiers, arrowElement]);\n\n var _usePopper = usePopper(referenceElement || referenceNode, popperElement, options),\n state = _usePopper.state,\n styles = _usePopper.styles,\n forceUpdate = _usePopper.forceUpdate,\n update = _usePopper.update;\n\n var childrenProps = React.useMemo(function () {\n return {\n ref: setPopperElement,\n style: styles.popper,\n placement: state ? state.placement : placement,\n hasPopperEscaped: state && state.modifiersData.hide ? state.modifiersData.hide.hasPopperEscaped : null,\n isReferenceHidden: state && state.modifiersData.hide ? state.modifiersData.hide.isReferenceHidden : null,\n arrowProps: {\n style: styles.arrow,\n ref: setArrowElement\n },\n forceUpdate: forceUpdate || NOOP,\n update: update || NOOP_PROMISE\n };\n }, [setPopperElement, setArrowElement, placement, state, styles, update, forceUpdate]);\n return unwrapArray(children)(childrenProps);\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"cssModule\", \"dark\", \"end\", \"right\", \"tag\", \"flip\", \"modifiers\", \"persist\", \"strategy\", \"container\", \"updateOnSelect\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport { Popper } from 'react-popper';\nimport { DropdownContext } from './DropdownContext';\nimport { mapToCssModules, tagPropType, targetPropType, getTarget, deprecated } from './utils';\nvar propTypes = {\n tag: tagPropType,\n children: PropTypes.node.isRequired,\n dark: PropTypes.bool,\n end: PropTypes.bool,\n /** Flips the menu to the opposite side if there is not enough space to fit */\n flip: PropTypes.bool,\n modifiers: PropTypes.array,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n style: PropTypes.object,\n persist: PropTypes.bool,\n strategy: PropTypes.string,\n container: targetPropType,\n /** Update popper layout when a click event comes up. This leverages event bubbling. */\n updateOnSelect: PropTypes.bool,\n right: deprecated(PropTypes.bool, 'Please use \"end\" instead.')\n};\nvar directionPositionMap = {\n up: 'top',\n left: 'left',\n right: 'right',\n start: 'left',\n end: 'right',\n down: 'bottom'\n};\nvar DropdownMenu = /*#__PURE__*/function (_React$Component) {\n _inherits(DropdownMenu, _React$Component);\n var _super = _createSuper(DropdownMenu);\n function DropdownMenu() {\n _classCallCheck(this, DropdownMenu);\n return _super.apply(this, arguments);\n }\n _createClass(DropdownMenu, [{\n key: \"getRole\",\n value: function getRole() {\n if (this.context.menuRole === 'listbox') {\n return 'listbox';\n }\n return 'menu';\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this = this;\n var _this$props = this.props,\n className = _this$props.className,\n cssModule = _this$props.cssModule,\n dark = _this$props.dark,\n end = _this$props.end,\n right = _this$props.right,\n _this$props$tag = _this$props.tag,\n tag = _this$props$tag === void 0 ? 'div' : _this$props$tag,\n _this$props$flip = _this$props.flip,\n flip = _this$props$flip === void 0 ? true : _this$props$flip,\n _this$props$modifiers = _this$props.modifiers,\n modifiers = _this$props$modifiers === void 0 ? [] : _this$props$modifiers,\n persist = _this$props.persist,\n strategy = _this$props.strategy,\n container = _this$props.container,\n updateOnSelect = _this$props.updateOnSelect,\n attrs = _objectWithoutProperties(_this$props, _excluded);\n var classes = mapToCssModules(classNames(className, 'dropdown-menu', {\n 'dropdown-menu-dark': dark,\n 'dropdown-menu-end': end || right,\n show: this.context.isOpen\n }), cssModule);\n var Tag = tag;\n if (persist || this.context.isOpen && !this.context.inNavbar) {\n var position1 = directionPositionMap[this.context.direction] || 'bottom';\n var position2 = end || right ? 'end' : 'start';\n var poperPlacement = \"\".concat(position1, \"-\").concat(position2);\n var poperModifiers = [].concat(_toConsumableArray(modifiers), [{\n name: 'flip',\n enabled: !!flip\n }]);\n var persistStyles = {};\n if (persist) {\n persistStyles.display = 'block';\n persistStyles.visibility = this.context.isOpen ? 'visible' : 'hidden';\n }\n var popper = /*#__PURE__*/React.createElement(Popper, {\n placement: poperPlacement,\n modifiers: poperModifiers,\n strategy: strategy\n }, function (_ref) {\n var ref = _ref.ref,\n style = _ref.style,\n placement = _ref.placement,\n update = _ref.update;\n var combinedStyle = _objectSpread(_objectSpread(_objectSpread({}, _this.props.style), persistStyles), style);\n var handleRef = function handleRef(tagRef) {\n // Send the ref to `react-popper`\n ref(tagRef);\n // Send the ref to the parent Dropdown so that clicks outside\n // it will cause it to close\n var onMenuRef = _this.context.onMenuRef;\n if (onMenuRef) onMenuRef(tagRef);\n };\n return /*#__PURE__*/React.createElement(Tag, _extends({\n tabIndex: \"-1\",\n role: _this.getRole(),\n ref: handleRef\n }, attrs, {\n style: combinedStyle,\n \"aria-hidden\": !_this.context.isOpen,\n className: classes,\n \"data-popper-placement\": placement,\n onClick: function onClick() {\n return updateOnSelect && update();\n }\n }));\n });\n if (container) {\n return /*#__PURE__*/ReactDOM.createPortal(popper, getTarget(container));\n }\n return popper;\n }\n var onMenuRef = this.context.onMenuRef;\n return /*#__PURE__*/React.createElement(Tag, _extends({\n tabIndex: \"-1\",\n role: this.getRole()\n }, attrs, {\n ref: onMenuRef,\n \"aria-hidden\": !this.context.isOpen,\n className: classes,\n \"data-popper-placement\": attrs.placement,\n \"data-bs-popper\": \"static\"\n }));\n }\n }]);\n return DropdownMenu;\n}(React.Component);\nDropdownMenu.propTypes = propTypes;\nDropdownMenu.contextType = DropdownContext;\nexport default DropdownMenu;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"cssModule\", \"divider\", \"tag\", \"header\", \"active\", \"text\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { DropdownContext } from './DropdownContext';\nimport { mapToCssModules, omit, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n active: PropTypes.bool,\n disabled: PropTypes.bool,\n divider: PropTypes.bool,\n tag: tagPropType,\n header: PropTypes.bool,\n onClick: PropTypes.func,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n toggle: PropTypes.bool,\n text: PropTypes.bool\n};\nvar DropdownItem = /*#__PURE__*/function (_React$Component) {\n _inherits(DropdownItem, _React$Component);\n var _super = _createSuper(DropdownItem);\n function DropdownItem(props) {\n var _this;\n _classCallCheck(this, DropdownItem);\n _this = _super.call(this, props);\n _this.onClick = _this.onClick.bind(_assertThisInitialized(_this));\n _this.getTabIndex = _this.getTabIndex.bind(_assertThisInitialized(_this));\n return _this;\n }\n _createClass(DropdownItem, [{\n key: \"onClick\",\n value: function onClick(e) {\n var _this$props$toggle;\n var _this$props = this.props,\n disabled = _this$props.disabled,\n header = _this$props.header,\n divider = _this$props.divider,\n text = _this$props.text;\n if (disabled || header || divider || text) {\n e.preventDefault();\n return;\n }\n if (this.props.onClick) {\n this.props.onClick(e);\n }\n if ((_this$props$toggle = this.props.toggle) !== null && _this$props$toggle !== void 0 ? _this$props$toggle : true) {\n this.context.toggle(e);\n }\n }\n }, {\n key: \"getRole\",\n value: function getRole() {\n if (this.context.menuRole === 'listbox') {\n return 'option';\n }\n return 'menuitem';\n }\n }, {\n key: \"getTabIndex\",\n value: function getTabIndex() {\n var _this$props2 = this.props,\n disabled = _this$props2.disabled,\n header = _this$props2.header,\n divider = _this$props2.divider,\n text = _this$props2.text;\n if (disabled || header || divider || text) {\n return '-1';\n }\n return '0';\n }\n }, {\n key: \"render\",\n value: function render() {\n var tabIndex = this.getTabIndex();\n var role = tabIndex > -1 ? this.getRole() : undefined;\n var _omit = omit(this.props, ['toggle']),\n className = _omit.className,\n cssModule = _omit.cssModule,\n divider = _omit.divider,\n _omit$tag = _omit.tag,\n Tag = _omit$tag === void 0 ? 'button' : _omit$tag,\n header = _omit.header,\n active = _omit.active,\n text = _omit.text,\n props = _objectWithoutProperties(_omit, _excluded);\n var classes = mapToCssModules(classNames(className, {\n disabled: props.disabled,\n 'dropdown-item': !divider && !header && !text,\n active: active,\n 'dropdown-header': header,\n 'dropdown-divider': divider,\n 'dropdown-item-text': text\n }), cssModule);\n if (Tag === 'button') {\n if (header) {\n Tag = 'h6';\n } else if (divider) {\n Tag = 'div';\n } else if (props.href) {\n Tag = 'a';\n } else if (text) {\n Tag = 'span';\n }\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({\n type: Tag === 'button' && (props.onClick || this.props.toggle) ? 'button' : undefined\n }, props, {\n tabIndex: tabIndex,\n role: role,\n className: classes,\n onClick: this.onClick\n }));\n }\n }]);\n return DropdownItem;\n}(React.Component);\nDropdownItem.propTypes = propTypes;\nDropdownItem.contextType = DropdownContext;\nexport default DropdownItem;","import React, { useState } from 'react'\nimport {\n Dropdown,\n DropdownToggle,\n DropdownMenu,\n DropdownItem,\n Input,\n} from 'reactstrap'\nimport { t } from '$themelocalization'\nimport { Icon } from '$core-components'\nimport './DropDown.scss'\n\nconst SearchMenuItem = ({ onChange, placeholder }) => {\n const [searchValue, setSearchValue] = useState('')\n\n const onChangeHandler = (value) => {\n setSearchValue(value)\n onChange(value)\n }\n\n const onClearSearchHandler = () => {\n setSearchValue('')\n onChange('')\n }\n\n return <div className=\"drop-down-search-input-item\">\n <Input type=\"text\" value={searchValue} className=\"drop-down-search-input\" onChange={(e) => onChangeHandler(e.target.value)} placeholder={placeholder}/>\n <div className=\"drop-down-search-icon-container\">\n {searchValue ? <Icon name=\"close_black.svg\" wrapperClassName=\"drop-down-search-icon\" width=\"14px\" height=\"14px\" onClick={onClearSearchHandler}/> :\n <Icon name=\"search.svg\" wrapperClassName=\"drop-down-search-icon\" width=\"20px\" height=\"20px\"/>}\n </div>\n </div>\n}\n\nconst DropDown = ({ direction, items, selectedValue, onChange, searchable, dropDownToggle, searchPlaceholder, disabled, ...args }) => {\n const [dropdownOpen, setDropdownOpen] = useState(false)\n const toggle = () => setDropdownOpen((prevState) => !prevState)\n const [searchValue, setSearchValue] = useState('')\n\n const filteredItems = items.filter(item => searchValue === '' || item.name.toLowerCase().indexOf(searchValue.toLowerCase()) > -1)\n\n const Item = ({ item }) => {\n if (item.component) {\n return React.createElement(item.component)\n }\n return <div className={`drop-down-item-container ${item.disabled ? 'disabled' : ''}`}>\n {item.icon && <Icon name={item.icon} className={`drop-down-item-icon drop-down-name-${item.icon.replace('.svg','')}`} width={item.width ?? '20px'} height={item.height ?? '20px'}/>}\n <span>{item.name}</span>\n </div>\n }\n\n return (\n\n <Dropdown isOpen={dropdownOpen} toggle={toggle} direction={direction} className=\"drop-down\">\n {dropDownToggle ?\n (<DropdownToggle className=\"drop-down-toggle-overrides\" disabled={disabled}><span>{dropDownToggle}</span></DropdownToggle>) :\n (<DropdownToggle disabled={disabled} caret>{selectedValue?.name ? <span>{selectedValue.name}</span> : <span> </span>}</DropdownToggle>)\n }\n <DropdownMenu {...args} >\n {searchable && <SearchMenuItem onChange={setSearchValue} placeholder={searchPlaceholder}/> }\n {filteredItems.map((item, index) => {\n if (item.divider) {\n return <DropdownItem key={index} divider />\n }\n return <DropdownItem key={index}\n onKeyDown={() => !item.disabled && onChange(item)}\n onClick={() => !item.disabled && onChange(item)}\n active={selectedValue?.value === item.value}\n disabled={item.disabled}\n >\n <Item item={item}/>\n </DropdownItem>\n })}\n {filteredItems.length === 0 && <DropdownItem disabled>{t('DropDown.NoResultsFound')}</DropdownItem>}\n </DropdownMenu>\n </Dropdown>\n\n )\n}\n\nexport default DropDown\n","/**\n * @function Gallery - a component which displays an array of items (childrens)\n * \n * @param {String} [title] - The main title at the top of the component\n * @param {String} [seeAllUrl] - The link to the full gallery page\n * @param {Number} [gridRows] - The number of rows (default: 2)\n * @param {Component} children - The children components\n */\n\nimport React, { Component } from 'react'\nimport { Link } from 'react-router-dom'\nimport memoize from \"memoize-one\"\nimport { t } from '$themelocalization'\nimport './Gallery.scss'\n\nclass Gallery extends Component {\n\tconstructor(props){\n super(props)\n this.defaultGridRows = 2\n this.forceRender = false\n this.isUnmounted = false\n }\n\n updateRenderedChildren(){\n if(!this.isUnmounted){\n this.forceRender = true\n this.forceUpdate()\n }\n }\n\n componentDidMount() {\n this.updateRenderedChildren()\n window.addEventListener(\"resize\", this.updateRenderedChildren.bind(this))\n }\n\n componentWillUnmount() {\n this.isUnmounted = true\n window.removeEventListener(\"resize\", this.updateRenderedChildren.bind(this))\n }\n\n getItemsInRow() {\n if (!this.gallery) {\n return 0\n }\n const basis = window.getComputedStyle(this.gallery).getPropertyValue('--flex-basis').replace('%','')\n return Math.floor(100/parseInt(basis))\n }\n\n filterChildren(children){\n const itemsInRow = this.getItemsInRow()\n const gridRows = this.props.gridRows || this.defaultGridRows\n const itemsToShow = parseInt(itemsInRow) * parseInt(gridRows)\n\n return React.Children.map(children, (child, i) => {\n if (i < itemsToShow) return child\n return null\n })\n }\n\n filter = memoize((children) => this.filterChildren(children))\n\n render() {\n const { title, seeAllUrl, children } = this.props\n\n if (!children){\n return null\n }\n\n let filteredChildren = null\n\n if(this.forceRender){\n this.forceRender = false\n filteredChildren = this.filterChildren(children)\n }\n else{\n filteredChildren = this.filter(children)\n }\n\n const showSeeAll = seeAllUrl && React.Children.count(filteredChildren) < React.Children.count(children)\n\n return (\n <div className=\"gallery\" ref={(ref)=>{this.gallery = ref}}>\n <div className=\"top\">\n {\n title && <div className='main-title'>{title}</div>\n }\n {\n showSeeAll &&\n <Link className=\"see-all\" to={seeAllUrl}>{t('Gallery.See_all_products')}</Link>\n }\n </div>\n <div className=\"main\">\n { filteredChildren }\n </div>\n {\n showSeeAll &&\n <div className=\"bottom\">\n <Link className=\"button-secondary\" to={seeAllUrl}>{t('Gallery.See_all_products')}</Link>\n </div>\n }\n </div>\n )\n }\n}\n\nexport default Gallery\n","import React, {useEffect} from 'react'\n\nexport const Icon = ({ name, width, height, size, wrapperClassName, className, title, ...args }) => {\n const [importedIcon, setImportedIcon] = React.useState(null)\n const w = width || size\n const h = height || size\n\n useEffect(() => {\n const setCssClass = () => {\n // adding className to all <g> and <path> nodes under svg to allow stroke coloring\n if (document.querySelectorAll(`svg.${className}`).length) {\n document.querySelectorAll(`svg.${className}`).forEach((svg) => {\n svg.querySelectorAll('g').forEach((element) =>\n element.classList.add(className)\n )\n svg.querySelectorAll('path').forEach((element) =>\n element.classList.add(className)\n )\n })\n }\n }\n\n const importIcon = async () => {\n const { ReactComponent } = await import(`$assets/icons/${name}`)\n setImportedIcon(<ReactComponent width={w} height={h} className={className} title={title} {...args} />)\n }\n importIcon()\n setCssClass()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [name, width, height, className, title])\n\n if (!name || (!size && (!height || !width))) {\n return null\n }\n\n return (\n <div\n className={`icon icon-holder${wrapperClassName ? ` ${wrapperClassName}` : ''}`}\n style={{ width: `${w}`, height: `${h}`, 'backgroundSize': `${w} ${h}` }}\n >\n {importedIcon ? importedIcon : null}\n </div>\n )\n}\n\nexport default Icon\n","import React, { useEffect, useRef, useState } from 'react'\nimport './ImageLoader.scss'\nimport { debounce } from 'throttle-debounce'\n\nconst ImageLoader = ({\n zoomAllowed = false,\n className,\n src,\n setShowLoading,\n onClick = () => {},\n onMouseLeave = () => {},\n onDoubleClick = () => {},\n onMouseEnter = () => {},\n onMouseMove = () => {},\n}) => {\n const image = useRef()\n const [isLoaded, setIsLoaded] = useState(false)\n useEffect(() => {\n const img = image.current\n if (img && img.complete) {\n imageOnLoad()\n }\n window.addEventListener('resize', imageOnLoad)\n return () => window.removeEventListener('resize', imageOnLoad)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const imageOnLoad = debounce(50, () => {\n const img = image.current\n setIsLoaded(true)\n setShowLoading && setShowLoading(false)\n if (img) {\n const isKitItemList = img.parentElement.closest('.item-image')\n const isMultiThumbs = img.parentElement.closest('.multi-carousel-image')\n img.classList.remove('hide')\n let container = img.parentElement.closest('.mobile-approval-preview') ||\n img.parentElement.closest('.carousel-root') ||\n img.parentElement.closest('.carousel-slider') ||\n img.parentElement.closest('.image-wrapper') ||\n img.parentElement.closest('.image-loader')\n\n const borderWidth = parseInt(getComputedStyle(img).borderWidth, 10) * 2\n let adjustedContainerWidth = container.offsetWidth - borderWidth\n let adjustedContainerHeight = container.offsetHeight - borderWidth\n\n while (adjustedContainerWidth <= 0 || adjustedContainerHeight <= 0) {\n container = container.parentElement\n adjustedContainerWidth = container.offsetWidth - borderWidth\n adjustedContainerHeight = container.offsetHeight - borderWidth\n }\n const isMobileProofPreview = container.classList.contains('mobile-approval-preview')\n const paddingCorrection = isKitItemList ? 6 : isMultiThumbs ? 0 : (isMobileProofPreview ? 110 : 40)\n if (img.naturalWidth / img.naturalHeight > adjustedContainerWidth / adjustedContainerHeight) {\n img.style.width = `${adjustedContainerWidth - paddingCorrection}px`\n img.style.height = 'auto'\n } else {\n img.style.width = 'auto'\n img.style.height = `${adjustedContainerHeight - paddingCorrection}px`\n }\n }\n })\n\n const imageOnError = () => {\n const imageElem = image.current\n if (imageElem) {\n imageElem.src = require(`$assets/images/default.png`)\n imageElem.classList.remove('hide')\n imageElem.classList.add('show')\n imageElem.previousSibling.classList.remove('show')\n imageElem.previousSibling.classList.add('hide')\n }\n }\n\n return (\n <div className={`image-loader ${className ? className : ''}`}\n {...{onClick, onDoubleClick, onMouseLeave, onMouseEnter, onMouseMove}}>\n {!isLoaded && <div className=\"animated loading\"/>}\n <div className={'inner-image-wrapper'}>\n <img\n style={{ display: isLoaded ? 'block' : 'none' }}\n alt=\"\"\n ref={image}\n src={src}\n onError={imageOnError}\n onLoad={imageOnLoad}\n className=\"hide\"\n />\n </div>\n </div>\n )\n}\n\nexport default ImageLoader\n","import { useEffect, useRef, useState } from 'react'\nimport { ImageLoader } from '$core-components'\nimport './ImageZoom.scss'\n\nconst ImageZoom = ({ src, onImageZoomed, isStretched = false }) => {\n const wrapper = useRef(null)\n const img = src || require(`$assets/images/default.png`)\n\n const [zoomed, setZoomed] = useState(false)\n const [backgroundPosition, setBackgroundPosition] = useState('50% 50%')\n const [backgroundSize, setBackgroundSize] = useState('50% 50%')\n const [zoomAllowed, setZoomAllowed] = useState({ x: false, y: false })\n\n const checkIfZoomAllowed = () => {\n const { offsetWidth, offsetHeight } = wrapper.current\n if (offsetWidth !== 0 && offsetHeight !== 0) {\n const img = wrapper.current.querySelector('img')\n const { naturalWidth: imgWidth, naturalHeight: imgHeight } = img\n\n setZoomAllowed({ x: imgWidth > offsetWidth, y: imgHeight > offsetHeight })\n }\n }\n\n useEffect(() => {\n onImageZoomed && onImageZoomed(zoomed)\n // eslint-disable-next-line\n }, [zoomed])\n\n const mouseMoveHandler = (e) => {\n if (!zoomed) {\n return\n }\n\n const zoom = e.currentTarget\n const { offsetX, offsetY } = e.nativeEvent\n const x = zoomAllowed.x ? offsetX / zoom.offsetWidth * 100 : 50\n const y = zoomAllowed.y ? offsetY / zoom.offsetHeight * 100 : 50\n setBackgroundPosition(`${x}% ${y}%`)\n }\n\n const triggerZoomed = () => {\n if (zoomAllowed.x || zoomAllowed.y) {\n if (!zoomed) {\n const { naturalHeight, naturalWidth } = wrapper.current.querySelector('img')\n setBackgroundSize(`${naturalWidth}px ${naturalHeight}px`)\n }\n\n setZoomed(prev => !prev)\n }\n }\n\n const canBeZoomed = zoomAllowed.x || zoomAllowed.y\n return (\n <div\n onMouseOver={checkIfZoomAllowed}\n onLoad={checkIfZoomAllowed}\n className={`img-zoomed-wrapper${zoomed ? ' cursor-scroll' : ''}${canBeZoomed ? ' zoom' : ''}`}\n ref={wrapper}\n onClick={triggerZoomed}\n onMouseLeave={() => {\n setZoomed(false)\n }}\n >\n <ImageLoader className={`image ${!zoomed ? 'opacity-1' : 'opacity-0'}`} src={img} isStretched={isStretched} />\n <div\n onMouseMove={mouseMoveHandler}\n onLoad={mouseMoveHandler.bind(this, { offsetWidth: 0.5, offsetHeight: 0.5 })}\n className={`img-zoomed ${zoomed ? 'opacity-1' : 'opacity-0'}`}\n style={{\n backgroundImage: `url(${img})`,\n backgroundSize,\n backgroundPosition,\n backgroundRepeat: 'no-repeat'\n }}\n />\n </div>\n )\n}\n\nexport default ImageZoom\n","import React, { Component } from 'react'\nimport { Carousel, CarouselItem, CarouselIndicators } from 'reactstrap'\nimport { Swipeable } from '$core-components'\nimport ImageLoader from './ImageLoader'\nimport ImageZoom from './ImageZoom'\nimport './ImageCarousel.scss'\n\n/**\n * @function ImageCarousel - a component which displays an array of items (childrens)\n *\n * @param {number} [activeSlide] - The index of the active slide\n * @param {array} images - The list of image urls\n * @param {callback} onChange(index) - a callback for when image changed\n * @param {boolean} zoom - a boolean to decide if zoom is allowed or not (default = true)\n */\n\nclass ImageCarousel extends Component {\n constructor(props) {\n super(props)\n const { activeSlide } = props\n\n this.state = {\n activeSlide: activeSlide !== undefined ? activeSlide : 0\n }\n }\n\n onExiting = () => {\n this.animating = true\n }\n\n onExited = () => {\n this.animating = false\n }\n\n next = () => {\n const { onChange, images } = this.props\n const { activeSlide } = this.state\n\n if (this.animating) return\n const nextIndex = activeSlide === images.length - 1 ? 0 : activeSlide + 1\n this.setState({ activeSlide: nextIndex })\n onChange && onChange(nextIndex)\n }\n\n previous = () => {\n const { onChange, images } = this.props\n\n if (this.animating) return\n const nextIndex = this.state.activeSlide === 0 ? images.length - 1 : this.state.activeSlide - 1\n this.setState({ activeSlide: nextIndex })\n onChange && onChange(nextIndex)\n }\n\n goToIndex = (newIndex) => {\n const { onChange } = this.props\n\n if (this.animating) return\n this.setState({ activeSlide: newIndex })\n onChange && onChange(newIndex)\n }\n\n render() {\n\n const { images, zoom } = this.props\n\n if (!images || images.length === 0) return null\n\n const imageArray = images.map((item) => {\n return { src: item }\n })\n\n const slides = images.map((image, index) => {\n return <CarouselItem\n key={image}\n onExiting={this.onExiting}\n onExited={this.onExited}\n >\n <div className='img-wrapper'>\n {zoom === undefined || zoom ?\n <ImageZoom>\n <ImageLoader className='image' src={image} />\n </ImageZoom>\n :\n <ImageLoader className='image' src={image} />\n }\n </div>\n </CarouselItem>\n })\n\n return <div className='imageCarousel-component'>\n <div className='carousel-arrows'>\n {imageArray.length > 1 && <span className='arrows left-arrow' onClick={this.previous}>‹</span>}\n <div className='images-wrapper'>\n <div className='imageCarousel carousel-fade'>\n <Swipeable\n trackMouse\n preventDefaultTouchmoveEvent\n onSwipedLeft={() => imageArray.length > 1 && this.next()}\n onSwipedRight={() => imageArray.length > 1 && this.previous()}\n >\n <Carousel\n activeIndex={this.state.activeSlide}\n next={this.next}\n previous={this.previous}\n interval={false}\n >\n {slides}\n </Carousel>\n </Swipeable>\n </div>\n </div>\n\n {imageArray.length > 1 && <span className='arrows right-arrow' onClick={this.next}>›</span>}\n </div>\n <div className='carousel-indicators'>\n {imageArray.length > 1 &&\n <CarouselIndicators items={imageArray} activeIndex={this.state.activeSlide} onClickHandler={this.goToIndex} />}\n </div>\n </div>\n }\n}\n\nexport default ImageCarousel\n\n","import React from 'react'\nimport './RadioGroup.scss'\n\n// option:\n// {\n// value: string\n// label: string\n// }\n\nconst RadioGroup = (props) => {\n const { className, groupName, options, selectedValue, onChange } = props\n\n if (!options || options.length === 0 || !groupName) {\n return null\n }\n\n return <div className={`${className} radio-group`} tabIndex=\"-1\">\n {\n options.map((opt) => {\n const isSelected = opt.value === selectedValue\n return <label key={opt.value} className=\"radio-button\" tabIndex=\"-1\">\n <input key={`input_${opt.value}`} type=\"radio\" data-qaautomationinfo={opt.value} data-isselected={isSelected}\n checked={isSelected} name={groupName} onChange={onChange.bind(this, opt.value, opt)} id={opt.id}/>\n <span className=\"radio-checkmark\"/>\n {opt.label}\n </label>\n })\n }\n </div>\n}\n\nexport default RadioGroup\n","/**\n * @function Gallery - a component which displays an array of items (childrens)\n *\n * @param {String} [title] - The main title at the top of the component\n * @param {Function} onScroll - The callback function to call for loading more items on scroll\n * @param (Boolean) [hasMoreItems] - True if the gallery has more items o show on scroll, false otherwise\n * @param {Component} children - The children components\n */\n\nimport React, { Component } from 'react'\nimport InfiniteScroll from 'react-infinite-scroller'\nimport './Gallery.scss'\n\nclass ScrollableGallery extends Component {\n render () {\n const { title, onScroll, hasMoreItems, children } = this.props\n\n if (!onScroll || !children) {\n return null\n }\n\n return (\n <div className=\"gallery\">\n <div className=\"top\">\n {\n title && <div className='main-title scrollable-title'>{title}</div>\n }\n </div>\n <InfiniteScroll\n className=\"main\"\n loadMore={onScroll}\n hasMore={hasMoreItems}\n initialLoad={false}>\n {children}\n </InfiniteScroll>\n </div>\n )\n }\n}\n\nexport default ScrollableGallery\n","/**\n * @function Slider - a component which displays items in a circular way\n *\n * @param {boolean} multi - defined: multiple items in a page, not-defined: single item\n * @param {Component} children - The children components\n */\n\nimport React, { Component } from 'react'\nimport { Swipeable } from '$core-components'\nimport { throttle } from 'throttle-debounce'\nimport Icon from './Icon'\nimport './Slider.scss'\n\n/**\n * Direction mapping for the react-swipeable library\n */\nconst RIGHT = '-1'\nconst LEFT = '+1'\n\n/**\n * Transition speed\n */\nconst TRANSITION_SPEED = 500\n\n/**\n * arrows consts\n */\nconst ARROW_MARGIN = 20\nconst ARROW_WIDTH = 30\nconst ARROW_HEIGHT = 30\n\nclass Slider extends Component {\n constructor (props) {\n super(props)\n\n this.slider = React.createRef()\n\n this.state = {\n children: [], // Holds a copy of each item\n childrenLength: 0, // Number of items\n currentPosition: 0, // Current \"left\" value of the slider\n currentPage: 0, // Current page\n displayedItems: 0, // Number of items in a page\n lastClonedItemRight: null, // Index (children) of the last item on the right section\n lastClonedItemLeft: null, // Index (children) of the last item on the left section\n lastItemWidth: null // Used to check if there was a change in breakpoint\n }\n\n this.arrowsActive = true\n }\n\n componentDidMount () {\n // Some initializations code\n this.setInitState()\n\n // On screen resizing\n window.addEventListener('resize', () => {\n this.onResize()\n })\n\n throttle(250, this.onResize)\n throttle(250, this.slide)\n }\n\n componentWillUnmount () {\n window.removeEventListener('resize', this.onResize)\n }\n\n onResize () {\n const { multi } = this.props\n\n if (!this.slider || !this.state || !multi || !this.arrowsActive) {\n return\n }\n\n const children = this.slider.childNodes\n const displayedItems = Math.round(this.slider.clientWidth / children[0].clientWidth)\n\n const lastItemWidth = this.state.lastItemWidth\n let addPosition = 0\n\n if (lastItemWidth !== children[0].clientWidth) {\n if (lastItemWidth > children[0].clientWidth) {\n addPosition -= children[0].clientWidth\n } else {\n addPosition += children[0].clientWidth\n }\n }\n\n const currentPosition = -this.slider.clientWidth + addPosition\n this.slider.style.left = `${currentPosition}px`\n\n this.setState({\n currentPosition,\n displayedItems,\n lastItemWidth\n })\n }\n\n setButtons () {\n if (this.slider && this.slider.parentNode) {\n const sliderClientWidth = this.slider.clientWidth\n\n const leftBtn = this.slider.parentNode.querySelector(`.left-btn`)\n const rightBtn = this.slider.parentNode.querySelector(`.right-btn`)\n\n if (leftBtn && rightBtn) {\n if (this.arrowsActive) {\n leftBtn.style.visibility = 'visible'\n rightBtn.style.visibility = 'visible'\n rightBtn.style.left = `${sliderClientWidth - ARROW_WIDTH - ARROW_MARGIN}px`\n } else {\n leftBtn.style.visibility = 'hidden'\n rightBtn.style.visibility = 'hidden'\n }\n }\n }\n }\n\n setInitState () {\n if (!(this.slider && this.slider.childNodes)) {\n return\n }\n\n const children = this.slider.childNodes\n const itemsInRow = this.getItemsInRow() || 1\n const clonedNodes = []\n const childrenLength = this.state.childrenLength || children.length\n\n this.setState({\n childrenLength\n })\n\n // On init (componentDidMount) - Clone all children\n if (this.state.children.length === 0) {\n for (let i = 0; i < childrenLength; i++) {\n clonedNodes.push(children[i].cloneNode(true))\n }\n this.setState({\n children: clonedNodes\n })\n }\n // On Resize - clear slider, fill with children, set left to position zero\n else {\n this.slider.innerHTML = ''\n\n for (let i = 0; i < this.state.children.length; i++) {\n this.slider.appendChild(this.state.children[i])\n }\n\n this.slider.style.left = '0px'\n }\n\n if (childrenLength <= itemsInRow) {\n this.slider.style.justifyContent = 'center'\n this.arrowsActive = false\n return\n }\n\n this.arrowsActive = true\n\n // Calculate number of items in a row\n const displayedItems = Math.round(this.slider.clientWidth / children[0].clientWidth)\n\n this.setState({\n displayedItems,\n lastItemWidth: children[0].clientWidth\n })\n\n this.createInitRightSection(displayedItems, clonedNodes)\n this.createInitLeftSection(displayedItems, clonedNodes)\n this.setSliderPosition(true, false, displayedItems)\n this.setDotsPosition()\n this.initDots(childrenLength)\n }\n\n createInitRightSection (displayedItems, children) {\n const clonedNodesToAppend = []\n\n // Clone all first items that need to filled the gap of items per row\n const itemsTofill = displayedItems - children.length % displayedItems\n\n for (let i = 0; i < itemsTofill; i++) {\n if (!children[i]) {\n continue\n }\n\n clonedNodesToAppend.push(children[i].cloneNode(true))\n\n if (i === itemsTofill - 1) {\n this.setState({\n lastClonedItemRight: i\n })\n }\n }\n\n // Append the clonedNodesToAppend after the last item\n for (let i = 0; i < clonedNodesToAppend.length; i++) {\n this.slider.append(clonedNodesToAppend[i])\n }\n }\n\n createInitLeftSection (displayedItems, children) {\n const clonedNodesToPrepend = []\n\n // Clone all last items per row child nodes\n let j = displayedItems\n for (let i = children.length - 1; i >= 0; i--) {\n clonedNodesToPrepend.push(children[i].cloneNode(true))\n j--\n if (j === 0) {\n this.setState({\n lastClonedItemLeft: i\n })\n break\n }\n }\n\n // Prepend the clonedNodesToPrepend before the first item\n for (let i = 0; i < clonedNodesToPrepend.length; i++) {\n const firstItem = this.slider.firstChild\n this.slider.insertBefore(clonedNodesToPrepend[i], firstItem)\n }\n }\n\n reorderItems (isForward) {\n let lastClonedItem = (isForward) ? this.state.lastClonedItemRight : this.state.lastClonedItemLeft\n\n if (lastClonedItem === null) {\n return\n }\n\n if (isForward) {\n const clonedNodesToAppend = []\n let j = lastClonedItem + 1\n\n // Clone all items of the next row\n for (let i = 0; i < this.state.displayedItems; i++) {\n if (j === this.state.children.length) {\n j = 0\n }\n clonedNodesToAppend.push(this.state.children[j].cloneNode(true))\n\n if (i === this.state.displayedItems - 1) {\n this.setState({\n lastClonedItemRight: j\n })\n lastClonedItem = j\n }\n j++\n }\n\n // Append the clonedNodesToAppend after the last item\n for (let i = 0; i < clonedNodesToAppend.length; i++) {\n this.slider.append(clonedNodesToAppend[i])\n }\n\n // Remove trailing row\n for (let i = 0; i < this.state.displayedItems; i++) {\n this.slider.childNodes[0].remove()\n }\n\n // Find the last left cloned item\n j = lastClonedItem - 1\n for (let i = 0; i < this.state.displayedItems; i++) {\n if (j === -1) {\n j = this.state.children.length - 1\n }\n\n if (i === this.state.displayedItems - 1) {\n this.setState({\n lastClonedItemLeft: j\n })\n }\n j--\n }\n\n this.setSliderPosition(false, false, this.state.displayedItems)\n } else {\n const children = this.slider.childNodes\n const clonedNodesToPrepend = []\n let j = lastClonedItem - 1\n\n // Clone all items of the next row\n for (let i = 0; i < this.state.displayedItems; i++) {\n if (j === -1) {\n j = this.state.children.length - 1\n }\n\n clonedNodesToPrepend.push(this.state.children[j].cloneNode(true))\n\n if (i === this.state.displayedItems - 1) {\n this.setState({\n lastClonedItemLeft: j\n })\n lastClonedItem = j\n }\n j--\n }\n\n // Append the clonedNodesToPrepend after the last item\n for (let i = 0; i < clonedNodesToPrepend.length; i++) {\n const firstItem = children[0]\n this.slider.insertBefore(clonedNodesToPrepend[i], firstItem)\n }\n\n // Remove last row\n for (let i = 0; i < this.state.displayedItems; i++) {\n this.slider.childNodes[this.slider.childNodes.length - 1].remove()\n }\n\n // Find the last right cloned item\n j = lastClonedItem + 1\n for (let i = 0; i < this.state.displayedItems; i++) {\n if (j === this.state.children.length) {\n j = 0\n }\n\n if (i === this.state.displayedItems - 1) {\n this.setState({\n lastClonedItemRight: j\n })\n }\n j++\n }\n\n this.setSliderPosition(true, false, this.state.displayedItems)\n }\n }\n\n setSliderPosition (isForward, isTransition, displayedItems) {\n const itemWidth = this.slider.childNodes[0].clientWidth\n const sliderWidth = displayedItems * itemWidth\n let currentPosition = this.state.currentPosition\n\n if (isForward) {\n currentPosition -= sliderWidth\n } else {\n currentPosition += sliderWidth\n }\n\n if (isTransition) {\n this.slider.style.transition = `left ${TRANSITION_SPEED}ms`\n } else {\n this.slider.style.transition = `none`\n }\n\n const left = `${currentPosition}px`\n this.slider.style.left = left\n\n this.setState({\n currentPosition\n })\n }\n\n slide (isForward, isReorder) {\n if (!this.arrowsActive) {\n return\n }\n\n this.setSliderPosition(isForward, true, this.state.displayedItems)\n\n setTimeout(() => {\n if (isReorder) {\n this.reorderItems(isForward)\n }\n }, TRANSITION_SPEED)\n\n this.setActiveDot(isForward)\n }\n\n setDotsPosition () {\n const dots = this.slider.parentNode.querySelector(`div.dots`)\n if (!dots) {\n return\n }\n dots.style.top = '-100px'\n }\n\n initDots (childrenLength) {\n const dots = this.slider.parentNode.querySelector(`div.dots`)\n if (!dots) { return }\n\n dots.innerHTML = ''\n\n for (let i = 0; i < childrenLength; i++) {\n const dot = document.createElement('div')\n dot.className = 'dot'\n dots.appendChild(dot)\n }\n\n dots.childNodes[0].setAttribute('class', 'dot active')\n }\n\n setActiveDot (isForward) {\n const dots = this.slider.parentNode.querySelector(`div.dots`)\n if (!dots) {\n return\n }\n\n let currentPage = this.state.currentPage\n const childrenLength = this.state.childrenLength\n\n if (isForward) {\n currentPage += 1\n if (currentPage === childrenLength) {\n currentPage = 0\n }\n } else {\n currentPage -= 1\n if (currentPage === -1) {\n currentPage = childrenLength - 1\n }\n }\n\n this.setState({\n currentPage\n })\n\n for (let i = 0; i < dots.childNodes.length; i++) {\n dots.childNodes[i].setAttribute('class', 'dot')\n }\n dots.childNodes[currentPage].setAttribute('class', 'dot active')\n }\n\n getCssContent (key) {\n let content = window.getComputedStyle(this.slider, ':after').getPropertyValue('content')\n content = content.replace(new RegExp('\"', 'g'), '').replace(new RegExp('`', 'g'), '\"')\n\n if (content === 'none') {\n return null\n }\n\n try {\n content = JSON.parse(content)\n return content[key]\n } catch (e) {\n console.error(e)\n }\n }\n\n getItemsInRow () {\n return this.getCssContent('items')\n }\n\n onSwiped (direction) {\n const isForward = direction !== RIGHT\n this.slide(isForward, true)\n }\n\n render () {\n const { children, multi } = this.props\n\n if (!children) {\n return null\n }\n\n this.setButtons()\n\n return (\n <Swipeable\n trackMouse\n preventDefaultTouchmoveEvent\n onSwipedLeft={() => children.length > 1 && this.onSwiped(LEFT)}\n onSwipedRight={() => children.length > 1 && this.onSwiped(RIGHT)}\n >\n <div className={`slider-wrapper${multi ? '-multi' : '-single'}`}>\n <div className=\"slider\" ref={(ref) => { this.slider = ref }}>\n {children}\n </div>\n <div className=\"arrows left-btn\" onClick={this.slide.bind(this, false, true)}>\n <Icon name=\"arrow.svg\" width={`${ARROW_WIDTH}px`} height={`${ARROW_HEIGHT}px`} className=\"left-arrow-icon\" />\n </div>\n <div className=\"arrows right-btn\" onClick={this.slide.bind(this, true, true)}>\n <Icon name=\"arrow.svg\" width={`${ARROW_WIDTH}px`} height={`${ARROW_HEIGHT}px`} className=\"right-arrow-icon\" />\n </div>\n {!multi && <div className=\"dots\" />}\n </div>\n </Swipeable>\n )\n }\n}\n\nexport default Slider\n","import { useRef } from 'react'\nimport './Tooltip.scss'\n\nconst Tooltip = (props) => {\n const { text, className, placement, arrow, maxLine } = props\n const elementRef = useRef()\n const titleRef = useRef()\n\n const isTargetElement = elementRef.current && (titleRef.current.offsetHeight < titleRef.current.scrollHeight)\n\n return (\n <div\n ref={elementRef}\n className={`defaultStylesTooltip ${className} placement-${placement}`}\n >\n <div className={`tooltip-title lines-${maxLine}`} ref={titleRef} dangerouslySetInnerHTML={ { __html: text } }/>\n {isTargetElement && <div className='tooltip-text' ref={elementRef}>\n <span className={`arrow-${arrow}`}/>\n {text}\n </div>}\n </div>\n )\n}\n\nTooltip.defaultProps = {\n text: '',\n className: '',\n placement: 'top',\n arrow: true,\n maxLine: 2\n}\n\nexport default Tooltip\n","import * as React from \"react\";\n\nexport const LEFT = \"Left\";\nexport const RIGHT = \"Right\";\nexport const UP = \"Up\";\nexport const DOWN = \"Down\";\nexport type HandledEvents = React.MouseEvent | TouchEvent | MouseEvent;\nexport type Vector2 = [number, number];\nexport type SwipeDirections =\n | typeof LEFT\n | typeof RIGHT\n | typeof UP\n | typeof DOWN;\nexport interface SwipeEventData {\n /**\n * Absolute displacement of swipe in x. Math.abs(deltaX);\n */\n absX: number;\n /**\n * Absolute displacement of swipe in y. Math.abs(deltaY);\n */\n absY: number;\n /**\n * Displacement of swipe in x. (current.x - initial.x)\n */\n deltaX: number;\n /**\n * Displacement of swipe in y. (current.y - initial.y)\n */\n deltaY: number;\n /**\n * Direction of swipe - Left | Right | Up | Down\n */\n dir: SwipeDirections;\n /**\n * Source event.\n */\n event: HandledEvents;\n /**\n * True for the first event of a tracked swipe.\n */\n first: boolean;\n /**\n * Location where swipe started - [x, y].\n */\n initial: Vector2;\n /**\n * \"Absolute velocity\" (speed) - √(absX^2 + absY^2) / time\n */\n velocity: number;\n /**\n * Velocity per axis - [ deltaX/time, deltaY/time ]\n */\n vxvy: Vector2;\n}\n\nexport type SwipeCallback = (eventData: SwipeEventData) => void;\nexport type TapCallback = ({ event }: { event: HandledEvents }) => void;\n\nexport type SwipeableDirectionCallbacks = {\n /**\n * Called after a DOWN swipe\n */\n onSwipedDown: SwipeCallback;\n /**\n * Called after a LEFT swipe\n */\n onSwipedLeft: SwipeCallback;\n /**\n * Called after a RIGHT swipe\n */\n onSwipedRight: SwipeCallback;\n /**\n * Called after a UP swipe\n */\n onSwipedUp: SwipeCallback;\n};\n\nexport type SwipeableCallbacks = SwipeableDirectionCallbacks & {\n /**\n * Called at start of a tracked swipe.\n */\n onSwipeStart: SwipeCallback;\n /**\n * Called after any swipe.\n */\n onSwiped: SwipeCallback;\n /**\n * Called for each move event during a tracked swipe.\n */\n onSwiping: SwipeCallback;\n /**\n * Called after a tap. A touch under the min distance, `delta`.\n */\n onTap: TapCallback;\n /**\n * Called for `touchstart` and `mousedown`.\n */\n onTouchStartOrOnMouseDown: TapCallback;\n /**\n * Called for `touchend` and `mouseup`.\n */\n onTouchEndOrOnMouseUp: TapCallback;\n};\n\n// Configuration Options\nexport type ConfigurationOptionDelta =\n | number\n | { [key in Lowercase<SwipeDirections>]?: number };\n\nexport interface ConfigurationOptions {\n /**\n * Min distance(px) before a swipe starts. **Default**: `10`\n */\n delta: ConfigurationOptionDelta;\n /**\n * Prevents scroll during swipe in most cases. **Default**: `false`\n */\n preventScrollOnSwipe: boolean;\n /**\n * Set a rotation angle. **Default**: `0`\n */\n rotationAngle: number;\n /**\n * Track mouse input. **Default**: `false`\n */\n trackMouse: boolean;\n /**\n * Track touch input. **Default**: `true`\n */\n trackTouch: boolean;\n /**\n * Allowable duration of a swipe (ms). **Default**: `Infinity`\n */\n swipeDuration: number;\n /**\n * Options for touch event listeners\n */\n touchEventOptions: { passive: boolean };\n}\n\nexport type SwipeableProps = Partial<SwipeableCallbacks & ConfigurationOptions>;\n\nexport type SwipeablePropsWithDefaultOptions = Partial<SwipeableCallbacks> &\n ConfigurationOptions;\n\nexport interface SwipeableHandlers {\n ref(element: HTMLElement | null): void;\n onMouseDown?(event: React.MouseEvent): void;\n}\n\nexport type SwipeableState = {\n cleanUpTouch?: () => void;\n el?: HTMLElement;\n eventData?: SwipeEventData;\n first: boolean;\n initial: Vector2;\n start: number;\n swiping: boolean;\n xy: Vector2;\n};\n\nexport type StateSetter = (\n state: SwipeableState,\n props: SwipeablePropsWithDefaultOptions\n) => SwipeableState;\nexport type Setter = (stateSetter: StateSetter) => void;\nexport type AttachTouch = (\n el: HTMLElement,\n props: SwipeablePropsWithDefaultOptions\n) => () => void;\n","/* global document */\nimport * as React from \"react\";\nimport {\n AttachTouch,\n SwipeDirections,\n DOWN,\n SwipeEventData,\n HandledEvents,\n LEFT,\n RIGHT,\n Setter,\n ConfigurationOptions,\n SwipeableDirectionCallbacks,\n SwipeableHandlers,\n SwipeableProps,\n SwipeablePropsWithDefaultOptions,\n SwipeableState,\n SwipeCallback,\n TapCallback,\n UP,\n Vector2,\n} from \"./types\";\n\nexport {\n LEFT,\n RIGHT,\n UP,\n DOWN,\n SwipeDirections,\n SwipeEventData,\n SwipeableDirectionCallbacks,\n SwipeCallback,\n TapCallback,\n SwipeableHandlers,\n SwipeableProps,\n Vector2,\n};\n\nconst defaultProps: ConfigurationOptions = {\n delta: 10,\n preventScrollOnSwipe: false,\n rotationAngle: 0,\n trackMouse: false,\n trackTouch: true,\n swipeDuration: Infinity,\n touchEventOptions: { passive: true },\n};\nconst initialState: SwipeableState = {\n first: true,\n initial: [0, 0],\n start: 0,\n swiping: false,\n xy: [0, 0],\n};\nconst mouseMove = \"mousemove\";\nconst mouseUp = \"mouseup\";\nconst touchEnd = \"touchend\";\nconst touchMove = \"touchmove\";\nconst touchStart = \"touchstart\";\n\nfunction getDirection(\n absX: number,\n absY: number,\n deltaX: number,\n deltaY: number\n): SwipeDirections {\n if (absX > absY) {\n if (deltaX > 0) {\n return RIGHT;\n }\n return LEFT;\n } else if (deltaY > 0) {\n return DOWN;\n }\n return UP;\n}\n\nfunction rotateXYByAngle(pos: Vector2, angle: number): Vector2 {\n if (angle === 0) return pos;\n const angleInRadians = (Math.PI / 180) * angle;\n const x =\n pos[0] * Math.cos(angleInRadians) + pos[1] * Math.sin(angleInRadians);\n const y =\n pos[1] * Math.cos(angleInRadians) - pos[0] * Math.sin(angleInRadians);\n return [x, y];\n}\n\nfunction getHandlers(\n set: Setter,\n handlerProps: { trackMouse: boolean | undefined }\n): [\n {\n ref: (element: HTMLElement | null) => void;\n onMouseDown?: (event: React.MouseEvent) => void;\n },\n AttachTouch\n] {\n const onStart = (event: HandledEvents) => {\n const isTouch = \"touches\" in event;\n // if more than a single touch don't track, for now...\n if (isTouch && event.touches.length > 1) return;\n\n set((state, props) => {\n // setup mouse listeners on document to track swipe since swipe can leave container\n if (props.trackMouse && !isTouch) {\n document.addEventListener(mouseMove, onMove);\n document.addEventListener(mouseUp, onUp);\n }\n const { clientX, clientY } = isTouch ? event.touches[0] : event;\n const xy = rotateXYByAngle([clientX, clientY], props.rotationAngle);\n\n props.onTouchStartOrOnMouseDown &&\n props.onTouchStartOrOnMouseDown({ event });\n\n return {\n ...state,\n ...initialState,\n initial: xy.slice() as Vector2,\n xy,\n start: event.timeStamp || 0,\n };\n });\n };\n\n const onMove = (event: HandledEvents) => {\n set((state, props) => {\n const isTouch = \"touches\" in event;\n // Discount a swipe if additional touches are present after\n // a swipe has started.\n if (isTouch && event.touches.length > 1) {\n return state;\n }\n\n // if swipe has exceeded duration stop tracking\n if (event.timeStamp - state.start > props.swipeDuration) {\n return state.swiping ? { ...state, swiping: false } : state;\n }\n\n const { clientX, clientY } = isTouch ? event.touches[0] : event;\n const [x, y] = rotateXYByAngle([clientX, clientY], props.rotationAngle);\n const deltaX = x - state.xy[0];\n const deltaY = y - state.xy[1];\n const absX = Math.abs(deltaX);\n const absY = Math.abs(deltaY);\n const time = (event.timeStamp || 0) - state.start;\n const velocity = Math.sqrt(absX * absX + absY * absY) / (time || 1);\n const vxvy: Vector2 = [deltaX / (time || 1), deltaY / (time || 1)];\n\n const dir = getDirection(absX, absY, deltaX, deltaY);\n\n // if swipe is under delta and we have not started to track a swipe: skip update\n const delta =\n typeof props.delta === \"number\"\n ? props.delta\n : props.delta[dir.toLowerCase() as Lowercase<SwipeDirections>] ||\n defaultProps.delta;\n if (absX < delta && absY < delta && !state.swiping) return state;\n\n const eventData = {\n absX,\n absY,\n deltaX,\n deltaY,\n dir,\n event,\n first: state.first,\n initial: state.initial,\n velocity,\n vxvy,\n };\n\n // call onSwipeStart if present and is first swipe event\n eventData.first && props.onSwipeStart && props.onSwipeStart(eventData);\n\n // call onSwiping if present\n props.onSwiping && props.onSwiping(eventData);\n\n // track if a swipe is cancelable (handler for swiping or swiped(dir) exists)\n // so we can call preventDefault if needed\n let cancelablePageSwipe = false;\n if (\n props.onSwiping ||\n props.onSwiped ||\n props[`onSwiped${dir}` as keyof SwipeableDirectionCallbacks]\n ) {\n cancelablePageSwipe = true;\n }\n\n if (\n cancelablePageSwipe &&\n props.preventScrollOnSwipe &&\n props.trackTouch &&\n event.cancelable\n ) {\n event.preventDefault();\n }\n\n return {\n ...state,\n // first is now always false\n first: false,\n eventData,\n swiping: true,\n };\n });\n };\n\n const onEnd = (event: HandledEvents) => {\n set((state, props) => {\n let eventData: SwipeEventData | undefined;\n if (state.swiping && state.eventData) {\n // if swipe is less than duration fire swiped callbacks\n if (event.timeStamp - state.start < props.swipeDuration) {\n eventData = { ...state.eventData, event };\n props.onSwiped && props.onSwiped(eventData);\n\n const onSwipedDir =\n props[\n `onSwiped${eventData.dir}` as keyof SwipeableDirectionCallbacks\n ];\n onSwipedDir && onSwipedDir(eventData);\n }\n } else {\n props.onTap && props.onTap({ event });\n }\n\n props.onTouchEndOrOnMouseUp && props.onTouchEndOrOnMouseUp({ event });\n\n return { ...state, ...initialState, eventData };\n });\n };\n\n const cleanUpMouse = () => {\n // safe to just call removeEventListener\n document.removeEventListener(mouseMove, onMove);\n document.removeEventListener(mouseUp, onUp);\n };\n\n const onUp = (e: HandledEvents) => {\n cleanUpMouse();\n onEnd(e);\n };\n\n /**\n * The value of passive on touchMove depends on `preventScrollOnSwipe`:\n * - true => { passive: false }\n * - false => { passive: true } // Default\n *\n * NOTE: When preventScrollOnSwipe is true, we attempt to call preventDefault to prevent scroll.\n *\n * props.touchEventOptions can also be set for all touch event listeners,\n * but for `touchmove` specifically when `preventScrollOnSwipe` it will\n * supersede and force passive to false.\n *\n */\n const attachTouch: AttachTouch = (el, props) => {\n let cleanup = () => {};\n if (el && el.addEventListener) {\n const baseOptions = {\n ...defaultProps.touchEventOptions,\n ...props.touchEventOptions,\n };\n // attach touch event listeners and handlers\n const tls: [\n typeof touchStart | typeof touchMove | typeof touchEnd,\n (e: HandledEvents) => void,\n { passive: boolean }\n ][] = [\n [touchStart, onStart, baseOptions],\n // preventScrollOnSwipe option supersedes touchEventOptions.passive\n [\n touchMove,\n onMove,\n {\n ...baseOptions,\n ...(props.preventScrollOnSwipe ? { passive: false } : {}),\n },\n ],\n [touchEnd, onEnd, baseOptions],\n ];\n tls.forEach(([e, h, o]) => el.addEventListener(e, h, o));\n // return properly scoped cleanup method for removing listeners, options not required\n cleanup = () => tls.forEach(([e, h]) => el.removeEventListener(e, h));\n }\n return cleanup;\n };\n\n const onRef = (el: HTMLElement | null) => {\n // \"inline\" ref functions are called twice on render, once with null then again with DOM element\n // ignore null here\n if (el === null) return;\n set((state, props) => {\n // if the same DOM el as previous just return state\n if (state.el === el) return state;\n\n const addState: { cleanUpTouch?: () => void } = {};\n // if new DOM el clean up old DOM and reset cleanUpTouch\n if (state.el && state.el !== el && state.cleanUpTouch) {\n state.cleanUpTouch();\n addState.cleanUpTouch = void 0;\n }\n // only attach if we want to track touch\n if (props.trackTouch && el) {\n addState.cleanUpTouch = attachTouch(el, props);\n }\n\n // store event attached DOM el for comparison, clean up, and re-attachment\n return { ...state, el, ...addState };\n });\n };\n\n // set ref callback to attach touch event listeners\n const output: { ref: typeof onRef; onMouseDown?: typeof onStart } = {\n ref: onRef,\n };\n\n // if track mouse attach mouse down listener\n if (handlerProps.trackMouse) {\n output.onMouseDown = onStart;\n }\n\n return [output, attachTouch];\n}\n\nfunction updateTransientState(\n state: SwipeableState,\n props: SwipeablePropsWithDefaultOptions,\n previousProps: SwipeablePropsWithDefaultOptions,\n attachTouch: AttachTouch\n) {\n // if trackTouch is off or there is no el, then remove handlers if necessary and exit\n if (!props.trackTouch || !state.el) {\n if (state.cleanUpTouch) {\n state.cleanUpTouch();\n }\n\n return {\n ...state,\n cleanUpTouch: undefined,\n };\n }\n\n // trackTouch is on, so if there are no handlers attached, attach them and exit\n if (!state.cleanUpTouch) {\n return {\n ...state,\n cleanUpTouch: attachTouch(state.el, props),\n };\n }\n\n // trackTouch is on and handlers are already attached, so if preventScrollOnSwipe changes value,\n // remove and reattach handlers (this is required to update the passive option when attaching\n // the handlers)\n if (\n props.preventScrollOnSwipe !== previousProps.preventScrollOnSwipe ||\n props.touchEventOptions.passive !== previousProps.touchEventOptions.passive\n ) {\n state.cleanUpTouch();\n\n return {\n ...state,\n cleanUpTouch: attachTouch(state.el, props),\n };\n }\n\n return state;\n}\n\nexport function useSwipeable(options: SwipeableProps): SwipeableHandlers {\n const { trackMouse } = options;\n const transientState = React.useRef({ ...initialState });\n const transientProps = React.useRef<SwipeablePropsWithDefaultOptions>({\n ...defaultProps,\n });\n\n // track previous rendered props\n const previousProps = React.useRef<SwipeablePropsWithDefaultOptions>({\n ...transientProps.current,\n });\n previousProps.current = { ...transientProps.current };\n\n // update current render props & defaults\n transientProps.current = {\n ...defaultProps,\n ...options,\n };\n // Force defaults for config properties\n let defaultKey: keyof ConfigurationOptions;\n for (defaultKey in defaultProps) {\n if (transientProps.current[defaultKey] === void 0) {\n (transientProps.current[defaultKey] as any) = defaultProps[defaultKey];\n }\n }\n\n const [handlers, attachTouch] = React.useMemo(\n () =>\n getHandlers(\n (stateSetter) =>\n (transientState.current = stateSetter(\n transientState.current,\n transientProps.current\n )),\n { trackMouse }\n ),\n [trackMouse]\n );\n\n transientState.current = updateTransientState(\n transientState.current,\n transientProps.current,\n previousProps.current,\n attachTouch\n );\n\n return handlers;\n}\n","import React from 'react'\nimport { useSwipeable } from 'react-swipeable'\n\nexport const Swipeable = ({children, ...props}) => {\n const handlers = useSwipeable(props)\n return (<div {...handlers}>{children}</div>)\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"Øدد عنصرًا\",\n \"tableResizer\": \"أداة تغيير الØجم\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"Изберете предмет\",\n \"tableResizer\": \"Преоразмерител\"\n}\n","{\n \"dropzoneLabel\": \"MÃsto pro pÅ™etaženÃ\",\n \"selectPlaceholder\": \"Vyberte položku\",\n \"tableResizer\": \"ZmÄ›na velikosti\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"Vælg et element\",\n \"tableResizer\": \"Størrelsesændring\"\n}\n","{\n \"dropzoneLabel\": \"Ablegebereich\",\n \"selectPlaceholder\": \"Element wählen\",\n \"tableResizer\": \"Größenanpassung\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"ΕπιλÎξτε Îνα αντικείμενο\",\n \"tableResizer\": \"Αλλαγή μεγÎθους\"\n}\n","{\n \"selectPlaceholder\": \"Select an item\",\n \"tableResizer\": \"Resizer\",\n \"dropzoneLabel\": \"DropZone\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"Seleccionar un artÃculo\",\n \"tableResizer\": \"Cambiador de tamaño\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"Valige üksus\",\n \"tableResizer\": \"Suuruse muutja\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"Valitse kohde\",\n \"tableResizer\": \"Koon muuttaja\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"Sélectionner un élément\",\n \"tableResizer\": \"Redimensionneur\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"בחר פריט\",\n \"tableResizer\": \"×©×™× ×•×™ גודל\"\n}\n","{\n \"dropzoneLabel\": \"Zona spuÅ¡tanja\",\n \"selectPlaceholder\": \"Odaberite stavku\",\n \"tableResizer\": \"Promjena veliÄine\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"Válasszon ki egy elemet\",\n \"tableResizer\": \"ÃtméretezÅ‘\"\n}\n","{\n \"dropzoneLabel\": \"Zona di rilascio\",\n \"selectPlaceholder\": \"Seleziona un elemento\",\n \"tableResizer\": \"Ridimensionamento\"\n}\n","{\n \"dropzoneLabel\": \"ドãƒãƒƒãƒ—ゾーン\",\n \"selectPlaceholder\": \"é …ç›®ã‚’é¸æŠž\",\n \"tableResizer\": \"サイズ変更ツール\"\n}\n","{\n \"dropzoneLabel\": \"ë“œë¡ ì˜ì—\",\n \"selectPlaceholder\": \"í•ëª© ì„ íƒ\",\n \"tableResizer\": \"í¬ê¸° ì¡°ì •ê¸°\"\n}\n","{\n \"dropzoneLabel\": \"„DropZone“\",\n \"selectPlaceholder\": \"Pasirinkite elementÄ…\",\n \"tableResizer\": \"Dydžio keitiklis\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"IzvÄ“lÄ“ties vienumu\",\n \"tableResizer\": \"IzmÄ“ra mainÄ«tÄjs\"\n}\n","{\n \"dropzoneLabel\": \"Droppsone\",\n \"selectPlaceholder\": \"Velg et element\",\n \"tableResizer\": \"Størrelsesendrer\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"Selecteer een item\",\n \"tableResizer\": \"Resizer\"\n}\n","{\n \"dropzoneLabel\": \"Strefa upuszczania\",\n \"selectPlaceholder\": \"Wybierz element\",\n \"tableResizer\": \"Zmiana rozmiaru\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"Selecione um item\",\n \"tableResizer\": \"Redimensionador\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"Selecione um item\",\n \"tableResizer\": \"Redimensionador\"\n}\n","{\n \"dropzoneLabel\": \"Zonă de plasare\",\n \"selectPlaceholder\": \"SelectaÈ›i un element\",\n \"tableResizer\": \"Instrument de redimensionare\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"Выберите Ñлемент\",\n \"tableResizer\": \"СредÑтво Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð°\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"Vyberte položku\",\n \"tableResizer\": \"Nástroj na zmenu veľkosti\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"Izberite element\",\n \"tableResizer\": \"Spreminjanje velikosti\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"Izaberite stavku\",\n \"tableResizer\": \"Promena veliÄine\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"Välj en artikel\",\n \"tableResizer\": \"Storleksändrare\"\n}\n","{\n \"dropzoneLabel\": \"Bırakma Bölgesi\",\n \"selectPlaceholder\": \"Bir öğe seçin\",\n \"tableResizer\": \"Yeniden boyutlandırıcı\"\n}\n","{\n \"dropzoneLabel\": \"DropZone\",\n \"selectPlaceholder\": \"Виберіть елемент\",\n \"tableResizer\": \"ЗаÑіб Ð·Ð¼Ñ–Ð½ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ\"\n}\n","{\n \"dropzoneLabel\": \"放置区域\",\n \"selectPlaceholder\": \"选择一个项目\",\n \"tableResizer\": \"尺寸调整器\"\n}\n","{\n \"dropzoneLabel\": \"放置å€\",\n \"selectPlaceholder\": \"é¸å–é …ç›®\",\n \"tableResizer\": \"大å°èª¿æ•´å™¨\"\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is\n// guarded by a check that it only runs on the client side.\n// eslint-disable-next-line rulesdir/useLayoutEffectRule\nimport React, {JSX, ReactNode, useContext, useLayoutEffect, useMemo, useRef, useState} from 'react';\n\n// To support SSR, the auto incrementing id counter is stored in a context. This allows\n// it to be reset on every request to ensure the client and server are consistent.\n// There is also a prefix string that is used to support async loading components\n// Each async boundary must be wrapped in an SSR provider, which appends to the prefix\n// and resets the current id counter. This ensures that async loaded components have\n// consistent ids regardless of the loading order.\ninterface SSRContextValue {\n prefix: string,\n current: number\n}\n\n// Default context value to use in case there is no SSRProvider. This is fine for\n// client-only apps. In order to support multiple copies of React Aria potentially\n// being on the page at once, the prefix is set to a random number. SSRProvider\n// will reset this to zero for consistency between server and client, so in the\n// SSR case multiple copies of React Aria is not supported.\nconst defaultContext: SSRContextValue = {\n prefix: String(Math.round(Math.random() * 10000000000)),\n current: 0\n};\n\nconst SSRContext = React.createContext<SSRContextValue>(defaultContext);\nconst IsSSRContext = React.createContext(false);\n\nexport interface SSRProviderProps {\n /** Your application here. */\n children: ReactNode\n}\n\n// This is only used in React < 18.\nfunction LegacySSRProvider(props: SSRProviderProps): JSX.Element {\n let cur = useContext(SSRContext);\n let counter = useCounter(cur === defaultContext);\n let [isSSR, setIsSSR] = useState(true);\n let value: SSRContextValue = useMemo(() => ({\n // If this is the first SSRProvider, start with an empty string prefix, otherwise\n // append and increment the counter.\n prefix: cur === defaultContext ? '' : `${cur.prefix}-${counter}`,\n current: 0\n }), [cur, counter]);\n\n // If on the client, and the component was initially server rendered,\n // then schedule a layout effect to update the component after hydration.\n if (typeof document !== 'undefined') {\n // This if statement technically breaks the rules of hooks, but is safe\n // because the condition never changes after mounting.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useLayoutEffect(() => {\n setIsSSR(false);\n }, []);\n }\n\n return (\n <SSRContext.Provider value={value}>\n <IsSSRContext.Provider value={isSSR}>\n {props.children}\n </IsSSRContext.Provider>\n </SSRContext.Provider>\n );\n}\n\nlet warnedAboutSSRProvider = false;\n\n/**\n * When using SSR with React Aria in React 16 or 17, applications must be wrapped in an SSRProvider.\n * This ensures that auto generated ids are consistent between the client and server.\n */\nexport function SSRProvider(props: SSRProviderProps): JSX.Element {\n if (typeof React['useId'] === 'function') {\n if (process.env.NODE_ENV !== 'test' && !warnedAboutSSRProvider) {\n console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.');\n warnedAboutSSRProvider = true;\n }\n return <>{props.children}</>;\n }\n return <LegacySSRProvider {...props} />;\n}\n\nlet canUseDOM = Boolean(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\nlet componentIds = new WeakMap();\n\nfunction useCounter(isDisabled = false) {\n let ctx = useContext(SSRContext);\n let ref = useRef<number | null>(null);\n // eslint-disable-next-line rulesdir/pure-render\n if (ref.current === null && !isDisabled) {\n // In strict mode, React renders components twice, and the ref will be reset to null on the second render.\n // This means our id counter will be incremented twice instead of once. This is a problem because on the\n // server, components are only rendered once and so ids generated on the server won't match the client.\n // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this\n // we need to use some React internals to access the underlying Fiber instance, which is stable between renders.\n // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development.\n // To ensure that we only increment the global counter once, we store the starting id for this component in\n // a weak map associated with the Fiber. On the second render, we reset the global counter to this value.\n // Since React runs the second render immediately after the first, this is safe.\n // @ts-ignore\n let currentOwner = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?.ReactCurrentOwner?.current;\n if (currentOwner) {\n let prevComponentValue = componentIds.get(currentOwner);\n if (prevComponentValue == null) {\n // On the first render, and first call to useId, store the id and state in our weak map.\n componentIds.set(currentOwner, {\n id: ctx.current,\n state: currentOwner.memoizedState\n });\n } else if (currentOwner.memoizedState !== prevComponentValue.state) {\n // On the second render, the memoizedState gets reset by React.\n // Reset the counter, and remove from the weak map so we don't\n // do this for subsequent useId calls.\n ctx.current = prevComponentValue.id;\n componentIds.delete(currentOwner);\n }\n }\n\n // eslint-disable-next-line rulesdir/pure-render\n ref.current = ++ctx.current;\n }\n\n // eslint-disable-next-line rulesdir/pure-render\n return ref.current;\n}\n\nfunction useLegacySSRSafeId(defaultId?: string): string {\n let ctx = useContext(SSRContext);\n\n // If we are rendering in a non-DOM environment, and there's no SSRProvider,\n // provide a warning to hint to the developer to add one.\n if (ctx === defaultContext && !canUseDOM) {\n console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.');\n }\n\n let counter = useCounter(!!defaultId);\n let prefix = ctx === defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`;\n return defaultId || `${prefix}-${counter}`;\n}\n\nfunction useModernSSRSafeId(defaultId?: string): string {\n // @ts-ignore\n let id = React.useId();\n let [didSSR] = useState(useIsSSR());\n let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${defaultContext.prefix}`;\n return defaultId || `${prefix}-${id}`;\n}\n\n// Use React.useId in React 18 if available, otherwise fall back to our old implementation.\n/** @private */\nexport const useSSRSafeId = typeof React['useId'] === 'function' ? useModernSSRSafeId : useLegacySSRSafeId;\n\nfunction getSnapshot() {\n return false;\n}\n\nfunction getServerSnapshot() {\n return true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction subscribe(onStoreChange: () => void): () => void {\n // noop\n return () => {};\n}\n\n/**\n * Returns whether the component is currently being server side rendered or\n * hydrated on the client. Can be used to delay browser-specific rendering\n * until after hydration.\n */\nexport function useIsSSR(): boolean {\n // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating.\n if (typeof React['useSyncExternalStore'] === 'function') {\n return React['useSyncExternalStore'](subscribe, getSnapshot, getServerSnapshot);\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useContext(IsSSRContext);\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport React from 'react';\n\n// During SSR, React emits a warning when calling useLayoutEffect.\n// Since neither useLayoutEffect nor useEffect run on the server,\n// we can suppress this by replace it with a noop on the server.\nexport const useLayoutEffect = typeof document !== 'undefined'\n ? React.useLayoutEffect\n : () => {};\n","/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useCallback, useRef} from 'react';\nimport {useLayoutEffect} from './useLayoutEffect';\n\nexport function useEffectEvent<T extends Function>(fn?: T): T {\n const ref = useRef<T | null | undefined>(null);\n useLayoutEffect(() => {\n ref.current = fn;\n }, [fn]);\n // @ts-ignore\n return useCallback<T>((...args) => {\n const f = ref.current!;\n return f?.(...args);\n }, []);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Dispatch, MutableRefObject, useRef, useState} from 'react';\nimport {useEffectEvent, useLayoutEffect} from './';\n\ntype SetValueAction<S> = (prev: S) => Generator<any, void, unknown>;\n\n// This hook works like `useState`, but when setting the value, you pass a generator function\n// that can yield multiple values. Each yielded value updates the state and waits for the next\n// layout effect, then continues the generator. This allows sequential updates to state to be\n// written linearly.\nexport function useValueEffect<S>(defaultValue: S | (() => S)): [S, Dispatch<SetValueAction<S>>] {\n let [value, setValue] = useState(defaultValue);\n let effect: MutableRefObject<Generator<S> | null> = useRef<Generator<S> | null>(null);\n\n // Store the function in a ref so we can always access the current version\n // which has the proper `value` in scope.\n let nextRef = useEffectEvent(() => {\n if (!effect.current) {\n return;\n }\n // Run the generator to the next yield.\n let newValue = effect.current.next();\n\n // If the generator is done, reset the effect.\n if (newValue.done) {\n effect.current = null;\n return;\n }\n\n // If the value is the same as the current value,\n // then continue to the next yield. Otherwise,\n // set the value in state and wait for the next layout effect.\n if (value === newValue.value) {\n nextRef();\n } else {\n setValue(newValue.value);\n }\n });\n\n useLayoutEffect(() => {\n // If there is an effect currently running, continue to the next yield.\n if (effect.current) {\n nextRef();\n }\n });\n\n let queue = useEffectEvent(fn => {\n effect.current = fn(value);\n nextRef();\n });\n\n return [value, queue];\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useCallback, useEffect, useRef, useState} from 'react';\nimport {useLayoutEffect} from './useLayoutEffect';\nimport {useSSRSafeId} from '@react-aria/ssr';\nimport {useValueEffect} from './';\n\n// copied from SSRProvider.tsx to reduce exports, if needed again, consider sharing\nlet canUseDOM = Boolean(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\nlet idsUpdaterMap: Map<string, (v: string) => void> = new Map();\n\n/**\n * If a default is not provided, generate an id.\n * @param defaultId - Default component id.\n */\nexport function useId(defaultId?: string): string {\n let [value, setValue] = useState(defaultId);\n let nextId = useRef(null);\n\n let res = useSSRSafeId(value);\n\n let updateValue = useCallback((val) => {\n nextId.current = val;\n }, []);\n\n if (canUseDOM) {\n idsUpdaterMap.set(res, updateValue);\n }\n\n useLayoutEffect(() => {\n let r = res;\n return () => {\n idsUpdaterMap.delete(r);\n };\n }, [res]);\n\n // This cannot cause an infinite loop because the ref is updated first.\n // eslint-disable-next-line\n useEffect(() => {\n let newId = nextId.current;\n if (newId) {\n nextId.current = null;\n setValue(newId);\n }\n });\n\n return res;\n}\n\n/**\n * Merges two ids.\n * Different ids will trigger a side-effect and re-render components hooked up with `useId`.\n */\nexport function mergeIds(idA: string, idB: string): string {\n if (idA === idB) {\n return idA;\n }\n\n let setIdA = idsUpdaterMap.get(idA);\n if (setIdA) {\n setIdA(idB);\n return idB;\n }\n\n let setIdB = idsUpdaterMap.get(idB);\n if (setIdB) {\n setIdB(idA);\n return idA;\n }\n\n return idB;\n}\n\n/**\n * Used to generate an id, and after render, check if that id is rendered so we know\n * if we can use it in places such as labelledby.\n * @param depArray - When to recalculate if the id is in the DOM.\n */\nexport function useSlotId(depArray: ReadonlyArray<any> = []): string {\n let id = useId();\n let [resolvedId, setResolvedId] = useValueEffect(id);\n let updateId = useCallback(() => {\n setResolvedId(function *() {\n yield id;\n\n yield document.getElementById(id) ? id : undefined;\n });\n }, [id, setResolvedId]);\n\n useLayoutEffect(updateId, [id, updateId, ...depArray]);\n\n return resolvedId;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n/**\n * Calls all functions in the order they were chained with the same arguments.\n */\nexport function chain(...callbacks: any[]): (...args: any[]) => void {\n return (...args: any[]) => {\n for (let callback of callbacks) {\n if (typeof callback === 'function') {\n callback(...args);\n }\n }\n };\n}\n","export const getOwnerDocument = (el: Element | null | undefined): Document => {\n return el?.ownerDocument ?? document;\n};\n\nexport const getOwnerWindow = (\n el: (Window & typeof global) | Element | null | undefined\n): Window & typeof global => {\n if (el && 'window' in el && el.window === el) {\n return el;\n }\n\n const doc = getOwnerDocument(el as Element | null | undefined);\n return doc.defaultView || window;\n};\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {chain} from './chain';\nimport clsx from 'clsx';\nimport {mergeIds} from './useId';\n\ninterface Props {\n [key: string]: any\n}\n\ntype PropsArg = Props | null | undefined;\n\n// taken from: https://stackoverflow.com/questions/51603250/typescript-3-parameter-list-intersection-type/51604379#51604379\ntype TupleTypes<T> = { [P in keyof T]: T[P] } extends { [key: number]: infer V } ? NullToObject<V> : never;\ntype NullToObject<T> = T extends (null | undefined) ? {} : T;\n// eslint-disable-next-line no-undef, @typescript-eslint/no-unused-vars\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\n\n/**\n * Merges multiple props objects together. Event handlers are chained,\n * classNames are combined, and ids are deduplicated - different ids\n * will trigger a side-effect and re-render components hooked up with `useId`.\n * For all other props, the last prop object overrides all previous ones.\n * @param args - Multiple sets of props to merge together.\n */\nexport function mergeProps<T extends PropsArg[]>(...args: T): UnionToIntersection<TupleTypes<T>> {\n // Start with a base clone of the first argument. This is a lot faster than starting\n // with an empty object and adding properties as we go.\n let result: Props = {...args[0]};\n for (let i = 1; i < args.length; i++) {\n let props = args[i];\n for (let key in props) {\n let a = result[key];\n let b = props[key];\n\n // Chain events\n if (\n typeof a === 'function' &&\n typeof b === 'function' &&\n // This is a lot faster than a regex.\n key[0] === 'o' &&\n key[1] === 'n' &&\n key.charCodeAt(2) >= /* 'A' */ 65 &&\n key.charCodeAt(2) <= /* 'Z' */ 90\n ) {\n result[key] = chain(a, b);\n\n // Merge classnames, sometimes classNames are empty string which eval to false, so we just need to do a type check\n } else if (\n (key === 'className' || key === 'UNSAFE_className') &&\n typeof a === 'string' &&\n typeof b === 'string'\n ) {\n result[key] = clsx(a, b);\n } else if (key === 'id' && a && b) {\n result.id = mergeIds(a, b);\n // Override others\n } else {\n result[key] = b !== undefined ? b : a;\n }\n }\n }\n\n return result as UnionToIntersection<TupleTypes<T>>;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {ForwardedRef} from 'react';\n\n/**\n * Merges multiple refs into one. Works with either callback or object refs.\n */\nexport function mergeRefs<T>(...refs: ForwardedRef<T>[]): ForwardedRef<T> {\n if (refs.length === 1) {\n return refs[0];\n }\n\n return (value: T | null) => {\n for (let ref of refs) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref != null) {\n ref.current = value;\n }\n }\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLabelingProps, DOMProps, LinkDOMProps} from '@react-types/shared';\n\nconst DOMPropNames = new Set([\n 'id'\n]);\n\nconst labelablePropNames = new Set([\n 'aria-label',\n 'aria-labelledby',\n 'aria-describedby',\n 'aria-details'\n]);\n\n// See LinkDOMProps in dom.d.ts.\nconst linkPropNames = new Set([\n 'href',\n 'target',\n 'rel',\n 'download',\n 'ping',\n 'referrerPolicy'\n]);\n\ninterface Options {\n /**\n * If labelling associated aria properties should be included in the filter.\n */\n labelable?: boolean,\n /** Whether the element is a link and should include DOM props for <a> elements. */\n isLink?: boolean,\n /**\n * A Set of other property names that should be included in the filter.\n */\n propNames?: Set<string>\n}\n\nconst propRe = /^(data-.*)$/;\n\n/**\n * Filters out all props that aren't valid DOM props or defined via override prop obj.\n * @param props - The component props to be filtered.\n * @param opts - Props to override.\n */\nexport function filterDOMProps(props: DOMProps & AriaLabelingProps & LinkDOMProps, opts: Options = {}): DOMProps & AriaLabelingProps {\n let {labelable, isLink, propNames} = opts;\n let filteredProps = {};\n\n for (const prop in props) {\n if (\n Object.prototype.hasOwnProperty.call(props, prop) && (\n DOMPropNames.has(prop) ||\n (labelable && labelablePropNames.has(prop)) ||\n (isLink && linkPropNames.has(prop)) ||\n propNames?.has(prop) ||\n propRe.test(prop)\n )\n ) {\n filteredProps[prop] = props[prop];\n }\n }\n\n return filteredProps;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FocusableElement} from '@react-types/shared';\n\n// This is a polyfill for element.focus({preventScroll: true});\n// Currently necessary for Safari and old Edge:\n// https://caniuse.com/#feat=mdn-api_htmlelement_focus_preventscroll_option\n// See https://bugs.webkit.org/show_bug.cgi?id=178583\n//\n\n// Original licensing for the following methods can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/calvellido/focus-options-polyfill\n\ninterface ScrollableElement {\n element: HTMLElement,\n scrollTop: number,\n scrollLeft: number\n}\n\nexport function focusWithoutScrolling(element: FocusableElement) {\n if (supportsPreventScroll()) {\n element.focus({preventScroll: true});\n } else {\n let scrollableElements = getScrollableElements(element);\n element.focus();\n restoreScrollPosition(scrollableElements);\n }\n}\n\nlet supportsPreventScrollCached: boolean | null = null;\nfunction supportsPreventScroll() {\n if (supportsPreventScrollCached == null) {\n supportsPreventScrollCached = false;\n try {\n let focusElem = document.createElement('div');\n focusElem.focus({\n get preventScroll() {\n supportsPreventScrollCached = true;\n return true;\n }\n });\n } catch (e) {\n // Ignore\n }\n }\n\n return supportsPreventScrollCached;\n}\n\nfunction getScrollableElements(element: FocusableElement): ScrollableElement[] {\n let parent = element.parentNode;\n let scrollableElements: ScrollableElement[] = [];\n let rootScrollingElement = document.scrollingElement || document.documentElement;\n\n while (parent instanceof HTMLElement && parent !== rootScrollingElement) {\n if (\n parent.offsetHeight < parent.scrollHeight ||\n parent.offsetWidth < parent.scrollWidth\n ) {\n scrollableElements.push({\n element: parent,\n scrollTop: parent.scrollTop,\n scrollLeft: parent.scrollLeft\n });\n }\n parent = parent.parentNode;\n }\n\n if (rootScrollingElement instanceof HTMLElement) {\n scrollableElements.push({\n element: rootScrollingElement,\n scrollTop: rootScrollingElement.scrollTop,\n scrollLeft: rootScrollingElement.scrollLeft\n });\n }\n\n return scrollableElements;\n}\n\nfunction restoreScrollPosition(scrollableElements: ScrollableElement[]) {\n for (let {element, scrollTop, scrollLeft} of scrollableElements) {\n element.scrollTop = scrollTop;\n element.scrollLeft = scrollLeft;\n }\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nfunction testUserAgent(re: RegExp) {\n if (typeof window === 'undefined' || window.navigator == null) {\n return false;\n }\n return (\n window.navigator['userAgentData']?.brands.some((brand: {brand: string, version: string}) => re.test(brand.brand))\n ) ||\n re.test(window.navigator.userAgent);\n}\n\nfunction testPlatform(re: RegExp) {\n return typeof window !== 'undefined' && window.navigator != null\n ? re.test(window.navigator['userAgentData']?.platform || window.navigator.platform)\n : false;\n}\n\nexport function isMac() {\n return testPlatform(/^Mac/i);\n}\n\nexport function isIPhone() {\n return testPlatform(/^iPhone/i);\n}\n\nexport function isIPad() {\n return testPlatform(/^iPad/i) ||\n // iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support.\n (isMac() && navigator.maxTouchPoints > 1);\n}\n\nexport function isIOS() {\n return isIPhone() || isIPad();\n}\n\nexport function isAppleDevice() {\n return isMac() || isIOS();\n}\n\nexport function isWebKit() {\n return testUserAgent(/AppleWebKit/i) && !isChrome();\n}\n\nexport function isChrome() {\n return testUserAgent(/Chrome/i);\n}\n\nexport function isAndroid() {\n return testUserAgent(/Android/i);\n}\n\nexport function isFirefox() {\n return testUserAgent(/Firefox/i);\n}\n","/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {focusWithoutScrolling, isMac, isWebKit} from './index';\nimport {isFirefox, isIPad} from './platform';\nimport {LinkDOMProps} from '@react-types/shared';\nimport React, {createContext, ReactNode, useContext, useMemo} from 'react';\n\ninterface Router {\n isNative: boolean,\n open: (target: Element, modifiers: Modifiers) => void\n}\n\nconst RouterContext = createContext<Router>({\n isNative: true,\n open: openSyntheticLink\n});\n\ninterface RouterProviderProps {\n navigate: (path: string) => void,\n children: ReactNode\n}\n\n/**\n * A RouterProvider accepts a `navigate` function from a framework or client side router,\n * and provides it to all nested React Aria links to enable client side navigation.\n */\nexport function RouterProvider(props: RouterProviderProps) {\n let {children, navigate} = props;\n\n let ctx = useMemo(() => ({\n isNative: false,\n open: (target: Element, modifiers: Modifiers) => {\n getSyntheticLink(target, link => {\n if (shouldClientNavigate(link, modifiers)) {\n navigate(link.pathname + link.search + link.hash);\n } else {\n openLink(link, modifiers);\n }\n });\n }\n }), [navigate]);\n\n return (\n <RouterContext.Provider value={ctx}>\n {children}\n </RouterContext.Provider>\n );\n}\n\nexport function useRouter(): Router {\n return useContext(RouterContext);\n}\n\ninterface Modifiers {\n metaKey?: boolean,\n ctrlKey?: boolean,\n altKey?: boolean,\n shiftKey?: boolean\n}\n\nexport function shouldClientNavigate(link: HTMLAnchorElement, modifiers: Modifiers) {\n // Use getAttribute here instead of link.target. Firefox will default link.target to \"_parent\" when inside an iframe.\n let target = link.getAttribute('target');\n return (\n (!target || target === '_self') &&\n link.origin === location.origin &&\n !link.hasAttribute('download') &&\n !modifiers.metaKey && // open in new tab (mac)\n !modifiers.ctrlKey && // open in new tab (windows)\n !modifiers.altKey && // download\n !modifiers.shiftKey\n );\n}\n\nexport function openLink(target: HTMLAnchorElement, modifiers: Modifiers, setOpening = true) {\n let {metaKey, ctrlKey, altKey, shiftKey} = modifiers;\n\n // Firefox does not recognize keyboard events as a user action by default, and the popup blocker\n // will prevent links with target=\"_blank\" from opening. However, it does allow the event if the\n // Command/Control key is held, which opens the link in a background tab. This seems like the best we can do.\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=257870 and https://bugzilla.mozilla.org/show_bug.cgi?id=746640.\n if (isFirefox() && window.event?.type?.startsWith('key') && target.target === '_blank') {\n if (isMac()) {\n metaKey = true;\n } else {\n ctrlKey = true;\n }\n }\n\n // WebKit does not support firing click events with modifier keys, but does support keyboard events.\n // https://github.com/WebKit/WebKit/blob/c03d0ac6e6db178f90923a0a63080b5ca210d25f/Source/WebCore/html/HTMLAnchorElement.cpp#L184\n let event = isWebKit() && isMac() && !isIPad() && process.env.NODE_ENV !== 'test'\n // @ts-ignore - keyIdentifier is a non-standard property, but it's what webkit expects\n ? new KeyboardEvent('keydown', {keyIdentifier: 'Enter', metaKey, ctrlKey, altKey, shiftKey})\n : new MouseEvent('click', {metaKey, ctrlKey, altKey, shiftKey, bubbles: true, cancelable: true});\n (openLink as any).isOpening = setOpening;\n focusWithoutScrolling(target);\n target.dispatchEvent(event);\n (openLink as any).isOpening = false;\n}\n// https://github.com/parcel-bundler/parcel/issues/8724\n(openLink as any).isOpening = false;\n\nfunction getSyntheticLink(target: Element, open: (link: HTMLAnchorElement) => void) {\n if (target instanceof HTMLAnchorElement) {\n open(target);\n } else if (target.hasAttribute('data-href')) {\n let link = document.createElement('a');\n link.href = target.getAttribute('data-href')!;\n if (target.hasAttribute('data-target')) {\n link.target = target.getAttribute('data-target')!;\n }\n if (target.hasAttribute('data-rel')) {\n link.rel = target.getAttribute('data-rel')!;\n }\n if (target.hasAttribute('data-download')) {\n link.download = target.getAttribute('data-download')!;\n }\n if (target.hasAttribute('data-ping')) {\n link.ping = target.getAttribute('data-ping')!;\n }\n if (target.hasAttribute('data-referrer-policy')) {\n link.referrerPolicy = target.getAttribute('data-referrer-policy')!;\n }\n target.appendChild(link);\n open(link);\n target.removeChild(link);\n }\n}\n\nfunction openSyntheticLink(target: Element, modifiers: Modifiers) {\n getSyntheticLink(target, link => openLink(link, modifiers));\n}\n\nexport function getSyntheticLinkProps(props: LinkDOMProps) {\n return {\n 'data-href': props.href,\n 'data-target': props.target,\n 'data-rel': props.rel,\n 'data-download': props.download,\n 'data-ping': props.ping,\n 'data-referrer-policy': props.referrerPolicy\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// We store a global list of elements that are currently transitioning,\n// mapped to a set of CSS properties that are transitioning for that element.\n// This is necessary rather than a simple count of transitions because of browser\n// bugs, e.g. Chrome sometimes fires both transitionend and transitioncancel rather\n// than one or the other. So we need to track what's actually transitioning so that\n// we can ignore these duplicate events.\nlet transitionsByElement = new Map<EventTarget, Set<string>>();\n\n// A list of callbacks to call once there are no transitioning elements.\nlet transitionCallbacks = new Set<() => void>();\n\nfunction setupGlobalEvents() {\n if (typeof window === 'undefined') {\n return;\n }\n\n function isTransitionEvent(event: Event): event is TransitionEvent {\n return 'propertyName' in event;\n }\n\n let onTransitionStart = (e: Event) => {\n if (!isTransitionEvent(e) || !e.target) {\n return;\n }\n // Add the transitioning property to the list for this element.\n let transitions = transitionsByElement.get(e.target);\n if (!transitions) {\n transitions = new Set();\n transitionsByElement.set(e.target, transitions);\n\n // The transitioncancel event must be registered on the element itself, rather than as a global\n // event. This enables us to handle when the node is deleted from the document while it is transitioning.\n // In that case, the cancel event would have nowhere to bubble to so we need to handle it directly.\n e.target.addEventListener('transitioncancel', onTransitionEnd, {\n once: true\n });\n }\n\n transitions.add(e.propertyName);\n };\n\n let onTransitionEnd = (e: Event) => {\n if (!isTransitionEvent(e) || !e.target) {\n return;\n }\n // Remove property from list of transitioning properties.\n let properties = transitionsByElement.get(e.target);\n if (!properties) {\n return;\n }\n\n properties.delete(e.propertyName);\n\n // If empty, remove transitioncancel event, and remove the element from the list of transitioning elements.\n if (properties.size === 0) {\n e.target.removeEventListener('transitioncancel', onTransitionEnd);\n transitionsByElement.delete(e.target);\n }\n\n // If no transitioning elements, call all of the queued callbacks.\n if (transitionsByElement.size === 0) {\n for (let cb of transitionCallbacks) {\n cb();\n }\n\n transitionCallbacks.clear();\n }\n };\n\n document.body.addEventListener('transitionrun', onTransitionStart);\n document.body.addEventListener('transitionend', onTransitionEnd);\n}\n\nif (typeof document !== 'undefined') {\n if (document.readyState !== 'loading') {\n setupGlobalEvents();\n } else {\n document.addEventListener('DOMContentLoaded', setupGlobalEvents);\n }\n}\n\nexport function runAfterTransition(fn: () => void) {\n // Wait one frame to see if an animation starts, e.g. a transition on mount.\n requestAnimationFrame(() => {\n // If no transitions are running, call the function immediately.\n // Otherwise, add it to a list of callbacks to run at the end of the animation.\n if (transitionsByElement.size === 0) {\n fn();\n } else {\n transitionCallbacks.add(fn);\n }\n });\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useCallback, useEffect, useRef} from 'react';\n\ninterface GlobalListeners {\n addGlobalListener<K extends keyof DocumentEventMap>(el: EventTarget, type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void,\n addGlobalListener(el: EventTarget, type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void,\n removeGlobalListener<K extends keyof DocumentEventMap>(el: EventTarget, type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void,\n removeGlobalListener(el: EventTarget, type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void,\n removeAllGlobalListeners(): void\n}\n\nexport function useGlobalListeners(): GlobalListeners {\n let globalListeners = useRef(new Map());\n let addGlobalListener = useCallback((eventTarget, type, listener, options) => {\n // Make sure we remove the listener after it is called with the `once` option.\n let fn = options?.once ? (...args) => {\n globalListeners.current.delete(listener);\n listener(...args);\n } : listener;\n globalListeners.current.set(listener, {type, eventTarget, fn, options});\n eventTarget.addEventListener(type, listener, options);\n }, []);\n let removeGlobalListener = useCallback((eventTarget, type, listener, options) => {\n let fn = globalListeners.current.get(listener)?.fn || listener;\n eventTarget.removeEventListener(type, fn, options);\n globalListeners.current.delete(listener);\n }, []);\n let removeAllGlobalListeners = useCallback(() => {\n globalListeners.current.forEach((value, key) => {\n removeGlobalListener(value.eventTarget, value.type, key, value.options);\n });\n }, [removeGlobalListener]);\n\n // eslint-disable-next-line arrow-body-style\n useEffect(() => {\n return removeAllGlobalListeners;\n }, [removeAllGlobalListeners]);\n\n return {addGlobalListener, removeGlobalListener, removeAllGlobalListeners};\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLabelingProps, DOMProps} from '@react-types/shared';\nimport {useId} from './useId';\n\n/**\n * Merges aria-label and aria-labelledby into aria-labelledby when both exist.\n * @param props - Aria label props.\n * @param defaultLabel - Default value for aria-label when not present.\n */\nexport function useLabels(props: DOMProps & AriaLabelingProps, defaultLabel?: string): DOMProps & AriaLabelingProps {\n let {\n id,\n 'aria-label': label,\n 'aria-labelledby': labelledBy\n } = props;\n\n // If there is both an aria-label and aria-labelledby,\n // combine them by pointing to the element itself.\n id = useId(id);\n if (labelledBy && label) {\n let ids = new Set([id, ...labelledBy.trim().split(/\\s+/)]);\n labelledBy = [...ids].join(' ');\n } else if (labelledBy) {\n labelledBy = labelledBy.trim().split(/\\s+/).join(' ');\n }\n\n // If no labels are provided, use the default\n if (!label && !labelledBy && defaultLabel) {\n label = defaultLabel;\n }\n\n return {\n id,\n 'aria-label': label,\n 'aria-labelledby': labelledBy\n };\n}\n","/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {MutableRefObject, useMemo, useRef} from 'react';\n\n/**\n * Offers an object ref for a given callback ref or an object ref. Especially\n * helfpul when passing forwarded refs (created using `React.forwardRef`) to\n * React Aria hooks.\n *\n * @param forwardedRef The original ref intended to be used.\n * @returns An object ref that updates the given ref.\n * @see https://reactjs.org/docs/forwarding-refs.html\n */\nexport function useObjectRef<T>(forwardedRef?: ((instance: T | null) => void) | MutableRefObject<T | null> | null): MutableRefObject<T | null> {\n const objRef: MutableRefObject<T | null> = useRef<T>(null);\n return useMemo(() => ({\n get current() {\n return objRef.current;\n },\n set current(value) {\n objRef.current = value;\n if (typeof forwardedRef === 'function') {\n forwardedRef(value);\n } else if (forwardedRef) {\n forwardedRef.current = value;\n }\n }\n }), [forwardedRef]);\n}\n","import {RefObject, useEffect} from 'react';\n\nfunction hasResizeObserver() {\n return typeof window.ResizeObserver !== 'undefined';\n}\n\ntype useResizeObserverOptionsType<T> = {\n ref: RefObject<T | undefined> | undefined,\n onResize: () => void\n}\n\nexport function useResizeObserver<T extends Element>(options: useResizeObserverOptionsType<T>) {\n const {ref, onResize} = options;\n\n useEffect(() => {\n let element = ref?.current;\n if (!element) {\n return;\n }\n\n if (!hasResizeObserver()) {\n window.addEventListener('resize', onResize, false);\n return () => {\n window.removeEventListener('resize', onResize, false);\n };\n } else {\n\n const resizeObserverInstance = new window.ResizeObserver((entries) => {\n if (!entries.length) {\n return;\n }\n\n onResize();\n });\n resizeObserverInstance.observe(element);\n\n return () => {\n if (element) {\n resizeObserverInstance.unobserve(element);\n }\n };\n }\n\n }, [onResize, ref]);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {MutableRefObject, RefObject} from 'react';\nimport {useLayoutEffect} from './';\n\ninterface ContextValue<T> {\n ref?: MutableRefObject<T | null>\n}\n\n// Syncs ref from context with ref passed to hook\nexport function useSyncRef<T>(context?: ContextValue<T> | null, ref?: RefObject<T>) {\n useLayoutEffect(() => {\n if (context && context.ref && ref) {\n context.ref.current = ref.current;\n return () => {\n if (context.ref) {\n context.ref.current = null;\n }\n };\n }\n });\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nexport function getScrollParent(node: Element, checkForOverflow?: boolean): Element {\n let scrollableNode: Element | null = node;\n if (isScrollable(scrollableNode, checkForOverflow)) {\n scrollableNode = scrollableNode.parentElement;\n }\n\n while (scrollableNode && !isScrollable(scrollableNode, checkForOverflow)) {\n scrollableNode = scrollableNode.parentElement;\n }\n\n return scrollableNode || document.scrollingElement || document.documentElement;\n}\n\nexport function isScrollable(node: Element, checkForOverflow?: boolean): boolean {\n let style = window.getComputedStyle(node);\n let isScrollable = /(auto|scroll)/.test(style.overflow + style.overflowX + style.overflowY);\n\n if (isScrollable && checkForOverflow) {\n isScrollable = node.scrollHeight !== node.clientHeight || node.scrollWidth !== node.clientWidth;\n }\n\n return isScrollable;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useEffect, useState} from 'react';\nimport {useIsSSR} from '@react-aria/ssr';\n\ninterface ViewportSize {\n width: number,\n height: number\n}\n\n// @ts-ignore\nlet visualViewport = typeof document !== 'undefined' && window.visualViewport;\n\nexport function useViewportSize(): ViewportSize {\n let isSSR = useIsSSR();\n let [size, setSize] = useState(() => isSSR ? {width: 0, height: 0} : getViewportSize());\n\n useEffect(() => {\n // Use visualViewport api to track available height even on iOS virtual keyboard opening\n let onResize = () => {\n setSize(size => {\n let newSize = getViewportSize();\n if (newSize.width === size.width && newSize.height === size.height) {\n return size;\n }\n return newSize;\n });\n };\n\n if (!visualViewport) {\n window.addEventListener('resize', onResize);\n } else {\n visualViewport.addEventListener('resize', onResize);\n }\n\n return () => {\n if (!visualViewport) {\n window.removeEventListener('resize', onResize);\n } else {\n visualViewport.removeEventListener('resize', onResize);\n }\n };\n }, []);\n\n return size;\n}\n\nfunction getViewportSize(): ViewportSize {\n return {\n width: (visualViewport && visualViewport?.width) || window.innerWidth,\n height: (visualViewport && visualViewport?.height) || window.innerHeight\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLabelingProps} from '@react-types/shared';\nimport {useLayoutEffect} from './useLayoutEffect';\nimport {useState} from 'react';\n\nlet descriptionId = 0;\nconst descriptionNodes = new Map<string, {refCount: number, element: Element}>();\n\nexport function useDescription(description?: string): AriaLabelingProps {\n let [id, setId] = useState<string | undefined>();\n\n useLayoutEffect(() => {\n if (!description) {\n return;\n }\n\n let desc = descriptionNodes.get(description);\n if (!desc) {\n let id = `react-aria-description-${descriptionId++}`;\n setId(id);\n\n let node = document.createElement('div');\n node.id = id;\n node.style.display = 'none';\n node.textContent = description;\n document.body.appendChild(node);\n desc = {refCount: 0, element: node};\n descriptionNodes.set(description, desc);\n } else {\n setId(desc.element.id);\n }\n\n desc.refCount++;\n return () => {\n if (desc && --desc.refCount === 0) {\n desc.element.remove();\n descriptionNodes.delete(description);\n }\n };\n }, [description]);\n\n return {\n 'aria-describedby': description ? id : undefined\n };\n}\n","/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {RefObject, useEffect} from 'react';\nimport {useEffectEvent} from './useEffectEvent';\n\nexport function useEvent<K extends keyof GlobalEventHandlersEventMap>(\n ref: RefObject<EventTarget>,\n event: K,\n handler?: (this: Document, ev: GlobalEventHandlersEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n) {\n let handleEvent = useEffectEvent(handler);\n let isDisabled = handler == null;\n\n useEffect(() => {\n if (isDisabled || !ref.current) {\n return;\n }\n\n let element = ref.current;\n element.addEventListener(event, handleEvent as EventListener, options);\n return () => {\n element.removeEventListener(event, handleEvent as EventListener, options);\n };\n }, [ref, event, options, isDisabled, handleEvent]);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {getScrollParent} from './';\n\ninterface ScrollIntoViewportOpts {\n /** The optional containing element of the target to be centered in the viewport. */\n containingElement?: Element\n}\n\n/**\n * Scrolls `scrollView` so that `element` is visible.\n * Similar to `element.scrollIntoView({block: 'nearest'})` (not supported in Edge),\n * but doesn't affect parents above `scrollView`.\n */\nexport function scrollIntoView(scrollView: HTMLElement, element: HTMLElement) {\n let offsetX = relativeOffset(scrollView, element, 'left');\n let offsetY = relativeOffset(scrollView, element, 'top');\n let width = element.offsetWidth;\n let height = element.offsetHeight;\n let x = scrollView.scrollLeft;\n let y = scrollView.scrollTop;\n\n // Account for top/left border offsetting the scroll top/Left\n let {borderTopWidth, borderLeftWidth} = getComputedStyle(scrollView);\n let borderAdjustedX = scrollView.scrollLeft + parseInt(borderLeftWidth, 10);\n let borderAdjustedY = scrollView.scrollTop + parseInt(borderTopWidth, 10);\n // Ignore end/bottom border via clientHeight/Width instead of offsetHeight/Width\n let maxX = borderAdjustedX + scrollView.clientWidth;\n let maxY = borderAdjustedY + scrollView.clientHeight;\n\n if (offsetX <= x) {\n x = offsetX - parseInt(borderLeftWidth, 10);\n } else if (offsetX + width > maxX) {\n x += offsetX + width - maxX;\n }\n if (offsetY <= borderAdjustedY) {\n y = offsetY - parseInt(borderTopWidth, 10);\n } else if (offsetY + height > maxY) {\n y += offsetY + height - maxY;\n }\n scrollView.scrollLeft = x;\n scrollView.scrollTop = y;\n}\n\n/**\n * Computes the offset left or top from child to ancestor by accumulating\n * offsetLeft or offsetTop through intervening offsetParents.\n */\nfunction relativeOffset(ancestor: HTMLElement, child: HTMLElement, axis: 'left'|'top') {\n const prop = axis === 'left' ? 'offsetLeft' : 'offsetTop';\n let sum = 0;\n while (child.offsetParent) {\n sum += child[prop];\n if (child.offsetParent === ancestor) {\n // Stop once we have found the ancestor we are interested in.\n break;\n } else if (child.offsetParent.contains(ancestor)) {\n // If the ancestor is not `position:relative`, then we stop at\n // _its_ offset parent, and we subtract off _its_ offset, so that\n // we end up with the proper offset from child to ancestor.\n sum -= ancestor[prop];\n break;\n }\n child = child.offsetParent as HTMLElement;\n }\n return sum;\n}\n\n/**\n * Scrolls the `targetElement` so it is visible in the viewport. Accepts an optional `opts.containingElement`\n * that will be centered in the viewport prior to scrolling the targetElement into view. If scrolling is prevented on\n * the body (e.g. targetElement is in a popover), this will only scroll the scroll parents of the targetElement up to but not including the body itself.\n */\nexport function scrollIntoViewport(targetElement: Element, opts?: ScrollIntoViewportOpts) {\n if (document.contains(targetElement)) {\n let root = document.scrollingElement || document.documentElement;\n let isScrollPrevented = window.getComputedStyle(root).overflow === 'hidden';\n // If scrolling is not currently prevented then we aren’t in a overlay nor is a overlay open, just use element.scrollIntoView to bring the element into view\n if (!isScrollPrevented) {\n let {left: originalLeft, top: originalTop} = targetElement.getBoundingClientRect();\n\n // use scrollIntoView({block: 'nearest'}) instead of .focus to check if the element is fully in view or not since .focus()\n // won't cause a scroll if the element is already focused and doesn't behave consistently when an element is partially out of view horizontally vs vertically\n targetElement?.scrollIntoView?.({block: 'nearest'});\n let {left: newLeft, top: newTop} = targetElement.getBoundingClientRect();\n // Account for sub pixel differences from rounding\n if ((Math.abs(originalLeft - newLeft) > 1) || (Math.abs(originalTop - newTop) > 1)) {\n opts?.containingElement?.scrollIntoView?.({block: 'center', inline: 'center'});\n targetElement.scrollIntoView?.({block: 'nearest'});\n }\n } else {\n let scrollParent = getScrollParent(targetElement);\n // If scrolling is prevented, we don't want to scroll the body since it might move the overlay partially offscreen and the user can't scroll it back into view.\n while (targetElement && scrollParent && targetElement !== root && scrollParent !== root) {\n scrollIntoView(scrollParent as HTMLElement, targetElement as HTMLElement);\n targetElement = scrollParent;\n scrollParent = getScrollParent(targetElement);\n }\n }\n }\n}\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {isAndroid} from './platform';\n\n// Original licensing for the following method can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/blob/3c713d513195a53788b3f8bb4b70279d68b15bcc/packages/react-interactions/events/src/dom/shared/index.js#L74-L87\n\n// Keyboards, Assistive Technologies, and element.click() all produce a \"virtual\"\n// click event. This is a method of inferring such clicks. Every browser except\n// IE 11 only sets a zero value of \"detail\" for click events that are \"virtual\".\n// However, IE 11 uses a zero value for all click events. For IE 11 we rely on\n// the quirk that it produces click events that are of type PointerEvent, and\n// where only the \"virtual\" click lacks a pointerType field.\n\nexport function isVirtualClick(event: MouseEvent | PointerEvent): boolean {\n // JAWS/NVDA with Firefox.\n if ((event as any).mozInputSource === 0 && event.isTrusted) {\n return true;\n }\n\n // Android TalkBack's detail value varies depending on the event listener providing the event so we have specific logic here instead\n // If pointerType is defined, event is from a click listener. For events from mousedown listener, detail === 0 is a sufficient check\n // to detect TalkBack virtual clicks.\n if (isAndroid() && (event as PointerEvent).pointerType) {\n return event.type === 'click' && event.buttons === 1;\n }\n\n return event.detail === 0 && !(event as PointerEvent).pointerType;\n}\n\nexport function isVirtualPointerEvent(event: PointerEvent) {\n // If the pointer size is zero, then we assume it's from a screen reader.\n // Android TalkBack double tap will sometimes return a event with width and height of 1\n // and pointerType === 'mouse' so we need to check for a specific combination of event attributes.\n // Cannot use \"event.pressure === 0\" as the sole check due to Safari pointer events always returning pressure === 0\n // instead of .5, see https://bugs.webkit.org/show_bug.cgi?id=206216. event.pointerType === 'mouse' is to distingush\n // Talkback double tap from Windows Firefox touch screen press\n return (\n (!isAndroid() && event.width === 0 && event.height === 0) ||\n (event.width === 1 &&\n event.height === 1 &&\n event.pressure === 0 &&\n event.detail === 0 &&\n event.pointerType === 'mouse'\n )\n );\n}\n","/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nimport {RefObject, useEffect, useRef} from 'react';\nimport {useEffectEvent} from './useEffectEvent';\n\nexport function useFormReset<T>(\n ref: RefObject<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>,\n initialValue: T,\n onReset: (value: T) => void\n) {\n let resetValue = useRef(initialValue);\n let handleReset = useEffectEvent(() => {\n if (onReset) {\n onReset(resetValue.current);\n }\n });\n\n useEffect(() => {\n let form = ref?.current?.form;\n form?.addEventListener('reset', handleReset);\n return () => {\n form?.removeEventListener('reset', handleReset);\n };\n }, [ref, handleReset]);\n}\n","export function _class_extract_field_descriptor(receiver, privateMap, action) {\n if (!privateMap.has(receiver)) throw new TypeError(\"attempted to \" + action + \" private field on non-instance\");\n\n return privateMap.get(receiver);\n}\nexport { _class_extract_field_descriptor as _ };\n","import { _check_private_redeclaration } from \"./_check_private_redeclaration.js\";\n\nexport function _class_private_field_init(obj, privateMap, value) {\n _check_private_redeclaration(obj, privateMap);\n privateMap.set(obj, value);\n}\nexport { _class_private_field_init as _ };\n","export function _check_private_redeclaration(obj, privateCollection) {\n if (privateCollection.has(obj)) {\n throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n }\n}\nexport { _check_private_redeclaration as _ };\n","import { _class_apply_descriptor_set } from \"./_class_apply_descriptor_set.js\";\nimport { _class_extract_field_descriptor } from \"./_class_extract_field_descriptor.js\";\n\nexport function _class_private_field_set(receiver, privateMap, value) {\n var descriptor = _class_extract_field_descriptor(receiver, privateMap, \"set\");\n _class_apply_descriptor_set(receiver, descriptor, value);\n return value;\n}\nexport { _class_private_field_set as _ };\n","export function _class_apply_descriptor_set(receiver, descriptor, value) {\n if (descriptor.set) descriptor.set.call(receiver, value);\n else {\n if (!descriptor.writable) {\n // This should only throw in strict mode, but class bodies are\n // always strict and private fields can only be used inside\n // class bodies.\n throw new TypeError(\"attempted to set read only private field\");\n }\n descriptor.value = value;\n }\n}\nexport { _class_apply_descriptor_set as _ };\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {getOwnerDocument, isIOS, runAfterTransition} from '@react-aria/utils';\n\n// Safari on iOS starts selecting text on long press. The only way to avoid this, it seems,\n// is to add user-select: none to the entire page. Adding it to the pressable element prevents\n// that element from being selected, but nearby elements may still receive selection. We add\n// user-select: none on touch start, and remove it again on touch end to prevent this.\n// This must be implemented using global state to avoid race conditions between multiple elements.\n\n// There are three possible states due to the delay before removing user-select: none after\n// pointer up. The 'default' state always transitions to the 'disabled' state, which transitions\n// to 'restoring'. The 'restoring' state can either transition back to 'disabled' or 'default'.\n\n// For non-iOS devices, we apply user-select: none to the pressed element instead to avoid possible\n// performance issues that arise from applying and removing user-select: none to the entire page\n// (see https://github.com/adobe/react-spectrum/issues/1609).\ntype State = 'default' | 'disabled' | 'restoring';\n\n// Note that state only matters here for iOS. Non-iOS gets user-select: none applied to the target element\n// rather than at the document level so we just need to apply/remove user-select: none for each pressed element individually\nlet state: State = 'default';\nlet savedUserSelect = '';\nlet modifiedElementMap = new WeakMap<Element, string>();\n\nexport function disableTextSelection(target?: Element) {\n if (isIOS()) {\n if (state === 'default') {\n // eslint-disable-next-line no-restricted-globals\n const documentObject = getOwnerDocument(target);\n savedUserSelect = documentObject.documentElement.style.webkitUserSelect;\n documentObject.documentElement.style.webkitUserSelect = 'none';\n }\n\n state = 'disabled';\n } else if (target instanceof HTMLElement || target instanceof SVGElement) {\n // If not iOS, store the target's original user-select and change to user-select: none\n // Ignore state since it doesn't apply for non iOS\n modifiedElementMap.set(target, target.style.userSelect);\n target.style.userSelect = 'none';\n }\n}\n\nexport function restoreTextSelection(target?: Element) {\n if (isIOS()) {\n // If the state is already default, there's nothing to do.\n // If it is restoring, then there's no need to queue a second restore.\n if (state !== 'disabled') {\n return;\n }\n\n state = 'restoring';\n\n // There appears to be a delay on iOS where selection still might occur\n // after pointer up, so wait a bit before removing user-select.\n setTimeout(() => {\n // Wait for any CSS transitions to complete so we don't recompute style\n // for the whole page in the middle of the animation and cause jank.\n runAfterTransition(() => {\n // Avoid race conditions\n if (state === 'restoring') {\n // eslint-disable-next-line no-restricted-globals\n const documentObject = getOwnerDocument(target);\n if (documentObject.documentElement.style.webkitUserSelect === 'none') {\n documentObject.documentElement.style.webkitUserSelect = savedUserSelect || '';\n }\n\n savedUserSelect = '';\n state = 'default';\n }\n });\n }, 300);\n } else if (target instanceof HTMLElement || target instanceof SVGElement) {\n // If not iOS, restore the target's original user-select if any\n // Ignore state since it doesn't apply for non iOS\n if (target && modifiedElementMap.has(target)) {\n let targetOldUserSelect = modifiedElementMap.get(target) as string;\n\n if (target.style.userSelect === 'none') {\n target.style.userSelect = targetOldUserSelect;\n }\n\n if (target.getAttribute('style') === '') {\n target.removeAttribute('style');\n }\n modifiedElementMap.delete(target);\n }\n }\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FocusableElement} from '@react-types/shared';\nimport {PressProps} from './usePress';\nimport React, {MutableRefObject} from 'react';\n\ninterface IPressResponderContext extends PressProps {\n register(): void,\n ref?: MutableRefObject<FocusableElement>\n}\n\nexport const PressResponderContext = React.createContext<IPressResponderContext>({register: () => {}});\nPressResponderContext.displayName = 'PressResponderContext';\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {chain, focusWithoutScrolling, getOwnerDocument, getOwnerWindow, isMac, isVirtualClick, isVirtualPointerEvent, mergeProps, openLink, useEffectEvent, useGlobalListeners, useSyncRef} from '@react-aria/utils';\nimport {disableTextSelection, restoreTextSelection} from './textSelection';\nimport {DOMAttributes, FocusableElement, PressEvent as IPressEvent, PointerType, PressEvents} from '@react-types/shared';\nimport {PressResponderContext} from './context';\nimport {RefObject, useContext, useEffect, useMemo, useRef, useState} from 'react';\n\nexport interface PressProps extends PressEvents {\n /** Whether the target is in a controlled press state (e.g. an overlay it triggers is open). */\n isPressed?: boolean,\n /** Whether the press events should be disabled. */\n isDisabled?: boolean,\n /** Whether the target should not receive focus on press. */\n preventFocusOnPress?: boolean,\n /**\n * Whether press events should be canceled when the pointer leaves the target while pressed.\n * By default, this is `false`, which means if the pointer returns back over the target while\n * still pressed, onPressStart will be fired again. If set to `true`, the press is canceled\n * when the pointer leaves the target and onPressStart will not be fired if the pointer returns.\n */\n shouldCancelOnPointerExit?: boolean,\n /** Whether text selection should be enabled on the pressable element. */\n allowTextSelectionOnPress?: boolean\n}\n\nexport interface PressHookProps extends PressProps {\n /** A ref to the target element. */\n ref?: RefObject<Element>\n}\n\ninterface PressState {\n isPressed: boolean,\n ignoreEmulatedMouseEvents: boolean,\n ignoreClickAfterPress: boolean,\n didFirePressStart: boolean,\n isTriggeringEvent: boolean,\n activePointerId: any,\n target: FocusableElement | null,\n isOverTarget: boolean,\n pointerType: PointerType | null,\n userSelect?: string,\n metaKeyEvents?: Map<string, KeyboardEvent>\n}\n\ninterface EventBase {\n currentTarget: EventTarget | null,\n shiftKey: boolean,\n ctrlKey: boolean,\n metaKey: boolean,\n altKey: boolean\n}\n\nexport interface PressResult {\n /** Whether the target is currently pressed. */\n isPressed: boolean,\n /** Props to spread on the target element. */\n pressProps: DOMAttributes\n}\n\nfunction usePressResponderContext(props: PressHookProps): PressHookProps {\n // Consume context from <PressResponder> and merge with props.\n let context = useContext(PressResponderContext);\n if (context) {\n let {register, ...contextProps} = context;\n props = mergeProps(contextProps, props) as PressHookProps;\n register();\n }\n useSyncRef(context, props.ref);\n\n return props;\n}\n\nclass PressEvent implements IPressEvent {\n type: IPressEvent['type'];\n pointerType: PointerType;\n target: Element;\n shiftKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n altKey: boolean;\n #shouldStopPropagation = true;\n\n constructor(type: IPressEvent['type'], pointerType: PointerType, originalEvent: EventBase) {\n this.type = type;\n this.pointerType = pointerType;\n this.target = originalEvent.currentTarget as Element;\n this.shiftKey = originalEvent.shiftKey;\n this.metaKey = originalEvent.metaKey;\n this.ctrlKey = originalEvent.ctrlKey;\n this.altKey = originalEvent.altKey;\n }\n\n continuePropagation() {\n this.#shouldStopPropagation = false;\n }\n\n get shouldStopPropagation() {\n return this.#shouldStopPropagation;\n }\n}\n\nconst LINK_CLICKED = Symbol('linkClicked');\n\n/**\n * Handles press interactions across mouse, touch, keyboard, and screen readers.\n * It normalizes behavior across browsers and platforms, and handles many nuances\n * of dealing with pointer and keyboard events.\n */\nexport function usePress(props: PressHookProps): PressResult {\n let {\n onPress,\n onPressChange,\n onPressStart,\n onPressEnd,\n onPressUp,\n isDisabled,\n isPressed: isPressedProp,\n preventFocusOnPress,\n shouldCancelOnPointerExit,\n allowTextSelectionOnPress,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ref: _, // Removing `ref` from `domProps` because TypeScript is dumb\n ...domProps\n } = usePressResponderContext(props);\n\n let [isPressed, setPressed] = useState(false);\n let ref = useRef<PressState>({\n isPressed: false,\n ignoreEmulatedMouseEvents: false,\n ignoreClickAfterPress: false,\n didFirePressStart: false,\n isTriggeringEvent: false,\n activePointerId: null,\n target: null,\n isOverTarget: false,\n pointerType: null\n });\n\n let {addGlobalListener, removeAllGlobalListeners} = useGlobalListeners();\n\n let triggerPressStart = useEffectEvent((originalEvent: EventBase, pointerType: PointerType) => {\n let state = ref.current;\n if (isDisabled || state.didFirePressStart) {\n return false;\n }\n\n let shouldStopPropagation = true;\n state.isTriggeringEvent = true;\n if (onPressStart) {\n let event = new PressEvent('pressstart', pointerType, originalEvent);\n onPressStart(event);\n shouldStopPropagation = event.shouldStopPropagation;\n }\n\n if (onPressChange) {\n onPressChange(true);\n }\n\n state.isTriggeringEvent = false;\n state.didFirePressStart = true;\n setPressed(true);\n return shouldStopPropagation;\n });\n\n let triggerPressEnd = useEffectEvent((originalEvent: EventBase, pointerType: PointerType, wasPressed = true) => {\n let state = ref.current;\n if (!state.didFirePressStart) {\n return false;\n }\n\n state.ignoreClickAfterPress = true;\n state.didFirePressStart = false;\n state.isTriggeringEvent = true;\n\n let shouldStopPropagation = true;\n if (onPressEnd) {\n let event = new PressEvent('pressend', pointerType, originalEvent);\n onPressEnd(event);\n shouldStopPropagation = event.shouldStopPropagation;\n }\n\n if (onPressChange) {\n onPressChange(false);\n }\n\n setPressed(false);\n\n if (onPress && wasPressed && !isDisabled) {\n let event = new PressEvent('press', pointerType, originalEvent);\n onPress(event);\n shouldStopPropagation &&= event.shouldStopPropagation;\n }\n\n state.isTriggeringEvent = false;\n return shouldStopPropagation;\n });\n\n let triggerPressUp = useEffectEvent((originalEvent: EventBase, pointerType: PointerType) => {\n let state = ref.current;\n if (isDisabled) {\n return false;\n }\n\n if (onPressUp) {\n state.isTriggeringEvent = true;\n let event = new PressEvent('pressup', pointerType, originalEvent);\n onPressUp(event);\n state.isTriggeringEvent = false;\n return event.shouldStopPropagation;\n }\n\n return true;\n });\n\n let cancel = useEffectEvent((e: EventBase) => {\n let state = ref.current;\n if (state.isPressed && state.target) {\n if (state.isOverTarget && state.pointerType != null) {\n triggerPressEnd(createEvent(state.target, e), state.pointerType, false);\n }\n state.isPressed = false;\n state.isOverTarget = false;\n state.activePointerId = null;\n state.pointerType = null;\n removeAllGlobalListeners();\n if (!allowTextSelectionOnPress) {\n restoreTextSelection(state.target);\n }\n }\n });\n\n let cancelOnPointerExit = useEffectEvent((e: EventBase) => {\n if (shouldCancelOnPointerExit) {\n cancel(e);\n }\n });\n\n let pressProps = useMemo(() => {\n let state = ref.current;\n let pressProps: DOMAttributes = {\n onKeyDown(e) {\n if (isValidKeyboardEvent(e.nativeEvent, e.currentTarget) && e.currentTarget.contains(e.target as Element)) {\n if (shouldPreventDefaultKeyboard(e.target as Element, e.key)) {\n e.preventDefault();\n }\n\n // If the event is repeating, it may have started on a different element\n // after which focus moved to the current element. Ignore these events and\n // only handle the first key down event.\n let shouldStopPropagation = true;\n if (!state.isPressed && !e.repeat) {\n state.target = e.currentTarget;\n state.isPressed = true;\n shouldStopPropagation = triggerPressStart(e, 'keyboard');\n\n // Focus may move before the key up event, so register the event on the document\n // instead of the same element where the key down event occurred. Make it capturing so that it will trigger\n // before stopPropagation from useKeyboard on a child element may happen and thus we can still call triggerPress for the parent element.\n let originalTarget = e.currentTarget;\n let pressUp = (e) => {\n if (isValidKeyboardEvent(e, originalTarget) && !e.repeat && originalTarget.contains(e.target as Element) && state.target) {\n triggerPressUp(createEvent(state.target, e), 'keyboard');\n }\n };\n\n addGlobalListener(getOwnerDocument(e.currentTarget), 'keyup', chain(pressUp, onKeyUp), true);\n }\n\n if (shouldStopPropagation) {\n e.stopPropagation();\n }\n\n // Keep track of the keydown events that occur while the Meta (e.g. Command) key is held.\n // macOS has a bug where keyup events are not fired while the Meta key is down.\n // When the Meta key itself is released we will get an event for that, and we'll act as if\n // all of these other keys were released as well.\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1393524\n // https://bugs.webkit.org/show_bug.cgi?id=55291\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1299553\n if (e.metaKey && isMac()) {\n state.metaKeyEvents?.set(e.key, e.nativeEvent);\n }\n } else if (e.key === 'Meta') {\n state.metaKeyEvents = new Map();\n }\n },\n onClick(e) {\n if (e && !e.currentTarget.contains(e.target as Element)) {\n return;\n }\n\n if (e && e.button === 0 && !state.isTriggeringEvent && !(openLink as any).isOpening) {\n let shouldStopPropagation = true;\n if (isDisabled) {\n e.preventDefault();\n }\n\n // If triggered from a screen reader or by using element.click(),\n // trigger as if it were a keyboard click.\n if (!state.ignoreClickAfterPress && !state.ignoreEmulatedMouseEvents && !state.isPressed && (state.pointerType === 'virtual' || isVirtualClick(e.nativeEvent))) {\n // Ensure the element receives focus (VoiceOver on iOS does not do this)\n if (!isDisabled && !preventFocusOnPress) {\n focusWithoutScrolling(e.currentTarget);\n }\n\n let stopPressStart = triggerPressStart(e, 'virtual');\n let stopPressUp = triggerPressUp(e, 'virtual');\n let stopPressEnd = triggerPressEnd(e, 'virtual');\n shouldStopPropagation = stopPressStart && stopPressUp && stopPressEnd;\n }\n\n state.ignoreEmulatedMouseEvents = false;\n state.ignoreClickAfterPress = false;\n if (shouldStopPropagation) {\n e.stopPropagation();\n }\n }\n }\n };\n\n let onKeyUp = (e: KeyboardEvent) => {\n if (state.isPressed && state.target && isValidKeyboardEvent(e, state.target)) {\n if (shouldPreventDefaultKeyboard(e.target as Element, e.key)) {\n e.preventDefault();\n }\n\n let target = e.target as Element;\n triggerPressEnd(createEvent(state.target, e), 'keyboard', state.target.contains(target));\n removeAllGlobalListeners();\n\n // If a link was triggered with a key other than Enter, open the URL ourselves.\n // This means the link has a role override, and the default browser behavior\n // only applies when using the Enter key.\n if (e.key !== 'Enter' && isHTMLAnchorLink(state.target) && state.target.contains(target) && !e[LINK_CLICKED]) {\n // Store a hidden property on the event so we only trigger link click once,\n // even if there are multiple usePress instances attached to the element.\n e[LINK_CLICKED] = true;\n openLink(state.target, e, false);\n }\n\n state.isPressed = false;\n state.metaKeyEvents?.delete(e.key);\n } else if (e.key === 'Meta' && state.metaKeyEvents?.size) {\n // If we recorded keydown events that occurred while the Meta key was pressed,\n // and those haven't received keyup events already, fire keyup events ourselves.\n // See comment above for more info about the macOS bug causing this.\n let events = state.metaKeyEvents;\n state.metaKeyEvents = undefined;\n for (let event of events.values()) {\n state.target?.dispatchEvent(new KeyboardEvent('keyup', event));\n }\n }\n };\n\n if (typeof PointerEvent !== 'undefined') {\n pressProps.onPointerDown = (e) => {\n // Only handle left clicks, and ignore events that bubbled through portals.\n if (e.button !== 0 || !e.currentTarget.contains(e.target as Element)) {\n return;\n }\n\n // iOS safari fires pointer events from VoiceOver with incorrect coordinates/target.\n // Ignore and let the onClick handler take care of it instead.\n // https://bugs.webkit.org/show_bug.cgi?id=222627\n // https://bugs.webkit.org/show_bug.cgi?id=223202\n if (isVirtualPointerEvent(e.nativeEvent)) {\n state.pointerType = 'virtual';\n return;\n }\n\n // Due to browser inconsistencies, especially on mobile browsers, we prevent\n // default on pointer down and handle focusing the pressable element ourselves.\n if (shouldPreventDefault(e.currentTarget as Element)) {\n e.preventDefault();\n }\n\n state.pointerType = e.pointerType;\n\n let shouldStopPropagation = true;\n if (!state.isPressed) {\n state.isPressed = true;\n state.isOverTarget = true;\n state.activePointerId = e.pointerId;\n state.target = e.currentTarget;\n\n if (!isDisabled && !preventFocusOnPress) {\n focusWithoutScrolling(e.currentTarget);\n }\n\n if (!allowTextSelectionOnPress) {\n disableTextSelection(state.target);\n }\n\n shouldStopPropagation = triggerPressStart(e, state.pointerType);\n\n addGlobalListener(getOwnerDocument(e.currentTarget), 'pointermove', onPointerMove, false);\n addGlobalListener(getOwnerDocument(e.currentTarget), 'pointerup', onPointerUp, false);\n addGlobalListener(getOwnerDocument(e.currentTarget), 'pointercancel', onPointerCancel, false);\n }\n\n if (shouldStopPropagation) {\n e.stopPropagation();\n }\n };\n\n pressProps.onMouseDown = (e) => {\n if (!e.currentTarget.contains(e.target as Element)) {\n return;\n }\n\n if (e.button === 0) {\n // Chrome and Firefox on touch Windows devices require mouse down events\n // to be canceled in addition to pointer events, or an extra asynchronous\n // focus event will be fired.\n if (shouldPreventDefault(e.currentTarget as Element)) {\n e.preventDefault();\n }\n\n e.stopPropagation();\n }\n };\n\n pressProps.onPointerUp = (e) => {\n // iOS fires pointerup with zero width and height, so check the pointerType recorded during pointerdown.\n if (!e.currentTarget.contains(e.target as Element) || state.pointerType === 'virtual') {\n return;\n }\n\n // Only handle left clicks\n // Safari on iOS sometimes fires pointerup events, even\n // when the touch isn't over the target, so double check.\n if (e.button === 0 && isOverTarget(e, e.currentTarget)) {\n triggerPressUp(e, state.pointerType || e.pointerType);\n }\n };\n\n // Safari on iOS < 13.2 does not implement pointerenter/pointerleave events correctly.\n // Use pointer move events instead to implement our own hit testing.\n // See https://bugs.webkit.org/show_bug.cgi?id=199803\n let onPointerMove = (e: PointerEvent) => {\n if (e.pointerId !== state.activePointerId) {\n return;\n }\n\n if (state.target && isOverTarget(e, state.target)) {\n if (!state.isOverTarget && state.pointerType != null) {\n state.isOverTarget = true;\n triggerPressStart(createEvent(state.target, e), state.pointerType);\n }\n } else if (state.target && state.isOverTarget && state.pointerType != null) {\n state.isOverTarget = false;\n triggerPressEnd(createEvent(state.target, e), state.pointerType, false);\n cancelOnPointerExit(e);\n }\n };\n\n let onPointerUp = (e: PointerEvent) => {\n if (e.pointerId === state.activePointerId && state.isPressed && e.button === 0 && state.target) {\n if (isOverTarget(e, state.target) && state.pointerType != null) {\n triggerPressEnd(createEvent(state.target, e), state.pointerType);\n } else if (state.isOverTarget && state.pointerType != null) {\n triggerPressEnd(createEvent(state.target, e), state.pointerType, false);\n }\n\n state.isPressed = false;\n state.isOverTarget = false;\n state.activePointerId = null;\n state.pointerType = null;\n removeAllGlobalListeners();\n if (!allowTextSelectionOnPress) {\n restoreTextSelection(state.target);\n }\n }\n };\n\n let onPointerCancel = (e: PointerEvent) => {\n cancel(e);\n };\n\n pressProps.onDragStart = (e) => {\n if (!e.currentTarget.contains(e.target as Element)) {\n return;\n }\n\n // Safari does not call onPointerCancel when a drag starts, whereas Chrome and Firefox do.\n cancel(e);\n };\n } else {\n pressProps.onMouseDown = (e) => {\n // Only handle left clicks\n if (e.button !== 0 || !e.currentTarget.contains(e.target as Element)) {\n return;\n }\n\n // Due to browser inconsistencies, especially on mobile browsers, we prevent\n // default on mouse down and handle focusing the pressable element ourselves.\n if (shouldPreventDefault(e.currentTarget)) {\n e.preventDefault();\n }\n\n if (state.ignoreEmulatedMouseEvents) {\n e.stopPropagation();\n return;\n }\n\n state.isPressed = true;\n state.isOverTarget = true;\n state.target = e.currentTarget;\n state.pointerType = isVirtualClick(e.nativeEvent) ? 'virtual' : 'mouse';\n\n if (!isDisabled && !preventFocusOnPress) {\n focusWithoutScrolling(e.currentTarget);\n }\n\n let shouldStopPropagation = triggerPressStart(e, state.pointerType);\n if (shouldStopPropagation) {\n e.stopPropagation();\n }\n\n addGlobalListener(getOwnerDocument(e.currentTarget), 'mouseup', onMouseUp, false);\n };\n\n pressProps.onMouseEnter = (e) => {\n if (!e.currentTarget.contains(e.target as Element)) {\n return;\n }\n\n let shouldStopPropagation = true;\n if (state.isPressed && !state.ignoreEmulatedMouseEvents && state.pointerType != null) {\n state.isOverTarget = true;\n shouldStopPropagation = triggerPressStart(e, state.pointerType);\n }\n\n if (shouldStopPropagation) {\n e.stopPropagation();\n }\n };\n\n pressProps.onMouseLeave = (e) => {\n if (!e.currentTarget.contains(e.target as Element)) {\n return;\n }\n\n let shouldStopPropagation = true;\n if (state.isPressed && !state.ignoreEmulatedMouseEvents && state.pointerType != null) {\n state.isOverTarget = false;\n shouldStopPropagation = triggerPressEnd(e, state.pointerType, false);\n cancelOnPointerExit(e);\n }\n\n if (shouldStopPropagation) {\n e.stopPropagation();\n }\n };\n\n pressProps.onMouseUp = (e) => {\n if (!e.currentTarget.contains(e.target as Element)) {\n return;\n }\n\n if (!state.ignoreEmulatedMouseEvents && e.button === 0) {\n triggerPressUp(e, state.pointerType || 'mouse');\n }\n };\n\n let onMouseUp = (e: MouseEvent) => {\n // Only handle left clicks\n if (e.button !== 0) {\n return;\n }\n\n state.isPressed = false;\n removeAllGlobalListeners();\n\n if (state.ignoreEmulatedMouseEvents) {\n state.ignoreEmulatedMouseEvents = false;\n return;\n }\n\n if (state.target && isOverTarget(e, state.target) && state.pointerType != null) {\n triggerPressEnd(createEvent(state.target, e), state.pointerType);\n } else if (state.target && state.isOverTarget && state.pointerType != null) {\n triggerPressEnd(createEvent(state.target, e), state.pointerType, false);\n }\n\n state.isOverTarget = false;\n };\n\n pressProps.onTouchStart = (e) => {\n if (!e.currentTarget.contains(e.target as Element)) {\n return;\n }\n\n let touch = getTouchFromEvent(e.nativeEvent);\n if (!touch) {\n return;\n }\n state.activePointerId = touch.identifier;\n state.ignoreEmulatedMouseEvents = true;\n state.isOverTarget = true;\n state.isPressed = true;\n state.target = e.currentTarget;\n state.pointerType = 'touch';\n\n // Due to browser inconsistencies, especially on mobile browsers, we prevent default\n // on the emulated mouse event and handle focusing the pressable element ourselves.\n if (!isDisabled && !preventFocusOnPress) {\n focusWithoutScrolling(e.currentTarget);\n }\n\n if (!allowTextSelectionOnPress) {\n disableTextSelection(state.target);\n }\n\n let shouldStopPropagation = triggerPressStart(e, state.pointerType);\n if (shouldStopPropagation) {\n e.stopPropagation();\n }\n\n addGlobalListener(getOwnerWindow(e.currentTarget), 'scroll', onScroll, true);\n };\n\n pressProps.onTouchMove = (e) => {\n if (!e.currentTarget.contains(e.target as Element)) {\n return;\n }\n\n if (!state.isPressed) {\n e.stopPropagation();\n return;\n }\n\n let touch = getTouchById(e.nativeEvent, state.activePointerId);\n let shouldStopPropagation = true;\n if (touch && isOverTarget(touch, e.currentTarget)) {\n if (!state.isOverTarget && state.pointerType != null) {\n state.isOverTarget = true;\n shouldStopPropagation = triggerPressStart(e, state.pointerType);\n }\n } else if (state.isOverTarget && state.pointerType != null) {\n state.isOverTarget = false;\n shouldStopPropagation = triggerPressEnd(e, state.pointerType, false);\n cancelOnPointerExit(e);\n }\n\n if (shouldStopPropagation) {\n e.stopPropagation();\n }\n };\n\n pressProps.onTouchEnd = (e) => {\n if (!e.currentTarget.contains(e.target as Element)) {\n return;\n }\n\n if (!state.isPressed) {\n e.stopPropagation();\n return;\n }\n\n let touch = getTouchById(e.nativeEvent, state.activePointerId);\n let shouldStopPropagation = true;\n if (touch && isOverTarget(touch, e.currentTarget) && state.pointerType != null) {\n triggerPressUp(e, state.pointerType);\n shouldStopPropagation = triggerPressEnd(e, state.pointerType);\n } else if (state.isOverTarget && state.pointerType != null) {\n shouldStopPropagation = triggerPressEnd(e, state.pointerType, false);\n }\n\n if (shouldStopPropagation) {\n e.stopPropagation();\n }\n\n state.isPressed = false;\n state.activePointerId = null;\n state.isOverTarget = false;\n state.ignoreEmulatedMouseEvents = true;\n if (state.target && !allowTextSelectionOnPress) {\n restoreTextSelection(state.target);\n }\n removeAllGlobalListeners();\n };\n\n pressProps.onTouchCancel = (e) => {\n if (!e.currentTarget.contains(e.target as Element)) {\n return;\n }\n\n e.stopPropagation();\n if (state.isPressed) {\n cancel(e);\n }\n };\n\n let onScroll = (e: Event) => {\n if (state.isPressed && (e.target as Element).contains(state.target)) {\n cancel({\n currentTarget: state.target,\n shiftKey: false,\n ctrlKey: false,\n metaKey: false,\n altKey: false\n });\n }\n };\n\n pressProps.onDragStart = (e) => {\n if (!e.currentTarget.contains(e.target as Element)) {\n return;\n }\n\n cancel(e);\n };\n }\n\n return pressProps;\n }, [\n addGlobalListener,\n isDisabled,\n preventFocusOnPress,\n removeAllGlobalListeners,\n allowTextSelectionOnPress,\n cancel,\n cancelOnPointerExit,\n triggerPressEnd,\n triggerPressStart,\n triggerPressUp\n ]);\n\n // Remove user-select: none in case component unmounts immediately after pressStart\n // eslint-disable-next-line arrow-body-style\n useEffect(() => {\n return () => {\n if (!allowTextSelectionOnPress) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n restoreTextSelection(ref.current.target ?? undefined);\n }\n };\n }, [allowTextSelectionOnPress]);\n\n return {\n isPressed: isPressedProp || isPressed,\n pressProps: mergeProps(domProps, pressProps)\n };\n}\n\nfunction isHTMLAnchorLink(target: Element): target is HTMLAnchorElement {\n return target.tagName === 'A' && target.hasAttribute('href');\n}\n\nfunction isValidKeyboardEvent(event: KeyboardEvent, currentTarget: Element): boolean {\n const {key, code} = event;\n const element = currentTarget as HTMLElement;\n const role = element.getAttribute('role');\n // Accessibility for keyboards. Space and Enter only.\n // \"Spacebar\" is for IE 11\n return (\n (key === 'Enter' || key === ' ' || key === 'Spacebar' || code === 'Space') &&\n !((element instanceof getOwnerWindow(element).HTMLInputElement && !isValidInputKey(element, key)) ||\n element instanceof getOwnerWindow(element).HTMLTextAreaElement ||\n element.isContentEditable) &&\n // Links should only trigger with Enter key\n !((role === 'link' || (!role && isHTMLAnchorLink(element))) && key !== 'Enter')\n );\n}\n\nfunction getTouchFromEvent(event: TouchEvent): Touch | null {\n const {targetTouches} = event;\n if (targetTouches.length > 0) {\n return targetTouches[0];\n }\n return null;\n}\n\nfunction getTouchById(\n event: TouchEvent,\n pointerId: null | number\n): null | Touch {\n const changedTouches = event.changedTouches;\n for (let i = 0; i < changedTouches.length; i++) {\n const touch = changedTouches[i];\n if (touch.identifier === pointerId) {\n return touch;\n }\n }\n return null;\n}\n\nfunction createEvent(target: FocusableElement, e: EventBase): EventBase {\n return {\n currentTarget: target,\n shiftKey: e.shiftKey,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n altKey: e.altKey\n };\n}\n\ninterface Rect {\n top: number,\n right: number,\n bottom: number,\n left: number\n}\n\ninterface EventPoint {\n clientX: number,\n clientY: number,\n width?: number,\n height?: number,\n radiusX?: number,\n radiusY?: number\n}\n\nfunction getPointClientRect(point: EventPoint): Rect {\n let offsetX = 0;\n let offsetY = 0;\n if (point.width !== undefined) {\n offsetX = (point.width / 2);\n } else if (point.radiusX !== undefined) {\n offsetX = point.radiusX;\n }\n if (point.height !== undefined) {\n offsetY = (point.height / 2);\n } else if (point.radiusY !== undefined) {\n offsetY = point.radiusY;\n }\n\n return {\n top: point.clientY - offsetY,\n right: point.clientX + offsetX,\n bottom: point.clientY + offsetY,\n left: point.clientX - offsetX\n };\n}\n\nfunction areRectanglesOverlapping(a: Rect, b: Rect) {\n // check if they cannot overlap on x axis\n if (a.left > b.right || b.left > a.right) {\n return false;\n }\n // check if they cannot overlap on y axis\n if (a.top > b.bottom || b.top > a.bottom) {\n return false;\n }\n return true;\n}\n\nfunction isOverTarget(point: EventPoint, target: Element) {\n let rect = target.getBoundingClientRect();\n let pointRect = getPointClientRect(point);\n return areRectanglesOverlapping(rect, pointRect);\n}\n\nfunction shouldPreventDefault(target: Element) {\n // We cannot prevent default if the target is a draggable element.\n return !(target instanceof HTMLElement) || !target.hasAttribute('draggable');\n}\n\nfunction shouldPreventDefaultKeyboard(target: Element, key: string) {\n if (target instanceof HTMLInputElement) {\n return !isValidInputKey(target, key);\n }\n\n if (target instanceof HTMLButtonElement) {\n return target.type !== 'submit' && target.type !== 'reset';\n }\n\n if (isHTMLAnchorLink(target)) {\n return false;\n }\n\n return true;\n}\n\nconst nonTextInputTypes = new Set([\n 'checkbox',\n 'radio',\n 'range',\n 'color',\n 'file',\n 'image',\n 'button',\n 'submit',\n 'reset'\n]);\n\nfunction isValidInputKey(target: HTMLInputElement, key: string) {\n // Only space should toggle checkboxes and radios, not enter.\n return target.type === 'checkbox' || target.type === 'radio'\n ? key === ' '\n : nonTextInputTypes.has(target.type);\n}\n","export function _class_apply_descriptor_get(receiver, descriptor) {\n if (descriptor.get) return descriptor.get.call(receiver);\n\n return descriptor.value;\n}\nexport { _class_apply_descriptor_get as _ };\n","import { _class_apply_descriptor_get } from \"./_class_apply_descriptor_get.js\";\nimport { _class_extract_field_descriptor } from \"./_class_extract_field_descriptor.js\";\n\nexport function _class_private_field_get(receiver, privateMap) {\n var descriptor = _class_extract_field_descriptor(receiver, privateMap, \"get\");\n return _class_apply_descriptor_get(receiver, descriptor);\n}\nexport { _class_private_field_get as _ };\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes} from '@react-types/shared';\nimport {mergeProps, useObjectRef} from '@react-aria/utils';\nimport {PressProps, usePress} from './usePress';\nimport React, {ForwardedRef, ReactElement} from 'react';\n\ninterface PressableProps extends PressProps {\n children: ReactElement<DOMAttributes, string>\n}\n\nexport const Pressable = React.forwardRef(({children, ...props}: PressableProps, ref: ForwardedRef<HTMLElement>) => {\n ref = useObjectRef(ref);\n let {pressProps} = usePress({...props, ref});\n let child = React.Children.only(children);\n return React.cloneElement(\n child,\n // @ts-ignore\n {ref, ...mergeProps(child.props, pressProps)}\n );\n});\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FocusableElement} from '@react-types/shared';\nimport {mergeProps, useObjectRef, useSyncRef} from '@react-aria/utils';\nimport {PressProps} from './usePress';\nimport {PressResponderContext} from './context';\nimport React, {ForwardedRef, ReactNode, useContext, useEffect, useMemo, useRef} from 'react';\n\ninterface PressResponderProps extends PressProps {\n children: ReactNode\n}\n\nexport const PressResponder = React.forwardRef(({children, ...props}: PressResponderProps, ref: ForwardedRef<FocusableElement>) => {\n let isRegistered = useRef(false);\n let prevContext = useContext(PressResponderContext);\n ref = useObjectRef(ref || prevContext?.ref);\n let context = mergeProps(prevContext || {}, {\n ...props,\n ref,\n register() {\n isRegistered.current = true;\n if (prevContext) {\n prevContext.register();\n }\n }\n });\n\n useSyncRef(prevContext, ref);\n\n useEffect(() => {\n if (!isRegistered.current) {\n console.warn(\n 'A PressResponder was rendered without a pressable child. ' +\n 'Either call the usePress hook, or wrap your DOM node with <Pressable> component.'\n );\n isRegistered.current = true; // only warn once in strict mode.\n }\n }, []);\n\n return (\n <PressResponderContext.Provider value={context}>\n {children}\n </PressResponderContext.Provider>\n );\n});\n\nexport function ClearPressResponder({children}: {children: ReactNode}) {\n let context = useMemo(() => ({register: () => {}}), []);\n return (\n <PressResponderContext.Provider value={context}>\n {children}\n </PressResponderContext.Provider>\n );\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FocusEvent as ReactFocusEvent, useCallback, useRef} from 'react';\nimport {useEffectEvent, useLayoutEffect} from '@react-aria/utils';\n\nexport class SyntheticFocusEvent<Target = Element> implements ReactFocusEvent<Target> {\n nativeEvent: FocusEvent;\n target: EventTarget & Target;\n currentTarget: EventTarget & Target;\n relatedTarget: Element;\n bubbles: boolean;\n cancelable: boolean;\n defaultPrevented: boolean;\n eventPhase: number;\n isTrusted: boolean;\n timeStamp: number;\n type: string;\n\n constructor(type: string, nativeEvent: FocusEvent) {\n this.nativeEvent = nativeEvent;\n this.target = nativeEvent.target as EventTarget & Target;\n this.currentTarget = nativeEvent.currentTarget as EventTarget & Target;\n this.relatedTarget = nativeEvent.relatedTarget as Element;\n this.bubbles = nativeEvent.bubbles;\n this.cancelable = nativeEvent.cancelable;\n this.defaultPrevented = nativeEvent.defaultPrevented;\n this.eventPhase = nativeEvent.eventPhase;\n this.isTrusted = nativeEvent.isTrusted;\n this.timeStamp = nativeEvent.timeStamp;\n this.type = type;\n }\n\n isDefaultPrevented(): boolean {\n return this.nativeEvent.defaultPrevented;\n }\n\n preventDefault(): void {\n this.defaultPrevented = true;\n this.nativeEvent.preventDefault();\n }\n\n stopPropagation(): void {\n this.nativeEvent.stopPropagation();\n this.isPropagationStopped = () => true;\n }\n\n isPropagationStopped(): boolean {\n return false;\n }\n\n persist() {}\n}\n\nexport function useSyntheticBlurEvent<Target = Element>(onBlur: (e: ReactFocusEvent<Target>) => void) {\n let stateRef = useRef({\n isFocused: false,\n observer: null as MutationObserver | null\n });\n\n // Clean up MutationObserver on unmount. See below.\n // eslint-disable-next-line arrow-body-style\n useLayoutEffect(() => {\n const state = stateRef.current;\n return () => {\n if (state.observer) {\n state.observer.disconnect();\n state.observer = null;\n }\n };\n }, []);\n\n let dispatchBlur = useEffectEvent((e: SyntheticFocusEvent<Target>) => {\n onBlur?.(e);\n });\n\n // This function is called during a React onFocus event.\n return useCallback((e: ReactFocusEvent<Target>) => {\n // React does not fire onBlur when an element is disabled. https://github.com/facebook/react/issues/9142\n // Most browsers fire a native focusout event in this case, except for Firefox. In that case, we use a\n // MutationObserver to watch for the disabled attribute, and dispatch these events ourselves.\n // For browsers that do, focusout fires before the MutationObserver, so onBlur should not fire twice.\n if (\n e.target instanceof HTMLButtonElement ||\n e.target instanceof HTMLInputElement ||\n e.target instanceof HTMLTextAreaElement ||\n e.target instanceof HTMLSelectElement\n ) {\n stateRef.current.isFocused = true;\n\n let target = e.target;\n let onBlurHandler: EventListenerOrEventListenerObject | null = (e) => {\n stateRef.current.isFocused = false;\n\n if (target.disabled) {\n // For backward compatibility, dispatch a (fake) React synthetic event.\n dispatchBlur(new SyntheticFocusEvent('blur', e as FocusEvent));\n }\n\n // We no longer need the MutationObserver once the target is blurred.\n if (stateRef.current.observer) {\n stateRef.current.observer.disconnect();\n stateRef.current.observer = null;\n }\n };\n\n target.addEventListener('focusout', onBlurHandler, {once: true});\n\n stateRef.current.observer = new MutationObserver(() => {\n if (stateRef.current.isFocused && target.disabled) {\n stateRef.current.observer?.disconnect();\n let relatedTargetEl = target === document.activeElement ? null : document.activeElement;\n target.dispatchEvent(new FocusEvent('blur', {relatedTarget: relatedTargetEl}));\n target.dispatchEvent(new FocusEvent('focusout', {bubbles: true, relatedTarget: relatedTargetEl}));\n }\n });\n\n stateRef.current.observer.observe(target, {attributes: true, attributeFilter: ['disabled']});\n }\n }, [dispatchBlur]);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {DOMAttributes, FocusableElement, FocusEvents} from '@react-types/shared';\nimport {FocusEvent, useCallback} from 'react';\nimport {useSyntheticBlurEvent} from './utils';\n\nexport interface FocusProps<Target = FocusableElement> extends FocusEvents<Target> {\n /** Whether the focus events should be disabled. */\n isDisabled?: boolean\n}\n\nexport interface FocusResult<Target = FocusableElement> {\n /** Props to spread onto the target element. */\n focusProps: DOMAttributes<Target>\n}\n\n/**\n * Handles focus events for the immediate target.\n * Focus events on child elements will be ignored.\n */\nexport function useFocus<Target extends FocusableElement = FocusableElement>(props: FocusProps<Target>): FocusResult<Target> {\n let {\n isDisabled,\n onFocus: onFocusProp,\n onBlur: onBlurProp,\n onFocusChange\n } = props;\n\n const onBlur: FocusProps<Target>['onBlur'] = useCallback((e: FocusEvent<Target>) => {\n if (e.target === e.currentTarget) {\n if (onBlurProp) {\n onBlurProp(e);\n }\n\n if (onFocusChange) {\n onFocusChange(false);\n }\n\n return true;\n }\n }, [onBlurProp, onFocusChange]);\n\n\n const onSyntheticFocus = useSyntheticBlurEvent<Target>(onBlur);\n\n const onFocus: FocusProps<Target>['onFocus'] = useCallback((e: FocusEvent<Target>) => {\n // Double check that document.activeElement actually matches e.target in case a previously chained\n // focus handler already moved focus somewhere else.\n if (e.target === e.currentTarget && document.activeElement === e.target) {\n if (onFocusProp) {\n onFocusProp(e);\n }\n\n if (onFocusChange) {\n onFocusChange(true);\n }\n\n onSyntheticFocus(e);\n }\n }, [onFocusChange, onFocusProp, onSyntheticFocus]);\n\n return {\n focusProps: {\n onFocus: (!isDisabled && (onFocusProp || onFocusChange || onBlurProp)) ? onFocus : undefined,\n onBlur: (!isDisabled && (onBlurProp || onFocusChange)) ? onBlur : undefined\n }\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {getOwnerDocument, getOwnerWindow, isMac, isVirtualClick} from '@react-aria/utils';\nimport {useEffect, useState} from 'react';\nimport {useIsSSR} from '@react-aria/ssr';\n\nexport type Modality = 'keyboard' | 'pointer' | 'virtual';\ntype HandlerEvent = PointerEvent | MouseEvent | KeyboardEvent | FocusEvent | null;\ntype Handler = (modality: Modality, e: HandlerEvent) => void;\nexport type FocusVisibleHandler = (isFocusVisible: boolean) => void;\nexport interface FocusVisibleProps {\n /** Whether the element is a text input. */\n isTextInput?: boolean,\n /** Whether the element will be auto focused. */\n autoFocus?: boolean\n}\n\nexport interface FocusVisibleResult {\n /** Whether keyboard focus is visible globally. */\n isFocusVisible: boolean\n}\n\nlet currentModality: null | Modality = null;\nlet changeHandlers = new Set<Handler>();\ninterface GlobalListenerData {\n focus: () => void\n}\nexport let hasSetupGlobalListeners = new Map<Window, GlobalListenerData>(); // We use a map here to support setting event listeners across multiple document objects.\nlet hasEventBeforeFocus = false;\nlet hasBlurredWindowRecently = false;\n\n// Only Tab or Esc keys will make focus visible on text input elements\nconst FOCUS_VISIBLE_INPUT_KEYS = {\n Tab: true,\n Escape: true\n};\n\nfunction triggerChangeHandlers(modality: Modality, e: HandlerEvent) {\n for (let handler of changeHandlers) {\n handler(modality, e);\n }\n}\n\n/**\n * Helper function to determine if a KeyboardEvent is unmodified and could make keyboard focus styles visible.\n */\nfunction isValidKey(e: KeyboardEvent) {\n // Control and Shift keys trigger when navigating back to the tab with keyboard.\n return !(e.metaKey || (!isMac() && e.altKey) || e.ctrlKey || e.key === 'Control' || e.key === 'Shift' || e.key === 'Meta');\n}\n\n\nfunction handleKeyboardEvent(e: KeyboardEvent) {\n hasEventBeforeFocus = true;\n if (isValidKey(e)) {\n currentModality = 'keyboard';\n triggerChangeHandlers('keyboard', e);\n }\n}\n\nfunction handlePointerEvent(e: PointerEvent | MouseEvent) {\n currentModality = 'pointer';\n if (e.type === 'mousedown' || e.type === 'pointerdown') {\n hasEventBeforeFocus = true;\n triggerChangeHandlers('pointer', e);\n }\n}\n\nfunction handleClickEvent(e: MouseEvent) {\n if (isVirtualClick(e)) {\n hasEventBeforeFocus = true;\n currentModality = 'virtual';\n }\n}\n\nfunction handleFocusEvent(e: FocusEvent) {\n // Firefox fires two extra focus events when the user first clicks into an iframe:\n // first on the window, then on the document. We ignore these events so they don't\n // cause keyboard focus rings to appear.\n if (e.target === window || e.target === document) {\n return;\n }\n\n // If a focus event occurs without a preceding keyboard or pointer event, switch to virtual modality.\n // This occurs, for example, when navigating a form with the next/previous buttons on iOS.\n if (!hasEventBeforeFocus && !hasBlurredWindowRecently) {\n currentModality = 'virtual';\n triggerChangeHandlers('virtual', e);\n }\n\n hasEventBeforeFocus = false;\n hasBlurredWindowRecently = false;\n}\n\nfunction handleWindowBlur() {\n // When the window is blurred, reset state. This is necessary when tabbing out of the window,\n // for example, since a subsequent focus event won't be fired.\n hasEventBeforeFocus = false;\n hasBlurredWindowRecently = true;\n}\n\n/**\n * Setup global event listeners to control when keyboard focus style should be visible.\n */\nfunction setupGlobalFocusEvents(element?: HTMLElement | null) {\n if (typeof window === 'undefined' || hasSetupGlobalListeners.get(getOwnerWindow(element))) {\n return;\n }\n\n const windowObject = getOwnerWindow(element);\n const documentObject = getOwnerDocument(element);\n\n // Programmatic focus() calls shouldn't affect the current input modality.\n // However, we need to detect other cases when a focus event occurs without\n // a preceding user event (e.g. screen reader focus). Overriding the focus\n // method on HTMLElement.prototype is a bit hacky, but works.\n let focus = windowObject.HTMLElement.prototype.focus;\n windowObject.HTMLElement.prototype.focus = function () {\n hasEventBeforeFocus = true;\n focus.apply(this, arguments as unknown as [options?: FocusOptions | undefined]);\n };\n\n documentObject.addEventListener('keydown', handleKeyboardEvent, true);\n documentObject.addEventListener('keyup', handleKeyboardEvent, true);\n documentObject.addEventListener('click', handleClickEvent, true);\n\n // Register focus events on the window so they are sure to happen\n // before React's event listeners (registered on the document).\n windowObject.addEventListener('focus', handleFocusEvent, true);\n windowObject.addEventListener('blur', handleWindowBlur, false);\n\n if (typeof PointerEvent !== 'undefined') {\n documentObject.addEventListener('pointerdown', handlePointerEvent, true);\n documentObject.addEventListener('pointermove', handlePointerEvent, true);\n documentObject.addEventListener('pointerup', handlePointerEvent, true);\n } else {\n documentObject.addEventListener('mousedown', handlePointerEvent, true);\n documentObject.addEventListener('mousemove', handlePointerEvent, true);\n documentObject.addEventListener('mouseup', handlePointerEvent, true);\n }\n\n // Add unmount handler\n windowObject.addEventListener('beforeunload', () => {\n tearDownWindowFocusTracking(element);\n }, {once: true});\n\n hasSetupGlobalListeners.set(windowObject, {focus});\n}\n\nconst tearDownWindowFocusTracking = (element, loadListener?: () => void) => {\n const windowObject = getOwnerWindow(element);\n const documentObject = getOwnerDocument(element);\n if (loadListener) {\n documentObject.removeEventListener('DOMContentLoaded', loadListener);\n }\n if (!hasSetupGlobalListeners.has(windowObject)) {\n return;\n }\n windowObject.HTMLElement.prototype.focus = hasSetupGlobalListeners.get(windowObject)!.focus;\n\n documentObject.removeEventListener('keydown', handleKeyboardEvent, true);\n documentObject.removeEventListener('keyup', handleKeyboardEvent, true);\n documentObject.removeEventListener('click', handleClickEvent, true);\n windowObject.removeEventListener('focus', handleFocusEvent, true);\n windowObject.removeEventListener('blur', handleWindowBlur, false);\n\n if (typeof PointerEvent !== 'undefined') {\n documentObject.removeEventListener('pointerdown', handlePointerEvent, true);\n documentObject.removeEventListener('pointermove', handlePointerEvent, true);\n documentObject.removeEventListener('pointerup', handlePointerEvent, true);\n } else {\n documentObject.removeEventListener('mousedown', handlePointerEvent, true);\n documentObject.removeEventListener('mousemove', handlePointerEvent, true);\n documentObject.removeEventListener('mouseup', handlePointerEvent, true);\n }\n\n hasSetupGlobalListeners.delete(windowObject);\n};\n\n/**\n * EXPERIMENTAL\n * Adds a window (i.e. iframe) to the list of windows that are being tracked for focus visible.\n *\n * Sometimes apps render portions of their tree into an iframe. In this case, we cannot accurately track if the focus\n * is visible because we cannot see interactions inside the iframe. If you have this in your application's architecture,\n * then this function will attach event listeners inside the iframe. You should call `addWindowFocusTracking` with an\n * element from inside the window you wish to add. We'll retrieve the relevant elements based on that.\n * Note, you do not need to call this for the default window, as we call it for you.\n *\n * When you are ready to stop listening, but you do not wish to unmount the iframe, you may call the cleanup function\n * returned by `addWindowFocusTracking`. Otherwise, when you unmount the iframe, all listeners and state will be cleaned\n * up automatically for you.\n *\n * @param element @default document.body - The element provided will be used to get the window to add.\n * @returns A function to remove the event listeners and cleanup the state.\n */\nexport function addWindowFocusTracking(element?: HTMLElement | null): () => void {\n const documentObject = getOwnerDocument(element);\n let loadListener;\n if (documentObject.readyState !== 'loading') {\n setupGlobalFocusEvents(element);\n } else {\n loadListener = () => {\n setupGlobalFocusEvents(element);\n };\n documentObject.addEventListener('DOMContentLoaded', loadListener);\n }\n\n return () => tearDownWindowFocusTracking(element, loadListener);\n}\n\n// Server-side rendering does not have the document object defined\n// eslint-disable-next-line no-restricted-globals\nif (typeof document !== 'undefined') {\n addWindowFocusTracking();\n}\n\n/**\n * If true, keyboard focus is visible.\n */\nexport function isFocusVisible(): boolean {\n return currentModality !== 'pointer';\n}\n\nexport function getInteractionModality(): Modality | null {\n return currentModality;\n}\n\nexport function setInteractionModality(modality: Modality) {\n currentModality = modality;\n triggerChangeHandlers(modality, null);\n}\n\n/**\n * Keeps state of the current modality.\n */\nexport function useInteractionModality(): Modality | null {\n setupGlobalFocusEvents();\n\n let [modality, setModality] = useState(currentModality);\n useEffect(() => {\n let handler = () => {\n setModality(currentModality);\n };\n\n changeHandlers.add(handler);\n return () => {\n changeHandlers.delete(handler);\n };\n }, []);\n\n return useIsSSR() ? null : modality;\n}\n\nconst nonTextInputTypes = new Set([\n 'checkbox',\n 'radio',\n 'range',\n 'color',\n 'file',\n 'image',\n 'button',\n 'submit',\n 'reset'\n]);\n\n/**\n * If this is attached to text input component, return if the event is a focus event (Tab/Escape keys pressed) so that\n * focus visible style can be properly set.\n */\nfunction isKeyboardFocusEvent(isTextInput: boolean, modality: Modality, e: HandlerEvent) {\n const IHTMLInputElement = typeof window !== 'undefined' ? getOwnerWindow(e?.target as Element).HTMLInputElement : HTMLInputElement;\n const IHTMLTextAreaElement = typeof window !== 'undefined' ? getOwnerWindow(e?.target as Element).HTMLTextAreaElement : HTMLTextAreaElement;\n const IHTMLElement = typeof window !== 'undefined' ? getOwnerWindow(e?.target as Element).HTMLElement : HTMLElement;\n const IKeyboardEvent = typeof window !== 'undefined' ? getOwnerWindow(e?.target as Element).KeyboardEvent : KeyboardEvent;\n\n isTextInput = isTextInput ||\n (e?.target instanceof IHTMLInputElement && !nonTextInputTypes.has(e?.target?.type)) ||\n e?.target instanceof IHTMLTextAreaElement ||\n (e?.target instanceof IHTMLElement && e?.target.isContentEditable);\n return !(isTextInput && modality === 'keyboard' && e instanceof IKeyboardEvent && !FOCUS_VISIBLE_INPUT_KEYS[e.key]);\n}\n\n/**\n * Manages focus visible state for the page, and subscribes individual components for updates.\n */\nexport function useFocusVisible(props: FocusVisibleProps = {}): FocusVisibleResult {\n let {isTextInput, autoFocus} = props;\n let [isFocusVisibleState, setFocusVisible] = useState(autoFocus || isFocusVisible());\n useFocusVisibleListener((isFocusVisible) => {\n setFocusVisible(isFocusVisible);\n }, [isTextInput], {isTextInput});\n\n return {isFocusVisible: isFocusVisibleState};\n}\n\n/**\n * Listens for trigger change and reports if focus is visible (i.e., modality is not pointer).\n */\nexport function useFocusVisibleListener(fn: FocusVisibleHandler, deps: ReadonlyArray<any>, opts?: {isTextInput?: boolean}): void {\n setupGlobalFocusEvents();\n\n useEffect(() => {\n let handler = (modality: Modality, e: HandlerEvent) => {\n if (!isKeyboardFocusEvent(!!(opts?.isTextInput), modality, e)) {\n return;\n }\n fn(isFocusVisible());\n };\n changeHandlers.add(handler);\n return () => {\n changeHandlers.delete(handler);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {DOMAttributes} from '@react-types/shared';\nimport {FocusEvent, useCallback, useRef} from 'react';\nimport {useSyntheticBlurEvent} from './utils';\n\nexport interface FocusWithinProps {\n /** Whether the focus within events should be disabled. */\n isDisabled?: boolean,\n /** Handler that is called when the target element or a descendant receives focus. */\n onFocusWithin?: (e: FocusEvent) => void,\n /** Handler that is called when the target element and all descendants lose focus. */\n onBlurWithin?: (e: FocusEvent) => void,\n /** Handler that is called when the the focus within state changes. */\n onFocusWithinChange?: (isFocusWithin: boolean) => void\n}\n\nexport interface FocusWithinResult {\n /** Props to spread onto the target element. */\n focusWithinProps: DOMAttributes\n}\n\n/**\n * Handles focus events for the target and its descendants.\n */\nexport function useFocusWithin(props: FocusWithinProps): FocusWithinResult {\n let {\n isDisabled,\n onBlurWithin,\n onFocusWithin,\n onFocusWithinChange\n } = props;\n let state = useRef({\n isFocusWithin: false\n });\n\n let onBlur = useCallback((e: FocusEvent) => {\n // We don't want to trigger onBlurWithin and then immediately onFocusWithin again\n // when moving focus inside the element. Only trigger if the currentTarget doesn't\n // include the relatedTarget (where focus is moving).\n if (state.current.isFocusWithin && !(e.currentTarget as Element).contains(e.relatedTarget as Element)) {\n state.current.isFocusWithin = false;\n\n if (onBlurWithin) {\n onBlurWithin(e);\n }\n\n if (onFocusWithinChange) {\n onFocusWithinChange(false);\n }\n }\n }, [onBlurWithin, onFocusWithinChange, state]);\n\n let onSyntheticFocus = useSyntheticBlurEvent(onBlur);\n let onFocus = useCallback((e: FocusEvent) => {\n // Double check that document.activeElement actually matches e.target in case a previously chained\n // focus handler already moved focus somewhere else.\n if (!state.current.isFocusWithin && document.activeElement === e.target) {\n if (onFocusWithin) {\n onFocusWithin(e);\n }\n\n if (onFocusWithinChange) {\n onFocusWithinChange(true);\n }\n\n state.current.isFocusWithin = true;\n onSyntheticFocus(e);\n }\n }, [onFocusWithin, onFocusWithinChange, onSyntheticFocus]);\n\n if (isDisabled) {\n return {\n focusWithinProps: {\n // These should not have been null, that would conflict in mergeProps\n onFocus: undefined,\n onBlur: undefined\n }\n };\n }\n\n return {\n focusWithinProps: {\n onFocus,\n onBlur\n }\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {DOMAttributes, HoverEvents} from '@react-types/shared';\nimport {useEffect, useMemo, useRef, useState} from 'react';\n\nexport interface HoverProps extends HoverEvents {\n /** Whether the hover events should be disabled. */\n isDisabled?: boolean\n}\n\nexport interface HoverResult {\n /** Props to spread on the target element. */\n hoverProps: DOMAttributes,\n isHovered: boolean\n}\n\n// iOS fires onPointerEnter twice: once with pointerType=\"touch\" and again with pointerType=\"mouse\".\n// We want to ignore these emulated events so they do not trigger hover behavior.\n// See https://bugs.webkit.org/show_bug.cgi?id=214609.\nlet globalIgnoreEmulatedMouseEvents = false;\nlet hoverCount = 0;\n\nfunction setGlobalIgnoreEmulatedMouseEvents() {\n globalIgnoreEmulatedMouseEvents = true;\n\n // Clear globalIgnoreEmulatedMouseEvents after a short timeout. iOS fires onPointerEnter\n // with pointerType=\"mouse\" immediately after onPointerUp and before onFocus. On other\n // devices that don't have this quirk, we don't want to ignore a mouse hover sometime in\n // the distant future because a user previously touched the element.\n setTimeout(() => {\n globalIgnoreEmulatedMouseEvents = false;\n }, 50);\n}\n\nfunction handleGlobalPointerEvent(e) {\n if (e.pointerType === 'touch') {\n setGlobalIgnoreEmulatedMouseEvents();\n }\n}\n\nfunction setupGlobalTouchEvents() {\n if (typeof document === 'undefined') {\n return;\n }\n\n if (typeof PointerEvent !== 'undefined') {\n document.addEventListener('pointerup', handleGlobalPointerEvent);\n } else {\n document.addEventListener('touchend', setGlobalIgnoreEmulatedMouseEvents);\n }\n\n hoverCount++;\n return () => {\n hoverCount--;\n if (hoverCount > 0) {\n return;\n }\n\n if (typeof PointerEvent !== 'undefined') {\n document.removeEventListener('pointerup', handleGlobalPointerEvent);\n } else {\n document.removeEventListener('touchend', setGlobalIgnoreEmulatedMouseEvents);\n }\n };\n}\n\n/**\n * Handles pointer hover interactions for an element. Normalizes behavior\n * across browsers and platforms, and ignores emulated mouse events on touch devices.\n */\nexport function useHover(props: HoverProps): HoverResult {\n let {\n onHoverStart,\n onHoverChange,\n onHoverEnd,\n isDisabled\n } = props;\n\n let [isHovered, setHovered] = useState(false);\n let state = useRef({\n isHovered: false,\n ignoreEmulatedMouseEvents: false,\n pointerType: '',\n target: null\n }).current;\n\n useEffect(setupGlobalTouchEvents, []);\n\n let {hoverProps, triggerHoverEnd} = useMemo(() => {\n let triggerHoverStart = (event, pointerType) => {\n state.pointerType = pointerType;\n if (isDisabled || pointerType === 'touch' || state.isHovered || !event.currentTarget.contains(event.target)) {\n return;\n }\n\n state.isHovered = true;\n let target = event.currentTarget;\n state.target = target;\n\n if (onHoverStart) {\n onHoverStart({\n type: 'hoverstart',\n target,\n pointerType\n });\n }\n\n if (onHoverChange) {\n onHoverChange(true);\n }\n\n setHovered(true);\n };\n\n let triggerHoverEnd = (event, pointerType) => {\n state.pointerType = '';\n state.target = null;\n\n if (pointerType === 'touch' || !state.isHovered) {\n return;\n }\n\n state.isHovered = false;\n let target = event.currentTarget;\n if (onHoverEnd) {\n onHoverEnd({\n type: 'hoverend',\n target,\n pointerType\n });\n }\n\n if (onHoverChange) {\n onHoverChange(false);\n }\n\n setHovered(false);\n };\n\n let hoverProps: DOMAttributes = {};\n\n if (typeof PointerEvent !== 'undefined') {\n hoverProps.onPointerEnter = (e) => {\n if (globalIgnoreEmulatedMouseEvents && e.pointerType === 'mouse') {\n return;\n }\n\n triggerHoverStart(e, e.pointerType);\n };\n\n hoverProps.onPointerLeave = (e) => {\n if (!isDisabled && e.currentTarget.contains(e.target as Element)) {\n triggerHoverEnd(e, e.pointerType);\n }\n };\n } else {\n hoverProps.onTouchStart = () => {\n state.ignoreEmulatedMouseEvents = true;\n };\n\n hoverProps.onMouseEnter = (e) => {\n if (!state.ignoreEmulatedMouseEvents && !globalIgnoreEmulatedMouseEvents) {\n triggerHoverStart(e, 'mouse');\n }\n\n state.ignoreEmulatedMouseEvents = false;\n };\n\n hoverProps.onMouseLeave = (e) => {\n if (!isDisabled && e.currentTarget.contains(e.target as Element)) {\n triggerHoverEnd(e, 'mouse');\n }\n };\n }\n return {hoverProps, triggerHoverEnd};\n }, [onHoverStart, onHoverChange, onHoverEnd, isDisabled, state]);\n\n useEffect(() => {\n // Call the triggerHoverEnd as soon as isDisabled changes to true\n // Safe to call triggerHoverEnd, it will early return if we aren't currently hovering\n if (isDisabled) {\n triggerHoverEnd({currentTarget: state.target}, state.pointerType);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isDisabled]);\n\n return {\n hoverProps,\n isHovered\n };\n}\n\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {getOwnerDocument, useEffectEvent} from '@react-aria/utils';\nimport {RefObject, useEffect, useRef} from 'react';\n\nexport interface InteractOutsideProps {\n ref: RefObject<Element>,\n onInteractOutside?: (e: PointerEvent) => void,\n onInteractOutsideStart?: (e: PointerEvent) => void,\n /** Whether the interact outside events should be disabled. */\n isDisabled?: boolean\n}\n\n/**\n * Example, used in components like Dialogs and Popovers so they can close\n * when a user clicks outside them.\n */\nexport function useInteractOutside(props: InteractOutsideProps) {\n let {ref, onInteractOutside, isDisabled, onInteractOutsideStart} = props;\n let stateRef = useRef({\n isPointerDown: false,\n ignoreEmulatedMouseEvents: false\n });\n\n let onPointerDown = useEffectEvent((e) => {\n if (onInteractOutside && isValidEvent(e, ref)) {\n if (onInteractOutsideStart) {\n onInteractOutsideStart(e);\n }\n stateRef.current.isPointerDown = true;\n }\n });\n\n let triggerInteractOutside = useEffectEvent((e: PointerEvent) => {\n if (onInteractOutside) {\n onInteractOutside(e);\n }\n });\n\n useEffect(() => {\n let state = stateRef.current;\n if (isDisabled) {\n return;\n }\n\n const element = ref.current;\n const documentObject = getOwnerDocument(element);\n\n // Use pointer events if available. Otherwise, fall back to mouse and touch events.\n if (typeof PointerEvent !== 'undefined') {\n let onPointerUp = (e) => {\n if (state.isPointerDown && isValidEvent(e, ref)) {\n triggerInteractOutside(e);\n }\n state.isPointerDown = false;\n };\n\n // changing these to capture phase fixed combobox\n documentObject.addEventListener('pointerdown', onPointerDown, true);\n documentObject.addEventListener('pointerup', onPointerUp, true);\n\n return () => {\n documentObject.removeEventListener('pointerdown', onPointerDown, true);\n documentObject.removeEventListener('pointerup', onPointerUp, true);\n };\n } else {\n let onMouseUp = (e) => {\n if (state.ignoreEmulatedMouseEvents) {\n state.ignoreEmulatedMouseEvents = false;\n } else if (state.isPointerDown && isValidEvent(e, ref)) {\n triggerInteractOutside(e);\n }\n state.isPointerDown = false;\n };\n\n let onTouchEnd = (e) => {\n state.ignoreEmulatedMouseEvents = true;\n if (state.isPointerDown && isValidEvent(e, ref)) {\n triggerInteractOutside(e);\n }\n state.isPointerDown = false;\n };\n\n documentObject.addEventListener('mousedown', onPointerDown, true);\n documentObject.addEventListener('mouseup', onMouseUp, true);\n documentObject.addEventListener('touchstart', onPointerDown, true);\n documentObject.addEventListener('touchend', onTouchEnd, true);\n\n return () => {\n documentObject.removeEventListener('mousedown', onPointerDown, true);\n documentObject.removeEventListener('mouseup', onMouseUp, true);\n documentObject.removeEventListener('touchstart', onPointerDown, true);\n documentObject.removeEventListener('touchend', onTouchEnd, true);\n };\n }\n }, [ref, isDisabled, onPointerDown, triggerInteractOutside]);\n}\n\nfunction isValidEvent(event, ref) {\n if (event.button > 0) {\n return false;\n }\n\n if (event.target) {\n // if the event target is no longer in the document, ignore\n const ownerDocument = event.target.ownerDocument;\n if (!ownerDocument || !ownerDocument.documentElement.contains(event.target)) {\n return false;\n }\n\n // If the target is within a top layer element (e.g. toasts), ignore.\n if (event.target.closest('[data-react-aria-top-layer]')) {\n return false;\n }\n }\n\n return ref.current && !ref.current.contains(event.target);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {BaseEvent} from '@react-types/shared';\nimport {SyntheticEvent} from 'react';\n\n/**\n * This function wraps a React event handler to make stopPropagation the default, and support continuePropagation instead.\n */\nexport function createEventHandler<T extends SyntheticEvent>(handler?: (e: BaseEvent<T>) => void): ((e: T) => void) | undefined {\n if (!handler) {\n return undefined;\n }\n\n let shouldStopPropagation = true;\n return (e: T) => {\n let event: BaseEvent<T> = {\n ...e,\n preventDefault() {\n e.preventDefault();\n },\n isDefaultPrevented() {\n return e.isDefaultPrevented();\n },\n stopPropagation() {\n console.error('stopPropagation is now the default behavior for events in React Spectrum. You can use continuePropagation() to revert this behavior.');\n },\n continuePropagation() {\n shouldStopPropagation = false;\n }\n };\n\n handler(event);\n\n if (shouldStopPropagation) {\n e.stopPropagation();\n }\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {createEventHandler} from './createEventHandler';\nimport {DOMAttributes, KeyboardEvents} from '@react-types/shared';\n\nexport interface KeyboardProps extends KeyboardEvents {\n /** Whether the keyboard events should be disabled. */\n isDisabled?: boolean\n}\n\nexport interface KeyboardResult {\n /** Props to spread onto the target element. */\n keyboardProps: DOMAttributes\n}\n\n/**\n * Handles keyboard interactions for a focusable element.\n */\nexport function useKeyboard(props: KeyboardProps): KeyboardResult {\n return {\n keyboardProps: props.isDisabled ? {} : {\n onKeyDown: createEventHandler(props.onKeyDown),\n onKeyUp: createEventHandler(props.onKeyUp)\n }\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes, LongPressEvent} from '@react-types/shared';\nimport {mergeProps, useDescription, useGlobalListeners} from '@react-aria/utils';\nimport {usePress} from './usePress';\nimport {useRef} from 'react';\n\nexport interface LongPressProps {\n /** Whether long press events should be disabled. */\n isDisabled?: boolean,\n /** Handler that is called when a long press interaction starts. */\n onLongPressStart?: (e: LongPressEvent) => void,\n /**\n * Handler that is called when a long press interaction ends, either\n * over the target or when the pointer leaves the target.\n */\n onLongPressEnd?: (e: LongPressEvent) => void,\n /**\n * Handler that is called when the threshold time is met while\n * the press is over the target.\n */\n onLongPress?: (e: LongPressEvent) => void,\n /**\n * The amount of time in milliseconds to wait before triggering a long press.\n * @default 500ms\n */\n threshold?: number,\n /**\n * A description for assistive techology users indicating that a long press\n * action is available, e.g. \"Long press to open menu\".\n */\n accessibilityDescription?: string\n}\n\nexport interface LongPressResult {\n /** Props to spread on the target element. */\n longPressProps: DOMAttributes\n}\n\nconst DEFAULT_THRESHOLD = 500;\n\n/**\n * Handles long press interactions across mouse and touch devices. Supports a customizable time threshold,\n * accessibility description, and normalizes behavior across browsers and devices.\n */\nexport function useLongPress(props: LongPressProps): LongPressResult {\n let {\n isDisabled,\n onLongPressStart,\n onLongPressEnd,\n onLongPress,\n threshold = DEFAULT_THRESHOLD,\n accessibilityDescription\n } = props;\n\n const timeRef = useRef<ReturnType<typeof setTimeout> | undefined>();\n let {addGlobalListener, removeGlobalListener} = useGlobalListeners();\n\n let {pressProps} = usePress({\n isDisabled,\n onPressStart(e) {\n e.continuePropagation();\n if (e.pointerType === 'mouse' || e.pointerType === 'touch') {\n if (onLongPressStart) {\n onLongPressStart({\n ...e,\n type: 'longpressstart'\n });\n }\n\n timeRef.current = setTimeout(() => {\n // Prevent other usePress handlers from also handling this event.\n e.target.dispatchEvent(new PointerEvent('pointercancel', {bubbles: true}));\n if (onLongPress) {\n onLongPress({\n ...e,\n type: 'longpress'\n });\n }\n timeRef.current = undefined;\n }, threshold);\n\n // Prevent context menu, which may be opened on long press on touch devices\n if (e.pointerType === 'touch') {\n let onContextMenu = e => {\n e.preventDefault();\n };\n\n addGlobalListener(e.target, 'contextmenu', onContextMenu, {once: true});\n addGlobalListener(window, 'pointerup', () => {\n // If no contextmenu event is fired quickly after pointerup, remove the handler\n // so future context menu events outside a long press are not prevented.\n setTimeout(() => {\n removeGlobalListener(e.target, 'contextmenu', onContextMenu);\n }, 30);\n }, {once: true});\n }\n }\n },\n onPressEnd(e) {\n if (timeRef.current) {\n clearTimeout(timeRef.current);\n }\n\n if (onLongPressEnd && (e.pointerType === 'mouse' || e.pointerType === 'touch')) {\n onLongPressEnd({\n ...e,\n type: 'longpressend'\n });\n }\n }\n });\n\n let descriptionProps = useDescription(onLongPress && !isDisabled ? accessibilityDescription : undefined);\n\n return {\n longPressProps: mergeProps(pressProps, descriptionProps)\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FocusableElement} from '@react-types/shared';\nimport {focusWithoutScrolling, getOwnerDocument, runAfterTransition} from '@react-aria/utils';\nimport {getInteractionModality} from '@react-aria/interactions';\n\n/**\n * A utility function that focuses an element while avoiding undesired side effects such\n * as page scrolling and screen reader issues with CSS transitions.\n */\nexport function focusSafely(element: FocusableElement) {\n // If the user is interacting with a virtual cursor, e.g. screen reader, then\n // wait until after any animated transitions that are currently occurring on\n // the page before shifting focus. This avoids issues with VoiceOver on iOS\n // causing the page to scroll when moving focus if the element is transitioning\n // from off the screen.\n const ownerDocument = getOwnerDocument(element);\n if (getInteractionModality() === 'virtual') {\n let lastFocusedElement = ownerDocument.activeElement;\n runAfterTransition(() => {\n // If focus did not move and the element is still in the document, focus it.\n if (ownerDocument.activeElement === lastFocusedElement && element.isConnected) {\n focusWithoutScrolling(element);\n }\n });\n } else {\n focusWithoutScrolling(element);\n }\n}\n","/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {getOwnerWindow} from '@react-aria/utils';\n\nfunction isStyleVisible(element: Element) {\n const windowObject = getOwnerWindow(element);\n if (!(element instanceof windowObject.HTMLElement) && !(element instanceof windowObject.SVGElement)) {\n return false;\n }\n\n let {display, visibility} = element.style;\n\n let isVisible = (\n display !== 'none' &&\n visibility !== 'hidden' &&\n visibility !== 'collapse'\n );\n\n if (isVisible) {\n const {getComputedStyle} = element.ownerDocument.defaultView as unknown as Window;\n let {display: computedDisplay, visibility: computedVisibility} = getComputedStyle(element);\n\n isVisible = (\n computedDisplay !== 'none' &&\n computedVisibility !== 'hidden' &&\n computedVisibility !== 'collapse'\n );\n }\n\n return isVisible;\n}\n\nfunction isAttributeVisible(element: Element, childElement?: Element) {\n return (\n !element.hasAttribute('hidden') &&\n (element.nodeName === 'DETAILS' &&\n childElement &&\n childElement.nodeName !== 'SUMMARY'\n ? element.hasAttribute('open')\n : true)\n );\n}\n\n/**\n * Adapted from https://github.com/testing-library/jest-dom and\n * https://github.com/vuejs/vue-test-utils-next/.\n * Licensed under the MIT License.\n * @param element - Element to evaluate for display or visibility.\n */\nexport function isElementVisible(element: Element, childElement?: Element) {\n return (\n element.nodeName !== '#comment' &&\n isStyleVisible(element) &&\n isAttributeVisible(element, childElement) &&\n (!element.parentElement || isElementVisible(element.parentElement, element))\n );\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FocusableElement} from '@react-types/shared';\nimport {focusSafely} from './focusSafely';\nimport {getOwnerDocument, useLayoutEffect} from '@react-aria/utils';\nimport {isElementVisible} from './isElementVisible';\nimport React, {ReactNode, RefObject, useContext, useEffect, useMemo, useRef} from 'react';\n\nexport interface FocusScopeProps {\n /** The contents of the focus scope. */\n children: ReactNode,\n\n /**\n * Whether to contain focus inside the scope, so users cannot\n * move focus outside, for example in a modal dialog.\n */\n contain?: boolean,\n\n /**\n * Whether to restore focus back to the element that was focused\n * when the focus scope mounted, after the focus scope unmounts.\n */\n restoreFocus?: boolean,\n\n /** Whether to auto focus the first focusable element in the focus scope on mount. */\n autoFocus?: boolean\n}\n\nexport interface FocusManagerOptions {\n /** The element to start searching from. The currently focused element by default. */\n from?: Element,\n /** Whether to only include tabbable elements, or all focusable elements. */\n tabbable?: boolean,\n /** Whether focus should wrap around when it reaches the end of the scope. */\n wrap?: boolean,\n /** A callback that determines whether the given element is focused. */\n accept?: (node: Element) => boolean\n}\n\nexport interface FocusManager {\n /** Moves focus to the next focusable or tabbable element in the focus scope. */\n focusNext(opts?: FocusManagerOptions): FocusableElement | null,\n /** Moves focus to the previous focusable or tabbable element in the focus scope. */\n focusPrevious(opts?: FocusManagerOptions): FocusableElement | null,\n /** Moves focus to the first focusable or tabbable element in the focus scope. */\n focusFirst(opts?: FocusManagerOptions): FocusableElement | null,\n /** Moves focus to the last focusable or tabbable element in the focus scope. */\n focusLast(opts?: FocusManagerOptions): FocusableElement | null\n}\n\ntype ScopeRef = RefObject<Element[]> | null;\ninterface IFocusContext {\n focusManager: FocusManager,\n parentNode: TreeNode | null\n}\n\nconst FocusContext = React.createContext<IFocusContext | null>(null);\n\nlet activeScope: ScopeRef = null;\n\n// This is a hacky DOM-based implementation of a FocusScope until this RFC lands in React:\n// https://github.com/reactjs/rfcs/pull/109\n\n/**\n * A FocusScope manages focus for its descendants. It supports containing focus inside\n * the scope, restoring focus to the previously focused element on unmount, and auto\n * focusing children on mount. It also acts as a container for a programmatic focus\n * management interface that can be used to move focus forward and back in response\n * to user events.\n */\nexport function FocusScope(props: FocusScopeProps) {\n let {children, contain, restoreFocus, autoFocus} = props;\n let startRef = useRef<HTMLSpanElement>(null);\n let endRef = useRef<HTMLSpanElement>(null);\n let scopeRef = useRef<Element[]>([]);\n let {parentNode} = useContext(FocusContext) || {};\n\n // Create a tree node here so we can add children to it even before it is added to the tree.\n let node = useMemo(() => new TreeNode({scopeRef}), [scopeRef]);\n\n useLayoutEffect(() => {\n // If a new scope mounts outside the active scope, (e.g. DialogContainer launched from a menu),\n // use the active scope as the parent instead of the parent from context. Layout effects run bottom\n // up, so if the parent is not yet added to the tree, don't do this. Only the outer-most FocusScope\n // that is being added should get the activeScope as its parent.\n let parent = parentNode || focusScopeTree.root;\n if (focusScopeTree.getTreeNode(parent.scopeRef) && activeScope && !isAncestorScope(activeScope, parent.scopeRef)) {\n let activeNode = focusScopeTree.getTreeNode(activeScope);\n if (activeNode) {\n parent = activeNode;\n }\n }\n\n // Add the node to the parent, and to the tree.\n parent.addChild(node);\n focusScopeTree.addNode(node);\n }, [node, parentNode]);\n\n useLayoutEffect(() => {\n let node = focusScopeTree.getTreeNode(scopeRef);\n if (node) {\n node.contain = !!contain;\n }\n }, [contain]);\n\n useLayoutEffect(() => {\n // Find all rendered nodes between the sentinels and add them to the scope.\n let node = startRef.current?.nextSibling!;\n let nodes: Element[] = [];\n while (node && node !== endRef.current) {\n nodes.push(node as Element);\n node = node.nextSibling as Element;\n }\n\n scopeRef.current = nodes;\n }, [children]);\n\n useActiveScopeTracker(scopeRef, restoreFocus, contain);\n useFocusContainment(scopeRef, contain);\n useRestoreFocus(scopeRef, restoreFocus, contain);\n useAutoFocus(scopeRef, autoFocus);\n\n // This needs to be an effect so that activeScope is updated after the FocusScope tree is complete.\n // It cannot be a useLayoutEffect because the parent of this node hasn't been attached in the tree yet.\n useEffect(() => {\n const activeElement = getOwnerDocument(scopeRef.current ? scopeRef.current[0] : undefined).activeElement;\n let scope: TreeNode | null = null;\n\n if (isElementInScope(activeElement, scopeRef.current)) {\n // We need to traverse the focusScope tree and find the bottom most scope that\n // contains the active element and set that as the activeScope.\n for (let node of focusScopeTree.traverse()) {\n if (node.scopeRef && isElementInScope(activeElement, node.scopeRef.current)) {\n scope = node;\n }\n }\n\n if (scope === focusScopeTree.getTreeNode(scopeRef)) {\n activeScope = scope.scopeRef;\n }\n }\n }, [scopeRef]);\n\n // This layout effect cleanup is so that the tree node is removed synchronously with react before the RAF\n // in useRestoreFocus cleanup runs.\n useLayoutEffect(() => {\n return () => {\n // Scope may have been re-parented.\n let parentScope = focusScopeTree.getTreeNode(scopeRef)?.parent?.scopeRef ?? null;\n\n if (\n (scopeRef === activeScope || isAncestorScope(scopeRef, activeScope)) &&\n (!parentScope || focusScopeTree.getTreeNode(parentScope))\n ) {\n activeScope = parentScope;\n }\n focusScopeTree.removeTreeNode(scopeRef);\n };\n }, [scopeRef]);\n\n let focusManager = useMemo(() => createFocusManagerForScope(scopeRef), []);\n let value = useMemo(() => ({\n focusManager,\n parentNode: node\n }), [node, focusManager]);\n\n return (\n <FocusContext.Provider value={value}>\n <span data-focus-scope-start hidden ref={startRef} />\n {children}\n <span data-focus-scope-end hidden ref={endRef} />\n </FocusContext.Provider>\n );\n}\n\n/**\n * Returns a FocusManager interface for the parent FocusScope.\n * A FocusManager can be used to programmatically move focus within\n * a FocusScope, e.g. in response to user events like keyboard navigation.\n */\nexport function useFocusManager(): FocusManager | undefined {\n return useContext(FocusContext)?.focusManager;\n}\n\nfunction createFocusManagerForScope(scopeRef: React.RefObject<Element[]>): FocusManager {\n return {\n focusNext(opts: FocusManagerOptions = {}) {\n let scope = scopeRef.current!;\n let {from, tabbable, wrap, accept} = opts;\n let node = from || getOwnerDocument(scope[0]).activeElement!;\n let sentinel = scope[0].previousElementSibling!;\n let scopeRoot = getScopeRoot(scope);\n let walker = getFocusableTreeWalker(scopeRoot, {tabbable, accept}, scope);\n walker.currentNode = isElementInScope(node, scope) ? node : sentinel;\n let nextNode = walker.nextNode() as FocusableElement;\n if (!nextNode && wrap) {\n walker.currentNode = sentinel;\n nextNode = walker.nextNode() as FocusableElement;\n }\n if (nextNode) {\n focusElement(nextNode, true);\n }\n return nextNode;\n },\n focusPrevious(opts: FocusManagerOptions = {}) {\n let scope = scopeRef.current!;\n let {from, tabbable, wrap, accept} = opts;\n let node = from || getOwnerDocument(scope[0]).activeElement!;\n let sentinel = scope[scope.length - 1].nextElementSibling!;\n let scopeRoot = getScopeRoot(scope);\n let walker = getFocusableTreeWalker(scopeRoot, {tabbable, accept}, scope);\n walker.currentNode = isElementInScope(node, scope) ? node : sentinel;\n let previousNode = walker.previousNode() as FocusableElement;\n if (!previousNode && wrap) {\n walker.currentNode = sentinel;\n previousNode = walker.previousNode() as FocusableElement;\n }\n if (previousNode) {\n focusElement(previousNode, true);\n }\n return previousNode;\n },\n focusFirst(opts = {}) {\n let scope = scopeRef.current!;\n let {tabbable, accept} = opts;\n let scopeRoot = getScopeRoot(scope);\n let walker = getFocusableTreeWalker(scopeRoot, {tabbable, accept}, scope);\n walker.currentNode = scope[0].previousElementSibling!;\n let nextNode = walker.nextNode() as FocusableElement;\n if (nextNode) {\n focusElement(nextNode, true);\n }\n return nextNode;\n },\n focusLast(opts = {}) {\n let scope = scopeRef.current!;\n let {tabbable, accept} = opts;\n let scopeRoot = getScopeRoot(scope);\n let walker = getFocusableTreeWalker(scopeRoot, {tabbable, accept}, scope);\n walker.currentNode = scope[scope.length - 1].nextElementSibling!;\n let previousNode = walker.previousNode() as FocusableElement;\n if (previousNode) {\n focusElement(previousNode, true);\n }\n return previousNode;\n }\n };\n}\n\nconst focusableElements = [\n 'input:not([disabled]):not([type=hidden])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'button:not([disabled])',\n 'a[href]',\n 'area[href]',\n 'summary',\n 'iframe',\n 'object',\n 'embed',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]'\n];\n\nconst FOCUSABLE_ELEMENT_SELECTOR = focusableElements.join(':not([hidden]),') + ',[tabindex]:not([disabled]):not([hidden])';\n\nfocusableElements.push('[tabindex]:not([tabindex=\"-1\"]):not([disabled])');\nconst TABBABLE_ELEMENT_SELECTOR = focusableElements.join(':not([hidden]):not([tabindex=\"-1\"]),');\n\nfunction getScopeRoot(scope: Element[]) {\n return scope[0].parentElement!;\n}\n\nfunction shouldContainFocus(scopeRef: ScopeRef) {\n let scope = focusScopeTree.getTreeNode(activeScope);\n while (scope && scope.scopeRef !== scopeRef) {\n if (scope.contain) {\n return false;\n }\n\n scope = scope.parent;\n }\n\n return true;\n}\n\nfunction useFocusContainment(scopeRef: RefObject<Element[]>, contain?: boolean) {\n let focusedNode = useRef<FocusableElement>();\n\n let raf = useRef<ReturnType<typeof requestAnimationFrame>>();\n useLayoutEffect(() => {\n let scope = scopeRef.current;\n if (!contain) {\n // if contain was changed, then we should cancel any ongoing waits to pull focus back into containment\n if (raf.current) {\n cancelAnimationFrame(raf.current);\n raf.current = undefined;\n }\n return;\n }\n\n const ownerDocument = getOwnerDocument(scope ? scope[0] : undefined);\n\n // Handle the Tab key to contain focus within the scope\n let onKeyDown = (e) => {\n if (e.key !== 'Tab' || e.altKey || e.ctrlKey || e.metaKey || !shouldContainFocus(scopeRef)) {\n return;\n }\n\n let focusedElement = ownerDocument.activeElement;\n let scope = scopeRef.current;\n if (!scope || !isElementInScope(focusedElement, scope)) {\n return;\n }\n\n let scopeRoot = getScopeRoot(scope);\n let walker = getFocusableTreeWalker(scopeRoot, {tabbable: true}, scope);\n if (!focusedElement) {\n return;\n }\n walker.currentNode = focusedElement;\n let nextElement = (e.shiftKey ? walker.previousNode() : walker.nextNode()) as FocusableElement;\n if (!nextElement) {\n walker.currentNode = e.shiftKey ? scope[scope.length - 1].nextElementSibling! : scope[0].previousElementSibling!;\n nextElement = (e.shiftKey ? walker.previousNode() : walker.nextNode()) as FocusableElement;\n }\n\n e.preventDefault();\n if (nextElement) {\n focusElement(nextElement, true);\n }\n };\n\n let onFocus = (e) => {\n // If focusing an element in a child scope of the currently active scope, the child becomes active.\n // Moving out of the active scope to an ancestor is not allowed.\n if ((!activeScope || isAncestorScope(activeScope, scopeRef)) && isElementInScope(e.target, scopeRef.current)) {\n activeScope = scopeRef;\n focusedNode.current = e.target;\n } else if (shouldContainFocus(scopeRef) && !isElementInChildScope(e.target, scopeRef)) {\n // If a focus event occurs outside the active scope (e.g. user tabs from browser location bar),\n // restore focus to the previously focused node or the first tabbable element in the active scope.\n if (focusedNode.current) {\n focusedNode.current.focus();\n } else if (activeScope && activeScope.current) {\n focusFirstInScope(activeScope.current);\n }\n } else if (shouldContainFocus(scopeRef)) {\n focusedNode.current = e.target;\n }\n };\n\n let onBlur = (e) => {\n // Firefox doesn't shift focus back to the Dialog properly without this\n if (raf.current) {\n cancelAnimationFrame(raf.current);\n }\n raf.current = requestAnimationFrame(() => {\n // Use document.activeElement instead of e.relatedTarget so we can tell if user clicked into iframe\n if (ownerDocument.activeElement && shouldContainFocus(scopeRef) && !isElementInChildScope(ownerDocument.activeElement, scopeRef)) {\n activeScope = scopeRef;\n if (ownerDocument.body.contains(e.target)) {\n focusedNode.current = e.target;\n focusedNode.current?.focus();\n } else if (activeScope.current) {\n focusFirstInScope(activeScope.current);\n }\n }\n });\n };\n\n ownerDocument.addEventListener('keydown', onKeyDown, false);\n ownerDocument.addEventListener('focusin', onFocus, false);\n scope?.forEach(element => element.addEventListener('focusin', onFocus, false));\n scope?.forEach(element => element.addEventListener('focusout', onBlur, false));\n return () => {\n ownerDocument.removeEventListener('keydown', onKeyDown, false);\n ownerDocument.removeEventListener('focusin', onFocus, false);\n scope?.forEach(element => element.removeEventListener('focusin', onFocus, false));\n scope?.forEach(element => element.removeEventListener('focusout', onBlur, false));\n };\n }, [scopeRef, contain]);\n\n // This is a useLayoutEffect so it is guaranteed to run before our async synthetic blur\n // eslint-disable-next-line arrow-body-style\n useLayoutEffect(() => {\n return () => {\n if (raf.current) {\n cancelAnimationFrame(raf.current);\n }\n };\n }, [raf]);\n}\n\nfunction isElementInAnyScope(element: Element) {\n return isElementInChildScope(element);\n}\n\nfunction isElementInScope(element?: Element | null, scope?: Element[] | null) {\n if (!element) {\n return false;\n }\n if (!scope) {\n return false;\n }\n return scope.some(node => node.contains(element));\n}\n\nfunction isElementInChildScope(element: Element, scope: ScopeRef = null) {\n // If the element is within a top layer element (e.g. toasts), always allow moving focus there.\n if (element instanceof Element && element.closest('[data-react-aria-top-layer]')) {\n return true;\n }\n\n // node.contains in isElementInScope covers child scopes that are also DOM children,\n // but does not cover child scopes in portals.\n for (let {scopeRef: s} of focusScopeTree.traverse(focusScopeTree.getTreeNode(scope))) {\n if (s && isElementInScope(element, s.current)) {\n return true;\n }\n }\n\n return false;\n}\n\n/** @private */\nexport function isElementInChildOfActiveScope(element: Element) {\n return isElementInChildScope(element, activeScope);\n}\n\nfunction isAncestorScope(ancestor: ScopeRef, scope: ScopeRef) {\n let parent = focusScopeTree.getTreeNode(scope)?.parent;\n while (parent) {\n if (parent.scopeRef === ancestor) {\n return true;\n }\n parent = parent.parent;\n }\n return false;\n}\n\nfunction focusElement(element: FocusableElement | null, scroll = false) {\n if (element != null && !scroll) {\n try {\n focusSafely(element);\n } catch (err) {\n // ignore\n }\n } else if (element != null) {\n try {\n element.focus();\n } catch (err) {\n // ignore\n }\n }\n}\n\nfunction focusFirstInScope(scope: Element[], tabbable:boolean = true) {\n let sentinel = scope[0].previousElementSibling!;\n let scopeRoot = getScopeRoot(scope);\n let walker = getFocusableTreeWalker(scopeRoot, {tabbable}, scope);\n walker.currentNode = sentinel;\n let nextNode = walker.nextNode();\n\n // If the scope does not contain a tabbable element, use the first focusable element.\n if (tabbable && !nextNode) {\n scopeRoot = getScopeRoot(scope);\n walker = getFocusableTreeWalker(scopeRoot, {tabbable: false}, scope);\n walker.currentNode = sentinel;\n nextNode = walker.nextNode();\n }\n\n focusElement(nextNode as FocusableElement);\n}\n\nfunction useAutoFocus(scopeRef: RefObject<Element[]>, autoFocus?: boolean) {\n const autoFocusRef = React.useRef(autoFocus);\n useEffect(() => {\n if (autoFocusRef.current) {\n activeScope = scopeRef;\n const ownerDocument = getOwnerDocument(scopeRef.current ? scopeRef.current[0] : undefined);\n if (!isElementInScope(ownerDocument.activeElement, activeScope.current) && scopeRef.current) {\n focusFirstInScope(scopeRef.current);\n }\n }\n autoFocusRef.current = false;\n }, [scopeRef]);\n}\n\nfunction useActiveScopeTracker(scopeRef: RefObject<Element[]>, restore?: boolean, contain?: boolean) {\n // tracks the active scope, in case restore and contain are both false.\n // if either are true, this is tracked in useRestoreFocus or useFocusContainment.\n useLayoutEffect(() => {\n if (restore || contain) {\n return;\n }\n\n let scope = scopeRef.current;\n const ownerDocument = getOwnerDocument(scope ? scope[0] : undefined);\n\n let onFocus = (e) => {\n let target = e.target as Element;\n if (isElementInScope(target, scopeRef.current)) {\n activeScope = scopeRef;\n } else if (!isElementInAnyScope(target)) {\n activeScope = null;\n }\n };\n\n ownerDocument.addEventListener('focusin', onFocus, false);\n scope?.forEach(element => element.addEventListener('focusin', onFocus, false));\n return () => {\n ownerDocument.removeEventListener('focusin', onFocus, false);\n scope?.forEach(element => element.removeEventListener('focusin', onFocus, false));\n };\n }, [scopeRef, restore, contain]);\n}\n\nfunction shouldRestoreFocus(scopeRef: ScopeRef) {\n let scope = focusScopeTree.getTreeNode(activeScope);\n while (scope && scope.scopeRef !== scopeRef) {\n if (scope.nodeToRestore) {\n return false;\n }\n\n scope = scope.parent;\n }\n\n return scope?.scopeRef === scopeRef;\n}\n\nfunction useRestoreFocus(scopeRef: RefObject<Element[]>, restoreFocus?: boolean, contain?: boolean) {\n // create a ref during render instead of useLayoutEffect so the active element is saved before a child with autoFocus=true mounts.\n // eslint-disable-next-line no-restricted-globals\n const nodeToRestoreRef = useRef(typeof document !== 'undefined' ? getOwnerDocument(scopeRef.current ? scopeRef.current[0] : undefined).activeElement as FocusableElement : null);\n\n // restoring scopes should all track if they are active regardless of contain, but contain already tracks it plus logic to contain the focus\n // restoring-non-containing scopes should only care if they become active so they can perform the restore\n useLayoutEffect(() => {\n let scope = scopeRef.current;\n const ownerDocument = getOwnerDocument(scope ? scope[0] : undefined);\n if (!restoreFocus || contain) {\n return;\n }\n\n let onFocus = () => {\n // If focusing an element in a child scope of the currently active scope, the child becomes active.\n // Moving out of the active scope to an ancestor is not allowed.\n if ((!activeScope || isAncestorScope(activeScope, scopeRef)) &&\n isElementInScope(ownerDocument.activeElement, scopeRef.current)\n ) {\n activeScope = scopeRef;\n }\n };\n\n ownerDocument.addEventListener('focusin', onFocus, false);\n scope?.forEach(element => element.addEventListener('focusin', onFocus, false));\n return () => {\n ownerDocument.removeEventListener('focusin', onFocus, false);\n scope?.forEach(element => element.removeEventListener('focusin', onFocus, false));\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scopeRef, contain]);\n\n useLayoutEffect(() => {\n const ownerDocument = getOwnerDocument(scopeRef.current ? scopeRef.current[0] : undefined);\n\n if (!restoreFocus) {\n return;\n }\n\n // Handle the Tab key so that tabbing out of the scope goes to the next element\n // after the node that had focus when the scope mounted. This is important when\n // using portals for overlays, so that focus goes to the expected element when\n // tabbing out of the overlay.\n let onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Tab' || e.altKey || e.ctrlKey || e.metaKey || !shouldContainFocus(scopeRef)) {\n return;\n }\n\n let focusedElement = ownerDocument.activeElement as FocusableElement;\n if (!isElementInScope(focusedElement, scopeRef.current)) {\n return;\n }\n let treeNode = focusScopeTree.getTreeNode(scopeRef);\n if (!treeNode) {\n return;\n }\n let nodeToRestore = treeNode.nodeToRestore;\n\n // Create a DOM tree walker that matches all tabbable elements\n let walker = getFocusableTreeWalker(ownerDocument.body, {tabbable: true});\n\n // Find the next tabbable element after the currently focused element\n walker.currentNode = focusedElement;\n let nextElement = (e.shiftKey ? walker.previousNode() : walker.nextNode()) as FocusableElement;\n\n if (!nodeToRestore || !ownerDocument.body.contains(nodeToRestore) || nodeToRestore === ownerDocument.body) {\n nodeToRestore = undefined;\n treeNode.nodeToRestore = undefined;\n }\n\n // If there is no next element, or it is outside the current scope, move focus to the\n // next element after the node to restore to instead.\n if ((!nextElement || !isElementInScope(nextElement, scopeRef.current)) && nodeToRestore) {\n walker.currentNode = nodeToRestore;\n\n // Skip over elements within the scope, in case the scope immediately follows the node to restore.\n do {\n nextElement = (e.shiftKey ? walker.previousNode() : walker.nextNode()) as FocusableElement;\n } while (isElementInScope(nextElement, scopeRef.current));\n\n e.preventDefault();\n e.stopPropagation();\n if (nextElement) {\n focusElement(nextElement, true);\n } else {\n // If there is no next element and the nodeToRestore isn't within a FocusScope (i.e. we are leaving the top level focus scope)\n // then move focus to the body.\n // Otherwise restore focus to the nodeToRestore (e.g menu within a popover -> tabbing to close the menu should move focus to menu trigger)\n if (!isElementInAnyScope(nodeToRestore)) {\n focusedElement.blur();\n } else {\n focusElement(nodeToRestore, true);\n }\n }\n }\n };\n\n if (!contain) {\n ownerDocument.addEventListener('keydown', onKeyDown, true);\n }\n\n return () => {\n if (!contain) {\n ownerDocument.removeEventListener('keydown', onKeyDown, true);\n }\n };\n }, [scopeRef, restoreFocus, contain]);\n\n // useLayoutEffect instead of useEffect so the active element is saved synchronously instead of asynchronously.\n useLayoutEffect(() => {\n const ownerDocument = getOwnerDocument(scopeRef.current ? scopeRef.current[0] : undefined);\n\n if (!restoreFocus) {\n return;\n }\n\n let treeNode = focusScopeTree.getTreeNode(scopeRef);\n if (!treeNode) {\n return;\n }\n treeNode.nodeToRestore = nodeToRestoreRef.current ?? undefined;\n return () => {\n let treeNode = focusScopeTree.getTreeNode(scopeRef);\n if (!treeNode) {\n return;\n }\n let nodeToRestore = treeNode.nodeToRestore;\n\n // if we already lost focus to the body and this was the active scope, then we should attempt to restore\n if (\n restoreFocus\n && nodeToRestore\n && (\n // eslint-disable-next-line react-hooks/exhaustive-deps\n isElementInScope(ownerDocument.activeElement, scopeRef.current)\n || (ownerDocument.activeElement === ownerDocument.body && shouldRestoreFocus(scopeRef))\n )\n ) {\n // freeze the focusScopeTree so it persists after the raf, otherwise during unmount nodes are removed from it\n let clonedTree = focusScopeTree.clone();\n requestAnimationFrame(() => {\n // Only restore focus if we've lost focus to the body, the alternative is that focus has been purposefully moved elsewhere\n if (ownerDocument.activeElement === ownerDocument.body) {\n // look up the tree starting with our scope to find a nodeToRestore still in the DOM\n let treeNode = clonedTree.getTreeNode(scopeRef);\n while (treeNode) {\n if (treeNode.nodeToRestore && treeNode.nodeToRestore.isConnected) {\n focusElement(treeNode.nodeToRestore);\n return;\n }\n treeNode = treeNode.parent;\n }\n\n // If no nodeToRestore was found, focus the first element in the nearest\n // ancestor scope that is still in the tree.\n treeNode = clonedTree.getTreeNode(scopeRef);\n while (treeNode) {\n if (treeNode.scopeRef && treeNode.scopeRef.current && focusScopeTree.getTreeNode(treeNode.scopeRef)) {\n focusFirstInScope(treeNode.scopeRef.current, true);\n return;\n }\n treeNode = treeNode.parent;\n }\n }\n });\n }\n };\n }, [scopeRef, restoreFocus]);\n}\n\n/**\n * Create a [TreeWalker]{@link https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker}\n * that matches all focusable/tabbable elements.\n */\nexport function getFocusableTreeWalker(root: Element, opts?: FocusManagerOptions, scope?: Element[]) {\n let selector = opts?.tabbable ? TABBABLE_ELEMENT_SELECTOR : FOCUSABLE_ELEMENT_SELECTOR;\n let walker = getOwnerDocument(root).createTreeWalker(\n root,\n NodeFilter.SHOW_ELEMENT,\n {\n acceptNode(node) {\n // Skip nodes inside the starting node.\n if (opts?.from?.contains(node)) {\n return NodeFilter.FILTER_REJECT;\n }\n\n if ((node as Element).matches(selector)\n && isElementVisible(node as Element)\n && (!scope || isElementInScope(node as Element, scope))\n && (!opts?.accept || opts.accept(node as Element))\n ) {\n return NodeFilter.FILTER_ACCEPT;\n }\n\n return NodeFilter.FILTER_SKIP;\n }\n }\n );\n\n if (opts?.from) {\n walker.currentNode = opts.from;\n }\n\n return walker;\n}\n\n/**\n * Creates a FocusManager object that can be used to move focus within an element.\n */\nexport function createFocusManager(ref: RefObject<Element>, defaultOptions: FocusManagerOptions = {}): FocusManager {\n return {\n focusNext(opts: FocusManagerOptions = {}) {\n let root = ref.current;\n if (!root) {\n return null;\n }\n let {from, tabbable = defaultOptions.tabbable, wrap = defaultOptions.wrap, accept = defaultOptions.accept} = opts;\n let node = from || getOwnerDocument(root).activeElement;\n let walker = getFocusableTreeWalker(root, {tabbable, accept});\n if (root.contains(node)) {\n walker.currentNode = node!;\n }\n let nextNode = walker.nextNode() as FocusableElement;\n if (!nextNode && wrap) {\n walker.currentNode = root;\n nextNode = walker.nextNode() as FocusableElement;\n }\n if (nextNode) {\n focusElement(nextNode, true);\n }\n return nextNode;\n },\n focusPrevious(opts: FocusManagerOptions = defaultOptions) {\n let root = ref.current;\n if (!root) {\n return null;\n }\n let {from, tabbable = defaultOptions.tabbable, wrap = defaultOptions.wrap, accept = defaultOptions.accept} = opts;\n let node = from || getOwnerDocument(root).activeElement;\n let walker = getFocusableTreeWalker(root, {tabbable, accept});\n if (root.contains(node)) {\n walker.currentNode = node!;\n } else {\n let next = last(walker);\n if (next) {\n focusElement(next, true);\n }\n return next ?? null;\n }\n let previousNode = walker.previousNode() as FocusableElement;\n if (!previousNode && wrap) {\n walker.currentNode = root;\n let lastNode = last(walker);\n if (!lastNode) {\n // couldn't wrap\n return null;\n }\n previousNode = lastNode;\n }\n if (previousNode) {\n focusElement(previousNode, true);\n }\n return previousNode ?? null;\n },\n focusFirst(opts = defaultOptions) {\n let root = ref.current;\n if (!root) {\n return null;\n }\n let {tabbable = defaultOptions.tabbable, accept = defaultOptions.accept} = opts;\n let walker = getFocusableTreeWalker(root, {tabbable, accept});\n let nextNode = walker.nextNode() as FocusableElement;\n if (nextNode) {\n focusElement(nextNode, true);\n }\n return nextNode;\n },\n focusLast(opts = defaultOptions) {\n let root = ref.current;\n if (!root) {\n return null;\n }\n let {tabbable = defaultOptions.tabbable, accept = defaultOptions.accept} = opts;\n let walker = getFocusableTreeWalker(root, {tabbable, accept});\n let next = last(walker);\n if (next) {\n focusElement(next, true);\n }\n return next ?? null;\n }\n };\n}\n\nfunction last(walker: TreeWalker) {\n let next: FocusableElement | undefined = undefined;\n let last: FocusableElement;\n do {\n last = walker.lastChild() as FocusableElement;\n if (last) {\n next = last;\n }\n } while (last);\n return next;\n}\n\n\nclass Tree {\n root: TreeNode;\n private fastMap = new Map<ScopeRef, TreeNode>();\n\n constructor() {\n this.root = new TreeNode({scopeRef: null});\n this.fastMap.set(null, this.root);\n }\n\n get size() {\n return this.fastMap.size;\n }\n\n getTreeNode(data: ScopeRef) {\n return this.fastMap.get(data);\n }\n\n addTreeNode(scopeRef: ScopeRef, parent: ScopeRef, nodeToRestore?: FocusableElement) {\n let parentNode = this.fastMap.get(parent ?? null);\n if (!parentNode) {\n return;\n }\n let node = new TreeNode({scopeRef});\n parentNode.addChild(node);\n node.parent = parentNode;\n this.fastMap.set(scopeRef, node);\n if (nodeToRestore) {\n node.nodeToRestore = nodeToRestore;\n }\n }\n\n addNode(node: TreeNode) {\n this.fastMap.set(node.scopeRef, node);\n }\n\n removeTreeNode(scopeRef: ScopeRef) {\n // never remove the root\n if (scopeRef === null) {\n return;\n }\n let node = this.fastMap.get(scopeRef);\n if (!node) {\n return;\n }\n let parentNode = node.parent;\n // when we remove a scope, check if any sibling scopes are trying to restore focus to something inside the scope we're removing\n // if we are, then replace the siblings restore with the restore from the scope we're removing\n for (let current of this.traverse()) {\n if (\n current !== node &&\n node.nodeToRestore &&\n current.nodeToRestore &&\n node.scopeRef &&\n node.scopeRef.current &&\n isElementInScope(current.nodeToRestore, node.scopeRef.current)\n ) {\n current.nodeToRestore = node.nodeToRestore;\n }\n }\n let children = node.children;\n if (parentNode) {\n parentNode.removeChild(node);\n if (children.size > 0) {\n children.forEach(child => parentNode && parentNode.addChild(child));\n }\n }\n\n this.fastMap.delete(node.scopeRef);\n }\n\n // Pre Order Depth First\n *traverse(node: TreeNode = this.root): Generator<TreeNode> {\n if (node.scopeRef != null) {\n yield node;\n }\n if (node.children.size > 0) {\n for (let child of node.children) {\n yield* this.traverse(child);\n }\n }\n }\n\n clone(): Tree {\n let newTree = new Tree();\n for (let node of this.traverse()) {\n newTree.addTreeNode(node.scopeRef, node.parent?.scopeRef ?? null, node.nodeToRestore);\n }\n return newTree;\n }\n}\n\nclass TreeNode {\n public scopeRef: ScopeRef;\n public nodeToRestore?: FocusableElement;\n public parent?: TreeNode;\n public children: Set<TreeNode> = new Set();\n public contain = false;\n\n constructor(props: {scopeRef: ScopeRef}) {\n this.scopeRef = props.scopeRef;\n }\n addChild(node: TreeNode) {\n this.children.add(node);\n node.parent = this;\n }\n removeChild(node: TreeNode) {\n this.children.delete(node);\n node.parent = undefined;\n }\n}\n\nexport let focusScopeTree = new Tree();\n","import {DOMAttributes} from '@react-types/shared';\nimport {isFocusVisible, useFocus, useFocusVisibleListener, useFocusWithin} from '@react-aria/interactions';\nimport {useCallback, useRef, useState} from 'react';\n\nexport interface AriaFocusRingProps {\n /**\n * Whether to show the focus ring when something\n * inside the container element has focus (true), or\n * only if the container itself has focus (false).\n * @default 'false'\n */\n within?: boolean,\n\n /** Whether the element is a text input. */\n isTextInput?: boolean,\n\n /** Whether the element will be auto focused. */\n autoFocus?: boolean\n}\n\nexport interface FocusRingAria {\n /** Whether the element is currently focused. */\n isFocused: boolean,\n\n /** Whether keyboard focus should be visible. */\n isFocusVisible: boolean,\n\n /** Props to apply to the container element with the focus ring. */\n focusProps: DOMAttributes\n}\n\n/**\n * Determines whether a focus ring should be shown to indicate keyboard focus.\n * Focus rings are visible only when the user is interacting with a keyboard,\n * not with a mouse, touch, or other input methods.\n */\nexport function useFocusRing(props: AriaFocusRingProps = {}): FocusRingAria {\n let {\n autoFocus = false,\n isTextInput,\n within\n } = props;\n let state = useRef({\n isFocused: false,\n isFocusVisible: autoFocus || isFocusVisible()\n });\n let [isFocused, setFocused] = useState(false);\n let [isFocusVisibleState, setFocusVisible] = useState(() => state.current.isFocused && state.current.isFocusVisible);\n\n let updateState = useCallback(() => setFocusVisible(state.current.isFocused && state.current.isFocusVisible), []);\n\n let onFocusChange = useCallback(isFocused => {\n state.current.isFocused = isFocused;\n setFocused(isFocused);\n updateState();\n }, [updateState]);\n\n useFocusVisibleListener((isFocusVisible) => {\n state.current.isFocusVisible = isFocusVisible;\n updateState();\n }, [], {isTextInput});\n\n let {focusProps} = useFocus({\n isDisabled: within,\n onFocusChange\n });\n\n let {focusWithinProps} = useFocusWithin({\n isDisabled: !within,\n onFocusWithinChange: onFocusChange\n });\n\n return {\n isFocused,\n isFocusVisible: isFocusVisibleState,\n focusProps: within ? focusWithinProps : focusProps\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes, FocusableDOMProps, FocusableElement, FocusableProps} from '@react-types/shared';\nimport {focusSafely} from './';\nimport {mergeProps, useObjectRef, useSyncRef} from '@react-aria/utils';\nimport React, {ForwardedRef, MutableRefObject, ReactNode, RefObject, useContext, useEffect, useRef} from 'react';\nimport {useFocus, useKeyboard} from '@react-aria/interactions';\n\nexport interface FocusableOptions extends FocusableProps, FocusableDOMProps {\n /** Whether focus should be disabled. */\n isDisabled?: boolean\n}\n\nexport interface FocusableProviderProps extends DOMAttributes {\n /** The child element to provide DOM props to. */\n children?: ReactNode\n}\n\ninterface FocusableContextValue extends FocusableProviderProps {\n ref?: MutableRefObject<FocusableElement | null>\n}\n\nlet FocusableContext = React.createContext<FocusableContextValue | null>(null);\n\nfunction useFocusableContext(ref: RefObject<FocusableElement>): FocusableContextValue {\n let context = useContext(FocusableContext) || {};\n useSyncRef(context, ref);\n\n // eslint-disable-next-line\n let {ref: _, ...otherProps} = context;\n return otherProps;\n}\n\n/**\n * Provides DOM props to the nearest focusable child.\n */\nfunction FocusableProvider(props: FocusableProviderProps, ref: ForwardedRef<FocusableElement>) {\n let {children, ...otherProps} = props;\n let objRef = useObjectRef(ref);\n let context = {\n ...otherProps,\n ref: objRef\n };\n\n return (\n <FocusableContext.Provider value={context}>\n {children}\n </FocusableContext.Provider>\n );\n}\n\nlet _FocusableProvider = React.forwardRef(FocusableProvider);\nexport {_FocusableProvider as FocusableProvider};\n\nexport interface FocusableAria {\n /** Props for the focusable element. */\n focusableProps: DOMAttributes\n}\n\n/**\n * Used to make an element focusable and capable of auto focus.\n */\nexport function useFocusable(props: FocusableOptions, domRef: RefObject<FocusableElement>): FocusableAria {\n let {focusProps} = useFocus(props);\n let {keyboardProps} = useKeyboard(props);\n let interactions = mergeProps(focusProps, keyboardProps);\n let domProps = useFocusableContext(domRef);\n let interactionProps = props.isDisabled ? {} : domProps;\n let autoFocusRef = useRef(props.autoFocus);\n\n useEffect(() => {\n if (autoFocusRef.current && domRef.current) {\n focusSafely(domRef.current);\n }\n autoFocusRef.current = false;\n }, [domRef]);\n\n return {\n focusableProps: mergeProps(\n {\n ...interactions,\n tabIndex: props.excludeFromTabOrder && !props.isDisabled ? -1 : undefined\n },\n interactionProps\n )\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLinkProps} from '@react-types/link';\nimport {DOMAttributes, FocusableElement} from '@react-types/shared';\nimport {filterDOMProps, mergeProps, shouldClientNavigate, useRouter} from '@react-aria/utils';\nimport React, {RefObject} from 'react';\nimport {useFocusable} from '@react-aria/focus';\nimport {usePress} from '@react-aria/interactions';\n\nexport interface AriaLinkOptions extends AriaLinkProps {\n /** Whether the link is disabled. */\n isDisabled?: boolean,\n /**\n * The HTML element used to render the link, e.g. 'a', or 'span'.\n * @default 'a'\n */\n elementType?: string\n}\n\nexport interface LinkAria {\n /** Props for the link element. */\n linkProps: DOMAttributes,\n /** Whether the link is currently pressed. */\n isPressed: boolean\n}\n\n/**\n * Provides the behavior and accessibility implementation for a link component.\n * A link allows a user to navigate to another page or resource within a web page\n * or application.\n */\nexport function useLink(props: AriaLinkOptions, ref: RefObject<FocusableElement>): LinkAria {\n let {\n elementType = 'a',\n onPress,\n onPressStart,\n onPressEnd,\n // @ts-ignore\n onClick: deprecatedOnClick,\n isDisabled,\n ...otherProps\n } = props;\n\n let linkProps: DOMAttributes = {};\n if (elementType !== 'a') {\n linkProps = {\n role: 'link',\n tabIndex: !isDisabled ? 0 : undefined\n };\n }\n let {focusableProps} = useFocusable(props, ref);\n let {pressProps, isPressed} = usePress({onPress, onPressStart, onPressEnd, isDisabled, ref});\n let domProps = filterDOMProps(otherProps, {labelable: true, isLink: elementType === 'a'});\n let interactionHandlers = mergeProps(focusableProps, pressProps);\n let router = useRouter();\n\n return {\n isPressed, // Used to indicate press state for visual\n linkProps: mergeProps(domProps, {\n ...interactionHandlers,\n ...linkProps,\n 'aria-disabled': isDisabled || undefined,\n 'aria-current': props['aria-current'],\n onClick: (e: React.MouseEvent<HTMLAnchorElement>) => {\n pressProps.onClick?.(e);\n if (deprecatedOnClick) {\n deprecatedOnClick(e);\n console.warn('onClick is deprecated, please use onPress');\n }\n\n // If a custom router is provided, prevent default and forward if this link should client navigate.\n if (\n !router.isNative &&\n e.currentTarget instanceof HTMLAnchorElement &&\n e.currentTarget.href &&\n // If props are applied to a router Link component, it may have already prevented default.\n !e.isDefaultPrevented() &&\n shouldClientNavigate(e.currentTarget, e)\n ) {\n e.preventDefault();\n router.open(e.currentTarget, e);\n }\n }\n })\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n AnchorHTMLAttributes,\n ButtonHTMLAttributes,\n ElementType,\n HTMLAttributes,\n InputHTMLAttributes,\n RefObject\n} from 'react';\nimport {AriaButtonProps} from '@react-types/button';\nimport {DOMAttributes} from '@react-types/shared';\nimport {filterDOMProps, mergeProps} from '@react-aria/utils';\nimport {useFocusable} from '@react-aria/focus';\nimport {usePress} from '@react-aria/interactions';\n\nexport interface AriaButtonOptions<E extends ElementType> extends Omit<AriaButtonProps<E>, 'children'> {}\n\nexport interface ButtonAria<T> {\n /** Props for the button element. */\n buttonProps: T,\n /** Whether the button is currently pressed. */\n isPressed: boolean\n}\n\n// Order with overrides is important: 'button' should be default\nexport function useButton(props: AriaButtonOptions<'button'>, ref: RefObject<HTMLButtonElement>): ButtonAria<ButtonHTMLAttributes<HTMLButtonElement>>;\nexport function useButton(props: AriaButtonOptions<'a'>, ref: RefObject<HTMLAnchorElement>): ButtonAria<AnchorHTMLAttributes<HTMLAnchorElement>>;\nexport function useButton(props: AriaButtonOptions<'div'>, ref: RefObject<HTMLDivElement>): ButtonAria<HTMLAttributes<HTMLDivElement>>;\nexport function useButton(props: AriaButtonOptions<'input'>, ref: RefObject<HTMLInputElement>): ButtonAria<InputHTMLAttributes<HTMLInputElement>>;\nexport function useButton(props: AriaButtonOptions<'span'>, ref: RefObject<HTMLSpanElement>): ButtonAria<HTMLAttributes<HTMLSpanElement>>;\nexport function useButton(props: AriaButtonOptions<ElementType>, ref: RefObject<Element>): ButtonAria<DOMAttributes>;\n/**\n * Provides the behavior and accessibility implementation for a button component. Handles mouse, keyboard, and touch interactions,\n * focus behavior, and ARIA props for both native button elements and custom element types.\n * @param props - Props to be applied to the button.\n * @param ref - A ref to a DOM element for the button.\n */\nexport function useButton(props: AriaButtonOptions<ElementType>, ref: RefObject<any>): ButtonAria<HTMLAttributes<any>> {\n let {\n elementType = 'button',\n isDisabled,\n onPress,\n onPressStart,\n onPressEnd,\n onPressUp,\n onPressChange,\n // @ts-ignore - undocumented\n preventFocusOnPress,\n // @ts-ignore - undocumented\n allowFocusWhenDisabled,\n // @ts-ignore\n onClick: deprecatedOnClick,\n href,\n target,\n rel,\n type = 'button'\n } = props;\n let additionalProps;\n if (elementType === 'button') {\n additionalProps = {\n type,\n disabled: isDisabled\n };\n } else {\n additionalProps = {\n role: 'button',\n tabIndex: isDisabled ? undefined : 0,\n href: elementType === 'a' && isDisabled ? undefined : href,\n target: elementType === 'a' ? target : undefined,\n type: elementType === 'input' ? type : undefined,\n disabled: elementType === 'input' ? isDisabled : undefined,\n 'aria-disabled': !isDisabled || elementType === 'input' ? undefined : isDisabled,\n rel: elementType === 'a' ? rel : undefined\n };\n }\n\n let {pressProps, isPressed} = usePress({\n onPressStart,\n onPressEnd,\n onPressChange,\n onPress,\n onPressUp,\n isDisabled,\n preventFocusOnPress,\n ref\n });\n\n let {focusableProps} = useFocusable(props, ref);\n if (allowFocusWhenDisabled) {\n focusableProps.tabIndex = isDisabled ? -1 : focusableProps.tabIndex;\n }\n let buttonProps = mergeProps(focusableProps, pressProps, filterDOMProps(props, {labelable: true}));\n\n return {\n isPressed, // Used to indicate press state for visual\n buttonProps: mergeProps(additionalProps, buttonProps, {\n 'aria-haspopup': props['aria-haspopup'],\n 'aria-expanded': props['aria-expanded'],\n 'aria-controls': props['aria-controls'],\n 'aria-pressed': props['aria-pressed'],\n onClick: (e) => {\n if (deprecatedOnClick) {\n deprecatedOnClick(e);\n console.warn('onClick is deprecated, please use onPress');\n }\n }\n })\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLabelingProps, DOMAttributes, DOMProps, Orientation} from '@react-types/shared';\nimport {filterDOMProps} from '@react-aria/utils';\n\nexport interface SeparatorProps extends DOMProps, AriaLabelingProps {\n /**\n * The orientation of the separator.\n * @default 'horizontal'\n */\n orientation?: Orientation,\n /** The HTML element type that will be used to render the separator. */\n elementType?: string\n}\n\nexport interface SeparatorAria {\n /** Props for the separator element. */\n separatorProps: DOMAttributes\n}\n\n/**\n * Provides the accessibility implementation for a separator.\n * A separator is a visual divider between two groups of content,\n * e.g. groups of menu items or sections of a page.\n */\nexport function useSeparator(props: SeparatorProps): SeparatorAria {\n let domProps = filterDOMProps(props, {labelable: true});\n let ariaOrientation;\n // if orientation is horizontal, aria-orientation default is horizontal, so we leave it undefined\n // if it's vertical, we need to specify it\n if (props.orientation === 'vertical') {\n ariaOrientation = 'vertical';\n }\n // hr elements implicitly have role = separator and a horizontal orientation\n if (props.elementType !== 'hr') {\n return {\n separatorProps: {\n ...domProps,\n role: 'separator',\n 'aria-orientation': ariaOrientation\n }\n };\n }\n return {separatorProps: domProps};\n}\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport type {LocalizedString} from './LocalizedStringFormatter';\n\nexport type LocalizedStrings<K extends string, T extends LocalizedString> = {\n [lang: string]: Record<K, T>\n};\n\nconst localeSymbol = Symbol.for('react-aria.i18n.locale');\nconst stringsSymbol = Symbol.for('react-aria.i18n.strings');\nlet cachedGlobalStrings: {[packageName: string]: LocalizedStringDictionary<any, any>} | null | undefined = undefined;\n\n/**\n * Stores a mapping of localized strings. Can be used to find the\n * closest available string for a given locale.\n */\nexport class LocalizedStringDictionary<K extends string = string, T extends LocalizedString = string> {\n private strings: LocalizedStrings<K, T>;\n private defaultLocale: string;\n\n constructor(messages: LocalizedStrings<K, T>, defaultLocale: string = 'en-US') {\n // Clone messages so we don't modify the original object.\n this.strings = {...messages};\n this.defaultLocale = defaultLocale;\n }\n\n /** Returns a localized string for the given key and locale. */\n getStringForLocale(key: K, locale: string): T {\n let strings = this.getStringsForLocale(locale);\n let string = strings[key];\n if (!string) {\n throw new Error(`Could not find intl message ${key} in ${locale} locale`);\n }\n\n return string;\n }\n\n /** Returns all localized strings for the given locale. */\n getStringsForLocale(locale: string): Record<K, T> {\n let strings = this.strings[locale];\n if (!strings) {\n strings = getStringsForLocale(locale, this.strings, this.defaultLocale);\n this.strings[locale] = strings;\n }\n\n return strings;\n }\n\n static getGlobalDictionaryForPackage<K extends string = string, T extends LocalizedString = string>(packageName: string): LocalizedStringDictionary<K, T> | null {\n if (typeof window === 'undefined') {\n return null;\n }\n\n let locale = window[localeSymbol];\n if (cachedGlobalStrings === undefined) {\n let globalStrings = window[stringsSymbol];\n if (!globalStrings) {\n return null;\n }\n\n cachedGlobalStrings = {};\n for (let pkg in globalStrings) {\n cachedGlobalStrings[pkg] = new LocalizedStringDictionary({[locale]: globalStrings[pkg]}, locale);\n }\n }\n\n let dictionary = cachedGlobalStrings?.[packageName];\n if (!dictionary) {\n throw new Error(`Strings for package \"${packageName}\" were not included by LocalizedStringProvider. Please add it to the list passed to createLocalizedStringDictionary.`);\n }\n\n return dictionary;\n }\n}\n\nfunction getStringsForLocale<K extends string, T extends LocalizedString>(locale: string, strings: LocalizedStrings<K, T>, defaultLocale = 'en-US') {\n // If there is an exact match, use it.\n if (strings[locale]) {\n return strings[locale];\n }\n\n // Attempt to find the closest match by language.\n // For example, if the locale is fr-CA (French Canadian), but there is only\n // an fr-FR (France) set of strings, use that.\n // This could be replaced with Intl.LocaleMatcher once it is supported.\n // https://github.com/tc39/proposal-intl-localematcher\n let language = getLanguage(locale);\n if (strings[language]) {\n return strings[language];\n }\n\n for (let key in strings) {\n if (key.startsWith(language + '-')) {\n return strings[key];\n }\n }\n\n // Nothing close, use english.\n return strings[defaultLocale];\n}\n\nfunction getLanguage(locale: string) {\n // @ts-ignore\n if (Intl.Locale) {\n // @ts-ignore\n return new Intl.Locale(locale).language;\n }\n\n return locale.split('-')[0];\n}\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport type {LocalizedStringDictionary} from './LocalizedStringDictionary';\n\nexport type Variables = Record<string, string | number | boolean> | undefined;\nexport type LocalizedString = string | ((args: Variables, formatter?: LocalizedStringFormatter<any, any>) => string);\ntype InternalString = string | (() => string);\n\nconst pluralRulesCache = new Map<string, Intl.PluralRules>();\nconst numberFormatCache = new Map<string, Intl.NumberFormat>();\n\n/**\n * Formats localized strings from a LocalizedStringDictionary. Supports interpolating variables,\n * selecting the correct pluralization, and formatting numbers for the locale.\n */\nexport class LocalizedStringFormatter<K extends string = string, T extends LocalizedString = string> {\n private locale: string;\n private strings: LocalizedStringDictionary<K, T>;\n\n constructor(locale: string, strings: LocalizedStringDictionary<K, T>) {\n this.locale = locale;\n this.strings = strings;\n }\n\n /** Formats a localized string for the given key with the provided variables. */\n format(key: K, variables?: Variables): string {\n let message = this.strings.getStringForLocale(key, this.locale);\n return typeof message === 'function' ? message(variables, this) : message;\n }\n\n protected plural(count: number, options: Record<string, InternalString>, type: Intl.PluralRuleType = 'cardinal') {\n let opt = options['=' + count];\n if (opt) {\n return typeof opt === 'function' ? opt() : opt;\n }\n\n let key = this.locale + ':' + type;\n let pluralRules = pluralRulesCache.get(key);\n if (!pluralRules) {\n pluralRules = new Intl.PluralRules(this.locale, {type});\n pluralRulesCache.set(key, pluralRules);\n }\n\n let selected = pluralRules.select(count);\n opt = options[selected] || options.other;\n return typeof opt === 'function' ? opt() : opt;\n }\n\n protected number(value: number) {\n let numberFormat = numberFormatCache.get(this.locale);\n if (!numberFormat) {\n numberFormat = new Intl.NumberFormat(this.locale);\n numberFormatCache.set(this.locale, numberFormat);\n }\n return numberFormat.format(value);\n }\n\n protected select(options: Record<string, InternalString>, value: string) {\n let opt = options[value] || options.other;\n return typeof opt === 'function' ? opt() : opt;\n }\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// https://en.wikipedia.org/wiki/Right-to-left\nconst RTL_SCRIPTS = new Set(['Arab', 'Syrc', 'Samr', 'Mand', 'Thaa', 'Mend', 'Nkoo', 'Adlm', 'Rohg', 'Hebr']);\nconst RTL_LANGS = new Set(['ae', 'ar', 'arc', 'bcc', 'bqi', 'ckb', 'dv', 'fa', 'glk', 'he', 'ku', 'mzn', 'nqo', 'pnb', 'ps', 'sd', 'ug', 'ur', 'yi']);\n\n/**\n * Determines if a locale is read right to left using [Intl.Locale]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale}.\n */\nexport function isRTL(localeString: string) {\n // If the Intl.Locale API is available, use it to get the locale's text direction.\n // @ts-ignore\n if (Intl.Locale) {\n let locale = new Intl.Locale(localeString).maximize();\n\n // Use the text info object to get the direction if possible.\n // @ts-ignore - this was implemented as a property by some browsers before it was standardized as a function.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getTextInfo\n let textInfo = typeof locale.getTextInfo === 'function' ? locale.getTextInfo() : locale.textInfo;\n if (textInfo) {\n return textInfo.direction === 'rtl';\n }\n\n // Fallback: guess using the script.\n // This is more accurate than guessing by language, since languages can be written in multiple scripts.\n if (locale.script) {\n return RTL_SCRIPTS.has(locale.script);\n }\n }\n\n // If not, just guess by the language (first part of the locale)\n let lang = localeString.split('-')[0];\n return RTL_LANGS.has(lang);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Direction} from '@react-types/shared';\nimport {isRTL} from './utils';\nimport {useEffect, useState} from 'react';\nimport {useIsSSR} from '@react-aria/ssr';\n\nexport interface Locale {\n /** The [BCP47](https://www.ietf.org/rfc/bcp/bcp47.txt) language code for the locale. */\n locale: string,\n /** The writing direction for the locale. */\n direction: Direction\n}\n\n// Locale passed from server by PackageLocalizationProvider.\nconst localeSymbol = Symbol.for('react-aria.i18n.locale');\n\n/**\n * Gets the locale setting of the browser.\n */\nexport function getDefaultLocale(): Locale {\n let locale = typeof window !== 'undefined' && window[localeSymbol]\n // @ts-ignore\n || (typeof navigator !== 'undefined' && (navigator.language || navigator.userLanguage))\n || 'en-US';\n\n try {\n // @ts-ignore\n Intl.DateTimeFormat.supportedLocalesOf([locale]);\n } catch (_err) {\n locale = 'en-US';\n }\n return {\n locale,\n direction: isRTL(locale) ? 'rtl' : 'ltr'\n };\n}\n\nlet currentLocale = getDefaultLocale();\nlet listeners = new Set<(locale: Locale) => void>();\n\nfunction updateLocale() {\n currentLocale = getDefaultLocale();\n for (let listener of listeners) {\n listener(currentLocale);\n }\n}\n\n/**\n * Returns the current browser/system language, and updates when it changes.\n */\nexport function useDefaultLocale(): Locale {\n let isSSR = useIsSSR();\n let [defaultLocale, setDefaultLocale] = useState(currentLocale);\n\n useEffect(() => {\n if (listeners.size === 0) {\n window.addEventListener('languagechange', updateLocale);\n }\n\n listeners.add(setDefaultLocale);\n\n return () => {\n listeners.delete(setDefaultLocale);\n if (listeners.size === 0) {\n window.removeEventListener('languagechange', updateLocale);\n }\n };\n }, []);\n\n // We cannot determine the browser's language on the server, so default to\n // en-US. This will be updated after hydration on the client to the correct value.\n if (isSSR) {\n return {\n locale: 'en-US',\n direction: 'ltr'\n };\n }\n\n return defaultLocale;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {isRTL} from './utils';\nimport {Locale, useDefaultLocale} from './useDefaultLocale';\nimport React, {ReactNode, useContext} from 'react';\n\nexport interface I18nProviderProps {\n /** Contents that should have the locale applied. */\n children: ReactNode,\n /** The locale to apply to the children. */\n locale?: string\n}\n\nconst I18nContext = React.createContext<Locale | null>(null);\n\n/**\n * Provides the locale for the application to all child components.\n */\nexport function I18nProvider(props: I18nProviderProps) {\n let {locale, children} = props;\n let defaultLocale = useDefaultLocale();\n\n let value: Locale = locale ? {\n locale,\n direction: isRTL(locale) ? 'rtl' : 'ltr'\n } : defaultLocale;\n\n return (\n <I18nContext.Provider value={value}>\n {children}\n </I18nContext.Provider>\n );\n}\n\n/**\n * Returns the current locale and layout direction.\n */\nexport function useLocale(): Locale {\n let defaultLocale = useDefaultLocale();\n let context = useContext(I18nContext);\n return context || defaultLocale;\n}\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {LocalizedString, LocalizedStringDictionary, LocalizedStringFormatter, LocalizedStrings} from '@internationalized/string';\nimport {useLocale} from './context';\nimport {useMemo} from 'react';\n\nconst cache = new WeakMap();\nfunction getCachedDictionary<K extends string, T extends LocalizedString>(strings: LocalizedStrings<K, T>): LocalizedStringDictionary<K, T> {\n let dictionary = cache.get(strings);\n if (!dictionary) {\n dictionary = new LocalizedStringDictionary(strings);\n cache.set(strings, dictionary);\n }\n\n return dictionary;\n}\n\n/**\n * Returns a cached LocalizedStringDictionary for the given strings.\n */\nexport function useLocalizedStringDictionary<K extends string = string, T extends LocalizedString = string>(strings: LocalizedStrings<K, T>, packageName?: string): LocalizedStringDictionary<K, T> {\n return (packageName && LocalizedStringDictionary.getGlobalDictionaryForPackage(packageName)) || getCachedDictionary(strings);\n}\n\n/**\n * Provides localized string formatting for the current locale. Supports interpolating variables,\n * selecting the correct pluralization, and formatting numbers. Automatically updates when the locale changes.\n * @param strings - A mapping of languages to localized strings by key.\n */\nexport function useLocalizedStringFormatter<K extends string = string, T extends LocalizedString = string>(strings: LocalizedStrings<K, T>, packageName?: string): LocalizedStringFormatter<K, T> {\n let {locale} = useLocale();\n let dictionary = useLocalizedStringDictionary(strings, packageName);\n return useMemo(() => new LocalizedStringFormatter(locale, dictionary), [locale, dictionary]);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useLocale} from './context';\n\nlet cache = new Map<string, Intl.Collator>();\n\n/**\n * Provides localized string collation for the current locale. Automatically updates when the locale changes,\n * and handles caching of the collator for performance.\n * @param options - Collator options.\n */\nexport function useCollator(options?: Intl.CollatorOptions): Intl.Collator {\n let {locale} = useLocale();\n\n let cacheKey = locale + (options ? Object.entries(options).sort((a, b) => a[0] < b[0] ? -1 : 1).join() : '');\n if (cache.has(cacheKey)) {\n return cache.get(cacheKey)!;\n }\n\n let formatter = new Intl.Collator(locale, options);\n cache.set(cacheKey, formatter);\n return formatter;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {isAppleDevice, isMac} from '@react-aria/utils';\n\ninterface Event {\n altKey: boolean,\n ctrlKey: boolean,\n metaKey: boolean\n}\n\nexport function isNonContiguousSelectionModifier(e: Event) {\n // Ctrl + Arrow Up/Arrow Down has a system wide meaning on macOS, so use Alt instead.\n // On Windows and Ubuntu, Alt + Space has a system wide meaning.\n return isAppleDevice() ? e.altKey : e.ctrlKey;\n}\n\nexport function isCtrlKeyPressed(e: Event) {\n if (isMac()) {\n return e.metaKey;\n }\n\n return e.ctrlKey;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes, Key, KeyboardDelegate} from '@react-types/shared';\nimport {KeyboardEvent, useRef} from 'react';\nimport {MultipleSelectionManager} from '@react-stately/selection';\n\n/**\n * Controls how long to wait before clearing the typeahead buffer.\n */\nconst TYPEAHEAD_DEBOUNCE_WAIT_MS = 1000; // 1 second\n\nexport interface AriaTypeSelectOptions {\n /**\n * A delegate that returns collection item keys with respect to visual layout.\n */\n keyboardDelegate: KeyboardDelegate,\n /**\n * An interface for reading and updating multiple selection state.\n */\n selectionManager: MultipleSelectionManager,\n /**\n * Called when an item is focused by typing.\n */\n onTypeSelect?: (key: Key) => void\n}\n\nexport interface TypeSelectAria {\n /**\n * Props to be spread on the owner of the options.\n */\n typeSelectProps: DOMAttributes\n}\n\n/**\n * Handles typeahead interactions with collections.\n */\nexport function useTypeSelect(options: AriaTypeSelectOptions): TypeSelectAria {\n let {keyboardDelegate, selectionManager, onTypeSelect} = options;\n let state = useRef({\n search: '',\n timeout: null\n }).current;\n\n let onKeyDown = (e: KeyboardEvent) => {\n let character = getStringForKey(e.key);\n if (!character || e.ctrlKey || e.metaKey || !e.currentTarget.contains(e.target as HTMLElement)) {\n return;\n }\n\n // Do not propagate the Spacebar event if it's meant to be part of the search.\n // When we time out, the search term becomes empty, hence the check on length.\n // Trimming is to account for the case of pressing the Spacebar more than once,\n // which should cycle through the selection/deselection of the focused item.\n if (character === ' ' && state.search.trim().length > 0) {\n e.preventDefault();\n if (!('continuePropagation' in e)) {\n e.stopPropagation();\n }\n }\n\n state.search += character;\n\n // Use the delegate to find a key to focus.\n // Prioritize items after the currently focused item, falling back to searching the whole list.\n let key = keyboardDelegate.getKeyForSearch(state.search, selectionManager.focusedKey);\n\n // If no key found, search from the top.\n if (key == null) {\n key = keyboardDelegate.getKeyForSearch(state.search);\n }\n\n if (key != null) {\n selectionManager.setFocusedKey(key);\n if (onTypeSelect) {\n onTypeSelect(key);\n }\n }\n\n clearTimeout(state.timeout);\n state.timeout = setTimeout(() => {\n state.search = '';\n }, TYPEAHEAD_DEBOUNCE_WAIT_MS);\n };\n\n return {\n typeSelectProps: {\n // Using a capturing listener to catch the keydown event before\n // other hooks in order to handle the Spacebar event.\n onKeyDownCapture: keyboardDelegate.getKeyForSearch ? onKeyDown : null\n }\n };\n}\n\nfunction getStringForKey(key: string) {\n // If the key is of length 1, it is an ASCII value.\n // Otherwise, if there are no ASCII characters in the key name,\n // it is a Unicode character.\n // See https://www.w3.org/TR/uievents-key/\n if (key.length === 1 || !/^[A-Z]/i.test(key)) {\n return key;\n }\n\n return '';\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes, FocusableElement, FocusStrategy, Key, KeyboardDelegate} from '@react-types/shared';\nimport {flushSync} from 'react-dom';\nimport {FocusEvent, KeyboardEvent, RefObject, useEffect, useRef} from 'react';\nimport {focusSafely, getFocusableTreeWalker} from '@react-aria/focus';\nimport {focusWithoutScrolling, mergeProps, scrollIntoView, scrollIntoViewport, useEvent, useRouter} from '@react-aria/utils';\nimport {getInteractionModality} from '@react-aria/interactions';\nimport {isCtrlKeyPressed, isNonContiguousSelectionModifier} from './utils';\nimport {MultipleSelectionManager} from '@react-stately/selection';\nimport {useLocale} from '@react-aria/i18n';\nimport {useTypeSelect} from './useTypeSelect';\n\nexport interface AriaSelectableCollectionOptions {\n /**\n * An interface for reading and updating multiple selection state.\n */\n selectionManager: MultipleSelectionManager,\n /**\n * A delegate object that implements behavior for keyboard focus movement.\n */\n keyboardDelegate: KeyboardDelegate,\n /**\n * The ref attached to the element representing the collection.\n */\n ref: RefObject<HTMLElement>,\n /**\n * Whether the collection or one of its items should be automatically focused upon render.\n * @default false\n */\n autoFocus?: boolean | FocusStrategy,\n /**\n * Whether focus should wrap around when the end/start is reached.\n * @default false\n */\n shouldFocusWrap?: boolean,\n /**\n * Whether the collection allows empty selection.\n * @default false\n */\n disallowEmptySelection?: boolean,\n /**\n * Whether the collection allows the user to select all items via keyboard shortcut.\n * @default false\n */\n disallowSelectAll?: boolean,\n /**\n * Whether selection should occur automatically on focus.\n * @default false\n */\n selectOnFocus?: boolean,\n /**\n * Whether typeahead is disabled.\n * @default false\n */\n disallowTypeAhead?: boolean,\n /**\n * Whether the collection items should use virtual focus instead of being focused directly.\n */\n shouldUseVirtualFocus?: boolean,\n /**\n * Whether navigation through tab key is enabled.\n */\n allowsTabNavigation?: boolean,\n /**\n * Whether the collection items are contained in a virtual scroller.\n */\n isVirtualized?: boolean,\n /**\n * The ref attached to the scrollable body. Used to provide automatic scrolling on item focus for non-virtualized collections.\n * If not provided, defaults to the collection ref.\n */\n scrollRef?: RefObject<HTMLElement>,\n /**\n * The behavior of links in the collection.\n * - 'action': link behaves like onAction.\n * - 'selection': link follows selection interactions (e.g. if URL drives selection).\n * - 'override': links override all other interactions (link items are not selectable).\n * @default 'action'\n */\n linkBehavior?: 'action' | 'selection' | 'override'\n}\n\nexport interface SelectableCollectionAria {\n /** Props for the collection element. */\n collectionProps: DOMAttributes\n}\n\n/**\n * Handles interactions with selectable collections.\n */\nexport function useSelectableCollection(options: AriaSelectableCollectionOptions): SelectableCollectionAria {\n let {\n selectionManager: manager,\n keyboardDelegate: delegate,\n ref,\n autoFocus = false,\n shouldFocusWrap = false,\n disallowEmptySelection = false,\n disallowSelectAll = false,\n selectOnFocus = manager.selectionBehavior === 'replace',\n disallowTypeAhead = false,\n shouldUseVirtualFocus,\n allowsTabNavigation = false,\n isVirtualized,\n // If no scrollRef is provided, assume the collection ref is the scrollable region\n scrollRef = ref,\n linkBehavior = 'action'\n } = options;\n let {direction} = useLocale();\n let router = useRouter();\n\n let onKeyDown = (e: KeyboardEvent) => {\n // Prevent option + tab from doing anything since it doesn't move focus to the cells, only buttons/checkboxes\n if (e.altKey && e.key === 'Tab') {\n e.preventDefault();\n }\n\n // Keyboard events bubble through portals. Don't handle keyboard events\n // for elements outside the collection (e.g. menus).\n if (!ref.current.contains(e.target as Element)) {\n return;\n }\n\n const navigateToKey = (key: Key | undefined, childFocus?: FocusStrategy) => {\n if (key != null) {\n if (manager.isLink(key) && linkBehavior === 'selection' && selectOnFocus && !isNonContiguousSelectionModifier(e)) {\n // Set focused key and re-render synchronously to bring item into view if needed.\n flushSync(() => {\n manager.setFocusedKey(key, childFocus);\n });\n\n let item = scrollRef.current.querySelector(`[data-key=\"${CSS.escape(key.toString())}\"]`);\n router.open(item, e);\n\n return;\n }\n\n manager.setFocusedKey(key, childFocus);\n\n if (manager.isLink(key) && linkBehavior === 'override') {\n return;\n }\n\n if (e.shiftKey && manager.selectionMode === 'multiple') {\n manager.extendSelection(key);\n } else if (selectOnFocus && !isNonContiguousSelectionModifier(e)) {\n manager.replaceSelection(key);\n }\n }\n };\n\n switch (e.key) {\n case 'ArrowDown': {\n if (delegate.getKeyBelow) {\n e.preventDefault();\n let nextKey = manager.focusedKey != null\n ? delegate.getKeyBelow(manager.focusedKey)\n : delegate.getFirstKey?.();\n if (nextKey == null && shouldFocusWrap) {\n nextKey = delegate.getFirstKey?.(manager.focusedKey);\n }\n navigateToKey(nextKey);\n }\n break;\n }\n case 'ArrowUp': {\n if (delegate.getKeyAbove) {\n e.preventDefault();\n let nextKey = manager.focusedKey != null\n ? delegate.getKeyAbove(manager.focusedKey)\n : delegate.getLastKey?.();\n if (nextKey == null && shouldFocusWrap) {\n nextKey = delegate.getLastKey?.(manager.focusedKey);\n }\n navigateToKey(nextKey);\n }\n break;\n }\n case 'ArrowLeft': {\n if (delegate.getKeyLeftOf) {\n e.preventDefault();\n let nextKey = delegate.getKeyLeftOf(manager.focusedKey);\n if (nextKey == null && shouldFocusWrap) {\n nextKey = direction === 'rtl' ? delegate.getFirstKey?.(manager.focusedKey) : delegate.getLastKey?.(manager.focusedKey);\n }\n navigateToKey(nextKey, direction === 'rtl' ? 'first' : 'last');\n }\n break;\n }\n case 'ArrowRight': {\n if (delegate.getKeyRightOf) {\n e.preventDefault();\n let nextKey = delegate.getKeyRightOf(manager.focusedKey);\n if (nextKey == null && shouldFocusWrap) {\n nextKey = direction === 'rtl' ? delegate.getLastKey?.(manager.focusedKey) : delegate.getFirstKey?.(manager.focusedKey);\n }\n navigateToKey(nextKey, direction === 'rtl' ? 'last' : 'first');\n }\n break;\n }\n case 'Home':\n if (delegate.getFirstKey) {\n e.preventDefault();\n let firstKey = delegate.getFirstKey(manager.focusedKey, isCtrlKeyPressed(e));\n manager.setFocusedKey(firstKey);\n if (isCtrlKeyPressed(e) && e.shiftKey && manager.selectionMode === 'multiple') {\n manager.extendSelection(firstKey);\n } else if (selectOnFocus) {\n manager.replaceSelection(firstKey);\n }\n }\n break;\n case 'End':\n if (delegate.getLastKey) {\n e.preventDefault();\n let lastKey = delegate.getLastKey(manager.focusedKey, isCtrlKeyPressed(e));\n manager.setFocusedKey(lastKey);\n if (isCtrlKeyPressed(e) && e.shiftKey && manager.selectionMode === 'multiple') {\n manager.extendSelection(lastKey);\n } else if (selectOnFocus) {\n manager.replaceSelection(lastKey);\n }\n }\n break;\n case 'PageDown':\n if (delegate.getKeyPageBelow) {\n e.preventDefault();\n let nextKey = delegate.getKeyPageBelow(manager.focusedKey);\n navigateToKey(nextKey);\n }\n break;\n case 'PageUp':\n if (delegate.getKeyPageAbove) {\n e.preventDefault();\n let nextKey = delegate.getKeyPageAbove(manager.focusedKey);\n navigateToKey(nextKey);\n }\n break;\n case 'a':\n if (isCtrlKeyPressed(e) && manager.selectionMode === 'multiple' && disallowSelectAll !== true) {\n e.preventDefault();\n manager.selectAll();\n }\n break;\n case 'Escape':\n e.preventDefault();\n if (!disallowEmptySelection) {\n manager.clearSelection();\n }\n break;\n case 'Tab': {\n if (!allowsTabNavigation) {\n // There may be elements that are \"tabbable\" inside a collection (e.g. in a grid cell).\n // However, collections should be treated as a single tab stop, with arrow key navigation internally.\n // We don't control the rendering of these, so we can't override the tabIndex to prevent tabbing.\n // Instead, we handle the Tab key, and move focus manually to the first/last tabbable element\n // in the collection, so that the browser default behavior will apply starting from that element\n // rather than the currently focused one.\n if (e.shiftKey) {\n ref.current.focus();\n } else {\n let walker = getFocusableTreeWalker(ref.current, {tabbable: true});\n let next: FocusableElement;\n let last: FocusableElement;\n do {\n last = walker.lastChild() as FocusableElement;\n if (last) {\n next = last;\n }\n } while (last);\n\n if (next && !next.contains(document.activeElement)) {\n focusWithoutScrolling(next);\n }\n }\n break;\n }\n }\n }\n };\n\n // Store the scroll position so we can restore it later.\n let scrollPos = useRef({top: 0, left: 0});\n useEvent(scrollRef, 'scroll', isVirtualized ? null : () => {\n scrollPos.current = {\n top: scrollRef.current.scrollTop,\n left: scrollRef.current.scrollLeft\n };\n });\n\n let onFocus = (e: FocusEvent) => {\n if (manager.isFocused) {\n // If a focus event bubbled through a portal, reset focus state.\n if (!e.currentTarget.contains(e.target)) {\n manager.setFocused(false);\n }\n\n return;\n }\n\n // Focus events can bubble through portals. Ignore these events.\n if (!e.currentTarget.contains(e.target)) {\n return;\n }\n\n manager.setFocused(true);\n\n if (manager.focusedKey == null) {\n let navigateToFirstKey = (key: Key | undefined) => {\n if (key != null) {\n manager.setFocusedKey(key);\n if (selectOnFocus) {\n manager.replaceSelection(key);\n }\n }\n };\n // If the user hasn't yet interacted with the collection, there will be no focusedKey set.\n // Attempt to detect whether the user is tabbing forward or backward into the collection\n // and either focus the first or last item accordingly.\n let relatedTarget = e.relatedTarget as Element;\n if (relatedTarget && (e.currentTarget.compareDocumentPosition(relatedTarget) & Node.DOCUMENT_POSITION_FOLLOWING)) {\n navigateToFirstKey(manager.lastSelectedKey ?? delegate.getLastKey());\n } else {\n navigateToFirstKey(manager.firstSelectedKey ?? delegate.getFirstKey());\n }\n } else if (!isVirtualized) {\n // Restore the scroll position to what it was before.\n scrollRef.current.scrollTop = scrollPos.current.top;\n scrollRef.current.scrollLeft = scrollPos.current.left;\n }\n\n if (!isVirtualized && manager.focusedKey != null) {\n // Refocus and scroll the focused item into view if it exists within the scrollable region.\n let element = scrollRef.current.querySelector(`[data-key=\"${CSS.escape(manager.focusedKey.toString())}\"]`) as HTMLElement;\n if (element) {\n // This prevents a flash of focus on the first/last element in the collection, or the collection itself.\n if (!element.contains(document.activeElement)) {\n focusWithoutScrolling(element);\n }\n\n let modality = getInteractionModality();\n if (modality === 'keyboard') {\n scrollIntoViewport(element, {containingElement: ref.current});\n }\n }\n }\n };\n\n let onBlur = (e) => {\n // Don't set blurred and then focused again if moving focus within the collection.\n if (!e.currentTarget.contains(e.relatedTarget as HTMLElement)) {\n manager.setFocused(false);\n }\n };\n\n const autoFocusRef = useRef(autoFocus);\n useEffect(() => {\n if (autoFocusRef.current) {\n let focusedKey = null;\n\n // Check focus strategy to determine which item to focus\n if (autoFocus === 'first') {\n focusedKey = delegate.getFirstKey();\n } if (autoFocus === 'last') {\n focusedKey = delegate.getLastKey();\n }\n\n // If there are any selected keys, make the first one the new focus target\n let selectedKeys = manager.selectedKeys;\n if (selectedKeys.size) {\n for (let key of selectedKeys) {\n if (manager.canSelectItem(key)) {\n focusedKey = key;\n break;\n }\n }\n }\n\n manager.setFocused(true);\n manager.setFocusedKey(focusedKey);\n\n // If no default focus key is selected, focus the collection itself.\n if (focusedKey == null && !shouldUseVirtualFocus) {\n focusSafely(ref.current);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // If not virtualized, scroll the focused element into view when the focusedKey changes.\n // When virtualized, Virtualizer handles this internally.\n let lastFocusedKey = useRef(manager.focusedKey);\n useEffect(() => {\n let modality = getInteractionModality();\n if (manager.isFocused && manager.focusedKey != null && scrollRef?.current) {\n let element = scrollRef.current.querySelector(`[data-key=\"${CSS.escape(manager.focusedKey.toString())}\"]`) as HTMLElement;\n if (element && (modality === 'keyboard' || autoFocusRef.current)) {\n if (!isVirtualized) {\n scrollIntoView(scrollRef.current, element);\n }\n // Avoid scroll in iOS VO, since it may cause overlay to close (i.e. RAC submenu)\n if (modality !== 'virtual') {\n scrollIntoViewport(element, {containingElement: ref.current});\n }\n }\n }\n\n // If the focused key becomes null (e.g. the last item is deleted), focus the whole collection.\n if (manager.isFocused && manager.focusedKey == null && lastFocusedKey.current != null) {\n focusSafely(ref.current);\n }\n\n lastFocusedKey.current = manager.focusedKey;\n autoFocusRef.current = false;\n }, [isVirtualized, scrollRef, manager.focusedKey, manager.isFocused, ref]);\n\n let handlers = {\n onKeyDown,\n onFocus,\n onBlur,\n onMouseDown(e) {\n // Ignore events that bubbled through portals.\n if (scrollRef.current === e.target) {\n // Prevent focus going to the collection when clicking on the scrollbar.\n e.preventDefault();\n }\n }\n };\n\n let {typeSelectProps} = useTypeSelect({\n keyboardDelegate: delegate,\n selectionManager: manager\n });\n\n if (!disallowTypeAhead) {\n handlers = mergeProps(typeSelectProps, handlers);\n }\n\n // If nothing is focused within the collection, make the collection itself tabbable.\n // This will be marshalled to either the first or last item depending on where focus came from.\n // If using virtual focus, don't set a tabIndex at all so that VoiceOver on iOS 14 doesn't try\n // to move real DOM focus to the element anyway.\n let tabIndex: number;\n if (!shouldUseVirtualFocus) {\n tabIndex = manager.focusedKey == null ? 0 : -1;\n }\n\n return {\n collectionProps: {\n ...handlers,\n tabIndex\n }\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes, FocusableElement, Key, LongPressEvent, PressEvent} from '@react-types/shared';\nimport {focusSafely} from '@react-aria/focus';\nimport {isCtrlKeyPressed, isNonContiguousSelectionModifier} from './utils';\nimport {mergeProps, openLink, useRouter} from '@react-aria/utils';\nimport {MultipleSelectionManager} from '@react-stately/selection';\nimport {PressProps, useLongPress, usePress} from '@react-aria/interactions';\nimport {RefObject, useEffect, useRef} from 'react';\n\nexport interface SelectableItemOptions {\n /**\n * An interface for reading and updating multiple selection state.\n */\n selectionManager: MultipleSelectionManager,\n /**\n * A unique key for the item.\n */\n key: Key,\n /**\n * Ref to the item.\n */\n ref: RefObject<FocusableElement>,\n /**\n * By default, selection occurs on pointer down. This can be strange if selecting an\n * item causes the UI to disappear immediately (e.g. menus).\n */\n shouldSelectOnPressUp?: boolean,\n /**\n * Whether selection requires the pointer/mouse down and up events to occur on the same target or triggers selection on\n * the target of the pointer/mouse up event.\n */\n allowsDifferentPressOrigin?: boolean,\n /**\n * Whether the option is contained in a virtual scroller.\n */\n isVirtualized?: boolean,\n /**\n * Function to focus the item.\n */\n focus?: () => void,\n /**\n * Whether the option should use virtual focus instead of being focused directly.\n */\n shouldUseVirtualFocus?: boolean,\n /** Whether the item is disabled. */\n isDisabled?: boolean,\n /**\n * Handler that is called when a user performs an action on the item. The exact user event depends on\n * the collection's `selectionBehavior` prop and the interaction modality.\n */\n onAction?: () => void,\n /**\n * The behavior of links in the collection.\n * - 'action': link behaves like onAction.\n * - 'selection': link follows selection interactions (e.g. if URL drives selection).\n * - 'override': links override all other interactions (link items are not selectable).\n * - 'none': links are disabled for both selection and actions (e.g. handled elsewhere).\n * @default 'action'\n */\n linkBehavior?: 'action' | 'selection' | 'override' | 'none'\n}\n\nexport interface SelectableItemStates {\n /** Whether the item is currently in a pressed state. */\n isPressed: boolean,\n /** Whether the item is currently selected. */\n isSelected: boolean,\n /** Whether the item is currently focused. */\n isFocused: boolean,\n /**\n * Whether the item is non-interactive, i.e. both selection and actions are disabled and the item may\n * not be focused. Dependent on `disabledKeys` and `disabledBehavior`.\n */\n isDisabled: boolean,\n /**\n * Whether the item may be selected, dependent on `selectionMode`, `disabledKeys`, and `disabledBehavior`.\n */\n allowsSelection: boolean,\n /**\n * Whether the item has an action, dependent on `onAction`, `disabledKeys`,\n * and `disabledBehavior`. It may also change depending on the current selection state\n * of the list (e.g. when selection is primary). This can be used to enable or disable hover\n * styles or other visual indications of interactivity.\n */\n hasAction: boolean\n}\n\nexport interface SelectableItemAria extends SelectableItemStates {\n /**\n * Props to be spread on the item root node.\n */\n itemProps: DOMAttributes\n}\n\n/**\n * Handles interactions with an item in a selectable collection.\n */\nexport function useSelectableItem(options: SelectableItemOptions): SelectableItemAria {\n let {\n selectionManager: manager,\n key,\n ref,\n shouldSelectOnPressUp,\n shouldUseVirtualFocus,\n focus,\n isDisabled,\n onAction,\n allowsDifferentPressOrigin,\n linkBehavior = 'action'\n } = options;\n let router = useRouter();\n\n let onSelect = (e: PressEvent | LongPressEvent | PointerEvent) => {\n if (e.pointerType === 'keyboard' && isNonContiguousSelectionModifier(e)) {\n manager.toggleSelection(key);\n } else {\n if (manager.selectionMode === 'none') {\n return;\n }\n\n if (manager.isLink(key)) {\n if (linkBehavior === 'selection') {\n router.open(ref.current, e);\n // Always set selected keys back to what they were so that select and combobox close.\n manager.setSelectedKeys(manager.selectedKeys);\n return;\n } else if (linkBehavior === 'override' || linkBehavior === 'none') {\n return;\n }\n }\n\n if (manager.selectionMode === 'single') {\n if (manager.isSelected(key) && !manager.disallowEmptySelection) {\n manager.toggleSelection(key);\n } else {\n manager.replaceSelection(key);\n }\n } else if (e && e.shiftKey) {\n manager.extendSelection(key);\n } else if (manager.selectionBehavior === 'toggle' || (e && (isCtrlKeyPressed(e) || e.pointerType === 'touch' || e.pointerType === 'virtual'))) {\n // if touch or virtual (VO) then we just want to toggle, otherwise it's impossible to multi select because they don't have modifier keys\n manager.toggleSelection(key);\n } else {\n manager.replaceSelection(key);\n }\n }\n };\n\n // Focus the associated DOM node when this item becomes the focusedKey\n useEffect(() => {\n let isFocused = key === manager.focusedKey;\n if (isFocused && manager.isFocused && !shouldUseVirtualFocus) {\n if (focus) {\n focus();\n } else if (document.activeElement !== ref.current) {\n focusSafely(ref.current);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref, key, manager.focusedKey, manager.childFocusStrategy, manager.isFocused, shouldUseVirtualFocus]);\n\n isDisabled = isDisabled || manager.isDisabled(key);\n // Set tabIndex to 0 if the element is focused, or -1 otherwise so that only the last focused\n // item is tabbable. If using virtual focus, don't set a tabIndex at all so that VoiceOver\n // on iOS 14 doesn't try to move real DOM focus to the item anyway.\n let itemProps: SelectableItemAria['itemProps'] = {};\n if (!shouldUseVirtualFocus && !isDisabled) {\n itemProps = {\n tabIndex: key === manager.focusedKey ? 0 : -1,\n onFocus(e) {\n if (e.target === ref.current) {\n manager.setFocusedKey(key);\n }\n }\n };\n } else if (isDisabled) {\n itemProps.onMouseDown = (e) => {\n // Prevent focus going to the body when clicking on a disabled item.\n e.preventDefault();\n };\n }\n\n // With checkbox selection, onAction (i.e. navigation) becomes primary, and occurs on a single click of the row.\n // Clicking the checkbox enters selection mode, after which clicking anywhere on any row toggles selection for that row.\n // With highlight selection, onAction is secondary, and occurs on double click. Single click selects the row.\n // With touch, onAction occurs on single tap, and long press enters selection mode.\n let isLinkOverride = manager.isLink(key) && linkBehavior === 'override';\n let hasLinkAction = manager.isLink(key) && linkBehavior !== 'selection' && linkBehavior !== 'none';\n let allowsSelection = !isDisabled && manager.canSelectItem(key) && !isLinkOverride;\n let allowsActions = (onAction || hasLinkAction) && !isDisabled;\n let hasPrimaryAction = allowsActions && (\n manager.selectionBehavior === 'replace'\n ? !allowsSelection\n : !allowsSelection || manager.isEmpty\n );\n let hasSecondaryAction = allowsActions && allowsSelection && manager.selectionBehavior === 'replace';\n let hasAction = hasPrimaryAction || hasSecondaryAction;\n let modality = useRef(null);\n\n let longPressEnabled = hasAction && allowsSelection;\n let longPressEnabledOnPressStart = useRef(false);\n let hadPrimaryActionOnPressStart = useRef(false);\n\n let performAction = (e) => {\n if (onAction) {\n onAction();\n }\n\n if (hasLinkAction) {\n router.open(ref.current, e);\n }\n };\n\n // By default, selection occurs on pointer down. This can be strange if selecting an\n // item causes the UI to disappear immediately (e.g. menus).\n // If shouldSelectOnPressUp is true, we use onPressUp instead of onPressStart.\n // onPress requires a pointer down event on the same element as pointer up. For menus,\n // we want to be able to have the pointer down on the trigger that opens the menu and\n // the pointer up on the menu item rather than requiring a separate press.\n // For keyboard events, selection still occurs on key down.\n let itemPressProps: PressProps = {};\n if (shouldSelectOnPressUp) {\n itemPressProps.onPressStart = (e) => {\n modality.current = e.pointerType;\n longPressEnabledOnPressStart.current = longPressEnabled;\n if (e.pointerType === 'keyboard' && (!hasAction || isSelectionKey())) {\n onSelect(e);\n }\n };\n\n // If allowsDifferentPressOrigin, make selection happen on pressUp (e.g. open menu on press down, selection on menu item happens on press up.)\n // Otherwise, have selection happen onPress (prevents listview row selection when clicking on interactable elements in the row)\n if (!allowsDifferentPressOrigin) {\n itemPressProps.onPress = (e) => {\n if (hasPrimaryAction || (hasSecondaryAction && e.pointerType !== 'mouse')) {\n if (e.pointerType === 'keyboard' && !isActionKey()) {\n return;\n }\n\n performAction(e);\n } else if (e.pointerType !== 'keyboard' && allowsSelection) {\n onSelect(e);\n }\n };\n } else {\n itemPressProps.onPressUp = hasPrimaryAction ? null : (e) => {\n if (e.pointerType !== 'keyboard' && allowsSelection) {\n onSelect(e);\n }\n };\n\n itemPressProps.onPress = hasPrimaryAction ? performAction : null;\n }\n } else {\n itemPressProps.onPressStart = (e) => {\n modality.current = e.pointerType;\n longPressEnabledOnPressStart.current = longPressEnabled;\n hadPrimaryActionOnPressStart.current = hasPrimaryAction;\n\n // Select on mouse down unless there is a primary action which will occur on mouse up.\n // For keyboard, select on key down. If there is an action, the Space key selects on key down,\n // and the Enter key performs onAction on key up.\n if (\n allowsSelection && (\n (e.pointerType === 'mouse' && !hasPrimaryAction) ||\n (e.pointerType === 'keyboard' && (!allowsActions || isSelectionKey()))\n )\n ) {\n onSelect(e);\n }\n };\n\n itemPressProps.onPress = (e) => {\n // Selection occurs on touch up. Primary actions always occur on pointer up.\n // Both primary and secondary actions occur on Enter key up. The only exception\n // is secondary actions, which occur on double click with a mouse.\n if (\n e.pointerType === 'touch' ||\n e.pointerType === 'pen' ||\n e.pointerType === 'virtual' ||\n (e.pointerType === 'keyboard' && hasAction && isActionKey()) ||\n (e.pointerType === 'mouse' && hadPrimaryActionOnPressStart.current)\n ) {\n if (hasAction) {\n performAction(e);\n } else if (allowsSelection) {\n onSelect(e);\n }\n }\n };\n }\n\n itemProps['data-key'] = key;\n itemPressProps.preventFocusOnPress = shouldUseVirtualFocus;\n let {pressProps, isPressed} = usePress(itemPressProps);\n\n // Double clicking with a mouse with selectionBehavior = 'replace' performs an action.\n let onDoubleClick = hasSecondaryAction ? (e) => {\n if (modality.current === 'mouse') {\n e.stopPropagation();\n e.preventDefault();\n performAction(e);\n }\n } : undefined;\n\n // Long pressing an item with touch when selectionBehavior = 'replace' switches the selection behavior\n // to 'toggle'. This changes the single tap behavior from performing an action (i.e. navigating) to\n // selecting, and may toggle the appearance of a UI affordance like checkboxes on each item.\n let {longPressProps} = useLongPress({\n isDisabled: !longPressEnabled,\n onLongPress(e) {\n if (e.pointerType === 'touch') {\n onSelect(e);\n manager.setSelectionBehavior('toggle');\n }\n }\n });\n\n // Prevent native drag and drop on long press if we also select on long press.\n // Once the user is in selection mode, they can long press again to drag.\n // Use a capturing listener to ensure this runs before useDrag, regardless of\n // the order the props get merged.\n let onDragStartCapture = e => {\n if (modality.current === 'touch' && longPressEnabledOnPressStart.current) {\n e.preventDefault();\n }\n };\n\n // Prevent default on link clicks so that we control exactly\n // when they open (to match selection behavior).\n let onClick = manager.isLink(key) ? e => {\n if (!(openLink as any).isOpening) {\n e.preventDefault();\n }\n } : undefined;\n\n return {\n itemProps: mergeProps(\n itemProps,\n allowsSelection || hasPrimaryAction ? pressProps : {},\n longPressEnabled ? longPressProps : {},\n {onDoubleClick, onDragStartCapture, onClick}\n ),\n isPressed,\n isSelected: manager.isSelected(key),\n isFocused: manager.isFocused && manager.focusedKey === key,\n isDisabled,\n allowsSelection,\n hasAction\n };\n}\n\nfunction isActionKey() {\n let event = window.event as KeyboardEvent;\n return event?.key === 'Enter';\n}\n\nfunction isSelectionKey() {\n let event = window.event as KeyboardEvent;\n return event?.key === ' ' || event?.code === 'Space';\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, Direction, Key, KeyboardDelegate, Node, Orientation} from '@react-types/shared';\nimport {isScrollable} from '@react-aria/utils';\nimport {RefObject} from 'react';\n\ninterface ListKeyboardDelegateOptions<T> {\n collection: Collection<Node<T>>,\n ref: RefObject<HTMLElement>,\n collator?: Intl.Collator,\n layout?: 'stack' | 'grid',\n orientation?: Orientation,\n direction?: Direction,\n disabledKeys?: Set<Key>\n}\n\nexport class ListKeyboardDelegate<T> implements KeyboardDelegate {\n private collection: Collection<Node<T>>;\n private disabledKeys: Set<Key>;\n private ref: RefObject<HTMLElement>;\n private collator: Intl.Collator | undefined;\n private layout: 'stack' | 'grid';\n private orientation?: Orientation;\n private direction?: Direction;\n\n constructor(collection: Collection<Node<T>>, disabledKeys: Set<Key>, ref: RefObject<HTMLElement>, collator?: Intl.Collator);\n constructor(options: ListKeyboardDelegateOptions<T>);\n constructor(...args: any[]) {\n if (args.length === 1) {\n let opts = args[0] as ListKeyboardDelegateOptions<T>;\n this.collection = opts.collection;\n this.ref = opts.ref;\n this.collator = opts.collator;\n this.disabledKeys = opts.disabledKeys || new Set();\n this.orientation = opts.orientation;\n this.direction = opts.direction;\n this.layout = opts.layout || 'stack';\n } else {\n this.collection = args[0];\n this.disabledKeys = args[1];\n this.ref = args[2];\n this.collator = args[3];\n this.layout = 'stack';\n this.orientation = 'vertical';\n }\n\n // If this is a vertical stack, remove the left/right methods completely\n // so they aren't called by useDroppableCollection.\n if (this.layout === 'stack' && this.orientation === 'vertical') {\n this.getKeyLeftOf = undefined;\n this.getKeyRightOf = undefined;\n }\n }\n\n getNextKey(key: Key) {\n key = this.collection.getKeyAfter(key);\n while (key != null) {\n let item = this.collection.getItem(key);\n if (item.type === 'item' && !this.disabledKeys.has(key)) {\n return key;\n }\n\n key = this.collection.getKeyAfter(key);\n }\n\n return null;\n }\n\n getPreviousKey(key: Key) {\n key = this.collection.getKeyBefore(key);\n while (key != null) {\n let item = this.collection.getItem(key);\n if (item.type === 'item' && !this.disabledKeys.has(key)) {\n return key;\n }\n\n key = this.collection.getKeyBefore(key);\n }\n\n return null;\n }\n\n private findKey(\n key: Key,\n nextKey: (key: Key) => Key,\n shouldSkip: (prevRect: DOMRect, itemRect: DOMRect) => boolean\n ) {\n let item = this.getItem(key);\n if (!item) {\n return null;\n }\n\n // Find the item above or below in the same column.\n let prevRect = item.getBoundingClientRect();\n do {\n key = nextKey(key);\n item = this.getItem(key);\n } while (item && shouldSkip(prevRect, item.getBoundingClientRect()));\n\n return key;\n }\n\n private isSameRow(prevRect: DOMRect, itemRect: DOMRect) {\n return prevRect.top === itemRect.top || prevRect.left !== itemRect.left;\n }\n\n private isSameColumn(prevRect: DOMRect, itemRect: DOMRect) {\n return prevRect.left === itemRect.left || prevRect.top !== itemRect.top;\n }\n\n getKeyBelow(key: Key) {\n if (this.layout === 'grid' && this.orientation === 'vertical') {\n return this.findKey(key, (key) => this.getNextKey(key), this.isSameRow);\n } else {\n return this.getNextKey(key);\n }\n }\n\n getKeyAbove(key: Key) {\n if (this.layout === 'grid' && this.orientation === 'vertical') {\n return this.findKey(key, (key) => this.getPreviousKey(key), this.isSameRow);\n } else {\n return this.getPreviousKey(key);\n }\n }\n\n private getNextColumn(key: Key, right: boolean) {\n return right ? this.getPreviousKey(key) : this.getNextKey(key);\n }\n\n getKeyRightOf(key: Key) {\n if (this.layout === 'grid') {\n if (this.orientation === 'vertical') {\n return this.getNextColumn(key, this.direction === 'rtl');\n } else {\n return this.findKey(key, (key) => this.getNextColumn(key, this.direction === 'rtl'), this.isSameColumn);\n }\n } else if (this.orientation === 'horizontal') {\n return this.getNextColumn(key, this.direction === 'rtl');\n }\n\n return null;\n }\n\n getKeyLeftOf(key: Key) {\n if (this.layout === 'grid') {\n if (this.orientation === 'vertical') {\n return this.getNextColumn(key, this.direction === 'ltr');\n } else {\n return this.findKey(key, (key) => this.getNextColumn(key, this.direction === 'ltr'), this.isSameColumn);\n }\n } else if (this.orientation === 'horizontal') {\n return this.getNextColumn(key, this.direction === 'ltr');\n }\n\n return null;\n }\n\n getFirstKey() {\n let key = this.collection.getFirstKey();\n while (key != null) {\n let item = this.collection.getItem(key);\n if (item?.type === 'item' && !this.disabledKeys.has(key)) {\n return key;\n }\n\n key = this.collection.getKeyAfter(key);\n }\n\n return null;\n }\n\n getLastKey() {\n let key = this.collection.getLastKey();\n while (key != null) {\n let item = this.collection.getItem(key);\n if (item.type === 'item' && !this.disabledKeys.has(key)) {\n return key;\n }\n\n key = this.collection.getKeyBefore(key);\n }\n\n return null;\n }\n\n private getItem(key: Key): HTMLElement {\n return this.ref.current.querySelector(`[data-key=\"${CSS.escape(key.toString())}\"]`);\n }\n\n getKeyPageAbove(key: Key) {\n let menu = this.ref.current;\n let item = this.getItem(key);\n if (!item) {\n return null;\n }\n\n if (!isScrollable(menu)) {\n return this.getFirstKey();\n }\n\n let containerRect = menu.getBoundingClientRect();\n let itemRect = item.getBoundingClientRect();\n if (this.orientation === 'horizontal') {\n let containerX = containerRect.x - menu.scrollLeft;\n let pageX = Math.max(0, (itemRect.x - containerX) + itemRect.width - containerRect.width);\n\n while (item && (itemRect.x - containerX) > pageX) {\n key = this.getKeyAbove(key);\n item = key == null ? null : this.getItem(key);\n itemRect = item?.getBoundingClientRect();\n }\n } else {\n let containerY = containerRect.y - menu.scrollTop;\n let pageY = Math.max(0, (itemRect.y - containerY) + itemRect.height - containerRect.height);\n\n while (item && (itemRect.y - containerY) > pageY) {\n key = this.getKeyAbove(key);\n item = key == null ? null : this.getItem(key);\n itemRect = item?.getBoundingClientRect();\n }\n }\n\n return key ?? this.getFirstKey();\n }\n\n getKeyPageBelow(key: Key) {\n let menu = this.ref.current;\n let item = this.getItem(key);\n if (!item) {\n return null;\n }\n\n if (!isScrollable(menu)) {\n return this.getLastKey();\n }\n\n let containerRect = menu.getBoundingClientRect();\n let itemRect = item.getBoundingClientRect();\n if (this.orientation === 'horizontal') {\n let containerX = containerRect.x - menu.scrollLeft;\n let pageX = Math.min(menu.scrollWidth, (itemRect.x - containerX) - itemRect.width + containerRect.width);\n\n while (item && (itemRect.x - containerX) < pageX) {\n key = this.getKeyBelow(key);\n item = key == null ? null : this.getItem(key);\n itemRect = item?.getBoundingClientRect();\n }\n } else {\n let containerY = containerRect.y - menu.scrollTop;\n let pageY = Math.min(menu.scrollHeight, (itemRect.y - containerY) - itemRect.height + containerRect.height);\n\n while (item && (itemRect.y - containerY) < pageY) {\n key = this.getKeyBelow(key);\n item = key == null ? null : this.getItem(key);\n itemRect = item?.getBoundingClientRect();\n }\n }\n\n return key ?? this.getLastKey();\n }\n\n getKeyForSearch(search: string, fromKey?: Key) {\n if (!this.collator) {\n return null;\n }\n\n let collection = this.collection;\n let key = fromKey || this.getFirstKey();\n while (key != null) {\n let item = collection.getItem(key);\n let substring = item.textValue.slice(0, search.length);\n if (item.textValue && this.collator.compare(substring, search) === 0) {\n return key;\n }\n\n key = this.getKeyBelow(key);\n }\n\n return null;\n }\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaSelectableCollectionOptions, useSelectableCollection} from './useSelectableCollection';\nimport {Collection, DOMAttributes, Key, KeyboardDelegate, Node} from '@react-types/shared';\nimport {ListKeyboardDelegate} from './ListKeyboardDelegate';\nimport {useCollator} from '@react-aria/i18n';\nimport {useMemo} from 'react';\n\nexport interface AriaSelectableListOptions extends Omit<AriaSelectableCollectionOptions, 'keyboardDelegate'> {\n /**\n * State of the collection.\n */\n collection: Collection<Node<unknown>>,\n /**\n * A delegate object that implements behavior for keyboard focus movement.\n */\n keyboardDelegate?: KeyboardDelegate,\n /**\n * The item keys that are disabled. These items cannot be selected, focused, or otherwise interacted with.\n */\n disabledKeys: Set<Key>\n}\n\nexport interface SelectableListAria {\n /**\n * Props for the option element.\n */\n listProps: DOMAttributes\n}\n\n/**\n * Handles interactions with a selectable list.\n */\nexport function useSelectableList(props: AriaSelectableListOptions): SelectableListAria {\n let {\n selectionManager,\n collection,\n disabledKeys,\n ref,\n keyboardDelegate\n } = props;\n\n // By default, a KeyboardDelegate is provided which uses the DOM to query layout information (e.g. for page up/page down).\n // When virtualized, the layout object will be passed in as a prop and override this.\n let collator = useCollator({usage: 'search', sensitivity: 'base'});\n let disabledBehavior = selectionManager.disabledBehavior;\n let delegate = useMemo(() => (\n keyboardDelegate || new ListKeyboardDelegate(collection, disabledBehavior === 'selection' ? new Set() : disabledKeys, ref, collator)\n ), [keyboardDelegate, collection, disabledKeys, ref, collator, disabledBehavior]);\n\n let {collectionProps} = useSelectableCollection({\n ...props,\n ref,\n selectionManager,\n keyboardDelegate: delegate\n });\n\n return {\n listProps: collectionProps\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLabelingProps, DOMAttributes, DOMProps, LabelableProps} from '@react-types/shared';\nimport {ElementType, LabelHTMLAttributes} from 'react';\nimport {useId, useLabels} from '@react-aria/utils';\n\nexport interface LabelAriaProps extends LabelableProps, DOMProps, AriaLabelingProps {\n /**\n * The HTML element used to render the label, e.g. 'label', or 'span'.\n * @default 'label'\n */\n labelElementType?: ElementType\n}\n\nexport interface LabelAria {\n /** Props to apply to the label container element. */\n labelProps: DOMAttributes | LabelHTMLAttributes<HTMLLabelElement>,\n /** Props to apply to the field container element being labeled. */\n fieldProps: AriaLabelingProps & DOMProps\n}\n\n/**\n * Provides the accessibility implementation for labels and their associated elements.\n * Labels provide context for user inputs.\n * @param props - The props for labels and fields.\n */\nexport function useLabel(props: LabelAriaProps): LabelAria {\n let {\n id,\n label,\n 'aria-labelledby': ariaLabelledby,\n 'aria-label': ariaLabel,\n labelElementType = 'label'\n } = props;\n\n id = useId(id);\n let labelId = useId();\n let labelProps = {};\n if (label) {\n ariaLabelledby = ariaLabelledby ? `${labelId} ${ariaLabelledby}` : labelId;\n labelProps = {\n id: labelId,\n htmlFor: labelElementType === 'label' ? id : undefined\n };\n } else if (!ariaLabelledby && !ariaLabel) {\n console.warn('If you do not provide a visible label, you must specify an aria-label or aria-labelledby attribute for accessibility');\n }\n\n let fieldProps = useLabels({\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby\n });\n\n return {\n labelProps,\n fieldProps\n };\n}\n","/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes, HelpTextProps, Validation} from '@react-types/shared';\nimport {LabelAria, LabelAriaProps, useLabel} from './useLabel';\nimport {mergeProps, useSlotId} from '@react-aria/utils';\n\nexport interface AriaFieldProps extends LabelAriaProps, HelpTextProps, Omit<Validation<any>, 'isRequired'> {}\n\nexport interface FieldAria extends LabelAria {\n /** Props for the description element, if any. */\n descriptionProps: DOMAttributes,\n /** Props for the error message element, if any. */\n errorMessageProps: DOMAttributes\n}\n\n/**\n * Provides the accessibility implementation for input fields.\n * Fields accept user input, gain context from their label, and may display a description or error message.\n * @param props - Props for the Field.\n */\nexport function useField(props: AriaFieldProps): FieldAria {\n let {description, errorMessage, isInvalid, validationState} = props;\n let {labelProps, fieldProps} = useLabel(props);\n\n let descriptionId = useSlotId([Boolean(description), Boolean(errorMessage), isInvalid, validationState]);\n let errorMessageId = useSlotId([Boolean(description), Boolean(errorMessage), isInvalid, validationState]);\n\n fieldProps = mergeProps(fieldProps, {\n 'aria-describedby': [\n descriptionId,\n // Use aria-describedby for error message because aria-errormessage is unsupported using VoiceOver or NVDA. See https://github.com/adobe/react-spectrum/issues/1346#issuecomment-740136268\n errorMessageId,\n props['aria-describedby']\n ].filter(Boolean).join(' ') || undefined\n });\n\n return {\n labelProps,\n fieldProps,\n descriptionProps: {\n id: descriptionId\n },\n errorMessageProps: {\n id: errorMessageId\n }\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {ItemElement, ItemProps} from '@react-types/shared';\nimport {PartialNode} from './types';\nimport React, {JSX, ReactElement} from 'react';\n\nfunction Item<T>(props: ItemProps<T>): ReactElement { // eslint-disable-line @typescript-eslint/no-unused-vars\n return null;\n}\n\nItem.getCollectionNode = function* getCollectionNode<T>(props: ItemProps<T>, context: any): Generator<PartialNode<T>> {\n let {childItems, title, children} = props;\n\n let rendered = props.title || props.children;\n let textValue = props.textValue || (typeof rendered === 'string' ? rendered : '') || props['aria-label'] || '';\n\n // suppressTextValueWarning is used in components like Tabs, which don't have type to select support.\n if (!textValue && !context?.suppressTextValueWarning) {\n console.warn('<Item> with non-plain text contents is unsupported by type to select for accessibility. Please add a `textValue` prop.');\n }\n\n yield {\n type: 'item',\n props: props,\n rendered,\n textValue,\n 'aria-label': props['aria-label'],\n hasChildNodes: hasChildItems(props),\n *childNodes() {\n if (childItems) {\n for (let child of childItems) {\n yield {\n type: 'item',\n value: child\n };\n }\n } else if (title) {\n let items: PartialNode<T>[] = [];\n React.Children.forEach(children, child => {\n items.push({\n type: 'item',\n element: child as ItemElement<T>\n });\n });\n\n yield* items;\n }\n }\n };\n};\n\nfunction hasChildItems<T>(props: ItemProps<T>) {\n if (props.hasChildItems != null) {\n return props.hasChildItems;\n }\n\n if (props.childItems) {\n return true;\n }\n\n if (props.title && React.Children.count(props.children) > 0) {\n return true;\n }\n\n return false;\n}\n\n// We don't want getCollectionNode to show up in the type definition\nlet _Item = Item as <T>(props: ItemProps<T>) => JSX.Element;\nexport {_Item as Item};\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {PartialNode} from './types';\nimport React, {JSX, ReactElement} from 'react';\nimport {SectionProps} from '@react-types/shared';\n\nfunction Section<T>(props: SectionProps<T>): ReactElement { // eslint-disable-line @typescript-eslint/no-unused-vars\n return null;\n}\n\nSection.getCollectionNode = function* getCollectionNode<T>(props: SectionProps<T>): Generator<PartialNode<T>> {\n let {children, title, items} = props;\n yield {\n type: 'section',\n props: props,\n hasChildNodes: true,\n rendered: title,\n 'aria-label': props['aria-label'],\n *childNodes() {\n if (typeof children === 'function') {\n if (!items) {\n throw new Error('props.children was a function but props.items is missing');\n }\n\n for (let item of items) {\n yield {\n type: 'item',\n value: item,\n renderer: children\n };\n }\n } else {\n let items: PartialNode<T>[] = [];\n React.Children.forEach(children, child => {\n items.push({\n type: 'item',\n element: child\n });\n });\n\n yield* items;\n }\n }\n };\n};\n\n// We don't want getCollectionNode to show up in the type definition\nlet _Section = Section as <T>(props: SectionProps<T>) => JSX.Element;\nexport {_Section as Section};\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CollectionBase, CollectionElement, Key, Node} from '@react-types/shared';\nimport {PartialNode} from './types';\nimport React, {ReactElement} from 'react';\n\ninterface CollectionBuilderState {\n renderer?: (value: any) => ReactElement\n}\n\nexport class CollectionBuilder<T extends object> {\n private context?: unknown;\n private cache: WeakMap<T, Node<T>> = new WeakMap();\n\n build(props: CollectionBase<T>, context?: unknown) {\n this.context = context;\n return iterable(() => this.iterateCollection(props));\n }\n\n private *iterateCollection(props: CollectionBase<T>) {\n let {children, items} = props;\n\n if (typeof children === 'function') {\n if (!items) {\n throw new Error('props.children was a function but props.items is missing');\n }\n\n for (let item of props.items) {\n yield* this.getFullNode({\n value: item\n }, {renderer: children});\n }\n } else {\n let items: CollectionElement<T>[] = [];\n React.Children.forEach(children, child => {\n items.push(child);\n });\n\n let index = 0;\n for (let item of items) {\n let nodes = this.getFullNode({\n element: item,\n index: index\n }, {});\n\n for (let node of nodes) {\n index++;\n yield node;\n }\n }\n }\n }\n\n private getKey(item: CollectionElement<T>, partialNode: PartialNode<T>, state: CollectionBuilderState, parentKey?: Key): Key {\n if (item.key != null) {\n return item.key;\n }\n\n if (partialNode.type === 'cell' && partialNode.key != null) {\n return `${parentKey}${partialNode.key}`;\n }\n\n let v = partialNode.value as any;\n if (v != null) {\n let key = v.key ?? v.id;\n if (key == null) {\n throw new Error('No key found for item');\n }\n\n return key;\n }\n\n return parentKey ? `${parentKey}.${partialNode.index}` : `$.${partialNode.index}`;\n }\n\n private getChildState(state: CollectionBuilderState, partialNode: PartialNode<T>) {\n return {\n renderer: partialNode.renderer || state.renderer\n };\n }\n\n private *getFullNode(partialNode: PartialNode<T>, state: CollectionBuilderState, parentKey?: Key, parentNode?: Node<T>): Generator<Node<T>> {\n // If there's a value instead of an element on the node, and a parent renderer function is available,\n // use it to render an element for the value.\n let element = partialNode.element;\n if (!element && partialNode.value && state && state.renderer) {\n let cached = this.cache.get(partialNode.value);\n if (cached && (!cached.shouldInvalidate || !cached.shouldInvalidate(this.context))) {\n cached.index = partialNode.index;\n cached.parentKey = parentNode ? parentNode.key : null;\n yield cached;\n return;\n }\n\n element = state.renderer(partialNode.value);\n }\n\n // If there's an element with a getCollectionNode function on its type, then it's a supported component.\n // Call this function to get a partial node, and recursively build a full node from there.\n if (React.isValidElement(element)) {\n let type = element.type as any;\n if (typeof type !== 'function' && typeof type.getCollectionNode !== 'function') {\n let name = typeof element.type === 'function' ? element.type.name : element.type;\n throw new Error(`Unknown element <${name}> in collection.`);\n }\n\n let childNodes = type.getCollectionNode(element.props, this.context) as Generator<PartialNode<T>, void, Node<T>[]>;\n let index = partialNode.index;\n let result = childNodes.next();\n while (!result.done && result.value) {\n let childNode = result.value;\n\n partialNode.index = index;\n\n let nodeKey = childNode.key;\n if (!nodeKey) {\n nodeKey = childNode.element ? null : this.getKey(element as CollectionElement<T>, partialNode, state, parentKey);\n }\n\n let nodes = this.getFullNode({\n ...childNode,\n key: nodeKey,\n index,\n wrapper: compose(partialNode.wrapper, childNode.wrapper)\n }, this.getChildState(state, childNode), parentKey ? `${parentKey}${element.key}` : element.key, parentNode);\n\n let children = [...nodes];\n for (let node of children) {\n // Cache the node based on its value\n node.value = childNode.value || partialNode.value;\n if (node.value) {\n this.cache.set(node.value, node);\n }\n\n // The partial node may have specified a type for the child in order to specify a constraint.\n // Verify that the full node that was built recursively matches this type.\n if (partialNode.type && node.type !== partialNode.type) {\n throw new Error(`Unsupported type <${capitalize(node.type)}> in <${capitalize(parentNode.type)}>. Only <${capitalize(partialNode.type)}> is supported.`);\n }\n\n index++;\n yield node;\n }\n\n result = childNodes.next(children);\n }\n\n return;\n }\n\n // Ignore invalid elements\n if (partialNode.key == null) {\n return;\n }\n\n // Create full node\n let builder = this;\n let node: Node<T> = {\n type: partialNode.type,\n props: partialNode.props,\n key: partialNode.key,\n parentKey: parentNode ? parentNode.key : null,\n value: partialNode.value,\n level: parentNode ? parentNode.level + 1 : 0,\n index: partialNode.index,\n rendered: partialNode.rendered,\n textValue: partialNode.textValue,\n 'aria-label': partialNode['aria-label'],\n wrapper: partialNode.wrapper,\n shouldInvalidate: partialNode.shouldInvalidate,\n hasChildNodes: partialNode.hasChildNodes,\n childNodes: iterable(function *() {\n if (!partialNode.hasChildNodes) {\n return;\n }\n\n let index = 0;\n for (let child of partialNode.childNodes()) {\n // Ensure child keys are globally unique by prepending the parent node's key\n if (child.key != null) {\n // TODO: Remove this line entirely and enforce that users always provide unique keys.\n // Currently this line will have issues when a parent has a key `a` and a child with key `bc`\n // but another parent has key `ab` and its child has a key `c`. The combined keys would result in both\n // children having a key of `abc`.\n child.key = `${node.key}${child.key}`;\n }\n\n child.index = index;\n let nodes = builder.getFullNode(child, builder.getChildState(state, child), node.key, node);\n for (let node of nodes) {\n index++;\n yield node;\n }\n }\n })\n };\n\n yield node;\n }\n}\n\n// Wraps an iterator function as an iterable object, and caches the results.\nfunction iterable<T>(iterator: () => IterableIterator<Node<T>>): Iterable<Node<T>> {\n let cache = [];\n let iterable = null;\n return {\n *[Symbol.iterator]() {\n for (let item of cache) {\n yield item;\n }\n\n if (!iterable) {\n iterable = iterator();\n }\n\n for (let item of iterable) {\n cache.push(item);\n yield item;\n }\n }\n };\n}\n\ntype Wrapper = (element: ReactElement) => ReactElement;\nfunction compose(outer: Wrapper | void, inner: Wrapper | void): Wrapper {\n if (outer && inner) {\n return (element) => outer(inner(element));\n }\n\n if (outer) {\n return outer;\n }\n\n if (inner) {\n return inner;\n }\n}\n\nfunction capitalize(str: string) {\n return str[0].toUpperCase() + str.slice(1);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, CollectionStateBase, Node} from '@react-types/shared';\nimport {CollectionBuilder} from './CollectionBuilder';\nimport {ReactElement, useMemo} from 'react';\n\ninterface CollectionOptions<T, C extends Collection<Node<T>>> extends Omit<CollectionStateBase<T, C>, 'children'> {\n children?: ReactElement | ReactElement[] | ((item: T) => ReactElement)\n}\n\ntype CollectionFactory<T, C extends Collection<Node<T>>> = (node: Iterable<Node<T>>) => C;\n\nexport function useCollection<T extends object, C extends Collection<Node<T>> = Collection<Node<T>>>(props: CollectionOptions<T, C>, factory: CollectionFactory<T, C>, context?: unknown): C {\n let builder = useMemo(() => new CollectionBuilder<T>(), []);\n let {children, items, collection} = props;\n let result = useMemo(() => {\n if (collection) {\n return collection;\n }\n let nodes = builder.build({children, items}, context);\n return factory(nodes);\n }, [builder, children, items, collection, context, factory]);\n return result;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport type {Collection, Node} from '@react-types/shared';\n\nexport function getChildNodes<T>(node: Node<T>, collection: Collection<Node<T>>): Iterable<Node<T>> {\n // New API: call collection.getChildren with the node key.\n if (typeof collection.getChildren === 'function') {\n return collection.getChildren(node.key);\n }\n\n // Old API: access childNodes directly.\n return node.childNodes;\n}\n\nexport function getFirstItem<T>(iterable: Iterable<T>): T | undefined {\n return getNthItem(iterable, 0);\n}\n\nexport function getNthItem<T>(iterable: Iterable<T>, index: number): T | undefined {\n if (index < 0) {\n return undefined;\n }\n\n let i = 0;\n for (let item of iterable) {\n if (i === index) {\n return item;\n }\n\n i++;\n }\n}\n\nexport function getLastItem<T>(iterable: Iterable<T>): T | undefined {\n let lastItem = undefined;\n for (let value of iterable) {\n lastItem = value;\n }\n\n return lastItem;\n}\n\nexport function compareNodeOrder<T>(collection: Collection<Node<T>>, a: Node<T>, b: Node<T>) {\n // If the two nodes have the same parent, compare their indices.\n if (a.parentKey === b.parentKey) {\n return a.index - b.index;\n }\n\n // Otherwise, collect all of the ancestors from each node, and find the first one that doesn't match starting from the root.\n // Include the base nodes in case we are comparing nodes of different levels so that we can compare the higher node to the lower level node's\n // ancestor of the same level\n let aAncestors = [...getAncestors(collection, a), a];\n let bAncestors = [...getAncestors(collection, b), b];\n let firstNonMatchingAncestor = aAncestors.slice(0, bAncestors.length).findIndex((a, i) => a !== bAncestors[i]);\n if (firstNonMatchingAncestor !== -1) {\n // Compare the indices of two children within the common ancestor.\n a = aAncestors[firstNonMatchingAncestor];\n b = bAncestors[firstNonMatchingAncestor];\n return a.index - b.index;\n }\n\n // If there isn't a non matching ancestor, we might be in a case where one of the nodes is the ancestor of the other.\n if (aAncestors.findIndex(node => node === b) >= 0) {\n return 1;\n } else if (bAncestors.findIndex(node => node === a) >= 0) {\n return -1;\n }\n\n // 🤷\n return -1;\n}\n\nfunction getAncestors<T>(collection: Collection<Node<T>>, node: Node<T>): Node<T>[] {\n let parents = [];\n\n while (node?.parentKey != null) {\n node = collection.getItem(node.parentKey);\n parents.unshift(node);\n }\n\n return parents;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, Node} from '@react-types/shared';\nimport {getChildNodes} from './getChildNodes';\n\nconst cache = new WeakMap<Iterable<unknown>, number>();\n\nexport function getItemCount<T>(collection: Collection<Node<T>>): number {\n let count = cache.get(collection);\n if (count != null) {\n return count;\n }\n\n count = 0;\n let countItems = (items: Iterable<Node<T>>) => {\n for (let item of items) {\n if (item.type === 'section') {\n countItems(getChildNodes(item, collection));\n } else {\n count++;\n }\n }\n };\n\n countItems(collection);\n cache.set(collection, count);\n return count;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Key} from '@react-types/shared';\nimport {ListState} from '@react-stately/list';\n\ninterface ListData {\n id: string,\n shouldSelectOnPressUp?: boolean,\n shouldFocusOnHover?: boolean,\n shouldUseVirtualFocus?: boolean,\n isVirtualized?: boolean,\n onAction?: (key: Key) => void,\n linkBehavior?: 'action' | 'selection' | 'override'\n}\n\nexport const listData = new WeakMap<ListState<unknown>, ListData>();\n\nfunction normalizeKey(key: Key): string {\n if (typeof key === 'string') {\n return key.replace(/\\s*/g, '');\n }\n\n return '' + key;\n}\n\nexport function getItemId<T>(state: ListState<T>, itemKey: Key): string {\n let data = listData.get(state);\n\n if (!data) {\n throw new Error('Unknown list');\n }\n\n return `${data.id}-option-${normalizeKey(itemKey)}`;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaListBoxProps} from '@react-types/listbox';\nimport {DOMAttributes, KeyboardDelegate} from '@react-types/shared';\nimport {filterDOMProps, mergeProps, useId} from '@react-aria/utils';\nimport {listData} from './utils';\nimport {ListState} from '@react-stately/list';\nimport {RefObject} from 'react';\nimport {useFocusWithin} from '@react-aria/interactions';\nimport {useLabel} from '@react-aria/label';\nimport {useSelectableList} from '@react-aria/selection';\n\nexport interface ListBoxAria {\n /** Props for the listbox element. */\n listBoxProps: DOMAttributes,\n /** Props for the listbox's visual label element (if any). */\n labelProps: DOMAttributes\n}\n\nexport interface AriaListBoxOptions<T> extends Omit<AriaListBoxProps<T>, 'children'> {\n /** Whether the listbox uses virtual scrolling. */\n isVirtualized?: boolean,\n\n /**\n * An optional keyboard delegate implementation for type to select,\n * to override the default.\n */\n keyboardDelegate?: KeyboardDelegate,\n\n /**\n * Whether the listbox items should use virtual focus instead of being focused directly.\n */\n shouldUseVirtualFocus?: boolean,\n\n /** Whether selection should occur on press up instead of press down. */\n shouldSelectOnPressUp?: boolean,\n\n /** Whether options should be focused when the user hovers over them. */\n shouldFocusOnHover?: boolean,\n\n /**\n * The behavior of links in the collection.\n * - 'action': link behaves like onAction.\n * - 'selection': link follows selection interactions (e.g. if URL drives selection).\n * - 'override': links override all other interactions (link items are not selectable).\n * @default 'override'\n */\n linkBehavior?: 'action' | 'selection' | 'override'\n}\n\n/**\n * Provides the behavior and accessibility implementation for a listbox component.\n * A listbox displays a list of options and allows a user to select one or more of them.\n * @param props - Props for the listbox.\n * @param state - State for the listbox, as returned by `useListState`.\n */\nexport function useListBox<T>(props: AriaListBoxOptions<T>, state: ListState<T>, ref: RefObject<HTMLElement>): ListBoxAria {\n let domProps = filterDOMProps(props, {labelable: true});\n // Use props instead of state here. We don't want this to change due to long press.\n let selectionBehavior = props.selectionBehavior || 'toggle';\n let linkBehavior = props.linkBehavior || (selectionBehavior === 'replace' ? 'action' : 'override');\n if (selectionBehavior === 'toggle' && linkBehavior === 'action') {\n // linkBehavior=\"action\" does not work with selectionBehavior=\"toggle\" because there is no way\n // to initiate selection (checkboxes are not allowed inside a listbox). Link items will not be\n // selectable in this configuration.\n linkBehavior = 'override';\n }\n\n let {listProps} = useSelectableList({\n ...props,\n ref,\n selectionManager: state.selectionManager,\n collection: state.collection,\n disabledKeys: state.disabledKeys,\n linkBehavior\n });\n\n let {focusWithinProps} = useFocusWithin({\n onFocusWithin: props.onFocus,\n onBlurWithin: props.onBlur,\n onFocusWithinChange: props.onFocusChange\n });\n\n // Share list id and some props with child options.\n let id = useId(props.id);\n listData.set(state, {\n id,\n shouldUseVirtualFocus: props.shouldUseVirtualFocus,\n shouldSelectOnPressUp: props.shouldSelectOnPressUp,\n shouldFocusOnHover: props.shouldFocusOnHover,\n isVirtualized: props.isVirtualized,\n onAction: props.onAction,\n linkBehavior\n });\n\n let {labelProps, fieldProps} = useLabel({\n ...props,\n id,\n // listbox is not an HTML input element so it\n // shouldn't be labeled by a <label> element.\n labelElementType: 'span'\n });\n\n return {\n labelProps,\n listBoxProps: mergeProps(domProps, focusWithinProps, state.selectionManager.selectionMode === 'multiple' ? {\n 'aria-multiselectable': 'true'\n } : {}, {\n role: 'listbox',\n ...mergeProps(fieldProps, listProps)\n })\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes, FocusableElement, Key} from '@react-types/shared';\nimport {filterDOMProps, isMac, isWebKit, mergeProps, useSlotId} from '@react-aria/utils';\nimport {getItemCount} from '@react-stately/collections';\nimport {getItemId, listData} from './utils';\nimport {isFocusVisible, useHover} from '@react-aria/interactions';\nimport {ListState} from '@react-stately/list';\nimport {RefObject} from 'react';\nimport {SelectableItemStates, useSelectableItem} from '@react-aria/selection';\n\nexport interface OptionAria extends SelectableItemStates {\n /** Props for the option element. */\n optionProps: DOMAttributes,\n\n /** Props for the main text element inside the option. */\n labelProps: DOMAttributes,\n\n /** Props for the description text element inside the option, if any. */\n descriptionProps: DOMAttributes,\n\n /** Whether the option is currently focused. */\n isFocused: boolean,\n\n /** Whether the option is keyboard focused. */\n isFocusVisible: boolean\n}\n\nexport interface AriaOptionProps {\n /**\n * Whether the option is disabled.\n * @deprecated\n */\n isDisabled?: boolean,\n\n /**\n * Whether the option is selected.\n * @deprecated\n */\n isSelected?: boolean,\n\n /** A screen reader only label for the option. */\n 'aria-label'?: string,\n\n /** The unique key for the option. */\n key: Key,\n\n /**\n * Whether selection should occur on press up instead of press down.\n * @deprecated\n */\n shouldSelectOnPressUp?: boolean,\n\n /**\n * Whether the option should be focused when the user hovers over it.\n * @deprecated\n */\n shouldFocusOnHover?: boolean,\n\n /**\n * Whether the option is contained in a virtual scrolling listbox.\n * @deprecated\n */\n isVirtualized?: boolean,\n\n /**\n * Whether the option should use virtual focus instead of being focused directly.\n * @deprecated\n */\n shouldUseVirtualFocus?: boolean\n}\n\n/**\n * Provides the behavior and accessibility implementation for an option in a listbox.\n * See `useListBox` for more details about listboxes.\n * @param props - Props for the option.\n * @param state - State for the listbox, as returned by `useListState`.\n */\nexport function useOption<T>(props: AriaOptionProps, state: ListState<T>, ref: RefObject<FocusableElement>): OptionAria {\n let {\n key\n } = props;\n\n let data = listData.get(state);\n\n let isDisabled = props.isDisabled ?? state.disabledKeys.has(key);\n let isSelected = props.isSelected ?? state.selectionManager.isSelected(key);\n let shouldSelectOnPressUp = props.shouldSelectOnPressUp ?? data?.shouldSelectOnPressUp;\n let shouldFocusOnHover = props.shouldFocusOnHover ?? data?.shouldFocusOnHover;\n let shouldUseVirtualFocus = props.shouldUseVirtualFocus ?? data?.shouldUseVirtualFocus;\n let isVirtualized = props.isVirtualized ?? data?.isVirtualized;\n\n let labelId = useSlotId();\n let descriptionId = useSlotId();\n\n let optionProps = {\n role: 'option',\n 'aria-disabled': isDisabled || undefined,\n 'aria-selected': state.selectionManager.selectionMode !== 'none' ? isSelected : undefined\n };\n\n // Safari with VoiceOver on macOS misreads options with aria-labelledby or aria-label as simply \"text\".\n // We should not map slots to the label and description on Safari and instead just have VoiceOver read the textContent.\n // https://bugs.webkit.org/show_bug.cgi?id=209279\n if (!(isMac() && isWebKit())) {\n optionProps['aria-label'] = props['aria-label'];\n optionProps['aria-labelledby'] = labelId;\n optionProps['aria-describedby'] = descriptionId;\n }\n\n let item = state.collection.getItem(key);\n if (isVirtualized) {\n let index = Number(item?.index);\n optionProps['aria-posinset'] = Number.isNaN(index) ? undefined : index + 1;\n optionProps['aria-setsize'] = getItemCount(state.collection);\n }\n\n let {itemProps, isPressed, isFocused, hasAction, allowsSelection} = useSelectableItem({\n selectionManager: state.selectionManager,\n key,\n ref,\n shouldSelectOnPressUp,\n allowsDifferentPressOrigin: shouldSelectOnPressUp && shouldFocusOnHover,\n isVirtualized,\n shouldUseVirtualFocus,\n isDisabled,\n onAction: data?.onAction ? () => data?.onAction?.(key) : undefined,\n linkBehavior: data?.linkBehavior\n });\n\n let {hoverProps} = useHover({\n isDisabled: isDisabled || !shouldFocusOnHover,\n onHoverStart() {\n if (!isFocusVisible()) {\n state.selectionManager.setFocused(true);\n state.selectionManager.setFocusedKey(key);\n }\n }\n });\n\n let domProps = filterDOMProps(item?.props, {isLink: !!item?.props?.href});\n delete domProps.id;\n\n return {\n optionProps: {\n ...optionProps,\n ...mergeProps(domProps, itemProps, hoverProps),\n id: getItemId(state, key)\n },\n labelProps: {\n id: labelId\n },\n descriptionProps: {\n id: descriptionId\n },\n isFocused,\n isFocusVisible: isFocused && isFocusVisible(),\n isSelected,\n isDisabled,\n isPressed,\n allowsSelection,\n hasAction\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes} from '@react-types/shared';\nimport {ReactNode} from 'react';\nimport {useId} from '@react-aria/utils';\n\nexport interface AriaListBoxSectionProps {\n /** The heading for the section. */\n heading?: ReactNode,\n /** An accessibility label for the section. Required if `heading` is not present. */\n 'aria-label'?: string\n}\n\nexport interface ListBoxSectionAria {\n /** Props for the wrapper list item. */\n itemProps: DOMAttributes,\n\n /** Props for the heading element, if any. */\n headingProps: DOMAttributes,\n\n /** Props for the group element. */\n groupProps: DOMAttributes\n}\n\n/**\n * Provides the behavior and accessibility implementation for a section in a listbox.\n * See `useListBox` for more details about listboxes.\n * @param props - Props for the section.\n */\nexport function useListBoxSection(props: AriaListBoxSectionProps): ListBoxSectionAria {\n let {heading, 'aria-label': ariaLabel} = props;\n let headingId = useId();\n\n return {\n itemProps: {\n role: 'presentation'\n },\n headingProps: heading ? {\n // Techincally, listbox cannot contain headings according to ARIA.\n // We hide the heading from assistive technology, using role=\"presentation\",\n // and only use it as a visual label for the nested group.\n id: headingId,\n role: 'presentation'\n } : {},\n groupProps: {\n role: 'group',\n 'aria-label': ariaLabel,\n 'aria-labelledby': heading ? headingId : undefined\n }\n };\n}\n","{\n \"dismiss\": \"تجاهل\"\n}\n","{\n \"dismiss\": \"ОтхвърлÑне\"\n}\n","{\n \"dismiss\": \"Odstranit\"\n}\n","{\n \"dismiss\": \"Luk\"\n}\n","{\n \"dismiss\": \"Schließen\"\n}\n","{\n \"dismiss\": \"ΑπόÏÏιψη\"\n}\n","{\n \"dismiss\": \"Dismiss\"\n}\n","{\n \"dismiss\": \"Descartar\"\n}\n","{\n \"dismiss\": \"Lõpeta\"\n}\n","{\n \"dismiss\": \"Hylkää\"\n}\n","{\n \"dismiss\": \"Rejeter\"\n}\n","{\n \"dismiss\": \"התעל×\"\n}\n","{\n \"dismiss\": \"Odbaci\"\n}\n","{\n \"dismiss\": \"ElutasÃtás\"\n}\n","{\n \"dismiss\": \"Ignora\"\n}\n","{\n \"dismiss\": \"é–‰ã˜ã‚‹\"\n}\n","{\n \"dismiss\": \"무시\"\n}\n","{\n \"dismiss\": \"Atmesti\"\n}\n","{\n \"dismiss\": \"NerÄdÄ«t\"\n}\n","{\n \"dismiss\": \"Lukk\"\n}\n","{\n \"dismiss\": \"Negeren\"\n}\n","{\n \"dismiss\": \"Zignoruj\"\n}\n","{\n \"dismiss\": \"Descartar\"\n}\n","{\n \"dismiss\": \"Dispensar\"\n}\n","{\n \"dismiss\": \"Revocare\"\n}\n","{\n \"dismiss\": \"ПропуÑтить\"\n}\n","{\n \"dismiss\": \"ZruÅ¡iÅ¥\"\n}\n","{\n \"dismiss\": \"Opusti\"\n}\n","{\n \"dismiss\": \"Odbaci\"\n}\n","{\n \"dismiss\": \"Avvisa\"\n}\n","{\n \"dismiss\": \"Kapat\"\n}\n","{\n \"dismiss\": \"СкаÑувати\"\n}\n","{\n \"dismiss\": \"å–消\"\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useCallback, useEffect, useRef, useState} from 'react';\n\nexport function useControlledState<T, C = T>(value: Exclude<T, undefined>, defaultValue: Exclude<T, undefined> | undefined, onChange?: (v: C, ...args: any[]) => void): [T, (value: T) => void];\nexport function useControlledState<T, C = T>(value: Exclude<T, undefined> | undefined, defaultValue: Exclude<T, undefined>, onChange?: (v: C, ...args: any[]) => void): [T, (value: T) => void];\nexport function useControlledState<T, C = T>(value: T, defaultValue: T, onChange?: (v: C, ...args: any[]) => void): [T, (value: T) => void] {\n let [stateValue, setStateValue] = useState(value || defaultValue);\n\n let isControlledRef = useRef(value !== undefined);\n let isControlled = value !== undefined;\n useEffect(() => {\n let wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);\n }\n isControlledRef.current = isControlled;\n }, [isControlled]);\n\n let currentValue = isControlled ? value : stateValue;\n let setValue = useCallback((value, ...args) => {\n let onChangeCaller = (value, ...onChangeArgs) => {\n if (onChange) {\n if (!Object.is(currentValue, value)) {\n onChange(value, ...onChangeArgs);\n }\n }\n if (!isControlled) {\n // If uncontrolled, mutate the currentValue local variable so that\n // calling setState multiple times with the same value only emits onChange once.\n // We do not use a ref for this because we specifically _do_ want the value to\n // reset every render, and assigning to a ref in render breaks aborted suspended renders.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n currentValue = value;\n }\n };\n\n if (typeof value === 'function') {\n console.warn('We can not support a function callback. See Github Issues for details https://github.com/adobe/react-spectrum/issues/2320');\n // this supports functional updates https://reactjs.org/docs/hooks-reference.html#functional-updates\n // when someone using useControlledState calls setControlledState(myFunc)\n // this will call our useState setState with a function as well which invokes myFunc and calls onChange with the value from myFunc\n // if we're in an uncontrolled state, then we also return the value of myFunc which to setState looks as though it was just called with myFunc from the beginning\n // otherwise we just return the controlled value, which won't cause a rerender because React knows to bail out when the value is the same\n let updateFunction = (oldValue, ...functionArgs) => {\n let interceptedValue = value(isControlled ? currentValue : oldValue, ...functionArgs);\n onChangeCaller(interceptedValue, ...args);\n if (!isControlled) {\n return interceptedValue;\n }\n return oldValue;\n };\n setStateValue(updateFunction);\n } else {\n if (!isControlled) {\n setStateValue(value);\n }\n onChangeCaller(value, ...args);\n }\n }, [isControlled, currentValue, onChange]);\n\n return [currentValue, setValue];\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n/**\n * Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest valid step.\n */\nexport function clamp(value: number, min: number = -Infinity, max: number = Infinity): number {\n let newValue = Math.min(Math.max(value, min), max);\n return newValue;\n}\n\nexport function snapValueToStep(value: number, min: number | undefined, max: number | undefined, step: number): number {\n min = Number(min);\n max = Number(max);\n let remainder = ((value - (isNaN(min) ? 0 : min)) % step);\n let snappedValue = Math.abs(remainder) * 2 >= step\n ? value + Math.sign(remainder) * (step - Math.abs(remainder))\n : value - remainder;\n\n if (!isNaN(min)) {\n if (snappedValue < min) {\n snappedValue = min;\n } else if (!isNaN(max) && snappedValue > max) {\n snappedValue = min + Math.floor((max - min) / step) * step;\n }\n } else if (!isNaN(max) && snappedValue > max) {\n snappedValue = Math.floor(max / step) * step;\n }\n\n // correct floating point behavior by rounding to step precision\n let string = step.toString();\n let index = string.indexOf('.');\n let precision = index >= 0 ? string.length - index : 0;\n\n if (precision > 0) {\n let pow = Math.pow(10, precision);\n snappedValue = Math.round(snappedValue * pow) / pow;\n }\n\n return snappedValue;\n}\n\n/* Takes a value and rounds off to the number of digits. */\nexport function toFixedNumber(value: number, digits: number, base: number = 10): number {\n const pow = Math.pow(base, digits);\n\n return Math.round(value * pow) / pow;\n}\n","{\n \"dismiss\": \"關閉\"\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes} from '@react-types/shared';\nimport {mergeProps} from '@react-aria/utils';\nimport React, {CSSProperties, JSXElementConstructor, ReactNode, useMemo, useState} from 'react';\nimport {useFocusWithin} from '@react-aria/interactions';\n\nexport interface VisuallyHiddenProps extends DOMAttributes {\n /** The content to visually hide. */\n children?: ReactNode,\n\n /**\n * The element type for the container.\n * @default 'div'\n */\n elementType?: string | JSXElementConstructor<any>,\n\n /** Whether the element should become visible on focus, for example skip links. */\n isFocusable?: boolean\n}\n\nconst styles: CSSProperties = {\n border: 0,\n clip: 'rect(0 0 0 0)',\n clipPath: 'inset(50%)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: 0,\n position: 'absolute',\n width: '1px',\n whiteSpace: 'nowrap'\n};\n\nexport interface VisuallyHiddenAria {\n visuallyHiddenProps: DOMAttributes\n}\n\n/**\n * Provides props for an element that hides its children visually\n * but keeps content visible to assistive technology.\n */\nexport function useVisuallyHidden(props: VisuallyHiddenProps = {}): VisuallyHiddenAria {\n let {\n style,\n isFocusable\n } = props;\n\n let [isFocused, setFocused] = useState(false);\n let {focusWithinProps} = useFocusWithin({\n isDisabled: !isFocusable,\n onFocusWithinChange: (val) => setFocused(val)\n });\n\n // If focused, don't hide the element.\n let combinedStyles = useMemo(() => {\n if (isFocused) {\n return style;\n } else if (style) {\n return {...styles, ...style};\n } else {\n return styles;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isFocused]);\n\n return {\n visuallyHiddenProps: {\n ...focusWithinProps,\n style: combinedStyles\n }\n };\n}\n\n/**\n * VisuallyHidden hides its children visually, while keeping content visible\n * to screen readers.\n */\nexport function VisuallyHidden(props: VisuallyHiddenProps) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let {children, elementType: Element = 'div', isFocusable, style, ...otherProps} = props;\n let {visuallyHiddenProps} = useVisuallyHidden(props);\n\n return (\n <Element {...mergeProps(otherProps, visuallyHiddenProps)}>\n {children}\n </Element>\n );\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Axis, Placement, PlacementAxis, SizeAxis} from '@react-types/overlays';\nimport {clamp, isWebKit} from '@react-aria/utils';\n\ninterface Position {\n top?: number,\n left?: number,\n bottom?: number,\n right?: number\n}\n\ninterface Dimensions {\n width: number,\n height: number,\n totalWidth: number,\n totalHeight: number,\n top: number,\n left: number,\n scroll: Position\n}\n\ninterface ParsedPlacement {\n placement: PlacementAxis,\n crossPlacement: PlacementAxis,\n axis: Axis,\n crossAxis: Axis,\n size: SizeAxis,\n crossSize: SizeAxis\n}\n\ninterface Offset {\n top: number,\n left: number,\n width: number,\n height: number\n}\n\ninterface PositionOpts {\n arrowSize: number,\n placement: Placement,\n targetNode: Element,\n overlayNode: Element,\n scrollNode: Element,\n padding: number,\n shouldFlip: boolean,\n boundaryElement: Element,\n offset: number,\n crossOffset: number,\n maxHeight?: number,\n arrowBoundaryOffset?: number\n}\n\ntype HeightGrowthDirection = 'top' | 'bottom';\n\nexport interface PositionResult {\n position?: Position,\n arrowOffsetLeft?: number,\n arrowOffsetTop?: number,\n maxHeight?: number,\n placement: PlacementAxis\n}\n\nconst AXIS = {\n top: 'top',\n bottom: 'top',\n left: 'left',\n right: 'left'\n};\n\nconst FLIPPED_DIRECTION = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left'\n};\n\nconst CROSS_AXIS = {\n top: 'left',\n left: 'top'\n};\n\nconst AXIS_SIZE = {\n top: 'height',\n left: 'width'\n};\n\nconst TOTAL_SIZE = {\n width: 'totalWidth',\n height: 'totalHeight'\n};\n\nconst PARSED_PLACEMENT_CACHE = {};\n\n// @ts-ignore\nlet visualViewport = typeof document !== 'undefined' && window.visualViewport;\n\nfunction getContainerDimensions(containerNode: Element): Dimensions {\n let width = 0, height = 0, totalWidth = 0, totalHeight = 0, top = 0, left = 0;\n let scroll: Position = {};\n let isPinchZoomedIn = visualViewport?.scale > 1;\n\n if (containerNode.tagName === 'BODY') {\n let documentElement = document.documentElement;\n totalWidth = documentElement.clientWidth;\n totalHeight = documentElement.clientHeight;\n width = visualViewport?.width ?? totalWidth;\n height = visualViewport?.height ?? totalHeight;\n scroll.top = documentElement.scrollTop || containerNode.scrollTop;\n scroll.left = documentElement.scrollLeft || containerNode.scrollLeft;\n\n // The goal of the below is to get a top/left value that represents the top/left of the visual viewport with\n // respect to the layout viewport origin. This combined with the scrollTop/scrollLeft will allow us to calculate\n // coordinates/values with respect to the visual viewport or with respect to the layout viewport.\n if (visualViewport) {\n top = visualViewport.offsetTop;\n left = visualViewport.offsetLeft;\n }\n } else {\n ({width, height, top, left} = getOffset(containerNode));\n scroll.top = containerNode.scrollTop;\n scroll.left = containerNode.scrollLeft;\n totalWidth = width;\n totalHeight = height;\n }\n\n if (isWebKit() && (containerNode.tagName === 'BODY' || containerNode.tagName === 'HTML') && isPinchZoomedIn) {\n // Safari will report a non-zero scrollTop/Left for the non-scrolling body/HTML element when pinch zoomed in unlike other browsers.\n // Set to zero for parity calculations so we get consistent positioning of overlays across all browsers.\n // Also switch to visualViewport.pageTop/pageLeft so that we still accomodate for scroll positioning for body/HTML elements that are actually scrollable\n // before pinch zoom happens\n scroll.top = 0;\n scroll.left = 0;\n top = visualViewport.pageTop;\n left = visualViewport.pageLeft;\n }\n\n return {width, height, totalWidth, totalHeight, scroll, top, left};\n}\n\nfunction getScroll(node: Element): Offset {\n return {\n top: node.scrollTop,\n left: node.scrollLeft,\n width: node.scrollWidth,\n height: node.scrollHeight\n };\n}\n\n// Determines the amount of space required when moving the overlay to ensure it remains in the boundary\nfunction getDelta(\n axis: Axis,\n offset: number,\n size: number,\n // The dimensions of the boundary element that the popover is\n // positioned within (most of the time this is the <body>).\n boundaryDimensions: Dimensions,\n // The dimensions of the containing block element that the popover is\n // positioned relative to (e.g. parent with position: relative).\n // Usually this is the same as the boundary element, but if the popover\n // is portaled somewhere other than the body and has an ancestor with\n // position: relative/absolute, it will be different.\n containerDimensions: Dimensions,\n padding: number,\n containerOffsetWithBoundary: Offset\n) {\n let containerScroll = containerDimensions.scroll[axis];\n // The height/width of the boundary. Matches the axis along which we are adjusting the overlay position\n let boundarySize = boundaryDimensions[AXIS_SIZE[axis]];\n // Calculate the edges of the boundary (accomodating for the boundary padding) and the edges of the overlay.\n // Note that these values are with respect to the visual viewport (aka 0,0 is the top left of the viewport)\n let boundaryStartEdge = boundaryDimensions.scroll[AXIS[axis]] + padding;\n let boundaryEndEdge = boundarySize + boundaryDimensions.scroll[AXIS[axis]] - padding;\n let startEdgeOffset = offset - containerScroll + containerOffsetWithBoundary[axis] - boundaryDimensions[AXIS[axis]];\n let endEdgeOffset = offset - containerScroll + size + containerOffsetWithBoundary[axis] - boundaryDimensions[AXIS[axis]];\n\n // If any of the overlay edges falls outside of the boundary, shift the overlay the required amount to align one of the overlay's\n // edges with the closest boundary edge.\n if (startEdgeOffset < boundaryStartEdge) {\n return boundaryStartEdge - startEdgeOffset;\n } else if (endEdgeOffset > boundaryEndEdge) {\n return Math.max(boundaryEndEdge - endEdgeOffset, boundaryStartEdge - startEdgeOffset);\n } else {\n return 0;\n }\n}\n\nfunction getMargins(node: Element): Position {\n let style = window.getComputedStyle(node);\n return {\n top: parseInt(style.marginTop, 10) || 0,\n bottom: parseInt(style.marginBottom, 10) || 0,\n left: parseInt(style.marginLeft, 10) || 0,\n right: parseInt(style.marginRight, 10) || 0\n };\n}\n\nfunction parsePlacement(input: Placement): ParsedPlacement {\n if (PARSED_PLACEMENT_CACHE[input]) {\n return PARSED_PLACEMENT_CACHE[input];\n }\n\n let [placement, crossPlacement] = input.split(' ');\n let axis: Axis = AXIS[placement] || 'right';\n let crossAxis: Axis = CROSS_AXIS[axis];\n\n if (!AXIS[crossPlacement]) {\n crossPlacement = 'center';\n }\n\n let size = AXIS_SIZE[axis];\n let crossSize = AXIS_SIZE[crossAxis];\n PARSED_PLACEMENT_CACHE[input] = {placement, crossPlacement, axis, crossAxis, size, crossSize};\n return PARSED_PLACEMENT_CACHE[input];\n}\n\nfunction computePosition(\n childOffset: Offset,\n boundaryDimensions: Dimensions,\n overlaySize: Offset,\n placementInfo: ParsedPlacement,\n offset: number,\n crossOffset: number,\n containerOffsetWithBoundary: Offset,\n isContainerPositioned: boolean,\n arrowSize: number,\n arrowBoundaryOffset: number\n) {\n let {placement, crossPlacement, axis, crossAxis, size, crossSize} = placementInfo;\n let position: Position = {};\n\n // button position\n position[crossAxis] = childOffset[crossAxis];\n if (crossPlacement === 'center') {\n // + (button size / 2) - (overlay size / 2)\n // at this point the overlay center should match the button center\n position[crossAxis] += (childOffset[crossSize] - overlaySize[crossSize]) / 2;\n } else if (crossPlacement !== crossAxis) {\n // + (button size) - (overlay size)\n // at this point the overlay bottom should match the button bottom\n position[crossAxis] += (childOffset[crossSize] - overlaySize[crossSize]);\n }/* else {\n the overlay top should match the button top\n } */\n\n position[crossAxis] += crossOffset;\n\n // overlay top overlapping arrow with button bottom\n const minPosition = childOffset[crossAxis] - overlaySize[crossSize] + arrowSize + arrowBoundaryOffset;\n // overlay bottom overlapping arrow with button top\n const maxPosition = childOffset[crossAxis] + childOffset[crossSize] - arrowSize - arrowBoundaryOffset;\n position[crossAxis] = clamp(position[crossAxis], minPosition, maxPosition);\n\n // Floor these so the position isn't placed on a partial pixel, only whole pixels. Shouldn't matter if it was floored or ceiled, so chose one.\n if (placement === axis) {\n // If the container is positioned (non-static), then we use the container's actual\n // height, as `bottom` will be relative to this height. But if the container is static,\n // then it can only be the `document.body`, and `bottom` will be relative to _its_\n // container, which should be as large as boundaryDimensions.\n const containerHeight = (isContainerPositioned ? containerOffsetWithBoundary[size] : boundaryDimensions[TOTAL_SIZE[size]]);\n position[FLIPPED_DIRECTION[axis]] = Math.floor(containerHeight - childOffset[axis] + offset);\n } else {\n position[axis] = Math.floor(childOffset[axis] + childOffset[size] + offset);\n }\n return position;\n}\n\nfunction getMaxHeight(\n position: Position,\n boundaryDimensions: Dimensions,\n containerOffsetWithBoundary: Offset,\n isContainerPositioned: boolean,\n margins: Position,\n padding: number,\n overlayHeight: number,\n heightGrowthDirection: HeightGrowthDirection\n) {\n const containerHeight = (isContainerPositioned ? containerOffsetWithBoundary.height : boundaryDimensions[TOTAL_SIZE.height]);\n // For cases where position is set via \"bottom\" instead of \"top\", we need to calculate the true overlay top with respect to the boundary. Reverse calculate this with the same method\n // used in computePosition.\n let overlayTop = position.top != null ? containerOffsetWithBoundary.top + position.top : containerOffsetWithBoundary.top + (containerHeight - position.bottom - overlayHeight);\n let maxHeight = heightGrowthDirection !== 'top' ?\n // We want the distance between the top of the overlay to the bottom of the boundary\n Math.max(0,\n (boundaryDimensions.height + boundaryDimensions.top + boundaryDimensions.scroll.top) // this is the bottom of the boundary\n - overlayTop // this is the top of the overlay\n - (margins.top + margins.bottom + padding) // save additional space for margin and padding\n )\n // We want the distance between the bottom of the overlay to the top of the boundary\n : Math.max(0,\n (overlayTop + overlayHeight) // this is the bottom of the overlay\n - (boundaryDimensions.top + boundaryDimensions.scroll.top) // this is the top of the boundary\n - (margins.top + margins.bottom + padding) // save additional space for margin and padding\n );\n return Math.min(boundaryDimensions.height - (padding * 2), maxHeight);\n}\n\nfunction getAvailableSpace(\n boundaryDimensions: Dimensions,\n containerOffsetWithBoundary: Offset,\n childOffset: Offset,\n margins: Position,\n padding: number,\n placementInfo: ParsedPlacement\n) {\n let {placement, axis, size} = placementInfo;\n if (placement === axis) {\n return Math.max(0, childOffset[axis] - boundaryDimensions[axis] - boundaryDimensions.scroll[axis] + containerOffsetWithBoundary[axis] - margins[axis] - margins[FLIPPED_DIRECTION[axis]] - padding);\n }\n\n return Math.max(0, boundaryDimensions[size] + boundaryDimensions[axis] + boundaryDimensions.scroll[axis] - containerOffsetWithBoundary[axis] - childOffset[axis] - childOffset[size] - margins[axis] - margins[FLIPPED_DIRECTION[axis]] - padding);\n}\n\nexport function calculatePositionInternal(\n placementInput: Placement,\n childOffset: Offset,\n overlaySize: Offset,\n scrollSize: Offset,\n margins: Position,\n padding: number,\n flip: boolean,\n boundaryDimensions: Dimensions,\n containerDimensions: Dimensions,\n containerOffsetWithBoundary: Offset,\n offset: number,\n crossOffset: number,\n isContainerPositioned: boolean,\n userSetMaxHeight: number | undefined,\n arrowSize: number,\n arrowBoundaryOffset: number\n): PositionResult {\n let placementInfo = parsePlacement(placementInput);\n let {size, crossAxis, crossSize, placement, crossPlacement} = placementInfo;\n let position = computePosition(childOffset, boundaryDimensions, overlaySize, placementInfo, offset, crossOffset, containerOffsetWithBoundary, isContainerPositioned, arrowSize, arrowBoundaryOffset);\n let normalizedOffset = offset;\n let space = getAvailableSpace(\n boundaryDimensions,\n containerOffsetWithBoundary,\n childOffset,\n margins,\n padding + offset,\n placementInfo\n );\n\n // Check if the scroll size of the overlay is greater than the available space to determine if we need to flip\n if (flip && scrollSize[size] > space) {\n let flippedPlacementInfo = parsePlacement(`${FLIPPED_DIRECTION[placement]} ${crossPlacement}` as Placement);\n let flippedPosition = computePosition(childOffset, boundaryDimensions, overlaySize, flippedPlacementInfo, offset, crossOffset, containerOffsetWithBoundary, isContainerPositioned, arrowSize, arrowBoundaryOffset);\n let flippedSpace = getAvailableSpace(\n boundaryDimensions,\n containerOffsetWithBoundary,\n childOffset,\n margins,\n padding + offset,\n flippedPlacementInfo\n );\n\n // If the available space for the flipped position is greater than the original available space, flip.\n if (flippedSpace > space) {\n placementInfo = flippedPlacementInfo;\n position = flippedPosition;\n normalizedOffset = offset;\n }\n }\n\n // Determine the direction the height of the overlay can grow so that we can choose how to calculate the max height\n let heightGrowthDirection: HeightGrowthDirection = 'bottom';\n if (placementInfo.axis === 'top') {\n if (placementInfo.placement === 'top') {\n heightGrowthDirection = 'top';\n } else if (placementInfo.placement === 'bottom') {\n heightGrowthDirection = 'bottom';\n }\n } else if (placementInfo.crossAxis === 'top') {\n if (placementInfo.crossPlacement === 'top') {\n heightGrowthDirection = 'bottom';\n } else if (placementInfo.crossPlacement === 'bottom') {\n heightGrowthDirection = 'top';\n }\n }\n\n let delta = getDelta(crossAxis, position[crossAxis], overlaySize[crossSize], boundaryDimensions, containerDimensions, padding, containerOffsetWithBoundary);\n position[crossAxis] += delta;\n\n let maxHeight = getMaxHeight(\n position,\n boundaryDimensions,\n containerOffsetWithBoundary,\n isContainerPositioned,\n margins,\n padding,\n overlaySize.height,\n heightGrowthDirection\n );\n\n if (userSetMaxHeight && userSetMaxHeight < maxHeight) {\n maxHeight = userSetMaxHeight;\n }\n\n overlaySize.height = Math.min(overlaySize.height, maxHeight);\n\n position = computePosition(childOffset, boundaryDimensions, overlaySize, placementInfo, normalizedOffset, crossOffset, containerOffsetWithBoundary, isContainerPositioned, arrowSize, arrowBoundaryOffset);\n delta = getDelta(crossAxis, position[crossAxis], overlaySize[crossSize], boundaryDimensions, containerDimensions, padding, containerOffsetWithBoundary);\n position[crossAxis] += delta;\n\n let arrowPosition: Position = {};\n\n // All values are transformed so that 0 is at the top/left of the overlay depending on the orientation\n // Prefer the arrow being in the center of the trigger/overlay anchor element\n let preferredArrowPosition = childOffset[crossAxis] + .5 * childOffset[crossSize] - overlaySize[crossAxis];\n\n // Min/Max position limits for the arrow with respect to the overlay\n const arrowMinPosition = arrowSize / 2 + arrowBoundaryOffset;\n const arrowMaxPosition = overlaySize[crossSize] - (arrowSize / 2) - arrowBoundaryOffset;\n\n // Min/Max position limits for the arrow with respect to the trigger/overlay anchor element\n const arrowOverlappingChildMinEdge = childOffset[crossAxis] - overlaySize[crossAxis] + (arrowSize / 2);\n const arrowOverlappingChildMaxEdge = childOffset[crossAxis] + childOffset[crossSize] - overlaySize[crossAxis] - (arrowSize / 2);\n\n // Clamp the arrow positioning so that it always is within the bounds of the anchor and the overlay\n const arrowPositionOverlappingChild = clamp(preferredArrowPosition, arrowOverlappingChildMinEdge, arrowOverlappingChildMaxEdge);\n arrowPosition[crossAxis] = clamp(arrowPositionOverlappingChild, arrowMinPosition, arrowMaxPosition);\n\n return {\n position,\n maxHeight: maxHeight,\n arrowOffsetLeft: arrowPosition.left,\n arrowOffsetTop: arrowPosition.top,\n placement: placementInfo.placement\n };\n}\n\n/**\n * Determines where to place the overlay with regards to the target and the position of an optional indicator.\n */\nexport function calculatePosition(opts: PositionOpts): PositionResult {\n let {\n placement,\n targetNode,\n overlayNode,\n scrollNode,\n padding,\n shouldFlip,\n boundaryElement,\n offset,\n crossOffset,\n maxHeight,\n arrowSize = 0,\n arrowBoundaryOffset = 0\n } = opts;\n\n let container = overlayNode instanceof HTMLElement ? getContainingBlock(overlayNode) : document.documentElement;\n let isViewportContainer = container === document.documentElement;\n const containerPositionStyle = window.getComputedStyle(container).position;\n let isContainerPositioned = !!containerPositionStyle && containerPositionStyle !== 'static';\n let childOffset: Offset = isViewportContainer ? getOffset(targetNode) : getPosition(targetNode, container);\n\n if (!isViewportContainer) {\n let {marginTop, marginLeft} = window.getComputedStyle(targetNode);\n childOffset.top += parseInt(marginTop, 10) || 0;\n childOffset.left += parseInt(marginLeft, 10) || 0;\n }\n\n let overlaySize: Offset = getOffset(overlayNode);\n let margins = getMargins(overlayNode);\n overlaySize.width += margins.left + margins.right;\n overlaySize.height += margins.top + margins.bottom;\n\n let scrollSize = getScroll(scrollNode);\n let boundaryDimensions = getContainerDimensions(boundaryElement);\n let containerDimensions = getContainerDimensions(container);\n // If the container is the HTML element wrapping the body element, the retrieved scrollTop/scrollLeft will be equal to the\n // body element's scroll. Set the container's scroll values to 0 since the overlay's edge position value in getDelta don't then need to be further offset\n // by the container scroll since they are essentially the same containing element and thus in the same coordinate system\n let containerOffsetWithBoundary: Offset = boundaryElement.tagName === 'BODY' ? getOffset(container) : getPosition(container, boundaryElement);\n if (container.tagName === 'HTML' && boundaryElement.tagName === 'BODY') {\n containerDimensions.scroll.top = 0;\n containerDimensions.scroll.left = 0;\n }\n\n return calculatePositionInternal(\n placement,\n childOffset,\n overlaySize,\n scrollSize,\n margins,\n padding,\n shouldFlip,\n boundaryDimensions,\n containerDimensions,\n containerOffsetWithBoundary,\n offset,\n crossOffset,\n isContainerPositioned,\n maxHeight,\n arrowSize,\n arrowBoundaryOffset\n );\n}\n\nfunction getOffset(node: Element): Offset {\n let {top, left, width, height} = node.getBoundingClientRect();\n let {scrollTop, scrollLeft, clientTop, clientLeft} = document.documentElement;\n return {\n top: top + scrollTop - clientTop,\n left: left + scrollLeft - clientLeft,\n width,\n height\n };\n}\n\nfunction getPosition(node: Element, parent: Element): Offset {\n let style = window.getComputedStyle(node);\n let offset: Offset;\n if (style.position === 'fixed') {\n let {top, left, width, height} = node.getBoundingClientRect();\n offset = {top, left, width, height};\n } else {\n offset = getOffset(node);\n let parentOffset = getOffset(parent);\n let parentStyle = window.getComputedStyle(parent);\n parentOffset.top += (parseInt(parentStyle.borderTopWidth, 10) || 0) - parent.scrollTop;\n parentOffset.left += (parseInt(parentStyle.borderLeftWidth, 10) || 0) - parent.scrollLeft;\n offset.top -= parentOffset.top;\n offset.left -= parentOffset.left;\n }\n\n offset.top -= parseInt(style.marginTop, 10) || 0;\n offset.left -= parseInt(style.marginLeft, 10) || 0;\n return offset;\n}\n\n// Returns the containing block of an element, which is the element that\n// this element will be positioned relative to.\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block\nfunction getContainingBlock(node: HTMLElement): Element {\n // The offsetParent of an element in most cases equals the containing block.\n // https://w3c.github.io/csswg-drafts/cssom-view/#dom-htmlelement-offsetparent\n let offsetParent = node.offsetParent;\n\n // The offsetParent algorithm terminates at the document body,\n // even if the body is not a containing block. Double check that\n // and use the documentElement if so.\n if (\n offsetParent &&\n offsetParent === document.body &&\n window.getComputedStyle(offsetParent).position === 'static' &&\n !isContainingBlock(offsetParent)\n ) {\n offsetParent = document.documentElement;\n }\n\n // TODO(later): handle table elements?\n\n // The offsetParent can be null if the element has position: fixed, or a few other cases.\n // We have to walk up the tree manually in this case because fixed positioned elements\n // are still positioned relative to their containing block, which is not always the viewport.\n if (offsetParent == null) {\n offsetParent = node.parentElement;\n while (offsetParent && !isContainingBlock(offsetParent)) {\n offsetParent = offsetParent.parentElement;\n }\n }\n\n // Fall back to the viewport.\n return offsetParent || document.documentElement;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\nfunction isContainingBlock(node: Element): boolean {\n let style = window.getComputedStyle(node);\n return (\n style.transform !== 'none' ||\n /transform|perspective/.test(style.willChange) ||\n style.filter !== 'none' ||\n style.contain === 'paint' ||\n // @ts-ignore\n ('backdropFilter' in style && style.backdropFilter !== 'none') ||\n // @ts-ignore\n ('WebkitBackdropFilter' in style && style.WebkitBackdropFilter !== 'none')\n );\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {RefObject, useEffect} from 'react';\n\n// This behavior moved from useOverlayTrigger to useOverlayPosition.\n// For backward compatibility, where useOverlayTrigger handled hiding the popover on close,\n// it sets a close function here mapped from the trigger element. This way we can avoid\n// forcing users to pass an onClose function to useOverlayPosition which could be considered\n// a breaking change.\nexport const onCloseMap: WeakMap<Element, () => void> = new WeakMap();\n\ninterface CloseOnScrollOptions {\n triggerRef: RefObject<Element>,\n isOpen?: boolean,\n onClose?: () => void\n}\n\n/** @private */\nexport function useCloseOnScroll(opts: CloseOnScrollOptions) {\n let {triggerRef, isOpen, onClose} = opts;\n\n useEffect(() => {\n if (!isOpen || onClose === null) {\n return;\n }\n\n let onScroll = (e: MouseEvent) => {\n // Ignore if scrolling an scrollable region outside the trigger's tree.\n let target = e.target;\n // window is not a Node and doesn't have contain, but window contains everything\n if (!triggerRef.current || ((target instanceof Node) && !target.contains(triggerRef.current))) {\n return;\n }\n\n let onCloseHandler = onClose || onCloseMap.get(triggerRef.current);\n if (onCloseHandler) {\n onCloseHandler();\n }\n };\n\n window.addEventListener('scroll', onScroll, true);\n return () => {\n window.removeEventListener('scroll', onScroll, true);\n };\n }, [isOpen, onClose, triggerRef]);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {calculatePosition, PositionResult} from './calculatePosition';\nimport {DOMAttributes} from '@react-types/shared';\nimport {Placement, PlacementAxis, PositionProps} from '@react-types/overlays';\nimport {RefObject, useCallback, useEffect, useRef, useState} from 'react';\nimport {useCloseOnScroll} from './useCloseOnScroll';\nimport {useLayoutEffect, useResizeObserver} from '@react-aria/utils';\nimport {useLocale} from '@react-aria/i18n';\n\nexport interface AriaPositionProps extends PositionProps {\n /**\n * Cross size of the overlay arrow in pixels.\n * @default 0\n */\n arrowSize?: number,\n /**\n * Element that that serves as the positioning boundary.\n * @default document.body\n */\n boundaryElement?: Element,\n /**\n * The ref for the element which the overlay positions itself with respect to.\n */\n targetRef: RefObject<Element>,\n /**\n * The ref for the overlay element.\n */\n overlayRef: RefObject<Element>,\n /**\n * A ref for the scrollable region within the overlay.\n * @default overlayRef\n */\n scrollRef?: RefObject<Element>,\n /**\n * Whether the overlay should update its position automatically.\n * @default true\n */\n shouldUpdatePosition?: boolean,\n /** Handler that is called when the overlay should close. */\n onClose?: () => void,\n /**\n * The maxHeight specified for the overlay element.\n * By default, it will take all space up to the current viewport height.\n */\n maxHeight?: number,\n /**\n * The minimum distance the arrow's edge should be from the edge of the overlay element.\n * @default 0\n */\n arrowBoundaryOffset?: number\n}\n\nexport interface PositionAria {\n /** Props for the overlay container element. */\n overlayProps: DOMAttributes,\n /** Props for the overlay tip arrow if any. */\n arrowProps: DOMAttributes,\n /** Placement of the overlay with respect to the overlay trigger. */\n placement: PlacementAxis,\n /** Updates the position of the overlay. */\n updatePosition(): void\n}\n\n// @ts-ignore\nlet visualViewport = typeof document !== 'undefined' && window.visualViewport;\n\n/**\n * Handles positioning overlays like popovers and menus relative to a trigger\n * element, and updating the position when the window resizes.\n */\nexport function useOverlayPosition(props: AriaPositionProps): PositionAria {\n let {direction} = useLocale();\n let {\n arrowSize = 0,\n targetRef,\n overlayRef,\n scrollRef = overlayRef,\n placement = 'bottom' as Placement,\n containerPadding = 12,\n shouldFlip = true,\n boundaryElement = typeof document !== 'undefined' ? document.body : null,\n offset = 0,\n crossOffset = 0,\n shouldUpdatePosition = true,\n isOpen = true,\n onClose,\n maxHeight,\n arrowBoundaryOffset = 0\n } = props;\n let [position, setPosition] = useState<PositionResult>({\n position: {},\n arrowOffsetLeft: undefined,\n arrowOffsetTop: undefined,\n maxHeight: undefined,\n placement: undefined\n });\n\n let deps = [\n shouldUpdatePosition,\n placement,\n overlayRef.current,\n targetRef.current,\n scrollRef.current,\n containerPadding,\n shouldFlip,\n boundaryElement,\n offset,\n crossOffset,\n isOpen,\n direction,\n maxHeight,\n arrowBoundaryOffset,\n arrowSize\n ];\n\n // Note, the position freezing breaks if body sizes itself dynamicly with the visual viewport but that might\n // just be a non-realistic use case\n // Upon opening a overlay, record the current visual viewport scale so we can freeze the overlay styles\n let lastScale = useRef(visualViewport?.scale);\n useEffect(() => {\n if (isOpen) {\n lastScale.current = visualViewport?.scale;\n }\n }, [isOpen]);\n\n let updatePosition = useCallback(() => {\n if (shouldUpdatePosition === false || !isOpen || !overlayRef.current || !targetRef.current || !scrollRef.current || !boundaryElement) {\n return;\n }\n\n if (visualViewport?.scale !== lastScale.current) {\n return;\n }\n\n // Always reset the overlay's previous max height if not defined by the user so that we can compensate for\n // RAC collections populating after a second render and properly set a correct max height + positioning when it populates.\n if (!maxHeight && overlayRef.current) {\n (overlayRef.current as HTMLElement).style.maxHeight = 'none';\n }\n\n let position = calculatePosition({\n placement: translateRTL(placement, direction),\n overlayNode: overlayRef.current,\n targetNode: targetRef.current,\n scrollNode: scrollRef.current,\n padding: containerPadding,\n shouldFlip,\n boundaryElement,\n offset,\n crossOffset,\n maxHeight,\n arrowSize,\n arrowBoundaryOffset\n });\n\n // Modify overlay styles directly so positioning happens immediately without the need of a second render\n // This is so we don't have to delay autoFocus scrolling or delay applying preventScroll for popovers\n Object.keys(position.position).forEach(key => (overlayRef.current as HTMLElement).style[key] = position.position[key] + 'px');\n (overlayRef.current as HTMLElement).style.maxHeight = position.maxHeight != null ? position.maxHeight + 'px' : undefined;\n\n // Trigger a set state for a second render anyway for arrow positioning\n setPosition(position);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n\n // Update position when anything changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useLayoutEffect(updatePosition, deps);\n\n // Update position on window resize\n useResize(updatePosition);\n\n // Update position when the overlay changes size (might need to flip).\n useResizeObserver({\n ref: overlayRef,\n onResize: updatePosition\n });\n\n // Reposition the overlay and do not close on scroll while the visual viewport is resizing.\n // This will ensure that overlays adjust their positioning when the iOS virtual keyboard appears.\n let isResizing = useRef(false);\n useLayoutEffect(() => {\n let timeout: ReturnType<typeof setTimeout>;\n let onResize = () => {\n isResizing.current = true;\n clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n isResizing.current = false;\n }, 500);\n\n updatePosition();\n };\n\n // Only reposition the overlay if a scroll event happens immediately as a result of resize (aka the virtual keyboard has appears)\n // We don't want to reposition the overlay if the user has pinch zoomed in and is scrolling the viewport around.\n let onScroll = () => {\n if (isResizing.current) {\n onResize();\n }\n };\n\n visualViewport?.addEventListener('resize', onResize);\n visualViewport?.addEventListener('scroll', onScroll);\n return () => {\n visualViewport?.removeEventListener('resize', onResize);\n visualViewport?.removeEventListener('scroll', onScroll);\n };\n }, [updatePosition]);\n\n let close = useCallback(() => {\n if (!isResizing.current) {\n onClose();\n }\n }, [onClose, isResizing]);\n\n // When scrolling a parent scrollable region of the trigger (other than the body),\n // we hide the popover. Otherwise, its position would be incorrect.\n useCloseOnScroll({\n triggerRef: targetRef,\n isOpen,\n onClose: onClose && close\n });\n\n return {\n overlayProps: {\n style: {\n position: 'absolute',\n zIndex: 100000, // should match the z-index in ModalTrigger\n ...position.position,\n maxHeight: position.maxHeight\n }\n },\n placement: position.placement,\n arrowProps: {\n 'aria-hidden': 'true',\n role: 'presentation',\n style: {\n left: position.arrowOffsetLeft,\n top: position.arrowOffsetTop\n }\n },\n updatePosition\n };\n}\n\nfunction useResize(onResize) {\n useLayoutEffect(() => {\n window.addEventListener('resize', onResize, false);\n return () => {\n window.removeEventListener('resize', onResize, false);\n };\n }, [onResize]);\n}\n\nfunction translateRTL(position, direction) {\n if (direction === 'rtl') {\n return position.replace('start', 'right').replace('end', 'left');\n }\n return position.replace('start', 'left').replace('end', 'right');\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes} from '@react-types/shared';\nimport {isElementInChildOfActiveScope} from '@react-aria/focus';\nimport {RefObject, useEffect} from 'react';\nimport {useFocusWithin, useInteractOutside} from '@react-aria/interactions';\n\nexport interface AriaOverlayProps {\n /** Whether the overlay is currently open. */\n isOpen?: boolean,\n\n /** Handler that is called when the overlay should close. */\n onClose?: () => void,\n\n /**\n * Whether to close the overlay when the user interacts outside it.\n * @default false\n */\n isDismissable?: boolean,\n\n /** Whether the overlay should close when focus is lost or moves outside it. */\n shouldCloseOnBlur?: boolean,\n\n /**\n * Whether pressing the escape key to close the overlay should be disabled.\n * @default false\n */\n isKeyboardDismissDisabled?: boolean,\n\n /**\n * When user interacts with the argument element outside of the overlay ref,\n * return true if onClose should be called. This gives you a chance to filter\n * out interaction with elements that should not dismiss the overlay.\n * By default, onClose will always be called on interaction outside the overlay ref.\n */\n shouldCloseOnInteractOutside?: (element: Element) => boolean\n}\n\nexport interface OverlayAria {\n /** Props to apply to the overlay container element. */\n overlayProps: DOMAttributes,\n /** Props to apply to the underlay element, if any. */\n underlayProps: DOMAttributes\n}\n\nconst visibleOverlays: RefObject<Element>[] = [];\n\n/**\n * Provides the behavior for overlays such as dialogs, popovers, and menus.\n * Hides the overlay when the user interacts outside it, when the Escape key is pressed,\n * or optionally, on blur. Only the top-most overlay will close at once.\n */\nexport function useOverlay(props: AriaOverlayProps, ref: RefObject<Element>): OverlayAria {\n let {\n onClose,\n shouldCloseOnBlur,\n isOpen,\n isDismissable = false,\n isKeyboardDismissDisabled = false,\n shouldCloseOnInteractOutside\n } = props;\n\n // Add the overlay ref to the stack of visible overlays on mount, and remove on unmount.\n useEffect(() => {\n if (isOpen) {\n visibleOverlays.push(ref);\n }\n\n return () => {\n let index = visibleOverlays.indexOf(ref);\n if (index >= 0) {\n visibleOverlays.splice(index, 1);\n }\n };\n }, [isOpen, ref]);\n\n // Only hide the overlay when it is the topmost visible overlay in the stack\n let onHide = () => {\n if (visibleOverlays[visibleOverlays.length - 1] === ref && onClose) {\n onClose();\n }\n };\n\n let onInteractOutsideStart = (e: PointerEvent) => {\n if (!shouldCloseOnInteractOutside || shouldCloseOnInteractOutside(e.target as Element)) {\n if (visibleOverlays[visibleOverlays.length - 1] === ref) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n };\n\n let onInteractOutside = (e: PointerEvent) => {\n if (!shouldCloseOnInteractOutside || shouldCloseOnInteractOutside(e.target as Element)) {\n if (visibleOverlays[visibleOverlays.length - 1] === ref) {\n e.stopPropagation();\n e.preventDefault();\n }\n onHide();\n }\n };\n\n // Handle the escape key\n let onKeyDown = (e) => {\n if (e.key === 'Escape' && !isKeyboardDismissDisabled) {\n e.stopPropagation();\n e.preventDefault();\n onHide();\n }\n };\n\n // Handle clicking outside the overlay to close it\n useInteractOutside({ref, onInteractOutside: isDismissable && isOpen ? onInteractOutside : null, onInteractOutsideStart});\n\n let {focusWithinProps} = useFocusWithin({\n isDisabled: !shouldCloseOnBlur,\n onBlurWithin: (e) => {\n // Do not close if relatedTarget is null, which means focus is lost to the body.\n // That can happen when switching tabs, or due to a VoiceOver/Chrome bug with Control+Option+Arrow navigation.\n // Clicking on the body to close the overlay should already be handled by useInteractOutside.\n // https://github.com/adobe/react-spectrum/issues/4130\n // https://github.com/adobe/react-spectrum/issues/4922\n //\n // If focus is moving into a child focus scope (e.g. menu inside a dialog),\n // do not close the outer overlay. At this point, the active scope should\n // still be the outer overlay, since blur events run before focus.\n if (!e.relatedTarget || isElementInChildOfActiveScope(e.relatedTarget)) {\n return;\n }\n\n if (!shouldCloseOnInteractOutside || shouldCloseOnInteractOutside(e.relatedTarget as Element)) {\n onClose();\n }\n }\n });\n\n let onPointerDownUnderlay = e => {\n // fixes a firefox issue that starts text selection https://bugzilla.mozilla.org/show_bug.cgi?id=1675846\n if (e.target === e.currentTarget) {\n e.preventDefault();\n }\n };\n\n return {\n overlayProps: {\n onKeyDown,\n ...focusWithinProps\n },\n underlayProps: {\n onPointerDown: onPointerDownUnderlay\n }\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaButtonProps} from '@react-types/button';\nimport {DOMProps} from '@react-types/shared';\nimport {onCloseMap} from './useCloseOnScroll';\nimport {OverlayTriggerState} from '@react-stately/overlays';\nimport {RefObject, useEffect} from 'react';\nimport {useId} from '@react-aria/utils';\n\nexport interface OverlayTriggerProps {\n /** Type of overlay that is opened by the trigger. */\n type: 'dialog' | 'menu' | 'listbox' | 'tree' | 'grid'\n}\n\nexport interface OverlayTriggerAria {\n /** Props for the trigger element. */\n triggerProps: AriaButtonProps,\n\n /** Props for the overlay container element. */\n overlayProps: DOMProps\n}\n\n/**\n * Handles the behavior and accessibility for an overlay trigger, e.g. a button\n * that opens a popover, menu, or other overlay that is positioned relative to the trigger.\n */\nexport function useOverlayTrigger(props: OverlayTriggerProps, state: OverlayTriggerState, ref?: RefObject<Element>): OverlayTriggerAria {\n let {type} = props;\n let {isOpen} = state;\n\n // Backward compatibility. Share state close function with useOverlayPosition so it can close on scroll\n // without forcing users to pass onClose.\n useEffect(() => {\n if (ref && ref.current) {\n onCloseMap.set(ref.current, state.close);\n }\n });\n\n // Aria 1.1 supports multiple values for aria-haspopup other than just menus.\n // https://www.w3.org/TR/wai-aria-1.1/#aria-haspopup\n // However, we only add it for menus for now because screen readers often\n // announce it as a menu even for other values.\n let ariaHasPopup = undefined;\n if (type === 'menu') {\n ariaHasPopup = true;\n } else if (type === 'listbox') {\n ariaHasPopup = 'listbox';\n }\n\n let overlayId = useId();\n return {\n triggerProps: {\n 'aria-haspopup': ariaHasPopup,\n 'aria-expanded': isOpen,\n 'aria-controls': isOpen ? overlayId : null,\n onPress: state.toggle\n },\n overlayProps: {\n id: overlayId\n }\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {chain, getScrollParent, isIOS, useLayoutEffect} from '@react-aria/utils';\n\ninterface PreventScrollOptions {\n /** Whether the scroll lock is disabled. */\n isDisabled?: boolean\n}\n\n// @ts-ignore\nconst visualViewport = typeof document !== 'undefined' && window.visualViewport;\n\n// HTML input types that do not cause the software keyboard to appear.\nconst nonTextInputTypes = new Set([\n 'checkbox',\n 'radio',\n 'range',\n 'color',\n 'file',\n 'image',\n 'button',\n 'submit',\n 'reset'\n]);\n\n// The number of active usePreventScroll calls. Used to determine whether to revert back to the original page style/scroll position\nlet preventScrollCount = 0;\nlet restore;\n\n/**\n * Prevents scrolling on the document body on mount, and\n * restores it on unmount. Also ensures that content does not\n * shift due to the scrollbars disappearing.\n */\nexport function usePreventScroll(options: PreventScrollOptions = {}) {\n let {isDisabled} = options;\n\n useLayoutEffect(() => {\n if (isDisabled) {\n return;\n }\n\n preventScrollCount++;\n if (preventScrollCount === 1) {\n if (isIOS()) {\n restore = preventScrollMobileSafari();\n } else {\n restore = preventScrollStandard();\n }\n }\n\n return () => {\n preventScrollCount--;\n if (preventScrollCount === 0) {\n restore();\n }\n };\n }, [isDisabled]);\n}\n\n// For most browsers, all we need to do is set `overflow: hidden` on the root element, and\n// add some padding to prevent the page from shifting when the scrollbar is hidden.\nfunction preventScrollStandard() {\n return chain(\n setStyle(document.documentElement, 'paddingRight', `${window.innerWidth - document.documentElement.clientWidth}px`),\n setStyle(document.documentElement, 'overflow', 'hidden')\n );\n}\n\n// Mobile Safari is a whole different beast. Even with overflow: hidden,\n// it still scrolls the page in many situations:\n//\n// 1. When the bottom toolbar and address bar are collapsed, page scrolling is always allowed.\n// 2. When the keyboard is visible, the viewport does not resize. Instead, the keyboard covers part of\n// it, so it becomes scrollable.\n// 3. When tapping on an input, the page always scrolls so that the input is centered in the visual viewport.\n// This may cause even fixed position elements to scroll off the screen.\n// 4. When using the next/previous buttons in the keyboard to navigate between inputs, the whole page always\n// scrolls, even if the input is inside a nested scrollable element that could be scrolled instead.\n//\n// In order to work around these cases, and prevent scrolling without jankiness, we do a few things:\n//\n// 1. Prevent default on `touchmove` events that are not in a scrollable element. This prevents touch scrolling\n// on the window.\n// 2. Set `overscroll-behavior: contain` on nested scrollable regions so they do not scroll the page when at\n// the top or bottom. Work around a bug where this does not work when the element does not actually overflow\n// by preventing default in a `touchmove` event.\n// 3. Prevent default on `touchend` events on input elements and handle focusing the element ourselves.\n// 4. When focusing an input, apply a transform to trick Safari into thinking the input is at the top\n// of the page, which prevents it from scrolling the page. After the input is focused, scroll the element\n// into view ourselves, without scrolling the whole page.\n// 5. Offset the body by the scroll position using a negative margin and scroll to the top. This should appear the\n// same visually, but makes the actual scroll position always zero. This is required to make all of the\n// above work or Safari will still try to scroll the page when focusing an input.\n// 6. As a last resort, handle window scroll events, and scroll back to the top. This can happen when attempting\n// to navigate to an input with the next/previous buttons that's outside a modal.\nfunction preventScrollMobileSafari() {\n let scrollable: Element;\n let restoreScrollableStyles;\n let onTouchStart = (e: TouchEvent) => {\n // Store the nearest scrollable parent element from the element that the user touched.\n scrollable = getScrollParent(e.target as Element, true);\n if (scrollable === document.documentElement && scrollable === document.body) {\n return;\n }\n\n // Prevent scrolling up when at the top and scrolling down when at the bottom\n // of a nested scrollable area, otherwise mobile Safari will start scrolling\n // the window instead.\n if (scrollable instanceof HTMLElement && window.getComputedStyle(scrollable).overscrollBehavior === 'auto') {\n restoreScrollableStyles = setStyle(scrollable, 'overscrollBehavior', 'contain');\n }\n };\n\n let onTouchMove = (e: TouchEvent) => {\n // Prevent scrolling the window.\n if (!scrollable || scrollable === document.documentElement || scrollable === document.body) {\n e.preventDefault();\n return;\n }\n\n // overscroll-behavior should prevent scroll chaining, but currently does not\n // if the element doesn't actually overflow. https://bugs.webkit.org/show_bug.cgi?id=243452\n // This checks that both the width and height do not overflow, otherwise we might\n // block horizontal scrolling too. In that case, adding `touch-action: pan-x` to\n // the element will prevent vertical page scrolling. We can't add that automatically\n // because it must be set before the touchstart event.\n if (scrollable.scrollHeight === scrollable.clientHeight && scrollable.scrollWidth === scrollable.clientWidth) {\n e.preventDefault();\n }\n };\n\n let onTouchEnd = (e: TouchEvent) => {\n let target = e.target as HTMLElement;\n\n // Apply this change if we're not already focused on the target element\n if (willOpenKeyboard(target) && target !== document.activeElement) {\n e.preventDefault();\n setupStyles();\n\n // Apply a transform to trick Safari into thinking the input is at the top of the page\n // so it doesn't try to scroll it into view. When tapping on an input, this needs to\n // be done before the \"focus\" event, so we have to focus the element ourselves.\n target.style.transform = 'translateY(-2000px)';\n target.focus();\n requestAnimationFrame(() => {\n target.style.transform = '';\n });\n }\n\n if (restoreScrollableStyles) {\n restoreScrollableStyles();\n }\n };\n\n let onFocus = (e: FocusEvent) => {\n let target = e.target as HTMLElement;\n if (willOpenKeyboard(target)) {\n setupStyles();\n\n // Transform also needs to be applied in the focus event in cases where focus moves\n // other than tapping on an input directly, e.g. the next/previous buttons in the\n // software keyboard. In these cases, it seems applying the transform in the focus event\n // is good enough, whereas when tapping an input, it must be done before the focus event. 🤷â€â™‚ï¸\n target.style.transform = 'translateY(-2000px)';\n requestAnimationFrame(() => {\n target.style.transform = '';\n\n // This will have prevented the browser from scrolling the focused element into view,\n // so we need to do this ourselves in a way that doesn't cause the whole page to scroll.\n if (visualViewport) {\n if (visualViewport.height < window.innerHeight) {\n // If the keyboard is already visible, do this after one additional frame\n // to wait for the transform to be removed.\n requestAnimationFrame(() => {\n scrollIntoView(target);\n });\n } else {\n // Otherwise, wait for the visual viewport to resize before scrolling so we can\n // measure the correct position to scroll to.\n visualViewport.addEventListener('resize', () => scrollIntoView(target), {once: true});\n }\n }\n });\n }\n };\n\n let restoreStyles = null;\n let setupStyles = () => {\n if (restoreStyles) {\n return;\n }\n\n let onWindowScroll = () => {\n // Last resort. If the window scrolled, scroll it back to the top.\n // It should always be at the top because the body will have a negative margin (see below).\n window.scrollTo(0, 0);\n };\n\n // Record the original scroll position so we can restore it.\n // Then apply a negative margin to the body to offset it by the scroll position. This will\n // enable us to scroll the window to the top, which is required for the rest of this to work.\n let scrollX = window.pageXOffset;\n let scrollY = window.pageYOffset;\n\n restoreStyles = chain(\n addEvent(window, 'scroll', onWindowScroll),\n setStyle(document.documentElement, 'paddingRight', `${window.innerWidth - document.documentElement.clientWidth}px`),\n setStyle(document.documentElement, 'overflow', 'hidden'),\n setStyle(document.body, 'marginTop', `-${scrollY}px`),\n () => {\n window.scrollTo(scrollX, scrollY);\n }\n );\n\n // Scroll to the top. The negative margin on the body will make this appear the same.\n window.scrollTo(0, 0);\n };\n\n let removeEvents = chain(\n addEvent(document, 'touchstart', onTouchStart, {passive: false, capture: true}),\n addEvent(document, 'touchmove', onTouchMove, {passive: false, capture: true}),\n addEvent(document, 'touchend', onTouchEnd, {passive: false, capture: true}),\n addEvent(document, 'focus', onFocus, true)\n );\n\n return () => {\n // Restore styles and scroll the page back to where it was.\n restoreScrollableStyles?.();\n restoreStyles?.();\n removeEvents();\n };\n}\n\n// Sets a CSS property on an element, and returns a function to revert it to the previous value.\nfunction setStyle(element: HTMLElement, style: string, value: string) {\n let cur = element.style[style];\n element.style[style] = value;\n\n return () => {\n element.style[style] = cur;\n };\n}\n\n// Adds an event listener to an element, and returns a function to remove it.\nfunction addEvent<K extends keyof GlobalEventHandlersEventMap>(\n target: EventTarget,\n event: K,\n handler: (this: Document, ev: GlobalEventHandlersEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n) {\n target.addEventListener(event, handler, options);\n return () => {\n target.removeEventListener(event, handler, options);\n };\n}\n\nfunction scrollIntoView(target: Element) {\n let root = document.scrollingElement || document.documentElement;\n while (target && target !== root) {\n // Find the parent scrollable element and adjust the scroll position if the target is not already in view.\n let scrollable = getScrollParent(target);\n if (scrollable !== document.documentElement && scrollable !== document.body && scrollable !== target) {\n let scrollableTop = scrollable.getBoundingClientRect().top;\n let targetTop = target.getBoundingClientRect().top;\n if (targetTop > scrollableTop + target.clientHeight) {\n scrollable.scrollTop += targetTop - scrollableTop;\n }\n }\n\n target = scrollable.parentElement;\n }\n}\n\nfunction willOpenKeyboard(target: Element) {\n return (\n (target instanceof HTMLInputElement && !nonTextInputTypes.has(target.type)) ||\n target instanceof HTMLTextAreaElement ||\n (target instanceof HTMLElement && target.isContentEditable)\n );\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLabelingProps, DOMProps} from '@react-types/shared';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport React from 'react';\nimport {useLabels} from '@react-aria/utils';\nimport {useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {VisuallyHidden} from '@react-aria/visually-hidden';\n\nexport interface DismissButtonProps extends AriaLabelingProps, DOMProps {\n /** Called when the dismiss button is activated. */\n onDismiss?: () => void\n}\n\n/**\n * A visually hidden button that can be used to allow screen reader\n * users to dismiss a modal or popup when there is no visual\n * affordance to do so.\n */\nexport function DismissButton(props: DismissButtonProps) {\n let {onDismiss, ...otherProps} = props;\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-aria/overlays');\n\n let labels = useLabels(otherProps, stringFormatter.format('dismiss'));\n\n let onClick = () => {\n if (onDismiss) {\n onDismiss();\n }\n };\n\n return (\n <VisuallyHidden>\n <button\n {...labels}\n tabIndex={-1}\n onClick={onClick}\n style={{width: 1, height: 1}} />\n </VisuallyHidden>\n );\n}\n","const _temp0 = require(\"../intl/ar-AE.json\");\nconst _temp1 = require(\"../intl/bg-BG.json\");\nconst _temp2 = require(\"../intl/cs-CZ.json\");\nconst _temp3 = require(\"../intl/da-DK.json\");\nconst _temp4 = require(\"../intl/de-DE.json\");\nconst _temp5 = require(\"../intl/el-GR.json\");\nconst _temp6 = require(\"../intl/en-US.json\");\nconst _temp7 = require(\"../intl/es-ES.json\");\nconst _temp8 = require(\"../intl/et-EE.json\");\nconst _temp9 = require(\"../intl/fi-FI.json\");\nconst _temp10 = require(\"../intl/fr-FR.json\");\nconst _temp11 = require(\"../intl/he-IL.json\");\nconst _temp12 = require(\"../intl/hr-HR.json\");\nconst _temp13 = require(\"../intl/hu-HU.json\");\nconst _temp14 = require(\"../intl/it-IT.json\");\nconst _temp15 = require(\"../intl/ja-JP.json\");\nconst _temp16 = require(\"../intl/ko-KR.json\");\nconst _temp17 = require(\"../intl/lt-LT.json\");\nconst _temp18 = require(\"../intl/lv-LV.json\");\nconst _temp19 = require(\"../intl/nb-NO.json\");\nconst _temp20 = require(\"../intl/nl-NL.json\");\nconst _temp21 = require(\"../intl/pl-PL.json\");\nconst _temp22 = require(\"../intl/pt-BR.json\");\nconst _temp23 = require(\"../intl/pt-PT.json\");\nconst _temp24 = require(\"../intl/ro-RO.json\");\nconst _temp25 = require(\"../intl/ru-RU.json\");\nconst _temp26 = require(\"../intl/sk-SK.json\");\nconst _temp27 = require(\"../intl/sl-SI.json\");\nconst _temp28 = require(\"../intl/sr-SP.json\");\nconst _temp29 = require(\"../intl/sv-SE.json\");\nconst _temp30 = require(\"../intl/tr-TR.json\");\nconst _temp31 = require(\"../intl/uk-UA.json\");\nconst _temp32 = require(\"../intl/zh-CN.json\");\nconst _temp33 = require(\"../intl/zh-TW.json\");\nmodule.exports = {\n \"ar-AE\": _temp0,\n \"bg-BG\": _temp1,\n \"cs-CZ\": _temp2,\n \"da-DK\": _temp3,\n \"de-DE\": _temp4,\n \"el-GR\": _temp5,\n \"en-US\": _temp6,\n \"es-ES\": _temp7,\n \"et-EE\": _temp8,\n \"fi-FI\": _temp9,\n \"fr-FR\": _temp10,\n \"he-IL\": _temp11,\n \"hr-HR\": _temp12,\n \"hu-HU\": _temp13,\n \"it-IT\": _temp14,\n \"ja-JP\": _temp15,\n \"ko-KR\": _temp16,\n \"lt-LT\": _temp17,\n \"lv-LV\": _temp18,\n \"nb-NO\": _temp19,\n \"nl-NL\": _temp20,\n \"pl-PL\": _temp21,\n \"pt-BR\": _temp22,\n \"pt-PT\": _temp23,\n \"ro-RO\": _temp24,\n \"ru-RU\": _temp25,\n \"sk-SK\": _temp26,\n \"sl-SI\": _temp27,\n \"sr-SP\": _temp28,\n \"sv-SE\": _temp29,\n \"tr-TR\": _temp30,\n \"uk-UA\": _temp31,\n \"zh-CN\": _temp32,\n \"zh-TW\": _temp33\n}","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Keeps a ref count of all hidden elements. Added to when hiding an element, and\n// subtracted from when showing it again. When it reaches zero, aria-hidden is removed.\nlet refCountMap = new WeakMap<Element, number>();\nlet observerStack = [];\n\n/**\n * Hides all elements in the DOM outside the given targets from screen readers using aria-hidden,\n * and returns a function to revert these changes. In addition, changes to the DOM are watched\n * and new elements outside the targets are automatically hidden.\n * @param targets - The elements that should remain visible.\n * @param root - Nothing will be hidden above this element.\n * @returns - A function to restore all hidden elements.\n */\nexport function ariaHideOutside(targets: Element[], root = document.body) {\n let visibleNodes = new Set<Element>(targets);\n let hiddenNodes = new Set<Element>();\n\n let walk = (root: Element) => {\n // Keep live announcer and top layer elements (e.g. toasts) visible.\n for (let element of root.querySelectorAll('[data-live-announcer], [data-react-aria-top-layer]')) {\n visibleNodes.add(element);\n }\n\n let acceptNode = (node: Element) => {\n // Skip this node and its children if it is one of the target nodes, or a live announcer.\n // Also skip children of already hidden nodes, as aria-hidden is recursive. An exception is\n // made for elements with role=\"row\" since VoiceOver on iOS has issues hiding elements with role=\"row\".\n // For that case we want to hide the cells inside as well (https://bugs.webkit.org/show_bug.cgi?id=222623).\n if (\n visibleNodes.has(node) ||\n (hiddenNodes.has(node.parentElement) && node.parentElement.getAttribute('role') !== 'row')\n ) {\n return NodeFilter.FILTER_REJECT;\n }\n\n // Skip this node but continue to children if one of the targets is inside the node.\n for (let target of visibleNodes) {\n if (node.contains(target)) {\n return NodeFilter.FILTER_SKIP;\n }\n }\n\n return NodeFilter.FILTER_ACCEPT;\n };\n\n let walker = document.createTreeWalker(\n root,\n NodeFilter.SHOW_ELEMENT,\n {acceptNode}\n );\n\n // TreeWalker does not include the root.\n let acceptRoot = acceptNode(root);\n if (acceptRoot === NodeFilter.FILTER_ACCEPT) {\n hide(root);\n }\n\n if (acceptRoot !== NodeFilter.FILTER_REJECT) {\n let node = walker.nextNode() as Element;\n while (node != null) {\n hide(node);\n node = walker.nextNode() as Element;\n }\n }\n };\n\n let hide = (node: Element) => {\n let refCount = refCountMap.get(node) ?? 0;\n\n // If already aria-hidden, and the ref count is zero, then this element\n // was already hidden and there's nothing for us to do.\n if (node.getAttribute('aria-hidden') === 'true' && refCount === 0) {\n return;\n }\n\n if (refCount === 0) {\n node.setAttribute('aria-hidden', 'true');\n }\n\n hiddenNodes.add(node);\n refCountMap.set(node, refCount + 1);\n };\n\n // If there is already a MutationObserver listening from a previous call,\n // disconnect it so the new on takes over.\n if (observerStack.length) {\n observerStack[observerStack.length - 1].disconnect();\n }\n\n walk(root);\n\n let observer = new MutationObserver(changes => {\n for (let change of changes) {\n if (change.type !== 'childList' || change.addedNodes.length === 0) {\n continue;\n }\n\n // If the parent element of the added nodes is not within one of the targets,\n // and not already inside a hidden node, hide all of the new children.\n if (![...visibleNodes, ...hiddenNodes].some(node => node.contains(change.target))) {\n for (let node of change.removedNodes) {\n if (node instanceof Element) {\n visibleNodes.delete(node);\n hiddenNodes.delete(node);\n }\n }\n\n for (let node of change.addedNodes) {\n if (\n (node instanceof HTMLElement || node instanceof SVGElement) &&\n (node.dataset.liveAnnouncer === 'true' || node.dataset.reactAriaTopLayer === 'true')\n ) {\n visibleNodes.add(node);\n } else if (node instanceof Element) {\n walk(node);\n }\n }\n }\n }\n });\n\n observer.observe(root, {childList: true, subtree: true});\n\n let observerWrapper = {\n observe() {\n observer.observe(root, {childList: true, subtree: true});\n },\n disconnect() {\n observer.disconnect();\n }\n };\n\n observerStack.push(observerWrapper);\n\n return () => {\n observer.disconnect();\n\n for (let node of hiddenNodes) {\n let count = refCountMap.get(node);\n if (count === 1) {\n node.removeAttribute('aria-hidden');\n refCountMap.delete(node);\n } else {\n refCountMap.set(node, count - 1);\n }\n }\n\n // Remove this observer from the stack, and start the previous one.\n if (observerWrapper === observerStack[observerStack.length - 1]) {\n observerStack.pop();\n if (observerStack.length) {\n observerStack[observerStack.length - 1].observe();\n }\n } else {\n observerStack.splice(observerStack.indexOf(observerWrapper), 1);\n }\n };\n}\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {ariaHideOutside} from './ariaHideOutside';\nimport {AriaPositionProps, useOverlayPosition} from './useOverlayPosition';\nimport {DOMAttributes} from '@react-types/shared';\nimport {mergeProps, useLayoutEffect} from '@react-aria/utils';\nimport {OverlayTriggerState} from '@react-stately/overlays';\nimport {PlacementAxis} from '@react-types/overlays';\nimport {RefObject} from 'react';\nimport {useOverlay} from './useOverlay';\nimport {usePreventScroll} from './usePreventScroll';\n\nexport interface AriaPopoverProps extends Omit<AriaPositionProps, 'isOpen' | 'onClose' | 'targetRef' | 'overlayRef'> {\n /**\n * The ref for the element which the popover positions itself with respect to.\n */\n triggerRef: RefObject<Element>,\n /**\n * The ref for the popover element.\n */\n popoverRef: RefObject<Element>,\n /**\n * Whether the popover is non-modal, i.e. elements outside the popover may be\n * interacted with by assistive technologies.\n *\n * Most popovers should not use this option as it may negatively impact the screen\n * reader experience. Only use with components such as combobox, which are designed\n * to handle this situation carefully.\n */\n isNonModal?: boolean,\n /**\n * Whether pressing the escape key to close the popover should be disabled.\n *\n * Most popovers should not use this option. When set to true, an alternative\n * way to close the popover with a keyboard must be provided.\n *\n * @default false\n */\n isKeyboardDismissDisabled?: boolean,\n /**\n * When user interacts with the argument element outside of the popover ref,\n * return true if onClose should be called. This gives you a chance to filter\n * out interaction with elements that should not dismiss the popover.\n * By default, onClose will always be called on interaction outside the popover ref.\n */\n shouldCloseOnInteractOutside?: (element: Element) => boolean\n}\n\nexport interface PopoverAria {\n /** Props for the popover element. */\n popoverProps: DOMAttributes,\n /** Props for the popover tip arrow if any. */\n arrowProps: DOMAttributes,\n /** Props to apply to the underlay element, if any. */\n underlayProps: DOMAttributes,\n /** Placement of the popover with respect to the trigger. */\n placement: PlacementAxis\n}\n\n/**\n * Provides the behavior and accessibility implementation for a popover component.\n * A popover is an overlay element positioned relative to a trigger.\n */\nexport function usePopover(props: AriaPopoverProps, state: OverlayTriggerState): PopoverAria {\n let {\n triggerRef,\n popoverRef,\n isNonModal,\n isKeyboardDismissDisabled,\n shouldCloseOnInteractOutside,\n ...otherProps\n } = props;\n\n let {overlayProps, underlayProps} = useOverlay(\n {\n isOpen: state.isOpen,\n onClose: state.close,\n shouldCloseOnBlur: true,\n isDismissable: !isNonModal,\n isKeyboardDismissDisabled,\n shouldCloseOnInteractOutside\n },\n popoverRef\n );\n\n let {overlayProps: positionProps, arrowProps, placement} = useOverlayPosition({\n ...otherProps,\n targetRef: triggerRef,\n overlayRef: popoverRef,\n isOpen: state.isOpen,\n onClose: isNonModal ? state.close : null\n });\n\n usePreventScroll({\n isDisabled: isNonModal || !state.isOpen\n });\n\n useLayoutEffect(() => {\n if (state.isOpen && !isNonModal && popoverRef.current) {\n return ariaHideOutside([popoverRef.current]);\n }\n }, [isNonModal, state.isOpen, popoverRef]);\n\n return {\n popoverProps: mergeProps(overlayProps, positionProps),\n arrowProps,\n underlayProps,\n placement\n };\n}\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {ClearPressResponder} from '@react-aria/interactions';\nimport {FocusScope} from '@react-aria/focus';\nimport React, {ReactNode, useContext, useMemo, useState} from 'react';\nimport ReactDOM from 'react-dom';\nimport {useIsSSR} from '@react-aria/ssr';\nimport {useLayoutEffect} from '@react-aria/utils';\n\nexport interface OverlayProps {\n /**\n * The container element in which the overlay portal will be placed.\n * @default document.body\n */\n portalContainer?: Element,\n /** The overlay to render in the portal. */\n children: ReactNode,\n /**\n * Disables default focus management for the overlay, including containment and restoration.\n * This option should be used very carefully. When focus management is disabled, you must\n * implement focus containment and restoration to ensure the overlay is keyboard accessible.\n */\n disableFocusManagement?: boolean,\n /**\n * Whether the overlay is currently performing an exit animation. When true,\n * focus is allowed to move outside.\n */\n isExiting?: boolean\n}\n\nexport const OverlayContext = React.createContext(null);\n\n/**\n * A container which renders an overlay such as a popover or modal in a portal,\n * and provides a focus scope for the child elements.\n */\nexport function Overlay(props: OverlayProps) {\n let isSSR = useIsSSR();\n let {portalContainer = isSSR ? null : document.body, isExiting} = props;\n let [contain, setContain] = useState(false);\n let contextValue = useMemo(() => ({contain, setContain}), [contain, setContain]);\n\n if (!portalContainer) {\n return null;\n }\n\n let contents = props.children;\n if (!props.disableFocusManagement) {\n contents = (\n <FocusScope restoreFocus contain={contain && !isExiting}>\n {contents}\n </FocusScope>\n );\n }\n\n contents = (\n <OverlayContext.Provider value={contextValue}>\n <ClearPressResponder>\n {contents}\n </ClearPressResponder>\n </OverlayContext.Provider>\n );\n\n return ReactDOM.createPortal(contents, portalContainer);\n}\n\n/** @private */\nexport function useOverlayFocusContain() {\n let ctx = useContext(OverlayContext);\n let setContain = ctx?.setContain;\n useLayoutEffect(() => {\n setContain?.(true);\n }, [setContain]);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaButtonProps} from '@react-types/button';\nimport {AriaMenuOptions} from './useMenu';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {MenuTriggerState} from '@react-stately/menu';\nimport {MenuTriggerType} from '@react-types/menu';\nimport {RefObject} from 'react';\nimport {useId} from '@react-aria/utils';\nimport {useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useLongPress} from '@react-aria/interactions';\nimport {useOverlayTrigger} from '@react-aria/overlays';\n\nexport interface AriaMenuTriggerProps {\n /** The type of menu that the menu trigger opens. */\n type?: 'menu' | 'listbox',\n /** Whether menu trigger is disabled. */\n isDisabled?: boolean,\n /** How menu is triggered. */\n trigger?: MenuTriggerType\n}\n\nexport interface MenuTriggerAria<T> {\n /** Props for the menu trigger element. */\n menuTriggerProps: AriaButtonProps,\n\n /** Props for the menu. */\n menuProps: AriaMenuOptions<T>\n}\n\n/**\n * Provides the behavior and accessibility implementation for a menu trigger.\n * @param props - Props for the menu trigger.\n * @param state - State for the menu trigger.\n * @param ref - Ref to the HTML element trigger for the menu.\n */\nexport function useMenuTrigger<T>(props: AriaMenuTriggerProps, state: MenuTriggerState, ref: RefObject<Element>): MenuTriggerAria<T> {\n let {\n type = 'menu' as AriaMenuTriggerProps['type'],\n isDisabled,\n trigger = 'press'\n } = props;\n\n let menuTriggerId = useId();\n let {triggerProps, overlayProps} = useOverlayTrigger({type}, state, ref);\n\n let onKeyDown = (e) => {\n if (isDisabled) {\n return;\n }\n\n if (trigger === 'longPress' && !e.altKey) {\n return;\n }\n\n if (ref && ref.current) {\n switch (e.key) {\n case 'Enter':\n case ' ':\n if (trigger === 'longPress') {\n return;\n }\n // fallthrough\n case 'ArrowDown':\n // Stop propagation, unless it would already be handled by useKeyboard.\n if (!('continuePropagation' in e)) {\n e.stopPropagation();\n }\n e.preventDefault();\n state.toggle('first');\n break;\n case 'ArrowUp':\n if (!('continuePropagation' in e)) {\n e.stopPropagation();\n }\n e.preventDefault();\n state.toggle('last');\n break;\n default:\n // Allow other keys.\n if ('continuePropagation' in e) {\n e.continuePropagation();\n }\n }\n }\n };\n\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-aria/menu');\n let {longPressProps} = useLongPress({\n isDisabled: isDisabled || trigger !== 'longPress',\n accessibilityDescription: stringFormatter.format('longPressMessage'),\n onLongPressStart() {\n state.close();\n },\n onLongPress() {\n state.open('first');\n }\n });\n\n let pressProps = {\n onPressStart(e) {\n // For consistency with native, open the menu on mouse/key down, but touch up.\n if (e.pointerType !== 'touch' && e.pointerType !== 'keyboard' && !isDisabled) {\n // If opened with a screen reader, auto focus the first item.\n // Otherwise, the menu itself will be focused.\n state.toggle(e.pointerType === 'virtual' ? 'first' : null);\n }\n },\n onPress(e) {\n if (e.pointerType === 'touch' && !isDisabled) {\n state.toggle();\n }\n }\n };\n\n // omit onPress from triggerProps since we override it above.\n delete triggerProps.onPress;\n\n return {\n menuTriggerProps: {\n ...triggerProps,\n ...(trigger === 'press' ? pressProps : longPressProps),\n id: menuTriggerId,\n onKeyDown\n },\n menuProps: {\n ...overlayProps,\n 'aria-labelledby': menuTriggerId,\n autoFocus: state.focusStrategy || true,\n onClose: state.close\n }\n };\n}\n","const _temp0 = require(\"../intl/ar-AE.json\");\nconst _temp1 = require(\"../intl/bg-BG.json\");\nconst _temp2 = require(\"../intl/cs-CZ.json\");\nconst _temp3 = require(\"../intl/da-DK.json\");\nconst _temp4 = require(\"../intl/de-DE.json\");\nconst _temp5 = require(\"../intl/el-GR.json\");\nconst _temp6 = require(\"../intl/en-US.json\");\nconst _temp7 = require(\"../intl/es-ES.json\");\nconst _temp8 = require(\"../intl/et-EE.json\");\nconst _temp9 = require(\"../intl/fi-FI.json\");\nconst _temp10 = require(\"../intl/fr-FR.json\");\nconst _temp11 = require(\"../intl/he-IL.json\");\nconst _temp12 = require(\"../intl/hr-HR.json\");\nconst _temp13 = require(\"../intl/hu-HU.json\");\nconst _temp14 = require(\"../intl/it-IT.json\");\nconst _temp15 = require(\"../intl/ja-JP.json\");\nconst _temp16 = require(\"../intl/ko-KR.json\");\nconst _temp17 = require(\"../intl/lt-LT.json\");\nconst _temp18 = require(\"../intl/lv-LV.json\");\nconst _temp19 = require(\"../intl/nb-NO.json\");\nconst _temp20 = require(\"../intl/nl-NL.json\");\nconst _temp21 = require(\"../intl/pl-PL.json\");\nconst _temp22 = require(\"../intl/pt-BR.json\");\nconst _temp23 = require(\"../intl/pt-PT.json\");\nconst _temp24 = require(\"../intl/ro-RO.json\");\nconst _temp25 = require(\"../intl/ru-RU.json\");\nconst _temp26 = require(\"../intl/sk-SK.json\");\nconst _temp27 = require(\"../intl/sl-SI.json\");\nconst _temp28 = require(\"../intl/sr-SP.json\");\nconst _temp29 = require(\"../intl/sv-SE.json\");\nconst _temp30 = require(\"../intl/tr-TR.json\");\nconst _temp31 = require(\"../intl/uk-UA.json\");\nconst _temp32 = require(\"../intl/zh-CN.json\");\nconst _temp33 = require(\"../intl/zh-TW.json\");\nmodule.exports = {\n \"ar-AE\": _temp0,\n \"bg-BG\": _temp1,\n \"cs-CZ\": _temp2,\n \"da-DK\": _temp3,\n \"de-DE\": _temp4,\n \"el-GR\": _temp5,\n \"en-US\": _temp6,\n \"es-ES\": _temp7,\n \"et-EE\": _temp8,\n \"fi-FI\": _temp9,\n \"fr-FR\": _temp10,\n \"he-IL\": _temp11,\n \"hr-HR\": _temp12,\n \"hu-HU\": _temp13,\n \"it-IT\": _temp14,\n \"ja-JP\": _temp15,\n \"ko-KR\": _temp16,\n \"lt-LT\": _temp17,\n \"lv-LV\": _temp18,\n \"nb-NO\": _temp19,\n \"nl-NL\": _temp20,\n \"pl-PL\": _temp21,\n \"pt-BR\": _temp22,\n \"pt-PT\": _temp23,\n \"ro-RO\": _temp24,\n \"ru-RU\": _temp25,\n \"sk-SK\": _temp26,\n \"sl-SI\": _temp27,\n \"sr-SP\": _temp28,\n \"sv-SE\": _temp29,\n \"tr-TR\": _temp30,\n \"uk-UA\": _temp31,\n \"zh-CN\": _temp32,\n \"zh-TW\": _temp33\n}","{\n \"longPressMessage\": \"اضغط مطولاً أو اضغط على Alt + السهم لأسÙÙ„ Ù„ÙØªØ Ø§Ù„Ù‚Ø§Ø¦Ù…Ø©\"\n}\n","{\n \"longPressMessage\": \"ÐатиÑнете продължително или натиÑнете Alt+ Ñтрелка надолу, за да отворите менюто\"\n}\n","{\n \"longPressMessage\": \"Dlouhým stiskem nebo stisknutÃm kláves Alt + Å¡ipka dolů otevÅ™ete nabÃdku\"\n}\n","{\n \"longPressMessage\": \"Langt tryk eller tryk pÃ¥ Alt + pil ned for at Ã¥bne menuen\"\n}\n","{\n \"longPressMessage\": \"Drücken Sie lange oder drücken Sie Alt + Nach-unten, um das Menü zu öffnen\"\n}\n","{\n \"longPressMessage\": \"ΠιÎστε παÏατεταμÎνα ή πατήστε Alt + κάτω βÎλος για να ανοίξετε το μενοÏ\"\n}\n","{\n \"longPressMessage\": \"Long press or press Alt + ArrowDown to open menu\"\n}\n","{\n \"longPressMessage\": \"Mantenga pulsado o pulse Alt + flecha abajo para abrir el menú\"\n}\n","{\n \"longPressMessage\": \"Menüü avamiseks vajutage pikalt või vajutage klahve Alt + allanool\"\n}\n","{\n \"longPressMessage\": \"Avaa valikko painamalla pohjassa tai näppäinyhdistelmällä Alt + Alanuoli\"\n}\n","{\n \"longPressMessage\": \"Appuyez de manière prolongée ou appuyez sur Alt + Flèche vers le bas pour ouvrir le menu.\"\n}\n","{\n \"longPressMessage\": \"לחץ לחיצה ×רוכה ×ו הקש Alt + ArrowDown כדי לפתוח ×ת התפריט\"\n}\n","{\n \"longPressMessage\": \"Dugo pritisnite ili pritisnite Alt + strelicu prema dolje za otvaranje izbornika\"\n}\n","{\n \"longPressMessage\": \"Nyomja meg hosszan, vagy nyomja meg az Alt + lefele nyÃl gombot a menü megnyitásához\"\n}\n","{\n \"longPressMessage\": \"Premere a lungo o premere Alt + Freccia giù per aprire il menu\"\n}\n","{\n \"longPressMessage\": \"長押ã—ã¾ãŸã¯ Alt+下矢å°ã‚ーã§ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’é–‹ã\"\n}\n","{\n \"longPressMessage\": \"길게 누르거나 Alt + 아래쪽 화살표를 눌러 메뉴 열기\"\n}\n","{\n \"longPressMessage\": \"NorÄ—dami atidaryti meniu, nuspaudÄ™ palaikykite arba paspauskite „Alt + ArrowDown“.\"\n}\n","{\n \"longPressMessage\": \"Lai atvÄ“rtu izvÄ“lni, turiet nospiestu vai nospiediet taustiņu kombinÄciju Alt + lejupvÄ“rstÄ bultiņa\"\n}\n","{\n \"longPressMessage\": \"Langt trykk eller trykk Alt + PilNed for Ã¥ Ã¥pne menyen\"\n}\n","{\n \"longPressMessage\": \"Druk lang op Alt + pijl-omlaag of druk op Alt om het menu te openen\"\n}\n","{\n \"longPressMessage\": \"NaciÅ›nij i przytrzymaj lub naciÅ›nij klawisze Alt + StrzaÅ‚ka w dół, aby otworzyć menu\"\n}\n","{\n \"longPressMessage\": \"Pressione e segure ou pressione Alt + Seta para baixo para abrir o menu\"\n}\n","{\n \"longPressMessage\": \"Prima continuamente ou prima Alt + Seta Para Baixo para abrir o menu\"\n}\n","{\n \"longPressMessage\": \"ApăsaÈ›i lung sau apăsaÈ›i pe Alt + săgeată în jos pentru a deschide meniul\"\n}\n","{\n \"longPressMessage\": \"Ðажмите и удерживайте или нажмите Alt + Стрелка вниз, чтобы открыть меню\"\n}\n","{\n \"longPressMessage\": \"Ponuku otvorÃte dlhým stlaÄenÃm alebo stlaÄenÃm klávesu Alt + klávesu so Å¡Ãpkou nadol\"\n}\n","{\n \"longPressMessage\": \"Za odprtje menija pritisnite in držite gumb ali pritisnite Alt+puÅ¡Äica navzdol\"\n}\n","{\n \"longPressMessage\": \"Dugo pritisnite ili pritisnite Alt + strelicu prema dole da otvorite meni\"\n}\n","{\n \"longPressMessage\": \"HÃ¥ll nedtryckt eller tryck pÃ¥ Alt + pil nedÃ¥t för att öppna menyn\"\n}\n","{\n \"longPressMessage\": \"Menüyü açmak için uzun basın veya Alt + AÅŸağı Ok tuÅŸuna basın\"\n}\n","{\n \"longPressMessage\": \"Довго або звичайно натиÑніть комбінацію клавіш Alt Ñ– Ñтрілка вниз, щоб відкрити меню\"\n}\n","{\n \"longPressMessage\": \"长按或按 Alt + å‘下方å‘键以打开èœå•\"\n}\n","{\n \"longPressMessage\": \"長按或按 Alt+å‘下éµä»¥é–‹å•ŸåŠŸèƒ½è¡¨\"\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaMenuProps} from '@react-types/menu';\nimport {DOMAttributes, Key, KeyboardDelegate, KeyboardEvents} from '@react-types/shared';\nimport {filterDOMProps, mergeProps} from '@react-aria/utils';\nimport {RefObject} from 'react';\nimport {TreeState} from '@react-stately/tree';\nimport {useSelectableList} from '@react-aria/selection';\n\nexport interface MenuAria {\n /** Props for the menu element. */\n menuProps: DOMAttributes\n}\n\nexport interface AriaMenuOptions<T> extends Omit<AriaMenuProps<T>, 'children'>, KeyboardEvents {\n /** Whether the menu uses virtual scrolling. */\n isVirtualized?: boolean,\n\n /**\n * An optional keyboard delegate implementation for type to select,\n * to override the default.\n */\n keyboardDelegate?: KeyboardDelegate\n}\n\ninterface MenuData {\n onClose?: () => void,\n onAction?: (key: Key) => void\n}\n\nexport const menuData = new WeakMap<TreeState<unknown>, MenuData>();\n\n/**\n * Provides the behavior and accessibility implementation for a menu component.\n * A menu displays a list of actions or options that a user can choose.\n * @param props - Props for the menu.\n * @param state - State for the menu, as returned by `useListState`.\n */\nexport function useMenu<T>(props: AriaMenuOptions<T>, state: TreeState<T>, ref: RefObject<HTMLElement>): MenuAria {\n let {\n shouldFocusWrap = true,\n onKeyDown,\n onKeyUp,\n ...otherProps\n } = props;\n\n if (!props['aria-label'] && !props['aria-labelledby']) {\n console.warn('An aria-label or aria-labelledby prop is required for accessibility.');\n }\n\n let domProps = filterDOMProps(props, {labelable: true});\n let {listProps} = useSelectableList({\n ...otherProps,\n ref,\n selectionManager: state.selectionManager,\n collection: state.collection,\n disabledKeys: state.disabledKeys,\n shouldFocusWrap,\n linkBehavior: 'override'\n });\n\n menuData.set(state, {\n onClose: props.onClose,\n onAction: props.onAction\n });\n\n return {\n menuProps: mergeProps(domProps, {onKeyDown, onKeyUp}, {\n role: 'menu',\n ...listProps,\n onKeyDown: (e) => {\n // don't clear the menu selected keys if the user is presses escape since escape closes the menu\n if (e.key !== 'Escape') {\n listProps.onKeyDown(e);\n }\n }\n })\n };\n}\n","import {RefObject, useEffect, useRef, useState} from 'react';\nimport {useInteractionModality} from '@react-aria/interactions';\nimport {useResizeObserver} from '@react-aria/utils';\n\ninterface SafelyMouseToSubmenuOptions {\n /** Ref for the parent menu. */\n menuRef: RefObject<Element>,\n /** Ref for the submenu. */\n submenuRef: RefObject<Element>,\n /** Whether the submenu is open. */\n isOpen: boolean,\n /** Whether this feature is disabled. */\n isDisabled?: boolean\n}\n\nconst ALLOWED_INVALID_MOVEMENTS = 2;\nconst THROTTLE_TIME = 50;\nconst TIMEOUT_TIME = 1000;\nconst ANGLE_PADDING = Math.PI / 12; // 15°\n\n/**\n * Allows the user to move their pointer to the submenu without it closing when their mouse leaves the trigger element.\n * Prevents pointer events from going to the underlying menu if the user is moving their pointer towards the sub-menu.\n */\nexport function useSafelyMouseToSubmenu(options: SafelyMouseToSubmenuOptions) {\n let {menuRef, submenuRef, isOpen, isDisabled} = options;\n let prevPointerPos = useRef<{x: number, y: number} | undefined>();\n let submenuRect = useRef<DOMRect | undefined>();\n let lastProcessedTime = useRef<number>(0);\n let timeout = useRef<ReturnType<typeof setTimeout> | undefined>();\n let autoCloseTimeout = useRef<ReturnType<typeof setTimeout> | undefined>();\n let submenuSide = useRef<'left' | 'right' | undefined>();\n let movementsTowardsSubmenuCount = useRef<number>(2);\n let [preventPointerEvents, setPreventPointerEvents] = useState(false);\n\n let updateSubmenuRect = () => {\n if (submenuRef.current) {\n submenuRect.current = submenuRef.current.getBoundingClientRect();\n submenuSide.current = undefined;\n }\n };\n useResizeObserver({ref: submenuRef, onResize: updateSubmenuRect});\n\n let reset = () => {\n setPreventPointerEvents(false);\n movementsTowardsSubmenuCount.current = ALLOWED_INVALID_MOVEMENTS;\n };\n\n let modality = useInteractionModality();\n\n useEffect(() => {\n if (preventPointerEvents && menuRef.current) {\n (menuRef.current as HTMLElement).style.pointerEvents = 'none';\n } else {\n (menuRef.current as HTMLElement).style.pointerEvents = '';\n }\n }, [menuRef, preventPointerEvents]);\n\n useEffect(() => {\n let submenu = submenuRef.current;\n let menu = menuRef.current;\n\n if (isDisabled || !submenu || !isOpen || modality !== 'pointer') {\n reset();\n return;\n }\n submenuRect.current = submenu.getBoundingClientRect();\n\n let onPointerMove = (e: PointerEvent) => {\n if (e.pointerType === 'touch' || e.pointerType === 'pen') {\n return;\n }\n\n let currentTime = Date.now();\n\n // Throttle\n if (currentTime - lastProcessedTime.current < THROTTLE_TIME) {\n return;\n }\n clearTimeout(timeout.current);\n clearTimeout(autoCloseTimeout.current);\n\n let {clientX: mouseX, clientY: mouseY} = e;\n\n if (!prevPointerPos.current) {\n prevPointerPos.current = {x: mouseX, y: mouseY};\n return;\n }\n\n if (!submenuRect.current) {\n return;\n }\n\n if (!submenuSide.current) {\n submenuSide.current = mouseX > submenuRect.current.right ? 'left' : 'right';\n }\n\n // Pointer is outside of parent menu\n if (mouseX < menu.getBoundingClientRect().left || mouseX > menu.getBoundingClientRect().right || mouseY < menu.getBoundingClientRect().top || mouseY > menu.getBoundingClientRect().bottom) {\n reset();\n return;\n }\n\n /* Check if pointer is moving towards submenu.\n Uses the 2-argument arctangent (https://en.wikipedia.org/wiki/Atan2) to calculate:\n - angle between previous pointer and top of submenu\n - angle between previous pointer and bottom of submenu\n - angle between previous pointer and current pointer (delta)\n If the pointer delta angle value is between the top and bottom angle values, we know the pointer is moving towards the submenu.\n */\n let prevMouseX = prevPointerPos.current.x;\n let prevMouseY = prevPointerPos.current.y;\n let toSubmenuX = submenuSide.current === 'right' ? submenuRect.current.left - prevMouseX : prevMouseX - submenuRect.current.right;\n let angleTop = Math.atan2(prevMouseY - submenuRect.current.top, toSubmenuX) + ANGLE_PADDING;\n let angleBottom = Math.atan2(prevMouseY - submenuRect.current.bottom, toSubmenuX) - ANGLE_PADDING;\n let anglePointer = Math.atan2(prevMouseY - mouseY, (submenuSide.current === 'left' ? -(mouseX - prevMouseX) : mouseX - prevMouseX));\n let isMovingTowardsSubmenu = anglePointer < angleTop && anglePointer > angleBottom;\n\n movementsTowardsSubmenuCount.current = isMovingTowardsSubmenu ?\n Math.min(movementsTowardsSubmenuCount.current + 1, ALLOWED_INVALID_MOVEMENTS) :\n Math.max(movementsTowardsSubmenuCount.current - 1, 0);\n\n if (movementsTowardsSubmenuCount.current >= ALLOWED_INVALID_MOVEMENTS) {\n setPreventPointerEvents(true);\n } else {\n setPreventPointerEvents(false);\n }\n\n lastProcessedTime.current = currentTime;\n prevPointerPos.current = {x: mouseX, y: mouseY};\n\n // If the pointer is moving towards the submenu, start a timeout to close if no other movements are made after 500ms.\n if (isMovingTowardsSubmenu) {\n timeout.current = setTimeout(() => {\n reset();\n autoCloseTimeout.current = setTimeout(() => {\n // Fire a pointerover event to trigger the menu to close.\n // Wait until pointer-events:none is no longer applied\n let target = document.elementFromPoint(mouseX, mouseY);\n if (target && menu.contains(target)) {\n target.dispatchEvent(new PointerEvent('pointerover', {bubbles: true, cancelable: true}));\n }\n }, 100);\n }, TIMEOUT_TIME);\n }\n };\n\n window.addEventListener('pointermove', onPointerMove);\n\n return () => {\n window.removeEventListener('pointermove', onPointerMove);\n clearTimeout(timeout.current);\n clearTimeout(autoCloseTimeout.current);\n movementsTowardsSubmenuCount.current = ALLOWED_INVALID_MOVEMENTS;\n };\n\n }, [isDisabled, isOpen, menuRef, modality, setPreventPointerEvents, submenuRef]);\n}\n","/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FormValidationState} from '@react-stately/form';\nimport {RefObject, useEffect} from 'react';\nimport {setInteractionModality} from '@react-aria/interactions';\nimport {useEffectEvent, useLayoutEffect} from '@react-aria/utils';\nimport {Validation, ValidationResult} from '@react-types/shared';\n\ntype ValidatableElement = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\ninterface FormValidationProps<T> extends Validation<T> {\n focus?: () => void\n}\n\nexport function useFormValidation<T>(props: FormValidationProps<T>, state: FormValidationState, ref: RefObject<ValidatableElement> | undefined) {\n let {validationBehavior, focus} = props;\n\n // This is a useLayoutEffect so that it runs before the useEffect in useFormValidationState, which commits the validation change.\n useLayoutEffect(() => {\n if (validationBehavior === 'native' && ref?.current) {\n let errorMessage = state.realtimeValidation.isInvalid ? state.realtimeValidation.validationErrors.join(' ') || 'Invalid value.' : '';\n ref.current.setCustomValidity(errorMessage);\n\n // Prevent default tooltip for validation message.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=605277\n if (!ref.current.hasAttribute('title')) {\n ref.current.title = '';\n }\n\n if (!state.realtimeValidation.isInvalid) {\n state.updateValidation(getNativeValidity(ref.current));\n }\n }\n });\n\n let onReset = useEffectEvent(() => {\n state.resetValidation();\n });\n\n let onInvalid = useEffectEvent((e: Event) => {\n // Only commit validation if we are not already displaying one.\n // This avoids clearing server errors that the user didn't actually fix.\n if (!state.displayValidation.isInvalid) {\n state.commitValidation();\n }\n\n // Auto focus the first invalid input in a form, unless the error already had its default prevented.\n let form = ref?.current?.form;\n if (!e.defaultPrevented && ref && form && getFirstInvalidInput(form) === ref.current) {\n if (focus) {\n focus();\n } else {\n ref.current?.focus();\n }\n\n // Always show focus ring.\n setInteractionModality('keyboard');\n }\n\n // Prevent default browser error UI from appearing.\n e.preventDefault();\n });\n\n let onChange = useEffectEvent(() => {\n state.commitValidation();\n });\n\n useEffect(() => {\n let input = ref?.current;\n if (!input) {\n return;\n }\n\n let form = input.form;\n input.addEventListener('invalid', onInvalid);\n input.addEventListener('change', onChange);\n form?.addEventListener('reset', onReset);\n return () => {\n input!.removeEventListener('invalid', onInvalid);\n input!.removeEventListener('change', onChange);\n form?.removeEventListener('reset', onReset);\n };\n }, [ref, onInvalid, onChange, onReset, validationBehavior]);\n}\n\nfunction getValidity(input: ValidatableElement) {\n // The native ValidityState object is live, meaning each property is a getter that returns the current state.\n // We need to create a snapshot of the validity state at the time this function is called to avoid unpredictable React renders.\n let validity = input.validity;\n return {\n badInput: validity.badInput,\n customError: validity.customError,\n patternMismatch: validity.patternMismatch,\n rangeOverflow: validity.rangeOverflow,\n rangeUnderflow: validity.rangeUnderflow,\n stepMismatch: validity.stepMismatch,\n tooLong: validity.tooLong,\n tooShort: validity.tooShort,\n typeMismatch: validity.typeMismatch,\n valueMissing: validity.valueMissing,\n valid: validity.valid\n };\n}\n\nfunction getNativeValidity(input: ValidatableElement): ValidationResult {\n return {\n isInvalid: !input.validity.valid,\n validationDetails: getValidity(input),\n validationErrors: input.validationMessage ? [input.validationMessage] : []\n };\n}\n\nfunction getFirstInvalidInput(form: HTMLFormElement): ValidatableElement | null {\n for (let i = 0; i < form.elements.length; i++) {\n let element = form.elements[i] as ValidatableElement;\n if (!element.validity.valid) {\n return element;\n }\n }\n\n return null;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaButtonProps} from '@react-types/button';\nimport {AriaListBoxOptions} from '@react-aria/listbox';\nimport {AriaSelectProps} from '@react-types/select';\nimport {chain, filterDOMProps, mergeProps, useId} from '@react-aria/utils';\nimport {DOMAttributes, FocusableElement, KeyboardDelegate, ValidationResult} from '@react-types/shared';\nimport {FocusEvent, RefObject, useMemo} from 'react';\nimport {ListKeyboardDelegate, useTypeSelect} from '@react-aria/selection';\nimport {SelectState} from '@react-stately/select';\nimport {setInteractionModality} from '@react-aria/interactions';\nimport {useCollator} from '@react-aria/i18n';\nimport {useField} from '@react-aria/label';\nimport {useMenuTrigger} from '@react-aria/menu';\n\nexport interface AriaSelectOptions<T> extends Omit<AriaSelectProps<T>, 'children'> {\n /**\n * An optional keyboard delegate implementation for type to select,\n * to override the default.\n */\n keyboardDelegate?: KeyboardDelegate\n}\n\nexport interface SelectAria<T> extends ValidationResult {\n /** Props for the label element. */\n labelProps: DOMAttributes,\n\n /** Props for the popup trigger element. */\n triggerProps: AriaButtonProps,\n\n /** Props for the element representing the selected value. */\n valueProps: DOMAttributes,\n\n /** Props for the popup. */\n menuProps: AriaListBoxOptions<T>,\n\n /** Props for the select's description element, if any. */\n descriptionProps: DOMAttributes,\n\n /** Props for the select's error message element, if any. */\n errorMessageProps: DOMAttributes\n}\n\ninterface SelectData {\n isDisabled?: boolean,\n isRequired?: boolean,\n name?: string,\n validationBehavior?: 'aria' | 'native'\n}\n\nexport const selectData = new WeakMap<SelectState<any>, SelectData>();\n\n/**\n * Provides the behavior and accessibility implementation for a select component.\n * A select displays a collapsible list of options and allows a user to select one of them.\n * @param props - Props for the select.\n * @param state - State for the select, as returned by `useListState`.\n */\nexport function useSelect<T>(props: AriaSelectOptions<T>, state: SelectState<T>, ref: RefObject<FocusableElement>): SelectAria<T> {\n let {\n keyboardDelegate,\n isDisabled,\n isRequired,\n name,\n validationBehavior = 'aria'\n } = props;\n\n // By default, a KeyboardDelegate is provided which uses the DOM to query layout information (e.g. for page up/page down).\n // When virtualized, the layout object will be passed in as a prop and override this.\n let collator = useCollator({usage: 'search', sensitivity: 'base'});\n let delegate = useMemo(() => keyboardDelegate || new ListKeyboardDelegate(state.collection, state.disabledKeys, null, collator), [keyboardDelegate, state.collection, state.disabledKeys, collator]);\n\n let {menuTriggerProps, menuProps} = useMenuTrigger<T>(\n {\n isDisabled,\n type: 'listbox'\n },\n state,\n ref\n );\n\n let onKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowLeft': {\n // prevent scrolling containers\n e.preventDefault();\n\n let key = state.selectedKey != null ? delegate.getKeyAbove(state.selectedKey) : delegate.getFirstKey();\n if (key) {\n state.setSelectedKey(key);\n }\n break;\n }\n case 'ArrowRight': {\n // prevent scrolling containers\n e.preventDefault();\n\n let key = state.selectedKey != null ? delegate.getKeyBelow(state.selectedKey) : delegate.getFirstKey();\n if (key) {\n state.setSelectedKey(key);\n }\n break;\n }\n }\n };\n\n let {typeSelectProps} = useTypeSelect({\n keyboardDelegate: delegate,\n selectionManager: state.selectionManager,\n onTypeSelect(key) {\n state.setSelectedKey(key);\n }\n });\n\n let {isInvalid, validationErrors, validationDetails} = state.displayValidation;\n let {labelProps, fieldProps, descriptionProps, errorMessageProps} = useField({\n ...props,\n labelElementType: 'span',\n isInvalid,\n errorMessage: props.errorMessage || validationErrors\n });\n\n typeSelectProps.onKeyDown = typeSelectProps.onKeyDownCapture;\n delete typeSelectProps.onKeyDownCapture;\n\n let domProps = filterDOMProps(props, {labelable: true});\n let triggerProps = mergeProps(typeSelectProps, menuTriggerProps, fieldProps);\n\n let valueId = useId();\n\n selectData.set(state, {\n isDisabled,\n isRequired,\n name,\n validationBehavior\n });\n\n return {\n labelProps: {\n ...labelProps,\n onClick: () => {\n if (!props.isDisabled) {\n ref.current.focus();\n\n // Show the focus ring so the user knows where focus went\n setInteractionModality('keyboard');\n }\n }\n },\n triggerProps: mergeProps(domProps, {\n ...triggerProps,\n isDisabled,\n onKeyDown: chain(triggerProps.onKeyDown, onKeyDown, props.onKeyDown),\n onKeyUp: props.onKeyUp,\n 'aria-labelledby': [\n valueId,\n triggerProps['aria-labelledby'],\n triggerProps['aria-label'] && !triggerProps['aria-labelledby'] ? triggerProps.id : null\n ].filter(Boolean).join(' '),\n onFocus(e: FocusEvent) {\n if (state.isFocused) {\n return;\n }\n\n if (props.onFocus) {\n props.onFocus(e);\n }\n\n if (props.onFocusChange) {\n props.onFocusChange(true);\n }\n\n state.setFocused(true);\n },\n onBlur(e: FocusEvent) {\n if (state.isOpen) {\n return;\n }\n\n if (props.onBlur) {\n props.onBlur(e);\n }\n\n if (props.onFocusChange) {\n props.onFocusChange(false);\n }\n\n state.setFocused(false);\n }\n }),\n valueProps: {\n id: valueId\n },\n menuProps: {\n ...menuProps,\n autoFocus: state.focusStrategy || true,\n shouldSelectOnPressUp: true,\n shouldFocusOnHover: true,\n disallowEmptySelection: true,\n linkBehavior: 'selection',\n onBlur: (e) => {\n if (e.currentTarget.contains(e.relatedTarget as Node)) {\n return;\n }\n\n if (props.onBlur) {\n props.onBlur(e);\n }\n\n if (props.onFocusChange) {\n props.onFocusChange(false);\n }\n\n state.setFocused(false);\n },\n 'aria-labelledby': [\n fieldProps['aria-labelledby'],\n triggerProps['aria-label'] && !fieldProps['aria-labelledby'] ? triggerProps.id : null\n ].filter(Boolean).join(' ')\n },\n descriptionProps,\n errorMessageProps,\n isInvalid,\n validationErrors,\n validationDetails\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FocusableElement} from '@react-types/shared';\nimport React, {ReactNode, RefObject, useRef} from 'react';\nimport {selectData} from './useSelect';\nimport {SelectState} from '@react-stately/select';\nimport {useFormReset} from '@react-aria/utils';\nimport {useFormValidation} from '@react-aria/form';\nimport {useInteractionModality} from '@react-aria/interactions';\nimport {useVisuallyHidden} from '@react-aria/visually-hidden';\n\nexport interface AriaHiddenSelectProps {\n /**\n * Describes the type of autocomplete functionality the input should provide if any. See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#htmlattrdefautocomplete).\n */\n autoComplete?: string,\n\n /** The text label for the select. */\n label?: ReactNode,\n\n /** HTML form input name. */\n name?: string,\n\n /** Sets the disabled state of the select and input. */\n isDisabled?: boolean\n}\n\nexport interface HiddenSelectProps<T> extends AriaHiddenSelectProps {\n /** State for the select. */\n state: SelectState<T>,\n\n /** A ref to the trigger element. */\n triggerRef: RefObject<FocusableElement>\n}\n\nexport interface AriaHiddenSelectOptions extends AriaHiddenSelectProps {\n /** A ref to the hidden `<select>` element. */\n selectRef?: RefObject<HTMLSelectElement>\n}\n\n/**\n * Provides the behavior and accessibility implementation for a hidden `<select>` element, which\n * can be used in combination with `useSelect` to support browser form autofill, mobile form\n * navigation, and native HTML form submission.\n */\nexport function useHiddenSelect<T>(props: AriaHiddenSelectOptions, state: SelectState<T>, triggerRef: RefObject<FocusableElement>) {\n let data = selectData.get(state) || {};\n let {autoComplete, name = data.name, isDisabled = data.isDisabled} = props;\n let {validationBehavior, isRequired} = data;\n let modality = useInteractionModality();\n let {visuallyHiddenProps} = useVisuallyHidden();\n\n useFormReset(props.selectRef, state.selectedKey, state.setSelectedKey);\n useFormValidation({\n validationBehavior,\n focus: () => triggerRef.current.focus()\n }, state, props.selectRef);\n\n // In Safari, the <select> cannot have `display: none` or `hidden` for autofill to work.\n // In Firefox, there must be a <label> to identify the <select> whereas other browsers\n // seem to identify it just by surrounding text.\n // The solution is to use <VisuallyHidden> to hide the elements, which clips the elements to a\n // 1px rectangle. In addition, we hide from screen readers with aria-hidden, and make the <select>\n // non tabbable with tabIndex={-1}.\n //\n // In mobile browsers, there are next/previous buttons above the software keyboard for navigating\n // between fields in a form. These only support native form inputs that are tabbable. In order to\n // support those, an additional hidden input is used to marshall focus to the button. It is tabbable\n // except when the button is focused, so that shift tab works properly to go to the actual previous\n // input in the form. Using the <select> for this also works, but Safari on iOS briefly flashes\n // the native menu on focus, so this isn't ideal. A font-size of 16px or greater is required to\n // prevent Safari from zooming in on the input when it is focused.\n //\n // If the current interaction modality is null, then the user hasn't interacted with the page yet.\n // In this case, we set the tabIndex to -1 on the input element so that automated accessibility\n // checkers don't throw false-positives about focusable elements inside an aria-hidden parent.\n return {\n containerProps: {\n ...visuallyHiddenProps,\n 'aria-hidden': true,\n ['data-a11y-ignore']: 'aria-hidden-focus'\n },\n inputProps: {\n type: 'text',\n tabIndex: modality == null || state.isFocused || state.isOpen ? -1 : 0,\n style: {fontSize: 16},\n onFocus: () => triggerRef.current.focus(),\n disabled: isDisabled\n },\n selectProps: {\n tabIndex: -1,\n autoComplete,\n disabled: isDisabled,\n required: validationBehavior === 'native' && isRequired,\n name,\n value: state.selectedKey ?? '',\n onChange: (e: React.ChangeEvent<HTMLSelectElement>) => state.setSelectedKey(e.target.value)\n }\n };\n}\n\n/**\n * Renders a hidden native `<select>` element, which can be used to support browser\n * form autofill, mobile form navigation, and native form submission.\n */\nexport function HiddenSelect<T>(props: HiddenSelectProps<T>) {\n let {state, triggerRef, label, name, isDisabled} = props;\n let selectRef = useRef(null);\n let {containerProps, inputProps, selectProps} = useHiddenSelect({...props, selectRef}, state, triggerRef);\n\n // If used in a <form>, use a hidden input so the value can be submitted to a server.\n // If the collection isn't too big, use a hidden <select> element for this so that browser\n // autofill will work. Otherwise, use an <input type=\"hidden\">.\n if (state.collection.size <= 300) {\n return (\n <div {...containerProps} data-testid=\"hidden-select-container\">\n <input {...inputProps} />\n <label>\n {label}\n <select {...selectProps} ref={selectRef}>\n <option />\n {[...state.collection.getKeys()].map(key => {\n let item = state.collection.getItem(key);\n if (item.type === 'item') {\n return (\n <option\n key={item.key}\n value={item.key}>\n {item.textValue}\n </option>\n );\n }\n })}\n </select>\n </label>\n </div>\n );\n } else if (name) {\n return (\n <input\n type=\"hidden\"\n autoComplete={selectProps.autoComplete}\n name={name}\n disabled={isDisabled}\n value={state.selectedKey ?? ''} />\n );\n }\n\n return null;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Key} from '@react-types/shared';\n\n/**\n * A Selection is a special Set containing Keys, which also has an anchor\n * and current selected key for use when range selecting.\n */\nexport class Selection extends Set<Key> {\n anchorKey: Key;\n currentKey: Key;\n\n constructor(keys?: Iterable<Key> | Selection, anchorKey?: Key, currentKey?: Key) {\n super(keys);\n if (keys instanceof Selection) {\n this.anchorKey = anchorKey || keys.anchorKey;\n this.currentKey = currentKey || keys.currentKey;\n } else {\n this.anchorKey = anchorKey;\n this.currentKey = currentKey;\n }\n }\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DisabledBehavior, Key, MultipleSelection, SelectionBehavior, SelectionMode} from '@react-types/shared';\nimport {MultipleSelectionState} from './types';\nimport {Selection} from './Selection';\nimport {useControlledState} from '@react-stately/utils';\nimport {useEffect, useMemo, useRef, useState} from 'react';\n\nfunction equalSets(setA, setB) {\n if (setA.size !== setB.size) {\n return false;\n }\n\n for (let item of setA) {\n if (!setB.has(item)) {\n return false;\n }\n }\n\n return true;\n}\n\nexport interface MultipleSelectionStateProps extends MultipleSelection {\n /** How multiple selection should behave in the collection. */\n selectionBehavior?: SelectionBehavior,\n /** Whether onSelectionChange should fire even if the new set of keys is the same as the last. */\n allowDuplicateSelectionEvents?: boolean,\n /** Whether `disabledKeys` applies to all interactions, or only selection. */\n disabledBehavior?: DisabledBehavior\n}\n\n/**\n * Manages state for multiple selection and focus in a collection.\n */\nexport function useMultipleSelectionState(props: MultipleSelectionStateProps): MultipleSelectionState {\n let {\n selectionMode = 'none' as SelectionMode,\n disallowEmptySelection,\n allowDuplicateSelectionEvents,\n selectionBehavior: selectionBehaviorProp = 'toggle',\n disabledBehavior = 'all'\n } = props;\n\n // We want synchronous updates to `isFocused` and `focusedKey` after their setters are called.\n // But we also need to trigger a react re-render. So, we have both a ref (sync) and state (async).\n let isFocusedRef = useRef(false);\n let [, setFocused] = useState(false);\n let focusedKeyRef = useRef(null);\n let childFocusStrategyRef = useRef(null);\n let [, setFocusedKey] = useState(null);\n let selectedKeysProp = useMemo(() => convertSelection(props.selectedKeys), [props.selectedKeys]);\n let defaultSelectedKeys = useMemo(() => convertSelection(props.defaultSelectedKeys, new Selection()), [props.defaultSelectedKeys]);\n let [selectedKeys, setSelectedKeys] = useControlledState(\n selectedKeysProp,\n defaultSelectedKeys,\n props.onSelectionChange\n );\n let disabledKeysProp = useMemo(() =>\n props.disabledKeys ? new Set(props.disabledKeys) : new Set<Key>()\n , [props.disabledKeys]);\n let [selectionBehavior, setSelectionBehavior] = useState(selectionBehaviorProp);\n\n // If the selectionBehavior prop is set to replace, but the current state is toggle (e.g. due to long press\n // to enter selection mode on touch), and the selection becomes empty, reset the selection behavior.\n if (selectionBehaviorProp === 'replace' && selectionBehavior === 'toggle' && typeof selectedKeys === 'object' && selectedKeys.size === 0) {\n setSelectionBehavior('replace');\n }\n\n // If the selectionBehavior prop changes, update the state as well.\n let lastSelectionBehavior = useRef(selectionBehaviorProp);\n useEffect(() => {\n if (selectionBehaviorProp !== lastSelectionBehavior.current) {\n setSelectionBehavior(selectionBehaviorProp);\n lastSelectionBehavior.current = selectionBehaviorProp;\n }\n }, [selectionBehaviorProp]);\n\n return {\n selectionMode,\n disallowEmptySelection,\n selectionBehavior,\n setSelectionBehavior,\n get isFocused() {\n return isFocusedRef.current;\n },\n setFocused(f) {\n isFocusedRef.current = f;\n setFocused(f);\n },\n get focusedKey() {\n return focusedKeyRef.current;\n },\n get childFocusStrategy() {\n return childFocusStrategyRef.current;\n },\n setFocusedKey(k, childFocusStrategy = 'first') {\n focusedKeyRef.current = k;\n childFocusStrategyRef.current = childFocusStrategy;\n setFocusedKey(k);\n },\n selectedKeys,\n setSelectedKeys(keys) {\n if (allowDuplicateSelectionEvents || !equalSets(keys, selectedKeys)) {\n setSelectedKeys(keys);\n }\n },\n disabledKeys: disabledKeysProp,\n disabledBehavior\n };\n}\n\nfunction convertSelection(selection: 'all' | Iterable<Key>, defaultValue?: Selection): 'all' | Set<Key> {\n if (!selection) {\n return defaultValue;\n }\n\n return selection === 'all'\n ? 'all'\n : new Selection(selection);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n Collection, DisabledBehavior,\n FocusStrategy,\n Selection as ISelection,\n Key,\n LongPressEvent,\n Node,\n PressEvent,\n SelectionBehavior,\n SelectionMode\n} from '@react-types/shared';\nimport {compareNodeOrder, getChildNodes, getFirstItem} from '@react-stately/collections';\nimport {MultipleSelectionManager, MultipleSelectionState} from './types';\nimport {Selection} from './Selection';\n\ninterface SelectionManagerOptions {\n allowsCellSelection?: boolean\n}\n\n/**\n * An interface for reading and updating multiple selection state.\n */\nexport class SelectionManager implements MultipleSelectionManager {\n private collection: Collection<Node<unknown>>;\n private state: MultipleSelectionState;\n private allowsCellSelection: boolean;\n private _isSelectAll: boolean;\n\n constructor(collection: Collection<Node<unknown>>, state: MultipleSelectionState, options?: SelectionManagerOptions) {\n this.collection = collection;\n this.state = state;\n this.allowsCellSelection = options?.allowsCellSelection ?? false;\n this._isSelectAll = null;\n }\n\n /**\n * The type of selection that is allowed in the collection.\n */\n get selectionMode(): SelectionMode {\n return this.state.selectionMode;\n }\n\n /**\n * Whether the collection allows empty selection.\n */\n get disallowEmptySelection(): boolean {\n return this.state.disallowEmptySelection;\n }\n\n /**\n * The selection behavior for the collection.\n */\n get selectionBehavior(): SelectionBehavior {\n return this.state.selectionBehavior;\n }\n\n /**\n * Sets the selection behavior for the collection.\n */\n setSelectionBehavior(selectionBehavior: SelectionBehavior) {\n this.state.setSelectionBehavior(selectionBehavior);\n }\n\n /**\n * Whether the collection is currently focused.\n */\n get isFocused(): boolean {\n return this.state.isFocused;\n }\n\n /**\n * Sets whether the collection is focused.\n */\n setFocused(isFocused: boolean) {\n this.state.setFocused(isFocused);\n }\n\n /**\n * The current focused key in the collection.\n */\n get focusedKey(): Key {\n return this.state.focusedKey;\n }\n\n /** Whether the first or last child of the focused key should receive focus. */\n get childFocusStrategy(): FocusStrategy {\n return this.state.childFocusStrategy;\n }\n\n /**\n * Sets the focused key.\n */\n setFocusedKey(key: Key | null, childFocusStrategy?: FocusStrategy) {\n if (key == null || this.collection.getItem(key)) {\n this.state.setFocusedKey(key, childFocusStrategy);\n }\n }\n\n /**\n * The currently selected keys in the collection.\n */\n get selectedKeys(): Set<Key> {\n return this.state.selectedKeys === 'all'\n ? new Set(this.getSelectAllKeys())\n : this.state.selectedKeys;\n }\n\n /**\n * The raw selection value for the collection.\n * Either 'all' for select all, or a set of keys.\n */\n get rawSelection(): ISelection {\n return this.state.selectedKeys;\n }\n\n /**\n * Returns whether a key is selected.\n */\n isSelected(key: Key) {\n if (this.state.selectionMode === 'none') {\n return false;\n }\n\n key = this.getKey(key);\n return this.state.selectedKeys === 'all'\n ? this.canSelectItem(key)\n : this.state.selectedKeys.has(key);\n }\n\n /**\n * Whether the selection is empty.\n */\n get isEmpty(): boolean {\n return this.state.selectedKeys !== 'all' && this.state.selectedKeys.size === 0;\n }\n\n /**\n * Whether all items in the collection are selected.\n */\n get isSelectAll(): boolean {\n if (this.isEmpty) {\n return false;\n }\n\n if (this.state.selectedKeys === 'all') {\n return true;\n }\n\n if (this._isSelectAll != null) {\n return this._isSelectAll;\n }\n\n let allKeys = this.getSelectAllKeys();\n let selectedKeys = this.state.selectedKeys;\n this._isSelectAll = allKeys.every(k => selectedKeys.has(k));\n return this._isSelectAll;\n }\n\n get firstSelectedKey(): Key | null {\n let first: Node<unknown> | null = null;\n for (let key of this.state.selectedKeys) {\n let item = this.collection.getItem(key);\n if (!first || (item && compareNodeOrder(this.collection, item, first) < 0)) {\n first = item;\n }\n }\n\n return first?.key;\n }\n\n get lastSelectedKey(): Key | null {\n let last: Node<unknown> | null = null;\n for (let key of this.state.selectedKeys) {\n let item = this.collection.getItem(key);\n if (!last || (item && compareNodeOrder(this.collection, item, last) > 0)) {\n last = item;\n }\n }\n\n return last?.key;\n }\n\n get disabledKeys(): Set<Key> {\n return this.state.disabledKeys;\n }\n\n get disabledBehavior(): DisabledBehavior {\n return this.state.disabledBehavior;\n }\n\n /**\n * Extends the selection to the given key.\n */\n extendSelection(toKey: Key) {\n if (this.selectionMode === 'none') {\n return;\n }\n\n if (this.selectionMode === 'single') {\n this.replaceSelection(toKey);\n return;\n }\n\n toKey = this.getKey(toKey);\n\n let selection: Selection;\n\n // Only select the one key if coming from a select all.\n if (this.state.selectedKeys === 'all') {\n selection = new Selection([toKey], toKey, toKey);\n } else {\n let selectedKeys = this.state.selectedKeys as Selection;\n let anchorKey = selectedKeys.anchorKey || toKey;\n selection = new Selection(selectedKeys, anchorKey, toKey);\n for (let key of this.getKeyRange(anchorKey, selectedKeys.currentKey || toKey)) {\n selection.delete(key);\n }\n\n for (let key of this.getKeyRange(toKey, anchorKey)) {\n if (this.canSelectItem(key)) {\n selection.add(key);\n }\n }\n }\n\n this.state.setSelectedKeys(selection);\n }\n\n private getKeyRange(from: Key, to: Key) {\n let fromItem = this.collection.getItem(from);\n let toItem = this.collection.getItem(to);\n if (fromItem && toItem) {\n if (compareNodeOrder(this.collection, fromItem, toItem) <= 0) {\n return this.getKeyRangeInternal(from, to);\n }\n\n return this.getKeyRangeInternal(to, from);\n }\n\n return [];\n }\n\n private getKeyRangeInternal(from: Key, to: Key) {\n let keys: Key[] = [];\n let key = from;\n while (key) {\n let item = this.collection.getItem(key);\n if (item && item.type === 'item' || (item.type === 'cell' && this.allowsCellSelection)) {\n keys.push(key);\n }\n\n if (key === to) {\n return keys;\n }\n\n key = this.collection.getKeyAfter(key);\n }\n\n return [];\n }\n\n private getKey(key: Key) {\n let item = this.collection.getItem(key);\n if (!item) {\n // ¯\\_(ツ)_/¯\n return key;\n }\n\n // If cell selection is allowed, just return the key.\n if (item.type === 'cell' && this.allowsCellSelection) {\n return key;\n }\n\n // Find a parent item to select\n while (item.type !== 'item' && item.parentKey != null) {\n item = this.collection.getItem(item.parentKey);\n }\n\n if (!item || item.type !== 'item') {\n return null;\n }\n\n return item.key;\n }\n\n /**\n * Toggles whether the given key is selected.\n */\n toggleSelection(key: Key) {\n if (this.selectionMode === 'none') {\n return;\n }\n\n if (this.selectionMode === 'single' && !this.isSelected(key)) {\n this.replaceSelection(key);\n return;\n }\n\n key = this.getKey(key);\n if (key == null) {\n return;\n }\n\n let keys = new Selection(this.state.selectedKeys === 'all' ? this.getSelectAllKeys() : this.state.selectedKeys);\n if (keys.has(key)) {\n keys.delete(key);\n // TODO: move anchor to last selected key...\n // Does `current` need to move here too?\n } else if (this.canSelectItem(key)) {\n keys.add(key);\n keys.anchorKey = key;\n keys.currentKey = key;\n }\n\n if (this.disallowEmptySelection && keys.size === 0) {\n return;\n }\n\n this.state.setSelectedKeys(keys);\n }\n\n /**\n * Replaces the selection with only the given key.\n */\n replaceSelection(key: Key) {\n if (this.selectionMode === 'none') {\n return;\n }\n\n key = this.getKey(key);\n if (key == null) {\n return;\n }\n\n let selection = this.canSelectItem(key)\n ? new Selection([key], key, key)\n : new Selection();\n\n this.state.setSelectedKeys(selection);\n }\n\n /**\n * Replaces the selection with the given keys.\n */\n setSelectedKeys(keys: Iterable<Key>) {\n if (this.selectionMode === 'none') {\n return;\n }\n\n let selection = new Selection();\n for (let key of keys) {\n key = this.getKey(key);\n if (key != null) {\n selection.add(key);\n if (this.selectionMode === 'single') {\n break;\n }\n }\n }\n\n this.state.setSelectedKeys(selection);\n }\n\n private getSelectAllKeys() {\n let keys: Key[] = [];\n let addKeys = (key: Key) => {\n while (key) {\n if (this.canSelectItem(key)) {\n let item = this.collection.getItem(key);\n if (item.type === 'item') {\n keys.push(key);\n }\n\n // Add child keys. If cell selection is allowed, then include item children too.\n if (item.hasChildNodes && (this.allowsCellSelection || item.type !== 'item')) {\n addKeys(getFirstItem(getChildNodes(item, this.collection)).key);\n }\n }\n\n key = this.collection.getKeyAfter(key);\n }\n };\n\n addKeys(this.collection.getFirstKey());\n return keys;\n }\n\n /**\n * Selects all items in the collection.\n */\n selectAll() {\n if (!this.isSelectAll && this.selectionMode === 'multiple') {\n this.state.setSelectedKeys('all');\n }\n }\n\n /**\n * Removes all keys from the selection.\n */\n clearSelection() {\n if (!this.disallowEmptySelection && (this.state.selectedKeys === 'all' || this.state.selectedKeys.size > 0)) {\n this.state.setSelectedKeys(new Selection());\n }\n }\n\n /**\n * Toggles between select all and an empty selection.\n */\n toggleSelectAll() {\n if (this.isSelectAll) {\n this.clearSelection();\n } else {\n this.selectAll();\n }\n }\n\n select(key: Key, e?: PressEvent | LongPressEvent | PointerEvent) {\n if (this.selectionMode === 'none') {\n return;\n }\n\n if (this.selectionMode === 'single') {\n if (this.isSelected(key) && !this.disallowEmptySelection) {\n this.toggleSelection(key);\n } else {\n this.replaceSelection(key);\n }\n } else if (this.selectionBehavior === 'toggle' || (e && (e.pointerType === 'touch' || e.pointerType === 'virtual'))) {\n // if touch or virtual (VO) then we just want to toggle, otherwise it's impossible to multi select because they don't have modifier keys\n this.toggleSelection(key);\n } else {\n this.replaceSelection(key);\n }\n }\n\n /**\n * Returns whether the current selection is equal to the given selection.\n */\n isSelectionEqual(selection: Set<Key>) {\n if (selection === this.state.selectedKeys) {\n return true;\n }\n\n // Check if the set of keys match.\n let selectedKeys = this.selectedKeys;\n if (selection.size !== selectedKeys.size) {\n return false;\n }\n\n for (let key of selection) {\n if (!selectedKeys.has(key)) {\n return false;\n }\n }\n\n for (let key of selectedKeys) {\n if (!selection.has(key)) {\n return false;\n }\n }\n\n return true;\n }\n\n canSelectItem(key: Key) {\n if (this.state.selectionMode === 'none' || this.state.disabledKeys.has(key)) {\n return false;\n }\n\n let item = this.collection.getItem(key);\n if (!item || (item.type === 'cell' && !this.allowsCellSelection)) {\n return false;\n }\n\n return true;\n }\n\n isDisabled(key: Key) {\n return this.state.disabledKeys.has(key) && this.state.disabledBehavior === 'all';\n }\n\n isLink(key: Key) {\n return !!this.collection.getItem(key)?.props?.href;\n }\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, Key, Node} from '@react-types/shared';\n\nexport class ListCollection<T> implements Collection<Node<T>> {\n private keyMap: Map<Key, Node<T>> = new Map();\n private iterable: Iterable<Node<T>>;\n private firstKey: Key;\n private lastKey: Key;\n\n constructor(nodes: Iterable<Node<T>>) {\n this.iterable = nodes;\n\n let visit = (node: Node<T>) => {\n this.keyMap.set(node.key, node);\n\n if (node.childNodes && node.type === 'section') {\n for (let child of node.childNodes) {\n visit(child);\n }\n }\n };\n\n for (let node of nodes) {\n visit(node);\n }\n\n let last: Node<T>;\n let index = 0;\n for (let [key, node] of this.keyMap) {\n if (last) {\n last.nextKey = key;\n node.prevKey = last.key;\n } else {\n this.firstKey = key;\n node.prevKey = undefined;\n }\n\n if (node.type === 'item') {\n node.index = index++;\n }\n\n last = node;\n\n // Set nextKey as undefined since this might be the last node\n // If it isn't the last node, last.nextKey will properly set at start of new loop\n last.nextKey = undefined;\n }\n\n this.lastKey = last?.key;\n }\n\n *[Symbol.iterator]() {\n yield* this.iterable;\n }\n\n get size() {\n return this.keyMap.size;\n }\n\n getKeys() {\n return this.keyMap.keys();\n }\n\n getKeyBefore(key: Key) {\n let node = this.keyMap.get(key);\n return node ? node.prevKey : null;\n }\n\n getKeyAfter(key: Key) {\n let node = this.keyMap.get(key);\n return node ? node.nextKey : null;\n }\n\n getFirstKey() {\n return this.firstKey;\n }\n\n getLastKey() {\n return this.lastKey;\n }\n\n getItem(key: Key) {\n return this.keyMap.get(key);\n }\n\n at(idx: number) {\n const keys = [...this.getKeys()];\n return this.getItem(keys[idx]);\n }\n\n getChildren(key: Key): Iterable<Node<T>> {\n let node = this.keyMap.get(key);\n return node?.childNodes || [];\n }\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, CollectionStateBase, Key, Node} from '@react-types/shared';\nimport {ListCollection} from './ListCollection';\nimport {MultipleSelectionStateProps, SelectionManager, useMultipleSelectionState} from '@react-stately/selection';\nimport {useCallback, useEffect, useMemo, useRef} from 'react';\nimport {useCollection} from '@react-stately/collections';\n\nexport interface ListProps<T> extends CollectionStateBase<T>, MultipleSelectionStateProps {\n /** Filter function to generate a filtered list of nodes. */\n filter?: (nodes: Iterable<Node<T>>) => Iterable<Node<T>>,\n /** @private */\n suppressTextValueWarning?: boolean\n}\n\nexport interface ListState<T> {\n /** A collection of items in the list. */\n collection: Collection<Node<T>>,\n\n /** A set of items that are disabled. */\n disabledKeys: Set<Key>,\n\n /** A selection manager to read and update multiple selection state. */\n selectionManager: SelectionManager\n}\n\n/**\n * Provides state management for list-like components. Handles building a collection\n * of items from props, and manages multiple selection state.\n */\nexport function useListState<T extends object>(props: ListProps<T>): ListState<T> {\n let {filter} = props;\n\n let selectionState = useMultipleSelectionState(props);\n let disabledKeys = useMemo(() =>\n props.disabledKeys ? new Set(props.disabledKeys) : new Set<Key>()\n , [props.disabledKeys]);\n\n let factory = useCallback(nodes => filter ? new ListCollection(filter(nodes)) : new ListCollection(nodes as Iterable<Node<T>>), [filter]);\n let context = useMemo(() => ({suppressTextValueWarning: props.suppressTextValueWarning}), [props.suppressTextValueWarning]);\n\n let collection = useCollection(props, factory, context);\n\n let selectionManager = useMemo(() =>\n new SelectionManager(collection, selectionState)\n , [collection, selectionState]\n );\n\n // Reset focused key if that item is deleted from the collection.\n const cachedCollection = useRef(null);\n useEffect(() => {\n if (selectionState.focusedKey != null && !collection.getItem(selectionState.focusedKey)) {\n const startItem = cachedCollection.current.getItem(selectionState.focusedKey);\n const cachedItemNodes = [...cachedCollection.current.getKeys()].map(\n key => {\n const itemNode = cachedCollection.current.getItem(key);\n return itemNode.type === 'item' ? itemNode : null;\n }\n ).filter(node => node !== null);\n const itemNodes = [...collection.getKeys()].map(\n key => {\n const itemNode = collection.getItem(key);\n return itemNode.type === 'item' ? itemNode : null;\n }\n ).filter(node => node !== null);\n const diff = cachedItemNodes.length - itemNodes.length;\n let index = Math.min(\n (\n diff > 1 ?\n Math.max(startItem.index - diff + 1, 0) :\n startItem.index\n ),\n itemNodes.length - 1);\n let newNode:Node<T>;\n while (index >= 0) {\n if (!selectionManager.isDisabled(itemNodes[index].key)) {\n newNode = itemNodes[index];\n break;\n }\n // Find next, not disabled item.\n if (index < itemNodes.length - 1) {\n index++;\n // Otherwise, find previous, not disabled item.\n } else {\n if (index > startItem.index) {\n index = startItem.index;\n }\n index--;\n }\n }\n selectionState.setFocusedKey(newNode ? newNode.key : null);\n }\n cachedCollection.current = collection;\n }, [collection, selectionManager, selectionState, selectionState.focusedKey]);\n\n return {\n collection,\n disabledKeys,\n selectionManager\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CollectionStateBase, Key, Node, SingleSelection} from '@react-types/shared';\nimport {ListState, useListState} from './useListState';\nimport {useControlledState} from '@react-stately/utils';\nimport {useMemo} from 'react';\n\nexport interface SingleSelectListProps<T> extends CollectionStateBase<T>, Omit<SingleSelection, 'disallowEmptySelection'> {\n /** Filter function to generate a filtered list of nodes. */\n filter?: (nodes: Iterable<Node<T>>) => Iterable<Node<T>>,\n /** @private */\n suppressTextValueWarning?: boolean\n}\n\nexport interface SingleSelectListState<T> extends ListState<T> {\n /** The key for the currently selected item. */\n readonly selectedKey: Key,\n\n /** Sets the selected key. */\n setSelectedKey(key: Key | null): void,\n\n /** The value of the currently selected item. */\n readonly selectedItem: Node<T>\n}\n\n/**\n * Provides state management for list-like components with single selection.\n * Handles building a collection of items from props, and manages selection state.\n */\nexport function useSingleSelectListState<T extends object>(props: SingleSelectListProps<T>): SingleSelectListState<T> {\n let [selectedKey, setSelectedKey] = useControlledState(props.selectedKey, props.defaultSelectedKey ?? null, props.onSelectionChange);\n let selectedKeys = useMemo(() => selectedKey != null ? [selectedKey] : [], [selectedKey]);\n let {collection, disabledKeys, selectionManager} = useListState({\n ...props,\n selectionMode: 'single',\n disallowEmptySelection: true,\n allowDuplicateSelectionEvents: true,\n selectedKeys,\n onSelectionChange: (keys: Set<Key>) => {\n let key = keys.values().next().value ?? null;\n\n // Always fire onSelectionChange, even if the key is the same\n // as the current key (useControlledState does not).\n if (key === selectedKey && props.onSelectionChange) {\n props.onSelectionChange(key);\n }\n\n setSelectedKey(key);\n }\n });\n\n let selectedItem = selectedKey != null\n ? collection.getItem(selectedKey)\n : null;\n\n return {\n collection,\n disabledKeys,\n selectionManager,\n selectedKey,\n setSelectedKey,\n selectedItem\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {OverlayTriggerProps} from '@react-types/overlays';\nimport {useCallback} from 'react';\nimport {useControlledState} from '@react-stately/utils';\n\nexport interface OverlayTriggerState {\n /** Whether the overlay is currently open. */\n readonly isOpen: boolean,\n /** Sets whether the overlay is open. */\n setOpen(isOpen: boolean): void,\n /** Opens the overlay. */\n open(): void,\n /** Closes the overlay. */\n close(): void,\n /** Toggles the overlay's visibility. */\n toggle(): void\n}\n\n/**\n * Manages state for an overlay trigger. Tracks whether the overlay is open, and provides\n * methods to toggle this state.\n */\nexport function useOverlayTriggerState(props: OverlayTriggerProps): OverlayTriggerState {\n let [isOpen, setOpen] = useControlledState(props.isOpen, props.defaultOpen || false, props.onOpenChange);\n\n const open = useCallback(() => {\n setOpen(true);\n }, [setOpen]);\n\n const close = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const toggle = useCallback(() => {\n setOpen(!isOpen);\n }, [setOpen, isOpen]);\n\n return {\n isOpen,\n setOpen,\n open,\n close,\n toggle\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FocusStrategy, Key} from '@react-types/shared';\nimport {MenuTriggerProps} from '@react-types/menu';\nimport {OverlayTriggerState, useOverlayTriggerState} from '@react-stately/overlays';\nimport {useState} from 'react';\n\nexport interface MenuTriggerState extends OverlayTriggerState {\n /** Controls which item will be auto focused when the menu opens. */\n readonly focusStrategy: FocusStrategy,\n\n /** Opens the menu. */\n open(focusStrategy?: FocusStrategy | null): void,\n\n /** Toggles the menu. */\n toggle(focusStrategy?: FocusStrategy | null): void\n}\n\nexport interface RootMenuTriggerState extends MenuTriggerState {\n /** Opens a specific submenu tied to a specific menu item at a specific level. */\n UNSTABLE_openSubmenu: (triggerKey: Key, level: number) => void,\n\n /** Closes a specific submenu tied to a specific menu item at a specific level. */\n UNSTABLE_closeSubmenu: (triggerKey: Key, level: number) => void,\n\n /** An array of open submenu trigger keys within the menu tree.\n * The index of key within array matches the submenu level in the tree.\n */\n UNSTABLE_expandedKeysStack: Key[],\n\n /** Closes the menu and all submenus in the menu tree. */\n close: () => void\n}\n\n/**\n * Manages state for a menu trigger. Tracks whether the menu is currently open,\n * and controls which item will receive focus when it opens. Also tracks the open submenus within\n * the menu tree via their trigger keys.\n */\nexport function useMenuTriggerState(props: MenuTriggerProps): RootMenuTriggerState {\n let overlayTriggerState = useOverlayTriggerState(props);\n let [focusStrategy, setFocusStrategy] = useState<FocusStrategy>(null);\n let [expandedKeysStack, setExpandedKeysStack] = useState<Key[]>([]);\n\n let closeAll = () => {\n setExpandedKeysStack([]);\n overlayTriggerState.close();\n };\n\n let openSubmenu = (triggerKey: Key, level: number) => {\n setExpandedKeysStack(oldStack => {\n if (level > oldStack.length) {\n return oldStack;\n }\n\n return [...oldStack.slice(0, level), triggerKey];\n });\n };\n\n let closeSubmenu = (triggerKey: Key, level: number) => {\n setExpandedKeysStack(oldStack => {\n let key = oldStack[level];\n if (key === triggerKey) {\n return oldStack.slice(0, level);\n } else {\n return oldStack;\n }\n });\n };\n\n return {\n focusStrategy,\n ...overlayTriggerState,\n open(focusStrategy: FocusStrategy = null) {\n setFocusStrategy(focusStrategy);\n overlayTriggerState.open();\n },\n toggle(focusStrategy: FocusStrategy = null) {\n setFocusStrategy(focusStrategy);\n overlayTriggerState.toggle();\n },\n close() {\n closeAll();\n },\n UNSTABLE_expandedKeysStack: expandedKeysStack,\n UNSTABLE_openSubmenu: openSubmenu,\n UNSTABLE_closeSubmenu: closeSubmenu\n };\n}\n","/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {createContext, useContext, useEffect, useMemo, useRef, useState} from 'react';\nimport {Validation, ValidationErrors, ValidationFunction, ValidationResult} from '@react-types/shared';\n\nexport const VALID_VALIDITY_STATE: ValidityState = {\n badInput: false,\n customError: false,\n patternMismatch: false,\n rangeOverflow: false,\n rangeUnderflow: false,\n stepMismatch: false,\n tooLong: false,\n tooShort: false,\n typeMismatch: false,\n valueMissing: false,\n valid: true\n};\n\nconst CUSTOM_VALIDITY_STATE: ValidityState = {\n ...VALID_VALIDITY_STATE,\n customError: true,\n valid: false\n};\n\nexport const DEFAULT_VALIDATION_RESULT: ValidationResult = {\n isInvalid: false,\n validationDetails: VALID_VALIDITY_STATE,\n validationErrors: []\n};\n\nexport const FormValidationContext = createContext<ValidationErrors>({});\n\nexport const privateValidationStateProp = '__formValidationState' + Date.now();\n\ninterface FormValidationProps<T> extends Validation<T> {\n builtinValidation?: ValidationResult,\n name?: string | string[],\n value: T\n}\n\nexport interface FormValidationState {\n /** Realtime validation results, updated as the user edits the value. */\n realtimeValidation: ValidationResult,\n /** Currently displayed validation results, updated when the user commits their changes. */\n displayValidation: ValidationResult,\n /** Updates the current validation result. Not displayed to the user until `commitValidation` is called. */\n updateValidation(result: ValidationResult): void,\n /** Resets the displayed validation state to valid when the user resets the form. */\n resetValidation(): void,\n /** Commits the realtime validation so it is displayed to the user. */\n commitValidation(): void\n}\n\nexport function useFormValidationState<T>(props: FormValidationProps<T>): FormValidationState {\n // Private prop for parent components to pass state to children.\n if (props[privateValidationStateProp]) {\n let {realtimeValidation, displayValidation, updateValidation, resetValidation, commitValidation} = props[privateValidationStateProp] as FormValidationState;\n return {realtimeValidation, displayValidation, updateValidation, resetValidation, commitValidation};\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useFormValidationStateImpl(props);\n}\n\nfunction useFormValidationStateImpl<T>(props: FormValidationProps<T>): FormValidationState {\n let {isInvalid, validationState, name, value, builtinValidation, validate, validationBehavior = 'aria'} = props;\n\n // backward compatibility.\n if (validationState) {\n isInvalid ||= validationState === 'invalid';\n }\n\n // If the isInvalid prop is true, update validation result in realtime (controlled).\n let controlledError: ValidationResult | null = isInvalid ? {\n isInvalid: true,\n validationErrors: [],\n validationDetails: CUSTOM_VALIDITY_STATE\n } : null;\n\n // Perform custom client side validation.\n let clientError: ValidationResult | null = useMemo(() => getValidationResult(runValidate(validate, value)), [validate, value]);\n\n if (builtinValidation?.validationDetails.valid) {\n builtinValidation = null;\n }\n\n // Get relevant server errors from the form.\n let serverErrors = useContext(FormValidationContext);\n let serverErrorMessages = useMemo(() => {\n if (name) {\n return Array.isArray(name) ? name.flatMap(name => asArray(serverErrors[name])) : asArray(serverErrors[name]);\n }\n return [];\n }, [serverErrors, name]);\n\n // Show server errors when the form gets a new value, and clear when the user changes the value.\n let [lastServerErrors, setLastServerErrors] = useState(serverErrors);\n let [isServerErrorCleared, setServerErrorCleared] = useState(false);\n if (serverErrors !== lastServerErrors) {\n setLastServerErrors(serverErrors);\n setServerErrorCleared(false);\n }\n\n let serverError: ValidationResult | null = useMemo(() =>\n getValidationResult(isServerErrorCleared ? [] : serverErrorMessages),\n [isServerErrorCleared, serverErrorMessages]\n );\n\n // Track the next validation state in a ref until commitValidation is called.\n let nextValidation = useRef(DEFAULT_VALIDATION_RESULT);\n let [currentValidity, setCurrentValidity] = useState(DEFAULT_VALIDATION_RESULT);\n\n let lastError = useRef(DEFAULT_VALIDATION_RESULT);\n let commitValidation = () => {\n if (!commitQueued) {\n return;\n }\n\n setCommitQueued(false);\n let error = clientError || builtinValidation || nextValidation.current;\n if (!isEqualValidation(error, lastError.current)) {\n lastError.current = error;\n setCurrentValidity(error);\n }\n };\n\n let [commitQueued, setCommitQueued] = useState(false);\n useEffect(commitValidation);\n\n // realtimeValidation is used to update the native input element's state based on custom validation logic.\n // displayValidation is the currently displayed validation state that the user sees (e.g. on input change/form submit).\n // With validationBehavior=\"aria\", all errors are displayed in realtime rather than on submit.\n let realtimeValidation = controlledError || serverError || clientError || builtinValidation || DEFAULT_VALIDATION_RESULT;\n let displayValidation = validationBehavior === 'native'\n ? controlledError || serverError || currentValidity\n : controlledError || serverError || clientError || builtinValidation || currentValidity;\n\n return {\n realtimeValidation,\n displayValidation,\n updateValidation(value) {\n // If validationBehavior is 'aria', update in realtime. Otherwise, store in a ref until commit.\n if (validationBehavior === 'aria' && !isEqualValidation(currentValidity, value)) {\n setCurrentValidity(value);\n } else {\n nextValidation.current = value;\n }\n },\n resetValidation() {\n // Update the currently displayed validation state to valid on form reset,\n // even if the native validity says it isn't. It'll show again on the next form submit.\n let error = DEFAULT_VALIDATION_RESULT;\n if (!isEqualValidation(error, lastError.current)) {\n lastError.current = error;\n setCurrentValidity(error);\n }\n\n // Do not commit validation after the next render. This avoids a condition where\n // useSelect calls commitValidation inside an onReset handler.\n if (validationBehavior === 'native') {\n setCommitQueued(false);\n }\n\n setServerErrorCleared(true);\n },\n commitValidation() {\n // Commit validation state so the user sees it on blur/change/submit. Also clear any server errors.\n // Wait until after the next render to commit so that the latest value has been validated.\n if (validationBehavior === 'native') {\n setCommitQueued(true);\n }\n setServerErrorCleared(true);\n }\n };\n}\n\nfunction asArray<T>(v: T | T[]): T[] {\n if (!v) {\n return [];\n }\n\n return Array.isArray(v) ? v : [v];\n}\n\nfunction runValidate<T>(validate: ValidationFunction<T>, value: T): string[] {\n if (typeof validate === 'function') {\n let e = validate(value);\n if (e && typeof e !== 'boolean') {\n return asArray(e);\n }\n }\n\n return [];\n}\n\nfunction getValidationResult(errors: string[]): ValidationResult | null {\n return errors.length ? {\n isInvalid: true,\n validationErrors: errors,\n validationDetails: CUSTOM_VALIDITY_STATE\n } : null;\n}\n\nfunction isEqualValidation(a: ValidationResult | null, b: ValidationResult | null): boolean {\n if (a === b) {\n return true;\n }\n\n return a && b\n && a.isInvalid === b.isInvalid\n && a.validationErrors.length === b.validationErrors.length\n && a.validationErrors.every((a, i) => a === b.validationErrors[i])\n && Object.entries(a.validationDetails).every(([k, v]) => b.validationDetails[k] === v);\n}\n\nexport function mergeValidation(...results: ValidationResult[]): ValidationResult {\n let errors = new Set<string>();\n let isInvalid = false;\n let validationDetails = {\n ...VALID_VALIDITY_STATE\n };\n\n for (let v of results) {\n for (let e of v.validationErrors) {\n errors.add(e);\n }\n\n // Only these properties apply for checkboxes.\n isInvalid ||= v.isInvalid;\n for (let key in validationDetails) {\n validationDetails[key] ||= v.validationDetails[key];\n }\n }\n\n validationDetails.valid = !isInvalid;\n return {\n isInvalid,\n validationErrors: [...errors],\n validationDetails\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CollectionStateBase, FocusStrategy} from '@react-types/shared';\nimport {FormValidationState, useFormValidationState} from '@react-stately/form';\nimport {OverlayTriggerState, useOverlayTriggerState} from '@react-stately/overlays';\nimport {SelectProps} from '@react-types/select';\nimport {SingleSelectListState, useSingleSelectListState} from '@react-stately/list';\nimport {useState} from 'react';\n\nexport interface SelectStateOptions<T> extends Omit<SelectProps<T>, 'children'>, CollectionStateBase<T> {}\n\nexport interface SelectState<T> extends SingleSelectListState<T>, OverlayTriggerState, FormValidationState {\n /** Whether the select is currently focused. */\n readonly isFocused: boolean,\n\n /** Sets whether the select is focused. */\n setFocused(isFocused: boolean): void,\n\n /** Controls which item will be auto focused when the menu opens. */\n readonly focusStrategy: FocusStrategy,\n\n /** Opens the menu. */\n open(focusStrategy?: FocusStrategy | null): void,\n\n /** Toggles the menu. */\n toggle(focusStrategy?: FocusStrategy | null): void\n}\n\n/**\n * Provides state management for a select component. Handles building a collection\n * of items from props, handles the open state for the popup menu, and manages\n * multiple selection state.\n */\nexport function useSelectState<T extends object>(props: SelectStateOptions<T>): SelectState<T> {\n let triggerState = useOverlayTriggerState(props);\n let [focusStrategy, setFocusStrategy] = useState<FocusStrategy>(null);\n let listState = useSingleSelectListState({\n ...props,\n onSelectionChange: (key) => {\n if (props.onSelectionChange != null) {\n props.onSelectionChange(key);\n }\n\n triggerState.close();\n validationState.commitValidation();\n }\n });\n\n let validationState = useFormValidationState({\n ...props,\n value: listState.selectedKey\n });\n\n let [isFocused, setFocused] = useState(false);\n\n return {\n ...validationState,\n ...listState,\n ...triggerState,\n focusStrategy,\n open(focusStrategy: FocusStrategy = null) {\n // Don't open if the collection is empty.\n if (listState.collection.size !== 0) {\n setFocusStrategy(focusStrategy);\n triggerState.open();\n }\n },\n toggle(focusStrategy: FocusStrategy = null) {\n if (listState.collection.size !== 0) {\n setFocusStrategy(focusStrategy);\n triggerState.toggle();\n }\n },\n isFocused,\n setFocused\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {GridNode, GridRow, GridCollection as IGridCollection} from '@react-types/grid';\nimport {Key} from '@react-types/shared';\n\ninterface GridCollectionOptions<T> {\n columnCount: number,\n items: GridRow<T>[],\n visitNode?: (cell: GridNode<T>) => GridNode<T>\n}\n\nexport class GridCollection<T> implements IGridCollection<T> {\n keyMap: Map<Key, GridNode<T>> = new Map();\n columnCount: number;\n rows: GridNode<T>[];\n\n constructor(opts?: GridCollectionOptions<T>) {\n this.keyMap = new Map();\n this.columnCount = opts?.columnCount;\n this.rows = [];\n\n let visit = (node: GridNode<T>) => {\n // If the node is the same object as the previous node for the same key,\n // we can skip this node and its children. We always visit columns though,\n // because we depend on order to build the columns array.\n let prevNode = this.keyMap.get(node.key);\n if (opts.visitNode) {\n node = opts.visitNode(node);\n }\n\n this.keyMap.set(node.key, node);\n\n let childKeys = new Set();\n let last: GridNode<T>;\n for (let child of node.childNodes) {\n if (child.type === 'cell' && child.parentKey == null) {\n // if child is a cell parent key isn't already established by the collection, match child node to parent row\n child.parentKey = node.key;\n }\n childKeys.add(child.key);\n\n if (last) {\n last.nextKey = child.key;\n child.prevKey = last.key;\n } else {\n child.prevKey = null;\n }\n\n visit(child);\n last = child;\n }\n\n if (last) {\n last.nextKey = null;\n }\n\n // Remove deleted nodes and their children from the key map\n if (prevNode) {\n for (let child of prevNode.childNodes) {\n if (!childKeys.has(child.key)) {\n remove(child);\n }\n }\n }\n };\n\n let remove = (node: GridNode<T>) => {\n this.keyMap.delete(node.key);\n for (let child of node.childNodes) {\n if (this.keyMap.get(child.key) === child) {\n remove(child);\n }\n }\n };\n\n let last: GridNode<T>;\n opts.items.forEach((node, i) => {\n let rowNode = {\n level: 0,\n key: 'row-' + i,\n type: 'row',\n value: undefined,\n hasChildNodes: true,\n childNodes: [...node.childNodes],\n rendered: undefined,\n textValue: undefined,\n ...node\n } as GridNode<T>;\n\n if (last) {\n last.nextKey = rowNode.key;\n rowNode.prevKey = last.key;\n } else {\n rowNode.prevKey = null;\n }\n\n this.rows.push(rowNode);\n visit(rowNode);\n\n last = rowNode;\n });\n\n if (last) {\n last.nextKey = null;\n }\n }\n\n *[Symbol.iterator]() {\n yield* [...this.rows];\n }\n\n get size() {\n return [...this.rows].length;\n }\n\n getKeys() {\n return this.keyMap.keys();\n }\n\n getKeyBefore(key: Key) {\n let node = this.keyMap.get(key);\n return node ? node.prevKey : null;\n }\n\n getKeyAfter(key: Key) {\n let node = this.keyMap.get(key);\n return node ? node.nextKey : null;\n }\n\n getFirstKey() {\n return [...this.rows][0]?.key;\n }\n\n getLastKey() {\n let rows = [...this.rows];\n return rows[rows.length - 1]?.key;\n }\n\n getItem(key: Key) {\n return this.keyMap.get(key);\n }\n\n at(idx: number) {\n const keys = [...this.getKeys()];\n return this.getItem(keys[idx]);\n }\n\n getChildren(key: Key): Iterable<GridNode<T>> {\n let node = this.keyMap.get(key);\n return node?.childNodes || [];\n }\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {getFirstItem, getLastItem} from '@react-stately/collections';\nimport {GridCollection} from '@react-stately/grid';\nimport {GridNode} from '@react-types/grid';\nimport {TableCollection as ITableCollection} from '@react-types/table';\nimport {Key} from '@react-types/shared';\n\ninterface GridCollectionOptions {\n showSelectionCheckboxes?: boolean,\n showDragButtons?: boolean\n}\n\nconst ROW_HEADER_COLUMN_KEY = 'row-header-column-' + Math.random().toString(36).slice(2);\nlet ROW_HEADER_COLUMN_KEY_DRAG = 'row-header-column-' + Math.random().toString(36).slice(2);\nwhile (ROW_HEADER_COLUMN_KEY === ROW_HEADER_COLUMN_KEY_DRAG) {\n ROW_HEADER_COLUMN_KEY_DRAG = 'row-header-column-' + Math.random().toString(36).slice(2);\n}\n\n/** @private */\nexport function buildHeaderRows<T>(keyMap: Map<Key, GridNode<T>>, columnNodes: GridNode<T>[]): GridNode<T>[] {\n if (columnNodes.length === 0) {\n return [];\n }\n\n let columns: GridNode<T>[][] = [];\n let seen = new Map();\n for (let column of columnNodes) {\n let parentKey = column.parentKey;\n let col = [column];\n\n while (parentKey) {\n let parent: GridNode<T> = keyMap.get(parentKey);\n if (!parent) {\n break;\n }\n\n // If we've already seen this parent, than it is shared\n // with a previous column. If the current column is taller\n // than the previous column, than we need to shift the parent\n // in the previous column so it's level with the current column.\n if (seen.has(parent)) {\n parent.colspan++;\n\n let {column, index} = seen.get(parent);\n if (index > col.length) {\n break;\n }\n\n for (let i = index; i < col.length; i++) {\n column.splice(i, 0, null);\n }\n\n // Adjust shifted indices\n for (let i = col.length; i < column.length; i++) {\n // eslint-disable-next-line max-depth\n if (column[i] && seen.has(column[i])) {\n seen.get(column[i]).index = i;\n }\n }\n } else {\n parent.colspan = 1;\n col.push(parent);\n seen.set(parent, {column: col, index: col.length - 1});\n }\n\n parentKey = parent.parentKey;\n }\n\n columns.push(col);\n column.index = columns.length - 1;\n }\n\n let maxLength = Math.max(...columns.map(c => c.length));\n let headerRows = Array(maxLength).fill(0).map(() => []);\n\n // Convert columns into rows.\n let colIndex = 0;\n for (let column of columns) {\n let i = maxLength - 1;\n for (let item of column) {\n if (item) {\n // Fill the space up until the current column with a placeholder\n let row = headerRows[i];\n let rowLength = row.reduce((p, c) => p + c.colspan, 0);\n if (rowLength < colIndex) {\n let placeholder: GridNode<T> = {\n type: 'placeholder',\n key: 'placeholder-' + item.key,\n colspan: colIndex - rowLength,\n index: rowLength,\n value: null,\n rendered: null,\n level: i,\n hasChildNodes: false,\n childNodes: [],\n textValue: null\n };\n\n // eslint-disable-next-line max-depth\n if (row.length > 0) {\n row[row.length - 1].nextKey = placeholder.key;\n placeholder.prevKey = row[row.length - 1].key;\n }\n\n row.push(placeholder);\n }\n\n if (row.length > 0) {\n row[row.length - 1].nextKey = item.key;\n item.prevKey = row[row.length - 1].key;\n }\n\n item.level = i;\n item.colIndex = colIndex;\n row.push(item);\n }\n\n i--;\n }\n\n colIndex++;\n }\n\n // Add placeholders at the end of each row that is shorter than the maximum\n let i = 0;\n for (let row of headerRows) {\n let rowLength = row.reduce((p, c) => p + c.colspan, 0);\n if (rowLength < columnNodes.length) {\n let placeholder: GridNode<T> = {\n type: 'placeholder',\n key: 'placeholder-' + row[row.length - 1].key,\n colspan: columnNodes.length - rowLength,\n index: rowLength,\n value: null,\n rendered: null,\n level: i,\n hasChildNodes: false,\n childNodes: [],\n textValue: null,\n prevKey: row[row.length - 1].key\n };\n\n row.push(placeholder);\n }\n\n i++;\n }\n\n return headerRows.map((childNodes, index) => {\n let row: GridNode<T> = {\n type: 'headerrow',\n key: 'headerrow-' + index,\n index,\n value: null,\n rendered: null,\n level: 0,\n hasChildNodes: true,\n childNodes,\n textValue: null\n };\n\n return row;\n });\n}\n\nexport class TableCollection<T> extends GridCollection<T> implements ITableCollection<T> {\n headerRows: GridNode<T>[];\n columns: GridNode<T>[];\n rowHeaderColumnKeys: Set<Key>;\n body: GridNode<T>;\n _size: number = 0;\n\n constructor(nodes: Iterable<GridNode<T>>, prev?: ITableCollection<T>, opts?: GridCollectionOptions) {\n let rowHeaderColumnKeys: Set<Key> = new Set();\n let body: GridNode<T>;\n let columns: GridNode<T>[] = [];\n // Add cell for selection checkboxes if needed.\n if (opts?.showSelectionCheckboxes) {\n let rowHeaderColumn: GridNode<T> = {\n type: 'column',\n key: ROW_HEADER_COLUMN_KEY,\n value: null,\n textValue: '',\n level: 0,\n index: opts?.showDragButtons ? 1 : 0,\n hasChildNodes: false,\n rendered: null,\n childNodes: [],\n props: {\n isSelectionCell: true\n }\n };\n\n columns.unshift(rowHeaderColumn);\n }\n\n // Add cell for drag buttons if needed.\n if (opts?.showDragButtons) {\n let rowHeaderColumn: GridNode<T> = {\n type: 'column',\n key: ROW_HEADER_COLUMN_KEY_DRAG,\n value: null,\n textValue: '',\n level: 0,\n index: 0,\n hasChildNodes: false,\n rendered: null,\n childNodes: [],\n props: {\n isDragButtonCell: true\n }\n };\n\n columns.unshift(rowHeaderColumn);\n }\n\n let rows = [];\n let columnKeyMap = new Map();\n let visit = (node: GridNode<T>) => {\n switch (node.type) {\n case 'body':\n body = node;\n break;\n case 'column':\n columnKeyMap.set(node.key, node);\n if (!node.hasChildNodes) {\n columns.push(node);\n\n if (node.props.isRowHeader) {\n rowHeaderColumnKeys.add(node.key);\n }\n }\n break;\n case 'item':\n rows.push(node);\n return; // do not go into childNodes\n }\n for (let child of node.childNodes) {\n visit(child);\n }\n };\n\n for (let node of nodes) {\n visit(node);\n }\n\n let headerRows = buildHeaderRows(columnKeyMap, columns) as GridNode<T>[];\n headerRows.forEach((row, i) => rows.splice(i, 0, row));\n\n super({\n columnCount: columns.length,\n items: rows,\n visitNode: node => {\n node.column = columns[node.index];\n return node;\n }\n });\n this.columns = columns;\n this.rowHeaderColumnKeys = rowHeaderColumnKeys;\n this.body = body;\n this.headerRows = headerRows;\n this._size = [...body.childNodes].length;\n\n // Default row header column to the first one.\n if (this.rowHeaderColumnKeys.size === 0) {\n this.rowHeaderColumnKeys.add(this.columns.find(column => !column.props?.isDragButtonCell && !column.props?.isSelectionCell).key);\n }\n }\n\n *[Symbol.iterator]() {\n yield* this.body.childNodes;\n }\n\n get size() {\n return this._size;\n }\n\n getKeys() {\n return this.keyMap.keys();\n }\n\n getKeyBefore(key: Key) {\n let node = this.keyMap.get(key);\n return node ? node.prevKey : null;\n }\n\n getKeyAfter(key: Key) {\n let node = this.keyMap.get(key);\n return node ? node.nextKey : null;\n }\n\n getFirstKey() {\n return getFirstItem(this.body.childNodes)?.key;\n }\n\n getLastKey() {\n return getLastItem(this.body.childNodes)?.key;\n }\n\n getItem(key: Key) {\n return this.keyMap.get(key);\n }\n\n at(idx: number) {\n const keys = [...this.getKeys()];\n return this.getItem(keys[idx]);\n }\n\n getTextValue(key: Key): string {\n let row = this.getItem(key);\n if (!row) {\n return '';\n }\n\n // If the row has a textValue, use that.\n if (row.textValue) {\n return row.textValue;\n }\n\n // Otherwise combine the text of each of the row header columns.\n let rowHeaderColumnKeys = this.rowHeaderColumnKeys;\n if (rowHeaderColumnKeys) {\n let text = [];\n for (let cell of row.childNodes) {\n let column = this.columns[cell.index];\n if (rowHeaderColumnKeys.has(column.key) && cell.textValue) {\n text.push(cell.textValue);\n }\n\n if (text.length === rowHeaderColumnKeys.size) {\n break;\n }\n }\n\n return text.join(' ');\n }\n\n return '';\n }\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CollectionBuilderContext} from './useTableState';\nimport {PartialNode} from '@react-stately/collections';\nimport React, {JSX, ReactElement} from 'react';\nimport {TableHeaderProps} from '@react-types/table';\n\nfunction TableHeader<T>(props: TableHeaderProps<T>): ReactElement { // eslint-disable-line @typescript-eslint/no-unused-vars\n return null;\n}\n\nTableHeader.getCollectionNode = function* getCollectionNode<T>(props: TableHeaderProps<T>, context: CollectionBuilderContext<T>): Generator<PartialNode<T>, void, any> {\n let {children, columns} = props;\n\n // Clear columns so they aren't double added in strict mode.\n context.columns = [];\n\n if (typeof children === 'function') {\n if (!columns) {\n throw new Error('props.children was a function but props.columns is missing');\n }\n\n for (let column of columns) {\n yield {\n type: 'column',\n value: column,\n renderer: children\n };\n }\n } else {\n let columns: PartialNode<T>[] = [];\n React.Children.forEach(children, column => {\n columns.push({\n type: 'column',\n element: column\n });\n });\n\n yield* columns;\n }\n};\n\n/**\n * A TableHeader is a container for the Column elements in a Table. Columns can be statically defined\n * as children, or generated dynamically using a function based on the data passed to the `columns` prop.\n */\n// We don't want getCollectionNode to show up in the type definition\nlet _TableHeader = TableHeader as <T>(props: TableHeaderProps<T>) => JSX.Element;\nexport {_TableHeader as TableHeader};\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {PartialNode} from '@react-stately/collections';\nimport React, {JSX, ReactElement} from 'react';\nimport {TableBodyProps} from '@react-types/table';\n\nfunction TableBody<T>(props: TableBodyProps<T>): ReactElement { // eslint-disable-line @typescript-eslint/no-unused-vars\n return null;\n}\n\nTableBody.getCollectionNode = function* getCollectionNode<T>(props: TableBodyProps<T>): Generator<PartialNode<T>> {\n let {children, items} = props;\n yield {\n type: 'body',\n hasChildNodes: true,\n props,\n *childNodes() {\n if (typeof children === 'function') {\n if (!items) {\n throw new Error('props.children was a function but props.items is missing');\n }\n\n for (let item of items) {\n yield {\n type: 'item',\n value: item,\n renderer: children\n };\n }\n } else {\n let items: PartialNode<T>[] = [];\n React.Children.forEach(children, item => {\n items.push({\n type: 'item',\n element: item\n });\n });\n\n yield* items;\n }\n }\n };\n};\n\n/**\n * A TableBody is a container for the Row elements of a Table. Rows can be statically defined\n * as children, or generated dynamically using a function based on the data passed to the `items` prop.\n */\n// We don't want getCollectionNode to show up in the type definition\nlet _TableBody = TableBody as <T>(props: TableBodyProps<T>) => JSX.Element;\nexport {_TableBody as TableBody};\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CollectionBuilderContext} from './useTableState';\nimport {ColumnProps} from '@react-types/table';\nimport {GridNode} from '@react-types/grid';\nimport {PartialNode} from '@react-stately/collections';\nimport React, {JSX, ReactElement} from 'react';\n\nfunction Column<T>(props: ColumnProps<T>): ReactElement { // eslint-disable-line @typescript-eslint/no-unused-vars\n return null;\n}\n\nColumn.getCollectionNode = function* getCollectionNode<T>(props: ColumnProps<T>, context: CollectionBuilderContext<T>): Generator<PartialNode<T>, void, GridNode<T>[]> {\n let {title, children, childColumns} = props;\n\n let rendered = title || children;\n let textValue = props.textValue || (typeof rendered === 'string' ? rendered : '') || props['aria-label'];\n\n let fullNodes = yield {\n type: 'column',\n hasChildNodes: !!childColumns || (title && React.Children.count(children) > 0),\n rendered,\n textValue,\n props,\n *childNodes() {\n if (childColumns) {\n for (let child of childColumns) {\n yield {\n type: 'column',\n value: child\n };\n }\n } else if (title) {\n let childColumns: PartialNode<T>[] = [];\n React.Children.forEach(children, child => {\n childColumns.push({\n type: 'column',\n element: child as ReactElement<ColumnProps<T>>\n });\n });\n\n yield* childColumns;\n }\n },\n shouldInvalidate(newContext: CollectionBuilderContext<T>) {\n // This is a bit of a hack, but it works.\n // If this method is called, then there's a cached version of this node available.\n // But, we need to keep the list of columns in the new context up to date.\n updateContext(newContext);\n return false;\n }\n };\n\n let updateContext = (context: CollectionBuilderContext<T>) => {\n // register leaf columns on the context so that <Row> can access them\n for (let node of fullNodes) {\n if (!node.hasChildNodes) {\n context.columns.push(node);\n }\n }\n };\n\n updateContext(context);\n};\n\n/**\n * A Column represents a field of each item within a Table. Columns may also contain nested\n * Column elements to represent column groups. Nested columns can be statically defined as\n * children, or dynamically generated using a function based on the `childColumns` prop.\n */\n// We don't want getCollectionNode to show up in the type definition\nlet _Column = Column as <T>(props: ColumnProps<T>) => JSX.Element;\nexport {_Column as Column};\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CollectionBuilderContext} from './useTableState';\nimport {PartialNode} from '@react-stately/collections';\nimport React, {JSX, ReactElement} from 'react';\nimport {RowProps} from '@react-types/table';\n\nfunction Row<T>(props: RowProps<T>): ReactElement { // eslint-disable-line @typescript-eslint/no-unused-vars\n return null;\n}\n\nRow.getCollectionNode = function* getCollectionNode<T>(props: RowProps<T>, context: CollectionBuilderContext<T>): Generator<PartialNode<T>> {\n let {children, textValue, UNSTABLE_childItems} = props;\n\n yield {\n type: 'item',\n props: props,\n textValue,\n 'aria-label': props['aria-label'],\n hasChildNodes: true,\n *childNodes() {\n // Process cells first\n if (context.showDragButtons) {\n yield {\n type: 'cell',\n key: 'header-drag', // this is combined with the row key by CollectionBuilder\n props: {\n isDragButtonCell: true\n }\n };\n }\n\n if (context.showSelectionCheckboxes && context.selectionMode !== 'none') {\n yield {\n type: 'cell',\n key: 'header', // this is combined with the row key by CollectionBuilder\n props: {\n isSelectionCell: true\n }\n };\n }\n\n if (typeof children === 'function') {\n for (let column of context.columns) {\n yield {\n type: 'cell',\n element: children(column.key),\n key: column.key // this is combined with the row key by CollectionBuilder\n };\n }\n\n if (UNSTABLE_childItems) {\n for (let child of UNSTABLE_childItems) {\n // Note: in order to reuse the render function of TableBody for our child rows, we just need to yield a type and a value here. CollectionBuilder will then look up\n // the parent renderer and use that to build the full node of this child row, using the value provided here to generate the cells\n yield {\n type: 'item',\n value: child\n };\n }\n }\n } else {\n let cells: PartialNode<T>[] = [];\n let childRows: PartialNode<T>[] = [];\n React.Children.forEach(children, node => {\n if (node.type === Row) {\n if (cells.length < context.columns.length) {\n throw new Error('All of a Row\\'s child Cells must be positioned before any child Rows.');\n }\n\n childRows.push({\n type: 'item',\n element: node\n });\n } else {\n cells.push({\n type: 'cell',\n element: node\n });\n }\n });\n\n if (cells.length !== context.columns.length) {\n throw new Error(`Cell count must match column count. Found ${cells.length} cells and ${context.columns.length} columns.`);\n }\n\n yield* cells;\n yield* childRows;\n }\n },\n shouldInvalidate(newContext: CollectionBuilderContext<T>) {\n // Invalidate all rows if the columns changed.\n return newContext.columns.length !== context.columns.length ||\n newContext.columns.some((c, i) => c.key !== context.columns[i].key) ||\n newContext.showSelectionCheckboxes !== context.showSelectionCheckboxes ||\n newContext.showDragButtons !== context.showDragButtons ||\n newContext.selectionMode !== context.selectionMode;\n }\n };\n};\n\n/**\n * A Row represents a single item in a Table and contains Cell elements for each column.\n * Cells can be statically defined as children, or generated dynamically using a function\n * based on the columns defined in the TableHeader.\n */\n// We don't want getCollectionNode to show up in the type definition\nlet _Row = Row as <T>(props: RowProps<T>) => JSX.Element;\nexport {_Row as Row};\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CellProps} from '@react-types/table';\nimport {JSX, ReactElement} from 'react';\nimport {PartialNode} from '@react-stately/collections';\n\nfunction Cell(props: CellProps): ReactElement { // eslint-disable-line @typescript-eslint/no-unused-vars\n return null;\n}\n\nCell.getCollectionNode = function* getCollectionNode<T>(props: CellProps): Generator<PartialNode<T>> {\n let {children} = props;\n\n let textValue = props.textValue || (typeof children === 'string' ? children : '') || props['aria-label'] || '';\n yield {\n type: 'cell',\n props: props,\n rendered: children,\n textValue,\n 'aria-label': props['aria-label'],\n hasChildNodes: false\n };\n};\n\n/**\n * A Cell represents the value of a single Column within a Table Row.\n */\n// We don't want getCollectionNode to show up in the type definition\nlet _Cell = Cell as (props: CellProps) => JSX.Element;\nexport {_Cell as Cell};\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nimport {CollectionBase, Key} from '@react-types/shared';\nimport {createPortal} from 'react-dom';\nimport {forwardRefType, StyleProps} from './utils';\nimport {Collection as ICollection, Node, SelectionBehavior, SelectionMode, SectionProps as SharedSectionProps} from 'react-stately';\nimport {mergeProps, useIsSSR} from 'react-aria';\nimport React, {cloneElement, createContext, ForwardedRef, forwardRef, JSX, ReactElement, ReactNode, useCallback, useContext, useMemo, useRef} from 'react';\nimport {useSyncExternalStore as useSyncExternalStoreShim} from 'use-sync-external-store/shim/index.js';\n\n// This Collection implementation is perhaps a little unusual. It works by rendering the React tree into a\n// Portal to a fake DOM implementation. This gives us efficient access to the tree of rendered objects, and\n// supports React features like composition and context. We use this fake DOM to access the full set of elements\n// before we render into the real DOM, which allows us to render a subset of the elements (e.g. virtualized scrolling),\n// and compute properties like the total number of items. It also enables keyboard navigation, selection, and other features.\n// React takes care of efficiently rendering components and updating the collection for us via this fake DOM.\n//\n// The DOM is a mutable API, and React expects the node instances to remain stable over time. So the implementation is split\n// into two parts. Each mutable fake DOM node owns an instance of an immutable collection node. When a fake DOM node is updated,\n// it queues a second render for the collection. Multiple updates to a collection can be queued at once. Collection nodes are\n// lazily copied on write, so only the changed nodes need to be cloned. During the second render, the new immutable collection\n// is finalized by updating the map of Key -> Node with the new cloned nodes. Then the new collection is frozen so it can no\n// longer be mutated, and returned to the calling component to render.\n\ntype Mutable<T> = {\n -readonly[P in keyof T]: T[P]\n}\n\n/** An immutable object representing a Node in a Collection. */\nexport class NodeValue<T> implements Node<T> {\n readonly type: string;\n readonly key: Key;\n readonly value: T | null = null;\n readonly level: number = 0;\n readonly hasChildNodes: boolean = false;\n readonly rendered: ReactNode = null;\n readonly textValue: string = '';\n readonly 'aria-label'?: string = undefined;\n readonly index: number = 0;\n readonly parentKey: Key | null = null;\n readonly prevKey: Key | null = null;\n readonly nextKey: Key | null = null;\n readonly firstChildKey: Key | null = null;\n readonly lastChildKey: Key | null = null;\n readonly props: any = {};\n\n constructor(type: string, key: Key) {\n this.type = type;\n this.key = key;\n }\n\n get childNodes(): Iterable<Node<T>> {\n throw new Error('childNodes is not supported');\n }\n\n clone(): NodeValue<T> {\n let node: Mutable<NodeValue<T>> = new NodeValue(this.type, this.key);\n node.value = this.value;\n node.level = this.level;\n node.hasChildNodes = this.hasChildNodes;\n node.rendered = this.rendered;\n node.textValue = this.textValue;\n node['aria-label'] = this['aria-label'];\n node.index = this.index;\n node.parentKey = this.parentKey;\n node.prevKey = this.prevKey;\n node.nextKey = this.nextKey;\n node.firstChildKey = this.firstChildKey;\n node.lastChildKey = this.lastChildKey;\n node.props = this.props;\n return node;\n }\n}\n\n/**\n * A mutable node in the fake DOM tree. When mutated, it marks itself as dirty\n * and queues an update with the owner document.\n */\nclass BaseNode<T> {\n private _firstChild: ElementNode<T> | null = null;\n private _lastChild: ElementNode<T> | null = null;\n private _previousSibling: ElementNode<T> | null = null;\n private _nextSibling: ElementNode<T> | null = null;\n private _parentNode: BaseNode<T> | null = null;\n ownerDocument: Document<T, any>;\n\n constructor(ownerDocument: Document<T, any>) {\n this.ownerDocument = ownerDocument;\n }\n\n *[Symbol.iterator]() {\n let node = this.firstChild;\n while (node) {\n yield node;\n node = node.nextSibling;\n }\n }\n\n get firstChild() {\n return this._firstChild;\n }\n\n set firstChild(firstChild) {\n this._firstChild = firstChild;\n this.ownerDocument.markDirty(this);\n }\n\n get lastChild() {\n return this._lastChild;\n }\n\n set lastChild(lastChild) {\n this._lastChild = lastChild;\n this.ownerDocument.markDirty(this);\n }\n\n get previousSibling() {\n return this._previousSibling;\n }\n\n set previousSibling(previousSibling) {\n this._previousSibling = previousSibling;\n this.ownerDocument.markDirty(this);\n }\n\n get nextSibling() {\n return this._nextSibling;\n }\n\n set nextSibling(nextSibling) {\n this._nextSibling = nextSibling;\n this.ownerDocument.markDirty(this);\n }\n\n get parentNode() {\n return this._parentNode;\n }\n\n set parentNode(parentNode) {\n this._parentNode = parentNode;\n this.ownerDocument.markDirty(this);\n }\n\n get isConnected() {\n return this.parentNode?.isConnected || false;\n }\n\n appendChild(child: ElementNode<T>) {\n this.ownerDocument.startTransaction();\n if (child.parentNode) {\n child.parentNode.removeChild(child);\n }\n\n if (this.firstChild == null) {\n this.firstChild = child;\n }\n\n if (this.lastChild) {\n this.lastChild.nextSibling = child;\n child.index = this.lastChild.index + 1;\n child.previousSibling = this.lastChild;\n } else {\n child.previousSibling = null;\n child.index = 0;\n }\n\n child.parentNode = this;\n child.nextSibling = null;\n this.lastChild = child;\n\n this.ownerDocument.markDirty(this);\n if (child.hasSetProps) {\n // Only add the node to the collection if we already received props for it.\n // Otherwise wait until then so we have the correct id for the node.\n this.ownerDocument.addNode(child);\n }\n\n this.ownerDocument.endTransaction();\n this.ownerDocument.queueUpdate();\n }\n\n insertBefore(newNode: ElementNode<T>, referenceNode: ElementNode<T>) {\n if (referenceNode == null) {\n return this.appendChild(newNode);\n }\n\n this.ownerDocument.startTransaction();\n if (newNode.parentNode) {\n newNode.parentNode.removeChild(newNode);\n }\n\n newNode.nextSibling = referenceNode;\n newNode.previousSibling = referenceNode.previousSibling;\n newNode.index = referenceNode.index;\n\n if (this.firstChild === referenceNode) {\n this.firstChild = newNode;\n } else if (referenceNode.previousSibling) {\n referenceNode.previousSibling.nextSibling = newNode;\n }\n\n referenceNode.previousSibling = newNode;\n newNode.parentNode = referenceNode.parentNode;\n\n let node: ElementNode<T> | null = referenceNode;\n while (node) {\n node.index++;\n node = node.nextSibling;\n }\n\n if (newNode.hasSetProps) {\n this.ownerDocument.addNode(newNode);\n }\n\n this.ownerDocument.endTransaction();\n this.ownerDocument.queueUpdate();\n }\n\n removeChild(child: ElementNode<T>) {\n if (child.parentNode !== this) {\n return;\n }\n\n this.ownerDocument.startTransaction();\n let node = child.nextSibling;\n while (node) {\n node.index--;\n node = node.nextSibling;\n }\n\n if (child.nextSibling) {\n child.nextSibling.previousSibling = child.previousSibling;\n }\n\n if (child.previousSibling) {\n child.previousSibling.nextSibling = child.nextSibling;\n }\n\n if (this.firstChild === child) {\n this.firstChild = child.nextSibling;\n }\n\n if (this.lastChild === child) {\n this.lastChild = child.previousSibling;\n }\n\n child.parentNode = null;\n child.nextSibling = null;\n child.previousSibling = null;\n child.index = 0;\n\n this.ownerDocument.removeNode(child);\n this.ownerDocument.endTransaction();\n this.ownerDocument.queueUpdate();\n }\n\n addEventListener() {}\n removeEventListener() {}\n}\n\n/**\n * A mutable element node in the fake DOM tree. It owns an immutable\n * Collection Node which is copied on write.\n */\nexport class ElementNode<T> extends BaseNode<T> {\n nodeType = 8; // COMMENT_NODE (we'd use ELEMENT_NODE but React DevTools will fail to get its dimensions)\n node: NodeValue<T>;\n private _index: number = 0;\n hasSetProps = false;\n\n constructor(type: string, ownerDocument: Document<T, any>) {\n super(ownerDocument);\n this.node = new NodeValue(type, `react-aria-${++ownerDocument.nodeId}`);\n // Start a transaction so that no updates are emitted from the collection\n // until the props for this node are set. We don't know the real id for the\n // node until then, so we need to avoid emitting collections in an inconsistent state.\n this.ownerDocument.startTransaction();\n }\n\n get index() {\n return this._index;\n }\n\n set index(index) {\n this._index = index;\n this.ownerDocument.markDirty(this);\n }\n\n get level(): number {\n if (this.parentNode instanceof ElementNode) {\n return this.parentNode.level + (this.node.type === 'item' ? 1 : 0);\n }\n\n return 0;\n }\n\n updateNode() {\n let node = this.ownerDocument.getMutableNode(this);\n node.index = this.index;\n node.level = this.level;\n node.parentKey = this.parentNode instanceof ElementNode ? this.parentNode.node.key : null;\n node.prevKey = this.previousSibling?.node.key ?? null;\n node.nextKey = this.nextSibling?.node.key ?? null;\n node.hasChildNodes = !!this.firstChild;\n node.firstChildKey = this.firstChild?.node.key ?? null;\n node.lastChildKey = this.lastChild?.node.key ?? null;\n }\n\n setProps<T extends Element>(obj: any, ref: ForwardedRef<T>, rendered?: any) {\n let node = this.ownerDocument.getMutableNode(this);\n let {value, textValue, id, ...props} = obj;\n props.ref = ref;\n node.props = props;\n node.rendered = rendered;\n node.value = value;\n node.textValue = textValue || (typeof rendered === 'string' ? rendered : '') || obj['aria-label'] || '';\n if (id != null && id !== node.key) {\n if (this.hasSetProps) {\n throw new Error('Cannot change the id of an item');\n }\n node.key = id;\n }\n\n // If this is the first time props have been set, end the transaction started in the constructor\n // so this node can be emitted.\n if (!this.hasSetProps) {\n this.ownerDocument.addNode(this);\n this.ownerDocument.endTransaction();\n this.hasSetProps = true;\n }\n\n this.ownerDocument.queueUpdate();\n }\n\n get style() {\n return {};\n }\n\n hasAttribute() {}\n setAttribute() {}\n setAttributeNS() {}\n removeAttribute() {}\n}\n\n/**\n * An immutable Collection implementation. Updates are only allowed\n * when it is not marked as frozen.\n */\nexport class BaseCollection<T> implements ICollection<Node<T>> {\n private keyMap: Map<Key, NodeValue<T>> = new Map();\n private firstKey: Key | null = null;\n private lastKey: Key | null = null;\n private frozen = false;\n\n get size() {\n return this.keyMap.size;\n }\n\n getKeys() {\n return this.keyMap.keys();\n }\n\n *[Symbol.iterator]() {\n let node: Node<T> | undefined = this.firstKey != null ? this.keyMap.get(this.firstKey) : undefined;\n while (node) {\n yield node;\n node = node.nextKey != null ? this.keyMap.get(node.nextKey) : undefined;\n }\n }\n\n getChildren(key: Key): Iterable<Node<T>> {\n let keyMap = this.keyMap;\n return {\n *[Symbol.iterator]() {\n let parent = keyMap.get(key);\n let node = parent?.firstChildKey != null ? keyMap.get(parent.firstChildKey) : null;\n while (node) {\n yield node as Node<T>;\n node = node.nextKey != null ? keyMap.get(node.nextKey) : undefined;\n }\n }\n };\n }\n\n getKeyBefore(key: Key) {\n let node = this.keyMap.get(key);\n if (!node) {\n return null;\n }\n\n if (node.prevKey != null) {\n node = this.keyMap.get(node.prevKey);\n\n while (node && node.type !== 'item' && node.lastChildKey != null) {\n node = this.keyMap.get(node.lastChildKey);\n }\n\n return node?.key ?? null;\n }\n\n return node.parentKey;\n }\n\n getKeyAfter(key: Key) {\n let node = this.keyMap.get(key);\n if (!node) {\n return null;\n }\n\n if (node.type !== 'item' && node.firstChildKey != null) {\n return node.firstChildKey;\n }\n\n while (node) {\n if (node.nextKey != null) {\n return node.nextKey;\n }\n\n if (node.parentKey != null) {\n node = this.keyMap.get(node.parentKey);\n } else {\n return null;\n }\n }\n\n return null;\n }\n\n getFirstKey() {\n return this.firstKey;\n }\n\n getLastKey() {\n let node = this.lastKey != null ? this.keyMap.get(this.lastKey) : null;\n while (node?.lastChildKey != null) {\n node = this.keyMap.get(node.lastChildKey);\n }\n\n return node?.key ?? null;\n }\n\n getItem(key: Key): Node<T> | null {\n return this.keyMap.get(key) ?? null;\n }\n\n at(): Node<T> {\n throw new Error('Not implemented');\n }\n\n clone(): this {\n // We need to clone using this.constructor so that subclasses have the right prototype.\n // TypeScript isn't happy about this yet.\n // https://github.com/microsoft/TypeScript/issues/3841\n let Constructor: any = this.constructor;\n let collection: this = new Constructor();\n collection.keyMap = new Map(this.keyMap);\n collection.firstKey = this.firstKey;\n collection.lastKey = this.lastKey;\n return collection;\n }\n\n addNode(node: NodeValue<T>) {\n if (this.frozen) {\n throw new Error('Cannot add a node to a frozen collection');\n }\n\n this.keyMap.set(node.key, node);\n }\n\n removeNode(key: Key) {\n if (this.frozen) {\n throw new Error('Cannot remove a node to a frozen collection');\n }\n\n this.keyMap.delete(key);\n }\n\n commit(firstKey: Key | null, lastKey: Key | null, isSSR = false) {\n if (this.frozen) {\n throw new Error('Cannot commit a frozen collection');\n }\n\n this.firstKey = firstKey;\n this.lastKey = lastKey;\n this.frozen = !isSSR;\n }\n}\n\n/**\n * A mutable Document in the fake DOM. It owns an immutable Collection instance,\n * which is lazily copied on write during updates.\n */\nexport class Document<T, C extends BaseCollection<T> = BaseCollection<T>> extends BaseNode<T> {\n nodeType = 11; // DOCUMENT_FRAGMENT_NODE\n ownerDocument = this;\n dirtyNodes: Set<BaseNode<T>> = new Set();\n isSSR = false;\n nodeId = 0;\n nodesByProps = new WeakMap<object, ElementNode<T>>();\n private collection: C;\n private collectionMutated: boolean;\n private mutatedNodes: Set<ElementNode<T>> = new Set();\n private subscriptions: Set<() => void> = new Set();\n private transactionCount = 0;\n\n constructor(collection: C) {\n // @ts-ignore\n super(null);\n this.collection = collection;\n this.collectionMutated = true;\n }\n\n get isConnected() {\n return true;\n }\n\n createElement(type: string) {\n return new ElementNode(type, this);\n }\n\n /**\n * Lazily gets a mutable instance of a Node. If the node has already\n * been cloned during this update cycle, it just returns the existing one.\n */\n getMutableNode(element: ElementNode<T>): Mutable<NodeValue<T>> {\n let node = element.node;\n if (!this.mutatedNodes.has(element)) {\n node = element.node.clone();\n this.mutatedNodes.add(element);\n element.node = node;\n }\n this.markDirty(element);\n return node;\n }\n\n private getMutableCollection() {\n if (!this.isSSR && !this.collectionMutated) {\n this.collection = this.collection.clone();\n this.collectionMutated = true;\n }\n\n return this.collection;\n }\n\n markDirty(node: BaseNode<T>) {\n this.dirtyNodes.add(node);\n }\n\n startTransaction() {\n this.transactionCount++;\n }\n\n endTransaction() {\n this.transactionCount--;\n }\n\n addNode(element: ElementNode<T>) {\n let collection = this.getMutableCollection();\n if (!collection.getItem(element.node.key)) {\n collection.addNode(element.node);\n\n for (let child of element) {\n this.addNode(child);\n }\n }\n\n this.markDirty(element);\n }\n\n removeNode(node: ElementNode<T>) {\n for (let child of node) {\n this.removeNode(child);\n }\n\n let collection = this.getMutableCollection();\n collection.removeNode(node.node.key);\n this.markDirty(node);\n }\n\n /** Finalizes the collection update, updating all nodes and freezing the collection. */\n getCollection(): C {\n if (this.transactionCount > 0) {\n return this.collection;\n }\n\n this.updateCollection();\n return this.collection;\n }\n\n updateCollection() {\n for (let element of this.dirtyNodes) {\n if (element instanceof ElementNode && element.isConnected) {\n element.updateNode();\n }\n }\n\n this.dirtyNodes.clear();\n\n if (this.mutatedNodes.size || this.collectionMutated) {\n let collection = this.getMutableCollection();\n for (let element of this.mutatedNodes) {\n if (element.isConnected) {\n collection.addNode(element.node);\n }\n }\n\n collection.commit(this.firstChild?.node.key ?? null, this.lastChild?.node.key ?? null, this.isSSR);\n this.mutatedNodes.clear();\n }\n\n this.collectionMutated = false;\n }\n\n queueUpdate() {\n // Don't emit any updates if there is a transaction in progress.\n // queueUpdate should be called again after the transaction.\n if (this.dirtyNodes.size === 0 || this.transactionCount > 0) {\n return;\n }\n\n for (let fn of this.subscriptions) {\n fn();\n }\n }\n\n subscribe(fn: () => void) {\n this.subscriptions.add(fn);\n return () => this.subscriptions.delete(fn);\n }\n\n resetAfterSSR() {\n if (this.isSSR) {\n this.isSSR = false;\n this.firstChild = null;\n this.lastChild = null;\n this.nodeId = 0;\n }\n }\n}\n\nexport interface CollectionProps<T> extends Omit<CollectionBase<T>, 'children'> {\n /** The contents of the collection. */\n children?: ReactNode | ((item: T) => ReactNode),\n /** Values that should invalidate the item cache when using dynamic collections. */\n dependencies?: any[]\n}\n\ninterface CachedChildrenOptions<T> extends CollectionProps<T> {\n idScope?: Key,\n addIdAndValue?: boolean,\n dependencies?: any[]\n}\n\nexport function useCachedChildren<T extends object>(props: CachedChildrenOptions<T>): ReactNode {\n let {children, items, idScope, addIdAndValue, dependencies = []} = props;\n\n // Invalidate the cache whenever the parent value changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n let cache = useMemo(() => new WeakMap(), dependencies);\n return useMemo(() => {\n if (items && typeof children === 'function') {\n let res: ReactElement[] = [];\n for (let item of items) {\n let rendered = cache.get(item);\n if (!rendered) {\n rendered = children(item);\n // @ts-ignore\n let key = rendered.props.id ?? item.key ?? item.id;\n // eslint-disable-next-line max-depth\n if (key == null) {\n throw new Error('Could not determine key for item');\n }\n // eslint-disable-next-line max-depth\n if (idScope) {\n key = idScope + ':' + key;\n }\n // Note: only works if wrapped Item passes through id...\n rendered = cloneElement(\n rendered,\n addIdAndValue ? {key, id: key, value: item} : {key}\n );\n cache.set(item, rendered);\n }\n res.push(rendered);\n }\n return res;\n } else if (typeof children !== 'function') {\n return children;\n }\n }, [children, items, cache, idScope, addIdAndValue]);\n}\n\nexport function useCollectionChildren<T extends object>(props: CachedChildrenOptions<T>) {\n return useCachedChildren({...props, addIdAndValue: true});\n}\n\nconst ShallowRenderContext = createContext(false);\n\ninterface CollectionResult<C> {\n portal: ReactNode,\n collection: C\n}\n\nexport function useCollection<T extends object, C extends BaseCollection<T>>(props: CollectionProps<T>, initialCollection?: C): CollectionResult<C> {\n let {collection, document} = useCollectionDocument<T, C>(initialCollection);\n let portal = useCollectionPortal<T, C>(props, document);\n return {portal, collection};\n}\n\ninterface CollectionDocumentResult<T, C extends BaseCollection<T>> {\n collection: C,\n document: Document<T, C>\n}\n\n// React 16 and 17 don't support useSyncExternalStore natively, and the shim provided by React does not support getServerSnapshot.\n// This wrapper uses the shim, but additionally calls getServerSnapshot during SSR (according to SSRProvider).\nfunction useSyncExternalStoreFallback<C>(subscribe: (onStoreChange: () => void) => () => void, getSnapshot: () => C, getServerSnapshot: () => C): C {\n let isSSR = useIsSSR();\n let isSSRRef = useRef(isSSR);\n // This is read immediately inside the wrapper, which also runs during render.\n // We just need a ref to avoid invalidating the callback itself, which\n // would cause React to re-run the callback more than necessary.\n // eslint-disable-next-line rulesdir/pure-render\n isSSRRef.current = isSSR;\n\n let getSnapshotWrapper = useCallback(() => {\n return isSSRRef.current ? getServerSnapshot() : getSnapshot();\n }, [getSnapshot, getServerSnapshot]);\n return useSyncExternalStoreShim(subscribe, getSnapshotWrapper);\n}\n\nconst useSyncExternalStore = typeof React['useSyncExternalStore'] === 'function'\n ? React['useSyncExternalStore']\n : useSyncExternalStoreFallback;\n\nexport function useCollectionDocument<T extends object, C extends BaseCollection<T>>(initialCollection?: C): CollectionDocumentResult<T, C> {\n // The document instance is mutable, and should never change between renders.\n // useSyncExternalStore is used to subscribe to updates, which vends immutable Collection objects.\n let document = useMemo(() => new Document<T, C>(initialCollection || new BaseCollection() as C), [initialCollection]);\n let subscribe = useCallback((fn: () => void) => document.subscribe(fn), [document]);\n let getSnapshot = useCallback(() => {\n let collection = document.getCollection();\n if (document.isSSR) {\n // After SSR is complete, reset the document to empty so it is ready for React to render the portal into.\n // We do this _after_ getting the collection above so that the collection still has content in it from SSR\n // during the current render, before React has finished the client render.\n document.resetAfterSSR();\n }\n return collection;\n }, [document]);\n let getServerSnapshot = useCallback(() => {\n document.isSSR = true;\n return document.getCollection();\n }, [document]);\n let collection = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n return {collection, document};\n}\n\nconst SSRContext = createContext<BaseNode<any> | null>(null);\nexport const CollectionDocumentContext = createContext<Document<any, BaseCollection<any>> | null>(null);\n\nexport function useCollectionPortal<T extends object, C extends BaseCollection<T>>(props: CollectionProps<T>, document?: Document<T, C>): ReactNode {\n let ctx = useContext(CollectionDocumentContext);\n let doc = document ?? ctx!;\n let children = useCollectionChildren(props);\n let wrappedChildren = useMemo(() => (\n <ShallowRenderContext.Provider value>\n {children}\n </ShallowRenderContext.Provider>\n ), [children]);\n // During SSR, we render the content directly, and append nodes to the document during render.\n // The collection children return null so that nothing is actually rendered into the HTML.\n return useIsSSR()\n ? <SSRContext.Provider value={doc}>{wrappedChildren}</SSRContext.Provider>\n : createPortal(wrappedChildren, doc as unknown as Element);\n}\n\nexport function CollectionPortal<T extends object>(props: CollectionProps<T>) {\n return <>{useCollectionPortal(props)}</>;\n}\n\n/** Renders a DOM element (e.g. separator or header) shallowly when inside a collection. */\nexport function useShallowRender<P extends object, T extends Element>(type: string, props: P, ref: ForwardedRef<T>): ReactElement | null {\n let isShallow = useContext(ShallowRenderContext);\n if (isShallow) {\n // Elements cannot be re-parented, so the context will always be there.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useSSRCollectionNode(type, props, ref, 'children' in props ? props.children : null) ?? <></>;\n }\n\n return null;\n}\n\nexport interface ItemRenderProps {\n /**\n * Whether the item is currently hovered with a mouse.\n * @selector [data-hovered]\n */\n isHovered: boolean,\n /**\n * Whether the item is currently in a pressed state.\n * @selector [data-pressed]\n */\n isPressed: boolean,\n /**\n * Whether the item is currently selected.\n * @selector [data-selected]\n */\n isSelected: boolean,\n /**\n * Whether the item is currently focused.\n * @selector [data-focused]\n */\n isFocused: boolean,\n /**\n * Whether the item is currently keyboard focused.\n * @selector [data-focus-visible]\n */\n isFocusVisible: boolean,\n /**\n * Whether the item is non-interactive, i.e. both selection and actions are disabled and the item may\n * not be focused. Dependent on `disabledKeys` and `disabledBehavior`.\n * @selector [data-disabled]\n */\n isDisabled: boolean,\n /**\n * The type of selection that is allowed in the collection.\n * @selector [data-selection-mode=\"single | multiple\"]\n */\n selectionMode: SelectionMode,\n /** The selection behavior for the collection. */\n selectionBehavior: SelectionBehavior,\n /**\n * Whether the item allows dragging.\n * @note This property is only available in collection components that support drag and drop.\n * @selector [data-allows-dragging]\n */\n allowsDragging?: boolean,\n /**\n * Whether the item is currently being dragged.\n * @note This property is only available in collection components that support drag and drop.\n * @selector [data-dragging]\n */\n isDragging?: boolean,\n /**\n * Whether the item is currently an active drop target.\n * @note This property is only available in collection components that support drag and drop.\n * @selector [data-drop-target]\n */\n isDropTarget?: boolean\n}\n\nexport function useCollectionItemRef<T extends Element>(props: any, ref: ForwardedRef<T>, rendered?: any) {\n // Return a callback ref that sets the props object on the fake DOM node.\n return useCallback((element) => {\n element?.setProps(props, ref, rendered);\n }, [props, ref, rendered]);\n}\n\nexport function useSSRCollectionNode<T extends Element>(Type: string, props: object, ref: ForwardedRef<T>, rendered?: any, children?: ReactNode) {\n // During SSR, portals are not supported, so the collection children will be wrapped in an SSRContext.\n // Since SSR occurs only once, we assume that the elements are rendered in order and never re-render.\n // Therefore we can create elements in our collection document during render so that they are in the\n // collection by the time we need to use the collection to render to the real DOM.\n // After hydration, we switch to client rendering using the portal.\n let itemRef = useCollectionItemRef(props, ref, rendered);\n let parentNode = useContext(SSRContext);\n if (parentNode) {\n // Guard against double rendering in strict mode.\n let element = parentNode.ownerDocument.nodesByProps.get(props);\n if (!element) {\n element = parentNode.ownerDocument.createElement(Type);\n element.setProps(props, ref, rendered);\n parentNode.appendChild(element);\n parentNode.ownerDocument.updateCollection();\n parentNode.ownerDocument.nodesByProps.set(props, element);\n }\n\n return children\n ? <SSRContext.Provider value={element}>{children}</SSRContext.Provider>\n : null;\n }\n\n // @ts-ignore\n return <Type ref={itemRef}>{children}</Type>;\n}\n\nexport interface SectionProps<T> extends Omit<SharedSectionProps<T>, 'children' | 'title'>, StyleProps {\n /** The unique id of the section. */\n id?: Key,\n /** The object value that this section represents. When using dynamic collections, this is set automatically. */\n value?: T,\n /** Static child items or a function to render children. */\n children?: ReactNode | ((item: T) => ReactElement),\n /** Values that should invalidate the item cache when using dynamic collections. */\n dependencies?: any[]\n}\n\nfunction Section<T extends object>(props: SectionProps<T>, ref: ForwardedRef<HTMLElement>): JSX.Element | null {\n let children = useCollectionChildren(props);\n return useSSRCollectionNode('section', props, ref, null, children);\n}\n\nconst _Section = /*#__PURE__*/ (forwardRef as forwardRefType)(Section);\nexport {_Section as Section};\n\nexport const CollectionContext = createContext<CachedChildrenOptions<unknown> | null>(null);\nexport const CollectionRendererContext = createContext<CollectionProps<any>['children']>(null);\n\n/** A Collection renders a list of items, automatically managing caching and keys. */\nexport function Collection<T extends object>(props: CollectionProps<T>): JSX.Element {\n let ctx = useContext(CollectionContext)!;\n props = mergeProps(ctx, props);\n props.dependencies = (ctx?.dependencies || []).concat(props.dependencies);\n let renderer = typeof props.children === 'function' ? props.children : null;\n return (\n <CollectionRendererContext.Provider value={renderer}>\n {useCollectionChildren(props)}\n </CollectionRendererContext.Provider>\n );\n}\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLabelingProps, DOMProps as SharedDOMProps} from '@react-types/shared';\nimport {mergeProps, mergeRefs, useLayoutEffect, useObjectRef} from '@react-aria/utils';\nimport React, {Context, createContext, CSSProperties, ForwardedRef, JSX, ReactNode, RefCallback, RefObject, UIEvent, useCallback, useContext, useEffect, useMemo, useRef, useState} from 'react';\nimport ReactDOM from 'react-dom';\nimport {useIsSSR} from 'react-aria';\n\n// Override forwardRef types so generics work.\ndeclare function forwardRef<T, P = {}>(\n render: (props: P, ref: React.Ref<T>) => React.ReactElement | null\n): (props: P & React.RefAttributes<T>) => React.ReactElement | null;\n\nexport type forwardRefType = typeof forwardRef;\n\nexport const slotCallbackSymbol = Symbol('callback');\nexport const defaultSlot = Symbol('default');\n\ninterface SlottedValue<T> {\n slots?: Record<string | symbol, T>,\n [slotCallbackSymbol]?: (value: T) => void\n}\n\nexport type SlottedContextValue<T> = SlottedValue<T> | T | null | undefined;\nexport type ContextValue<T, E extends Element> = SlottedContextValue<WithRef<T, E>>;\n\ntype ProviderValue<T> = [Context<T>, T];\ntype ProviderValues<A, B, C, D, E, F, G, H, I, J, K> =\n | [ProviderValue<A>]\n | [ProviderValue<A>, ProviderValue<B>]\n | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>]\n | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>, ProviderValue<D>]\n | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>, ProviderValue<D>, ProviderValue<E>]\n | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>, ProviderValue<D>, ProviderValue<E>, ProviderValue<F>]\n | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>, ProviderValue<D>, ProviderValue<E>, ProviderValue<F>, ProviderValue<G>]\n | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>, ProviderValue<D>, ProviderValue<E>, ProviderValue<F>, ProviderValue<G>, ProviderValue<H>]\n | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>, ProviderValue<D>, ProviderValue<E>, ProviderValue<F>, ProviderValue<G>, ProviderValue<H>, ProviderValue<I>]\n | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>, ProviderValue<D>, ProviderValue<E>, ProviderValue<F>, ProviderValue<G>, ProviderValue<H>, ProviderValue<I>, ProviderValue<J>]\n | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>, ProviderValue<D>, ProviderValue<E>, ProviderValue<F>, ProviderValue<G>, ProviderValue<H>, ProviderValue<I>, ProviderValue<J>, ProviderValue<K>];\n\ninterface ProviderProps<A, B, C, D, E, F, G, H, I, J, K> {\n values: ProviderValues<A, B, C, D, E, F, G, H, I, J, K>,\n children: ReactNode\n}\n\nexport function Provider<A, B, C, D, E, F, G, H, I, J, K>({values, children}: ProviderProps<A, B, C, D, E, F, G, H, I, J, K>): JSX.Element {\n for (let [Context, value] of values) {\n // @ts-ignore\n children = <Context.Provider value={value}>{children}</Context.Provider>;\n }\n\n return children as JSX.Element;\n}\n\nexport interface StyleProps {\n /** The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element. */\n className?: string,\n /** The inline [style](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style) for the element. */\n style?: CSSProperties\n}\n\nexport interface DOMProps extends StyleProps, SharedDOMProps {\n /** The children of the component. */\n children?: ReactNode\n}\n\nexport interface ScrollableProps<T extends Element> {\n /** Handler that is called when a user scrolls. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Element/scroll_event). */\n onScroll?: (e: UIEvent<T>) => void\n}\n\nexport interface StyleRenderProps<T> {\n /** The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element. A function may be provided to compute the class based on component state. */\n className?: string | ((values: T) => string),\n /** The inline [style](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style) for the element. A function may be provided to compute the style based on component state. */\n style?: CSSProperties | ((values: T) => CSSProperties)\n}\n\nexport interface RenderProps<T> extends StyleRenderProps<T> {\n /** The children of the component. A function may be provided to alter the children based on component state. */\n children?: ReactNode | ((values: T) => ReactNode)\n}\n\ninterface RenderPropsHookOptions<T> extends RenderProps<T>, SharedDOMProps, AriaLabelingProps {\n values: T,\n defaultChildren?: ReactNode,\n defaultClassName?: string\n}\n\nexport function useRenderProps<T>(props: RenderPropsHookOptions<T>) {\n let {\n className,\n style,\n children,\n defaultClassName,\n defaultChildren,\n values\n } = props;\n\n return useMemo(() => {\n let computedClassName: string | undefined;\n let computedStyle: React.CSSProperties | undefined;\n let computedChildren: React.ReactNode | undefined;\n\n if (typeof className === 'function') {\n computedClassName = className(values);\n } else {\n computedClassName = className;\n }\n\n if (typeof style === 'function') {\n computedStyle = style(values);\n } else {\n computedStyle = style;\n }\n\n if (typeof children === 'function') {\n computedChildren = children(values);\n } else if (children == null) {\n computedChildren = defaultChildren;\n } else {\n computedChildren = children;\n }\n\n return {\n className: computedClassName ?? defaultClassName,\n style: computedStyle,\n children: computedChildren,\n 'data-rac': ''\n };\n }, [className, style, children, defaultClassName, defaultChildren, values]);\n}\n\n/**\n * A helper function that accepts a user-provided render prop value (either a static value or a function),\n * and combines it with another value to create a final result.\n */\nexport function composeRenderProps<T, U, V extends T>(\n // https://stackoverflow.com/questions/60898079/typescript-type-t-or-function-t-usage\n value: T extends any ? (T | ((renderProps: U) => V)) : never,\n wrap: (prevValue: T, renderProps: U) => V\n): (renderProps: U) => V {\n return (renderProps) => wrap(typeof value === 'function' ? value(renderProps) : value, renderProps);\n}\n\nexport type WithRef<T, E> = T & {ref?: ForwardedRef<E>};\nexport interface SlotProps {\n /**\n * A slot name for the component. Slots allow the component to receive props from a parent component.\n * An explicit `null` value indicates that the local props completely override all props received from a parent.\n */\n slot?: string | null\n}\n\nexport function useSlottedContext<T>(context: Context<SlottedContextValue<T>>, slot?: string | null): T | null | undefined {\n let ctx = useContext(context);\n if (slot === null) {\n // An explicit `null` slot means don't use context.\n return null;\n }\n if (ctx && typeof ctx === 'object' && 'slots' in ctx && ctx.slots) {\n let availableSlots = new Intl.ListFormat().format(Object.keys(ctx.slots).map(p => `\"${p}\"`));\n\n if (!slot && !ctx.slots[defaultSlot]) {\n throw new Error(`A slot prop is required. Valid slot names are ${availableSlots}.`);\n }\n let slotKey = slot || defaultSlot;\n if (!ctx.slots[slotKey]) {\n // @ts-ignore\n throw new Error(`Invalid slot \"${slot}\". Valid slot names are ${availableSlots}.`);\n }\n return ctx.slots[slotKey];\n }\n // @ts-ignore\n return ctx;\n}\n\nexport function useContextProps<T, U extends SlotProps, E extends Element>(props: T & SlotProps, ref: ForwardedRef<E>, context: Context<ContextValue<U, E>>): [T, RefObject<E>] {\n let ctx = useSlottedContext(context, props.slot) || {};\n // @ts-ignore - TS says \"Type 'unique symbol' cannot be used as an index type.\" but not sure why.\n let {ref: contextRef, [slotCallbackSymbol]: callback, ...contextProps} = ctx;\n let mergedRef = useObjectRef(useMemo(() => mergeRefs(ref, contextRef), [ref, contextRef]));\n let mergedProps = mergeProps(contextProps, props) as unknown as T;\n\n // mergeProps does not merge `style`. Adding this there might be a breaking change.\n if (\n 'style' in contextProps &&\n contextProps.style &&\n typeof contextProps.style === 'object' &&\n 'style' in props &&\n props.style &&\n typeof props.style === 'object'\n ) {\n // @ts-ignore\n mergedProps.style = {...contextProps.style, ...props.style};\n }\n\n // A parent component might need the props from a child, so call slot callback if needed.\n useEffect(() => {\n if (callback) {\n callback(props);\n }\n }, [callback, props]);\n\n return [mergedProps, mergedRef];\n}\n\nexport function useSlot(): [RefCallback<Element>, boolean] {\n // Assume we do have the slot in the initial render.\n let [hasSlot, setHasSlot] = useState(true);\n let hasRun = useRef(false);\n\n // A callback ref which will run when the slotted element mounts.\n // This should happen before the useLayoutEffect below.\n let ref = useCallback(el => {\n hasRun.current = true;\n setHasSlot(!!el);\n }, []);\n\n // If the callback hasn't been called, then reset to false.\n useLayoutEffect(() => {\n if (!hasRun.current) {\n setHasSlot(false);\n }\n }, []);\n\n return [ref, hasSlot];\n}\n\nexport function useEnterAnimation(ref: RefObject<HTMLElement>, isReady: boolean = true) {\n let [isEntering, setEntering] = useState(true);\n useAnimation(ref, isEntering && isReady, useCallback(() => setEntering(false), []));\n return isEntering && isReady;\n}\n\nexport function useExitAnimation(ref: RefObject<HTMLElement>, isOpen: boolean) {\n // State to trigger a re-render after animation is complete, which causes the element to be removed from the DOM.\n // Ref to track the state we're in, so we don't immediately reset isExiting to true after the animation.\n let [isExiting, setExiting] = useState(false);\n let [exitState, setExitState] = useState('idle');\n\n // If isOpen becomes false, set isExiting to true.\n if (!isOpen && ref.current && exitState === 'idle') {\n isExiting = true;\n setExiting(true);\n setExitState('exiting');\n }\n\n // If we exited, and the element has been removed, reset exit state to idle.\n if (!ref.current && exitState === 'exited') {\n setExitState('idle');\n }\n\n useAnimation(\n ref,\n isExiting,\n useCallback(() => {\n setExitState('exited');\n setExiting(false);\n }, [])\n );\n\n return isExiting;\n}\n\nfunction useAnimation(ref: RefObject<HTMLElement>, isActive: boolean, onEnd: () => void) {\n let prevAnimation = useRef<string | null>(null);\n if (isActive && ref.current) {\n // This is ok because we only read it in the layout effect below, immediately after the commit phase.\n // We could move this to another effect that runs every render, but this would be unnecessarily slow.\n // We only need the computed style right before the animation becomes active.\n // eslint-disable-next-line rulesdir/pure-render\n prevAnimation.current = window.getComputedStyle(ref.current).animation;\n }\n\n useLayoutEffect(() => {\n if (isActive && ref.current) {\n // Make sure there's actually an animation, and it wasn't there before we triggered the update.\n let computedStyle = window.getComputedStyle(ref.current);\n if (computedStyle.animationName && computedStyle.animationName !== 'none' && computedStyle.animation !== prevAnimation.current) {\n let onAnimationEnd = (e: AnimationEvent) => {\n if (e.target === ref.current) {\n element.removeEventListener('animationend', onAnimationEnd);\n ReactDOM.flushSync(() => {onEnd();});\n }\n };\n\n let element = ref.current;\n element.addEventListener('animationend', onAnimationEnd);\n return () => {\n element.removeEventListener('animationend', onAnimationEnd);\n };\n } else {\n onEnd();\n }\n }\n }, [ref, isActive, onEnd]);\n}\n\n// React doesn't understand the <template> element, which doesn't have children like a normal element.\n// It will throw an error during hydration when it expects the firstChild to contain content rendered\n// on the server, when in reality, the browser will have placed this inside the `content` document fragment.\n// This monkey patches the firstChild property for our special hidden template elements to work around this error.\n// See https://github.com/facebook/react/issues/19932\nif (typeof HTMLTemplateElement !== 'undefined') {\n const getFirstChild = Object.getOwnPropertyDescriptor(Node.prototype, 'firstChild')!.get!;\n Object.defineProperty(HTMLTemplateElement.prototype, 'firstChild', {\n configurable: true,\n enumerable: true,\n get: function () {\n if (this.dataset.reactAriaHidden) {\n return this.content.firstChild;\n } else {\n return getFirstChild.call(this);\n }\n }\n });\n}\n\nexport const HiddenContext = createContext<boolean>(false);\n\n// Portal to nowhere\nconst hiddenFragment = typeof DocumentFragment !== 'undefined' ? new DocumentFragment() : null;\n\nexport function Hidden(props: {children: ReactNode}) {\n let isHidden = useContext(HiddenContext);\n let isSSR = useIsSSR();\n if (isHidden) {\n // Don't hide again if we are already hidden.\n return <>{props.children}</>;\n }\n\n let children = (\n <HiddenContext.Provider value>\n {props.children}\n </HiddenContext.Provider>\n );\n\n // In SSR, portals are not supported by React. Instead, render into a <template>\n // element, which the browser will never display to the user. In addition, the\n // content is not part of the DOM tree, so it won't affect ids or other accessibility attributes.\n return isSSR\n ? <template data-react-aria-hidden>{children}</template>\n : ReactDOM.createPortal(children, hiddenFragment!);\n}\n\n// Creates a component that forwards its ref and returns null if it is in a <Hidden> subtree.\n// Note: this function is handled specially in the documentation generator. If you change it, you'll need to update DocsTransformer as well.\nexport function createHideableComponent<T, P = {}>(fn: (props: P, ref: React.Ref<T>) => React.ReactElement | null): (props: P & React.RefAttributes<T>) => React.ReactElement | null {\n let Wrapper = (props: P, ref: React.Ref<T>) => {\n let isHidden = useContext(HiddenContext);\n if (isHidden) {\n return null;\n }\n\n return fn(props, ref);\n };\n // @ts-ignore - for react dev tools\n Wrapper.displayName = fn.displayName || fn.name;\n return (React.forwardRef as forwardRefType)(Wrapper);\n}\n\n/**\n * Filters out `data-*` attributes to keep them from being passed down and duplicated.\n * @param props\n */\nexport function removeDataAttributes<T>(props: T): T {\n const prefix = /^(data-.*)$/;\n let filteredProps = {} as T;\n\n for (const prop in props) {\n if (!prefix.test(prop)) {\n filteredProps[prop] = props[prop];\n }\n }\n\n return filteredProps;\n}\n\n// Override base type to change the default.\nexport interface RACValidation {\n /**\n * Whether to use native HTML form validation to prevent form submission\n * when the value is missing or invalid, or mark the field as required\n * or invalid via ARIA.\n * @default 'native'\n */\n validationBehavior?: 'native' | 'aria'\n}\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLinkOptions, HoverEvents, mergeProps, useFocusRing, useHover, useLink} from 'react-aria';\nimport {ContextValue, forwardRefType, RenderProps, SlotProps, useContextProps, useRenderProps} from './utils';\nimport React, {createContext, ElementType, ForwardedRef, forwardRef} from 'react';\n\nexport interface LinkProps extends Omit<AriaLinkOptions, 'elementType'>, HoverEvents, RenderProps<LinkRenderProps>, SlotProps {}\n\nexport interface LinkRenderProps {\n /**\n * Whether the link is the current item within a list.\n * @selector [data-current]\n */\n isCurrent: boolean,\n /**\n * Whether the link is currently hovered with a mouse.\n * @selector [data-hovered]\n */\n isHovered: boolean,\n /**\n * Whether the link is currently in a pressed state.\n * @selector [data-pressed]\n */\n isPressed: boolean,\n /**\n * Whether the link is focused, either via a mouse or keyboard.\n * @selector [data-focused]\n */\n isFocused: boolean,\n /**\n * Whether the link is keyboard focused.\n * @selector [data-focus-visible]\n */\n isFocusVisible: boolean,\n /**\n * Whether the link is disabled.\n * @selector [data-disabled]\n */\n isDisabled: boolean\n}\n\nexport const LinkContext = createContext<ContextValue<LinkProps, HTMLAnchorElement>>(null);\n\nfunction Link(props: LinkProps, ref: ForwardedRef<HTMLAnchorElement>) {\n [props, ref] = useContextProps(props, ref, LinkContext);\n\n let ElementType: ElementType = props.href ? 'a' : 'span';\n let {linkProps, isPressed} = useLink({...props, elementType: ElementType}, ref);\n\n let {hoverProps, isHovered} = useHover(props);\n let {focusProps, isFocused, isFocusVisible} = useFocusRing();\n\n let renderProps = useRenderProps({\n ...props,\n defaultClassName: 'react-aria-Link',\n values: {\n isCurrent: !!props['aria-current'],\n isDisabled: props.isDisabled || false,\n isPressed,\n isHovered,\n isFocused,\n isFocusVisible\n }\n });\n\n return (\n <ElementType\n ref={ref}\n slot={props.slot || undefined}\n {...mergeProps(renderProps, linkProps, hoverProps, focusProps)}\n data-focused={isFocused || undefined}\n data-hovered={isHovered || undefined}\n data-pressed={isPressed || undefined}\n data-focus-visible={isFocusVisible || undefined}\n data-current={!!props['aria-current'] || undefined}\n data-disabled={props.isDisabled || undefined}>\n {renderProps.children}\n </ElementType>\n );\n}\n\n/**\n * A link allows a user to navigate to another page or resource within a web page\n * or application.\n */\nconst _Link = /*#__PURE__*/ (forwardRef as forwardRefType)(Link);\nexport {_Link as Link};\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nimport {AriaButtonProps, HoverEvents, mergeProps, useButton, useFocusRing, useHover} from 'react-aria';\nimport {ContextValue, createHideableComponent, RenderProps, SlotProps, useContextProps, useRenderProps} from './utils';\nimport {filterDOMProps} from '@react-aria/utils';\nimport React, {createContext, ForwardedRef} from 'react';\n\nexport interface ButtonRenderProps {\n /**\n * Whether the button is currently hovered with a mouse.\n * @selector [data-hovered]\n */\n isHovered: boolean,\n /**\n * Whether the button is currently in a pressed state.\n * @selector [data-pressed]\n */\n isPressed: boolean,\n /**\n * Whether the button is focused, either via a mouse or keyboard.\n * @selector [data-focused]\n */\n isFocused: boolean,\n /**\n * Whether the button is keyboard focused.\n * @selector [data-focus-visible]\n */\n isFocusVisible: boolean,\n /**\n * Whether the button is disabled.\n * @selector [data-disabled]\n */\n isDisabled: boolean\n}\n\nexport interface ButtonProps extends Omit<AriaButtonProps, 'children' | 'href' | 'target' | 'rel' | 'elementType'>, HoverEvents, SlotProps, RenderProps<ButtonRenderProps> {\n /**\n * The <form> element to associate the button with.\n * The value of this attribute must be the id of a <form> in the same document.\n */\n form?: string,\n /**\n * The URL that processes the information submitted by the button.\n * Overrides the action attribute of the button's form owner.\n */\n formAction?: string,\n /** Indicates how to encode the form data that is submitted. */\n formEncType?: string,\n /** Indicates the HTTP method used to submit the form. */\n formMethod?: string,\n /** Indicates that the form is not to be validated when it is submitted. */\n formNoValidate?: boolean,\n /** Overrides the target attribute of the button's form owner. */\n formTarget?: string,\n /** Submitted as a pair with the button's value as part of the form data. */\n name?: string,\n /** The value associated with the button's name when it's submitted with the form data. */\n value?: string\n}\n\ninterface ButtonContextValue extends ButtonProps {\n isPressed?: boolean\n}\n\nconst additionalButtonHTMLAttributes = new Set(['form', 'formAction', 'formEncType', 'formMethod', 'formNoValidate', 'formTarget', 'name', 'value']);\n\nexport const ButtonContext = createContext<ContextValue<ButtonContextValue, HTMLButtonElement>>({});\n\nfunction Button(props: ButtonProps, ref: ForwardedRef<HTMLButtonElement>) {\n [props, ref] = useContextProps(props, ref, ButtonContext);\n let ctx = props as ButtonContextValue;\n let {buttonProps, isPressed} = useButton(props, ref);\n let {focusProps, isFocused, isFocusVisible} = useFocusRing(props);\n let {hoverProps, isHovered} = useHover(props);\n let renderProps = useRenderProps({\n ...props,\n values: {isHovered, isPressed, isFocused, isFocusVisible, isDisabled: props.isDisabled || false},\n defaultClassName: 'react-aria-Button'\n });\n\n return (\n <button\n {...filterDOMProps(props, {propNames: additionalButtonHTMLAttributes})}\n {...mergeProps(buttonProps, focusProps, hoverProps)}\n {...renderProps}\n ref={ref}\n slot={props.slot || undefined}\n data-disabled={props.isDisabled || undefined}\n data-pressed={ctx.isPressed || isPressed || undefined}\n data-hovered={isHovered || undefined}\n data-focused={isFocused || undefined}\n data-focus-visible={isFocusVisible || undefined} />\n );\n}\n\n/**\n * A button allows a user to perform an action, with mouse, touch, and keyboard interactions.\n */\nconst _Button = /*#__PURE__*/ createHideableComponent(Button);\nexport {_Button as Button};\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {ContextValue, useContextProps} from './utils';\nimport React, {createContext, ElementType, ForwardedRef, forwardRef, HTMLAttributes} from 'react';\n\nexport interface HeadingProps extends HTMLAttributes<HTMLElement> {\n level?: number\n}\n\nexport const HeadingContext = createContext<ContextValue<HeadingProps, HTMLHeadingElement>>({});\n\nfunction Heading(props: HeadingProps, ref: ForwardedRef<HTMLHeadingElement>) {\n [props, ref] = useContextProps(props, ref, HeadingContext);\n let {children, level = 3, className, ...domProps} = props;\n let Element = `h${level}` as ElementType;\n\n return (\n <Element {...domProps} ref={ref} className={className ?? 'react-aria-Heading'}>\n {children}\n </Element>\n );\n}\n\nconst _Heading = forwardRef(Heading);\nexport {_Heading as Heading};\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {ContextValue, useContextProps} from './utils';\nimport React, {createContext, ForwardedRef, forwardRef, HTMLAttributes} from 'react';\n\nexport interface TextProps extends HTMLAttributes<HTMLElement> {\n elementType?: string\n}\n\nexport const TextContext = createContext<ContextValue<TextProps, HTMLElement>>({});\n\nfunction Text(props: TextProps, ref: ForwardedRef<HTMLElement>) {\n [props, ref] = useContextProps(props, ref, TextContext);\n let {elementType: ElementType = 'span', ...domProps} = props;\n // @ts-ignore\n return <ElementType className=\"react-aria-Text\" {...domProps} ref={ref} />;\n}\n\nconst _Text = forwardRef(Text);\nexport {_Text as Text};\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nimport {CalendarProps as BaseCalendarProps, RangeCalendarProps as BaseRangeCalendarProps, DateValue, mergeProps, useCalendar, useCalendarCell, useCalendarGrid, useFocusRing, useHover, useLocale, useRangeCalendar, VisuallyHidden} from 'react-aria';\nimport {ButtonContext} from './Button';\nimport {CalendarDate, createCalendar, DateDuration, endOfMonth, getWeeksInMonth, isSameDay, isSameMonth} from '@internationalized/date';\nimport {CalendarState, RangeCalendarState, useCalendarState, useRangeCalendarState} from 'react-stately';\nimport {ContextValue, DOMProps, forwardRefType, Provider, RenderProps, SlotProps, StyleProps, useContextProps, useRenderProps} from './utils';\nimport {DOMAttributes, FocusableElement, HoverEvents} from '@react-types/shared';\nimport {filterDOMProps} from '@react-aria/utils';\nimport {HeadingContext} from './Heading';\nimport React, {createContext, ForwardedRef, forwardRef, ReactElement, useContext, useRef} from 'react';\nimport {TextContext} from './Text';\n\nexport interface CalendarRenderProps {\n /**\n * Whether the calendar is disabled.\n * @selector [data-disabled]\n */\n isDisabled: boolean,\n /**\n * State of the calendar.\n */\n state: CalendarState,\n /**\n * Whether the calendar is invalid.\n * @selector [data-invalid]\n */\n isInvalid: boolean\n}\n\nexport interface RangeCalendarRenderProps extends Omit<CalendarRenderProps, 'state'> {\n /**\n * State of the range calendar.\n */\n state: RangeCalendarState\n}\n\nexport interface CalendarProps<T extends DateValue> extends Omit<BaseCalendarProps<T>, 'errorMessage' | 'validationState'>, RenderProps<CalendarRenderProps>, SlotProps {\n /**\n * The amount of days that will be displayed at once. This affects how pagination works.\n * @default {months: 1}\n */\n visibleDuration?: DateDuration\n}\n\nexport interface RangeCalendarProps<T extends DateValue> extends Omit<BaseRangeCalendarProps<T>, 'errorMessage' | 'validationState'>, RenderProps<RangeCalendarRenderProps>, SlotProps {\n /**\n * The amount of days that will be displayed at once. This affects how pagination works.\n * @default {months: 1}\n */\n visibleDuration?: DateDuration\n}\n\nexport const CalendarContext = createContext<ContextValue<CalendarProps<any>, HTMLDivElement>>({});\nexport const RangeCalendarContext = createContext<ContextValue<RangeCalendarProps<any>, HTMLDivElement>>({});\nexport const CalendarStateContext = createContext<CalendarState | null>(null);\nexport const RangeCalendarStateContext = createContext<RangeCalendarState | null>(null);\n\nfunction Calendar<T extends DateValue>(props: CalendarProps<T>, ref: ForwardedRef<HTMLDivElement>) {\n [props, ref] = useContextProps(props, ref, CalendarContext);\n let {locale} = useLocale();\n let state = useCalendarState({\n ...props,\n locale,\n createCalendar\n });\n\n let {calendarProps, prevButtonProps, nextButtonProps, errorMessageProps, title} = useCalendar(props, state);\n\n let renderProps = useRenderProps({\n ...props,\n values: {\n state,\n isDisabled: props.isDisabled || false,\n isInvalid: state.isValueInvalid\n },\n defaultClassName: 'react-aria-Calendar'\n });\n\n return (\n <div\n {...renderProps}\n {...calendarProps}\n ref={ref}\n slot={props.slot || undefined}\n data-disabled={props.isDisabled || undefined}\n data-invalid={state.isValueInvalid || undefined}>\n <Provider\n values={[\n [ButtonContext, {\n slots: {\n previous: prevButtonProps,\n next: nextButtonProps\n }\n }],\n [HeadingContext, {'aria-hidden': true, level: 2, children: title}],\n [CalendarStateContext, state],\n [TextContext, {\n slots: {\n errorMessage: errorMessageProps\n }\n }]\n ]}>\n {/* Add a screen reader only description of the entire visible range rather than\n * a separate heading above each month grid. This is placed first in the DOM order\n * so that it is the first thing a touch screen reader user encounters.\n * In addition, VoiceOver on iOS does not announce the aria-label of the grid\n * elements, so the aria-label of the Calendar is included here as well. */}\n <VisuallyHidden>\n <h2>{calendarProps['aria-label']}</h2>\n </VisuallyHidden>\n {renderProps.children}\n {/* For touch screen readers, add a visually hidden next button after the month grid\n * so it's easy to navigate after reaching the end without going all the way\n * back to the start of the month. */}\n <VisuallyHidden>\n <button\n aria-label={nextButtonProps['aria-label']}\n disabled={nextButtonProps.isDisabled}\n onClick={() => state.focusNextPage()}\n tabIndex={-1} />\n </VisuallyHidden>\n </Provider>\n </div>\n );\n}\n\n/**\n * A calendar displays one or more date grids and allows users to select a single date.\n */\nconst _Calendar = /*#__PURE__*/ (forwardRef as forwardRefType)(Calendar);\nexport {_Calendar as Calendar};\n\nfunction RangeCalendar<T extends DateValue>(props: RangeCalendarProps<T>, ref: ForwardedRef<HTMLDivElement>) {\n [props, ref] = useContextProps(props, ref, RangeCalendarContext);\n let {locale} = useLocale();\n let state = useRangeCalendarState({\n ...props,\n locale,\n createCalendar\n });\n\n let {calendarProps, prevButtonProps, nextButtonProps, errorMessageProps, title} = useRangeCalendar(\n props,\n state,\n ref\n );\n\n let renderProps = useRenderProps({\n ...props,\n values: {\n state,\n isDisabled: props.isDisabled || false,\n isInvalid: state.isValueInvalid\n },\n defaultClassName: 'react-aria-RangeCalendar'\n });\n\n return (\n <div\n {...renderProps}\n {...calendarProps}\n ref={ref}\n slot={props.slot || undefined}\n data-disabled={props.isDisabled || undefined}\n data-invalid={state.isValueInvalid || undefined}>\n <Provider\n values={[\n [ButtonContext, {\n slots: {\n previous: prevButtonProps,\n next: nextButtonProps\n }\n }],\n [HeadingContext, {'aria-hidden': true, level: 2, children: title}],\n [RangeCalendarStateContext, state],\n [TextContext, {\n slots: {\n errorMessage: errorMessageProps\n }\n }]\n ]}>\n {/* Add a screen reader only description of the entire visible range rather than\n * a separate heading above each month grid. This is placed first in the DOM order\n * so that it is the first thing a touch screen reader user encounters.\n * In addition, VoiceOver on iOS does not announce the aria-label of the grid\n * elements, so the aria-label of the Calendar is included here as well. */}\n <VisuallyHidden>\n <h2>{calendarProps['aria-label']}</h2>\n </VisuallyHidden>\n {renderProps.children}\n {/* For touch screen readers, add a visually hidden next button after the month grid\n * so it's easy to navigate after reaching the end without going all the way\n * back to the start of the month. */}\n <VisuallyHidden>\n <button\n aria-label={nextButtonProps['aria-label']}\n disabled={nextButtonProps.isDisabled}\n onClick={() => state.focusNextPage()}\n tabIndex={-1} />\n </VisuallyHidden>\n </Provider>\n </div>\n );\n}\n\n/**\n * A range calendar displays one or more date grids and allows users to select a contiguous range of dates.\n */\nconst _RangeCalendar = /*#__PURE__*/ (forwardRef as forwardRefType)(RangeCalendar);\nexport {_RangeCalendar as RangeCalendar};\n\nexport interface CalendarCellRenderProps {\n /** The date that the cell represents. */\n date: CalendarDate,\n /** The day number formatted according to the current locale. */\n formattedDate: string,\n /**\n * Whether the cell is currently hovered with a mouse.\n * @selector [data-hovered]\n */\n isHovered: boolean,\n /**\n * Whether the cell is currently being pressed.\n * @selector [data-pressed]\n */\n isPressed: boolean,\n /**\n * Whether the cell is selected.\n * @selector [data-selected]\n */\n isSelected: boolean,\n /**\n * Whether the cell is the first date in a range selection.\n * @selector [data-selection-start]\n */\n isSelectionStart: boolean,\n /**\n * Whether the cell is the last date in a range selection.\n * @selector [data-selection-end]\n */\n isSelectionEnd: boolean,\n /**\n * Whether the cell is focused.\n * @selector [data-focused]\n */\n isFocused: boolean,\n /**\n * Whether the cell is keyboard focused.\n * @selector [data-focus-visible]\n */\n isFocusVisible: boolean,\n /**\n * Whether the cell is disabled, according to the calendar's `minValue`, `maxValue`, and `isDisabled` props.\n * Disabled dates are not focusable, and cannot be selected by the user. They are typically\n * displayed with a dimmed appearance.\n * @selector [data-disabled]\n */\n isDisabled: boolean,\n /**\n * Whether the cell is outside the visible range of the calendar.\n * For example, dates before the first day of a month in the same week.\n * @selector [data-outside-visible-range]\n */\n isOutsideVisibleRange: boolean,\n /**\n * Whether the cell is outside the current month.\n * @selector [data-outside-month]\n */\n isOutsideMonth: boolean,\n /**\n * Whether the cell is unavailable, according to the calendar's `isDateUnavailable` prop. Unavailable dates remain\n * focusable, but cannot be selected by the user. They should be displayed with a visual affordance to indicate they\n * are unavailable, such as a different color or a strikethrough.\n *\n * Note that because they are focusable, unavailable dates must meet a 4.5:1 color contrast ratio,\n * [as defined by WCAG](https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html).\n *\n * @selector [data-unavailable]\n */\n isUnavailable: boolean,\n /**\n * Whether the cell is part of an invalid selection.\n * @selector [data-invalid]\n */\n isInvalid: boolean\n}\n\nexport interface CalendarGridProps extends StyleProps {\n /**\n * Either a function to render calendar cells for each date in the month,\n * or children containing a `<CalendarGridHeader>`` and `<CalendarGridBody>`\n * when additional customization is needed.\n */\n children?: ReactElement | ReactElement[] | ((date: CalendarDate) => ReactElement),\n /**\n * An offset from the beginning of the visible date range that this\n * CalendarGrid should display. Useful when displaying more than one\n * month at a time.\n */\n offset?: DateDuration,\n /**\n * The style of weekday names to display in the calendar grid header,\n * e.g. single letter, abbreviation, or full day name.\n * @default \"narrow\"\n */\n weekdayStyle?: 'narrow' | 'short' | 'long'\n}\n\ninterface InternalCalendarGridContextValue {\n headerProps: DOMAttributes<FocusableElement>,\n weekDays: string[],\n startDate: CalendarDate\n}\n\nconst InternalCalendarGridContext = createContext<InternalCalendarGridContextValue | null>(null);\n\nfunction CalendarGrid(props: CalendarGridProps, ref: ForwardedRef<HTMLTableElement>) {\n let calendarState = useContext(CalendarStateContext);\n let rangeCalendarState = useContext(RangeCalendarStateContext);\n let state = calendarState ?? rangeCalendarState!;\n let startDate = state.visibleRange.start;\n if (props.offset) {\n startDate = startDate.add(props.offset);\n }\n\n let {gridProps, headerProps, weekDays} = useCalendarGrid({\n startDate,\n endDate: endOfMonth(startDate),\n weekdayStyle: props.weekdayStyle\n }, state);\n\n return (\n <InternalCalendarGridContext.Provider value={{headerProps, weekDays, startDate}}>\n <table\n {...filterDOMProps(props as any)}\n {...gridProps}\n ref={ref}\n style={props.style}\n className={props.className ?? 'react-aria-CalendarGrid'}>\n {typeof props.children !== 'function'\n ? props.children\n : (<>\n <CalendarGridHeaderForwardRef>\n {day => <CalendarHeaderCellForwardRef>{day}</CalendarHeaderCellForwardRef>}\n </CalendarGridHeaderForwardRef>\n <CalendarGridBodyForwardRef>\n {props.children}\n </CalendarGridBodyForwardRef>\n </>)\n }\n </table>\n </InternalCalendarGridContext.Provider>\n );\n}\n\n/**\n * A calendar grid displays a single grid of days within a calendar or range calendar which\n * can be keyboard navigated and selected by the user.\n */\nconst _CalendarGrid = /*#__PURE__*/ (forwardRef as forwardRefType)(CalendarGrid);\nexport {_CalendarGrid as CalendarGrid};\n\nexport interface CalendarGridHeaderProps extends StyleProps {\n /** A function to render a `<CalendarHeaderCell>` for a weekday name. */\n children: (day: string) => ReactElement\n}\n\nfunction CalendarGridHeader(props: CalendarGridHeaderProps, ref: ForwardedRef<HTMLTableSectionElement>) {\n let {children, style, className} = props;\n let {headerProps, weekDays} = useContext(InternalCalendarGridContext)!;\n\n return (\n <thead\n {...filterDOMProps(props as any)}\n {...headerProps}\n ref={ref}\n style={style}\n className={className || 'react-aria-CalendarGridHeader'}>\n <tr>\n {weekDays.map((day, key) => React.cloneElement(children(day), {key}))}\n </tr>\n </thead>\n );\n}\n\n/**\n * A calendar grid header displays a row of week day names at the top of a month.\n */\nconst CalendarGridHeaderForwardRef = /*#__PURE__*/ (forwardRef as forwardRefType)(CalendarGridHeader);\nexport {CalendarGridHeaderForwardRef as CalendarGridHeader};\n\nexport interface CalendarHeaderCellProps extends DOMProps {}\n\nfunction CalendarHeaderCell(props: CalendarHeaderCellProps, ref: ForwardedRef<HTMLTableCellElement>) {\n let {children, style, className} = props;\n return (\n <th\n {...filterDOMProps(props as any)}\n ref={ref}\n style={style}\n className={className || 'react-aria-CalendarHeaderCell'}>\n {children}\n </th>\n );\n}\n\n/**\n * A calendar header cell displays a week day name at the top of a column within a calendar.\n */\nconst CalendarHeaderCellForwardRef = forwardRef(CalendarHeaderCell);\nexport {CalendarHeaderCellForwardRef as CalendarHeaderCell};\n\nexport interface CalendarGridBodyProps extends StyleProps {\n /** A function to render a `<CalendarCell>` for a given date. */\n children: (date: CalendarDate) => ReactElement\n}\n\nfunction CalendarGridBody(props: CalendarGridBodyProps, ref: ForwardedRef<HTMLTableSectionElement>) {\n let {children, style, className} = props;\n let calendarState = useContext(CalendarStateContext);\n let rangeCalendarState = useContext(RangeCalendarStateContext);\n let state = calendarState ?? rangeCalendarState!;\n let {startDate} = useContext(InternalCalendarGridContext)!;\n let {locale} = useLocale();\n let weeksInMonth = getWeeksInMonth(startDate, locale);\n\n return (\n <tbody\n {...filterDOMProps(props as any)}\n ref={ref}\n style={style}\n className={className || 'react-aria-CalendarGridBody'}>\n {[...new Array(weeksInMonth).keys()].map((weekIndex) => (\n <tr key={weekIndex}>\n {state.getDatesInWeek(weekIndex, startDate).map((date, i) => (\n date\n ? React.cloneElement(children(date), {key: i})\n : <td key={i} />\n ))}\n </tr>\n ))}\n </tbody>\n );\n}\n\n/**\n * A calendar grid body displays a grid of calendar cells within a month.\n */\nconst CalendarGridBodyForwardRef = /*#__PURE__*/ (forwardRef as forwardRefType)(CalendarGridBody);\nexport {CalendarGridBodyForwardRef as CalendarGridBody};\n\nexport interface CalendarCellProps extends RenderProps<CalendarCellRenderProps>, HoverEvents {\n /** The date to render in the cell. */\n date: CalendarDate\n}\n\nfunction CalendarCell({date, ...otherProps}: CalendarCellProps, ref: ForwardedRef<HTMLTableCellElement>) {\n let calendarState = useContext(CalendarStateContext);\n let rangeCalendarState = useContext(RangeCalendarStateContext);\n let state = calendarState ?? rangeCalendarState!;\n let {startDate: currentMonth} = useContext(InternalCalendarGridContext) ?? {startDate: state.visibleRange.start};\n let buttonRef = useRef<HTMLDivElement>(null);\n let {cellProps, buttonProps, ...states} = useCalendarCell(\n {date},\n state,\n buttonRef\n );\n\n let {hoverProps, isHovered} = useHover({...otherProps, isDisabled: states.isDisabled});\n let {focusProps, isFocusVisible} = useFocusRing();\n isFocusVisible &&= states.isFocused;\n let isOutsideMonth = !isSameMonth(currentMonth, date);\n let isSelectionStart = false;\n let isSelectionEnd = false;\n if ('highlightedRange' in state && state.highlightedRange) {\n isSelectionStart = isSameDay(date, state.highlightedRange.start);\n isSelectionEnd = isSameDay(date, state.highlightedRange.end);\n }\n\n let renderProps = useRenderProps({\n ...otherProps,\n defaultChildren: states.formattedDate,\n defaultClassName: 'react-aria-CalendarCell',\n values: {\n date,\n isHovered,\n isOutsideMonth,\n isFocusVisible,\n isSelectionStart,\n isSelectionEnd,\n ...states\n }\n });\n\n let dataAttrs = {\n 'data-focused': states.isFocused || undefined,\n 'data-hovered': isHovered || undefined,\n 'data-pressed': states.isPressed || undefined,\n 'data-unavailable': states.isUnavailable || undefined,\n 'data-disabled': states.isDisabled || undefined,\n 'data-focus-visible': isFocusVisible || undefined,\n 'data-outside-visible-range': states.isOutsideVisibleRange || undefined,\n 'data-outside-month': isOutsideMonth || undefined,\n 'data-selected': states.isSelected || undefined,\n 'data-selection-start': isSelectionStart || undefined,\n 'data-selection-end': isSelectionEnd || undefined,\n 'data-invalid': states.isInvalid || undefined\n };\n\n return (\n <td {...cellProps} ref={ref}>\n <div {...mergeProps(filterDOMProps(otherProps as any), buttonProps, focusProps, hoverProps, dataAttrs, renderProps)} ref={buttonRef} />\n </td>\n );\n}\n\n/**\n * A calendar cell displays a date cell within a calendar grid which can be selected by the user.\n */\nconst _CalendarCell = /*#__PURE__*/ (forwardRef as forwardRefType)(CalendarCell);\nexport {_CalendarCell as CalendarCell};\n","/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport React, {createContext, ForwardedRef, forwardRef, useContext} from 'react';\nimport {RenderProps, useRenderProps} from './utils';\nimport {Text} from './Text';\nimport {ValidationResult} from '@react-types/shared';\n\nexport const FieldErrorContext = createContext<ValidationResult | null>(null);\n\nexport interface FieldErrorRenderProps extends ValidationResult {}\nexport interface FieldErrorProps extends RenderProps<FieldErrorRenderProps> {}\n\nfunction FieldError(props: FieldErrorProps, ref: ForwardedRef<HTMLElement>) {\n let validation = useContext(FieldErrorContext);\n if (!validation?.isInvalid) {\n return null;\n }\n\n return <FieldErrorInner {...props} ref={ref} />;\n}\n\n/**\n * A FieldError displays validation errors for a form field.\n */\nconst _FieldError = forwardRef(FieldError);\nexport {_FieldError as FieldError};\n\nconst FieldErrorInner = forwardRef((props: FieldErrorProps, ref: ForwardedRef<HTMLElement>) => {\n let validation = useContext(FieldErrorContext)!;\n let renderProps = useRenderProps({\n ...props,\n defaultClassName: 'react-aria-FieldError',\n defaultChildren: validation.validationErrors.join(' '),\n values: validation\n });\n\n return <Text slot=\"errorMessage\" {...renderProps} ref={ref} />;\n});\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {ContextValue, createHideableComponent, useContextProps} from './utils';\nimport React, {createContext, ForwardedRef, LabelHTMLAttributes} from 'react';\n\nexport interface LabelProps extends LabelHTMLAttributes<HTMLLabelElement> {\n elementType?: string\n}\n\nexport const LabelContext = createContext<ContextValue<LabelProps, HTMLLabelElement>>({});\n\nfunction Label(props: LabelProps, ref: ForwardedRef<HTMLLabelElement>) {\n [props, ref] = useContextProps(props, ref, LabelContext);\n let {elementType: ElementType = 'label', ...labelProps} = props;\n // @ts-ignore\n return <ElementType className=\"react-aria-Label\" {...labelProps} ref={ref} />;\n}\n\nconst _Label = /*#__PURE__*/ createHideableComponent(Label);\nexport {_Label as Label};\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLabelingProps, DOMProps} from '@react-types/shared';\nimport {ContextValue, forwardRefType, RenderProps, SlotProps, useContextProps, useRenderProps} from './utils';\nimport {HoverProps, mergeProps, useFocusRing, useHover} from 'react-aria';\nimport React, {createContext, ForwardedRef, forwardRef, HTMLAttributes} from 'react';\n\nexport interface GroupRenderProps {\n /**\n * Whether the group is currently hovered with a mouse.\n * @selector [data-hovered]\n */\n isHovered: boolean,\n /**\n * Whether an element within the group is focused, either via a mouse or keyboard.\n * @selector [data-focus-within]\n */\n isFocusWithin: boolean,\n /**\n * Whether an element within the group is keyboard focused.\n * @selector [data-focus-visible]\n */\n isFocusVisible: boolean,\n /**\n * Whether the group is disabled.\n * @selector [data-disabled]\n */\n isDisabled: boolean,\n /**\n * Whether the group is invalid.\n * @selector [data-invalid]\n */\n isInvalid: boolean\n}\n\nexport interface GroupProps extends AriaLabelingProps, Omit<HTMLAttributes<HTMLElement>, 'children' | 'className' | 'style' | 'role' | 'slot'>, DOMProps, HoverProps, RenderProps<GroupRenderProps>, SlotProps {\n /** Whether the group is disabled. */\n isDisabled?: boolean,\n /** Whether the group is invalid. */\n isInvalid?: boolean,\n /**\n * An accessibility role for the group. By default, this is set to `'group'`.\n * Use `'region'` when the contents of the group is important enough to be\n * included in the page table of contents. Use `'presentation'` if the group\n * is visual only and does not represent a semantic grouping of controls.\n * @default 'group'\n */\n role?: 'group' | 'region' | 'presentation'\n}\n\nexport const GroupContext = createContext<ContextValue<GroupProps, HTMLDivElement>>({});\n\nfunction Group(props: GroupProps, ref: ForwardedRef<HTMLDivElement>) {\n [props, ref] = useContextProps(props, ref, GroupContext);\n let {isDisabled, isInvalid, onHoverStart, onHoverChange, onHoverEnd, ...otherProps} = props;\n\n let {hoverProps, isHovered} = useHover({onHoverStart, onHoverChange, onHoverEnd, isDisabled});\n let {isFocused, isFocusVisible, focusProps} = useFocusRing({\n within: true\n });\n\n isDisabled ??= !!props['aria-disabled'] && props['aria-disabled'] !== 'false';\n isInvalid ??= !!props['aria-invalid'] && props['aria-invalid'] !== 'false';\n let renderProps = useRenderProps({\n ...props,\n values: {isHovered, isFocusWithin: isFocused, isFocusVisible, isDisabled, isInvalid},\n defaultClassName: 'react-aria-Group'\n });\n\n return (\n <div\n {...mergeProps(otherProps, focusProps, hoverProps)}\n {...renderProps}\n ref={ref}\n role={props.role ?? 'group'}\n slot={props.slot ?? undefined}\n data-focus-within={isFocused || undefined}\n data-hovered={isHovered || undefined}\n data-focus-visible={isFocusVisible || undefined}\n data-disabled={isDisabled || undefined}\n data-invalid={isInvalid || undefined}>\n {renderProps.children}\n </div>\n );\n}\n\n/**\n * A group represents a set of related UI controls, and supports interactive states for styling.\n */\nconst _Group = /*#__PURE__*/ (forwardRef as forwardRefType)(Group);\nexport {_Group as Group};\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {ContextValue, createHideableComponent, StyleRenderProps, useContextProps, useRenderProps} from './utils';\nimport {HoverEvents, mergeProps, useFocusRing, useHover} from 'react-aria';\nimport React, {createContext, ForwardedRef, InputHTMLAttributes} from 'react';\n\nexport interface InputRenderProps {\n /**\n * Whether the input is currently hovered with a mouse.\n * @selector [data-hovered]\n */\n isHovered: boolean,\n /**\n * Whether the input is focused, either via a mouse or keyboard.\n * @selector [data-focused]\n */\n isFocused: boolean,\n /**\n * Whether the input is keyboard focused.\n * @selector [data-focus-visible]\n */\n isFocusVisible: boolean,\n /**\n * Whether the input is disabled.\n * @selector [data-disabled]\n */\n isDisabled: boolean,\n /**\n * Whether the input is invalid.\n * @selector [data-invalid]\n */\n isInvalid: boolean\n}\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'className' | 'style'>, HoverEvents, StyleRenderProps<InputRenderProps> {}\n\nexport const InputContext = createContext<ContextValue<InputProps, HTMLInputElement>>({});\n\nlet filterHoverProps = (props: InputProps) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let {onHoverStart, onHoverChange, onHoverEnd, ...otherProps} = props;\n return otherProps;\n};\n\nfunction Input(props: InputProps, ref: ForwardedRef<HTMLInputElement>) {\n [props, ref] = useContextProps(props, ref, InputContext);\n\n let {hoverProps, isHovered} = useHover(props);\n let {isFocused, isFocusVisible, focusProps} = useFocusRing({\n isTextInput: true,\n autoFocus: props.autoFocus\n });\n\n let isInvalid = !!props['aria-invalid'] && props['aria-invalid'] !== 'false';\n let renderProps = useRenderProps({\n ...props,\n values: {\n isHovered,\n isFocused,\n isFocusVisible,\n isDisabled: props.disabled || false,\n isInvalid\n },\n defaultClassName: 'react-aria-Input'\n });\n\n return (\n <input\n {...mergeProps(filterHoverProps(props), focusProps, hoverProps)}\n {...renderProps}\n ref={ref}\n data-focused={isFocused || undefined}\n data-disabled={props.disabled || undefined}\n data-hovered={isHovered || undefined}\n data-focus-visible={isFocusVisible || undefined}\n data-invalid={isInvalid || undefined} />\n );\n}\n\n/**\n * An input allows a user to input text.\n */\nconst _Input = /*#__PURE__*/ createHideableComponent(Input);\nexport {_Input as Input};\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n DropIndicatorProps as AriaDropIndicatorProps,\n DraggableCollectionOptions,\n DraggableItemProps,\n DraggableItemResult,\n DragItem,\n DragPreview,\n DropIndicatorAria,\n DroppableCollectionOptions,\n DroppableCollectionResult,\n DroppableItemOptions,\n DroppableItemResult,\n DropTarget,\n DropTargetDelegate,\n ListDropTargetDelegate,\n useDraggableCollection,\n useDraggableItem,\n useDropIndicator,\n useDroppableCollection,\n useDroppableItem\n} from 'react-aria';\nimport {DraggableCollectionProps, DroppableCollectionProps, Key} from '@react-types/shared';\nimport {\n DraggableCollectionState,\n DraggableCollectionStateOptions,\n DroppableCollectionState,\n DroppableCollectionStateOptions,\n useDraggableCollectionState,\n useDroppableCollectionState\n} from 'react-stately';\nimport React, {createContext, ForwardedRef, forwardRef, JSX, ReactNode, RefObject, useContext, useMemo} from 'react';\nimport {RenderProps} from './utils';\n\ninterface DraggableCollectionStateOpts extends Omit<DraggableCollectionStateOptions, 'getItems'> {}\n\ninterface DragHooks {\n useDraggableCollectionState?: (props: DraggableCollectionStateOpts) => DraggableCollectionState,\n useDraggableCollection?: (props: DraggableCollectionOptions, state: DraggableCollectionState, ref: RefObject<HTMLElement>) => void,\n useDraggableItem?: (props: DraggableItemProps, state: DraggableCollectionState) => DraggableItemResult,\n DragPreview?: typeof DragPreview,\n renderDragPreview?: (items: DragItem[]) => JSX.Element\n}\n\ninterface DropHooks {\n useDroppableCollectionState?: (props: DroppableCollectionStateOptions) => DroppableCollectionState,\n useDroppableCollection?: (props: DroppableCollectionOptions, state: DroppableCollectionState, ref: RefObject<HTMLElement>) => DroppableCollectionResult,\n useDroppableItem?: (options: DroppableItemOptions, state: DroppableCollectionState, ref: RefObject<HTMLElement>) => DroppableItemResult,\n useDropIndicator?: (props: AriaDropIndicatorProps, state: DroppableCollectionState, ref: RefObject<HTMLElement>) => DropIndicatorAria,\n renderDropIndicator?: (target: DropTarget) => JSX.Element,\n dropTargetDelegate?: DropTargetDelegate,\n ListDropTargetDelegate: typeof ListDropTargetDelegate\n}\n\nexport type DragAndDropHooks = DragHooks & DropHooks;\n\nexport interface DragAndDrop {\n /** Drag and drop hooks for the collection element. */\n dragAndDropHooks: DragAndDropHooks\n}\n\nexport interface DragAndDropOptions extends Omit<DraggableCollectionProps, 'preview' | 'getItems'>, DroppableCollectionProps {\n /**\n * A function that returns the items being dragged. If not specified, we assume that the collection is not draggable.\n * @default () => []\n */\n getItems?: (keys: Set<Key>) => DragItem[],\n /**\n * A function that renders a drag preview, which is shown under the user's cursor while dragging.\n * By default, a copy of the dragged element is rendered.\n */\n renderDragPreview?: (items: DragItem[]) => JSX.Element,\n /**\n * A function that renders a drop indicator element between two items in a collection.\n * This should render a `<DropIndicator>` element. If this function is not provided, a\n * default DropIndicator is provided.\n */\n renderDropIndicator?: (target: DropTarget) => JSX.Element,\n /** A custom delegate object that provides drop targets for pointer coordinates within the collection. */\n dropTargetDelegate?: DropTargetDelegate\n}\n\n/**\n * Provides the hooks required to enable drag and drop behavior for a drag and drop compatible collection component.\n */\nexport function useDragAndDrop(options: DragAndDropOptions): DragAndDrop {\n let dragAndDropHooks = useMemo(() => {\n let {\n onDrop,\n onInsert,\n onItemDrop,\n onReorder,\n onRootDrop,\n getItems,\n renderDragPreview,\n renderDropIndicator,\n dropTargetDelegate\n } = options;\n\n let isDraggable = !!getItems;\n let isDroppable = !!(onDrop || onInsert || onItemDrop || onReorder || onRootDrop);\n\n let hooks = {} as DragHooks & DropHooks;\n if (isDraggable) {\n hooks.useDraggableCollectionState = function useDraggableCollectionStateOverride(props: DraggableCollectionStateOpts) {\n return useDraggableCollectionState({...props, ...options} as DraggableCollectionStateOptions);\n };\n hooks.useDraggableCollection = useDraggableCollection;\n hooks.useDraggableItem = useDraggableItem;\n hooks.DragPreview = DragPreview;\n hooks.renderDragPreview = renderDragPreview;\n }\n\n if (isDroppable) {\n hooks.useDroppableCollectionState = function useDroppableCollectionStateOverride(props: DroppableCollectionStateOptions) {\n return useDroppableCollectionState({...props, ...options});\n };\n hooks.useDroppableItem = useDroppableItem;\n hooks.useDroppableCollection = function useDroppableCollectionOverride(props: DroppableCollectionOptions, state: DroppableCollectionState, ref: RefObject<HTMLElement>) {\n return useDroppableCollection({...props, ...options}, state, ref);\n };\n hooks.useDropIndicator = useDropIndicator;\n hooks.renderDropIndicator = renderDropIndicator;\n hooks.dropTargetDelegate = dropTargetDelegate;\n hooks.ListDropTargetDelegate = ListDropTargetDelegate;\n }\n\n return hooks;\n }, [options]);\n\n return {\n dragAndDropHooks\n };\n}\n\nexport const DropIndicatorContext = createContext<DropIndicatorContextValue | null>(null);\n\nexport interface DropIndicatorRenderProps {\n /**\n * Whether the drop indicator is currently the active drop target.\n * @selector [data-drop-target]\n */\n isDropTarget: boolean\n}\n\nexport interface DropIndicatorProps extends AriaDropIndicatorProps, RenderProps<DropIndicatorRenderProps> {}\n\ninterface DropIndicatorContextValue {\n render: (props: DropIndicatorProps, ref: ForwardedRef<HTMLElement>) => ReactNode\n}\n\nfunction DropIndicator(props: DropIndicatorProps, ref: ForwardedRef<HTMLElement>): JSX.Element {\n let {render} = useContext(DropIndicatorContext)!;\n return <>{render(props, ref)}</>;\n}\n\n/**\n * A DropIndicator is rendered between items in a collection to indicate where dropped data will be inserted.\n */\nconst _DropIndicator = forwardRef(DropIndicator);\nexport {_DropIndicator as DropIndicator};\n\nexport interface DragAndDropContextValue {\n dragAndDropHooks?: DragAndDropHooks,\n dragState?: DraggableCollectionState,\n dropState?: DroppableCollectionState\n}\n\nexport const DragAndDropContext = createContext<DragAndDropContextValue>({});\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {ContextValue, useContextProps} from './utils';\nimport React, {createContext, ForwardedRef, forwardRef, HTMLAttributes} from 'react';\nimport {useShallowRender} from './Collection';\n\nexport const HeaderContext = createContext<ContextValue<HTMLAttributes<HTMLElement>, HTMLElement>>({});\n\nfunction Header(originalProps: HTMLAttributes<HTMLElement>, originalRef: ForwardedRef<HTMLElement>) {\n let [props, ref] = useContextProps(originalProps, originalRef, HeaderContext);\n let shallow = useShallowRender('header', originalProps, originalRef);\n if (shallow) {\n return shallow;\n }\n\n return (\n <header className=\"react-aria-Header\" {...props} ref={ref}>\n {props.children}\n </header>\n );\n}\n\nconst _Header = forwardRef(Header);\nexport {_Header as Header};\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {SeparatorProps as AriaSeparatorProps, useSeparator} from 'react-aria';\nimport {ContextValue, SlotProps, StyleProps, useContextProps} from './utils';\nimport {filterDOMProps} from '@react-aria/utils';\nimport React, {createContext, ElementType, ForwardedRef, forwardRef} from 'react';\nimport {useShallowRender} from './Collection';\n\nexport interface SeparatorProps extends AriaSeparatorProps, StyleProps, SlotProps {}\n\nexport const SeparatorContext = createContext<ContextValue<SeparatorProps, HTMLElement>>({});\n\nfunction Separator(originalProps: SeparatorProps, originalRef: ForwardedRef<HTMLElement>) {\n let [props, ref] = useContextProps(originalProps, originalRef, SeparatorContext);\n let {elementType, orientation, style, className} = props;\n let Element = (elementType as ElementType) || 'hr';\n if (Element === 'hr' && orientation === 'vertical') {\n Element = 'div';\n }\n\n let {separatorProps} = useSeparator({\n elementType,\n orientation\n });\n\n let shallow = useShallowRender('separator', originalProps, originalRef);\n if (shallow) {\n return shallow;\n }\n\n return (\n <Element\n {...filterDOMProps(props)}\n {...separatorProps}\n style={style}\n className={className ?? 'react-aria-Separator'}\n ref={ref}\n slot={props.slot || undefined} />\n );\n}\n\nconst _Separator = forwardRef(Separator);\nexport {_Separator as Separator};\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaListBoxOptions, AriaListBoxProps, DraggableItemResult, DragPreviewRenderer, DroppableCollectionResult, DroppableItemResult, FocusScope, ListKeyboardDelegate, mergeProps, useCollator, useFocusRing, useHover, useListBox, useListBoxSection, useLocale, useOption} from 'react-aria';\nimport {CollectionDocumentContext, CollectionPortal, CollectionProps, ItemRenderProps, useCachedChildren, useCollection, useSSRCollectionNode} from './Collection';\nimport {ContextValue, forwardRefType, HiddenContext, Provider, RenderProps, ScrollableProps, SlotProps, StyleProps, StyleRenderProps, useContextProps, useRenderProps, useSlot} from './utils';\nimport {DragAndDropContext, DragAndDropHooks, DropIndicator, DropIndicatorContext, DropIndicatorProps} from './useDragAndDrop';\nimport {DraggableCollectionState, DroppableCollectionState, ListState, Node, Orientation, SelectionBehavior, useListState} from 'react-stately';\nimport {filterDOMProps, mergeRefs, useObjectRef} from '@react-aria/utils';\nimport {Header} from './Header';\nimport {Key, LinkDOMProps} from '@react-types/shared';\nimport React, {createContext, ForwardedRef, forwardRef, JSX, ReactNode, RefObject, useContext, useEffect, useMemo, useRef} from 'react';\nimport {Separator, SeparatorContext} from './Separator';\nimport {TextContext} from './Text';\n\nexport interface ListBoxRenderProps {\n /**\n * Whether the listbox has no items and should display its empty state.\n * @selector [data-empty]\n */\n isEmpty: boolean,\n /**\n * Whether the listbox is currently focused.\n * @selector [data-focused]\n */\n isFocused: boolean,\n /**\n * Whether the listbox is currently keyboard focused.\n * @selector [data-focus-visible]\n */\n isFocusVisible: boolean,\n /**\n * Whether the listbox is currently the active drop target.\n * @selector [data-drop-target]\n */\n isDropTarget: boolean,\n /**\n * Whether the items are arranged in a stack or grid.\n * @selector [data-layout=\"stack | grid\"]\n */\n layout: 'stack' | 'grid',\n /**\n * State of the listbox.\n */\n state: ListState<unknown>\n}\n\nexport interface ListBoxProps<T> extends Omit<AriaListBoxProps<T>, 'children' | 'label'>, CollectionProps<T>, StyleRenderProps<ListBoxRenderProps>, SlotProps, ScrollableProps<HTMLDivElement> {\n /** How multiple selection should behave in the collection. */\n selectionBehavior?: SelectionBehavior,\n /** The drag and drop hooks returned by `useDragAndDrop` used to enable drag and drop behavior for the ListBox. */\n dragAndDropHooks?: DragAndDropHooks,\n /** Provides content to display when there are no items in the list. */\n renderEmptyState?: (props: ListBoxRenderProps) => ReactNode,\n /**\n * Whether the items are arranged in a stack or grid.\n * @default 'stack'\n */\n layout?: 'stack' | 'grid',\n /**\n * The primary orientation of the items. Usually this is the\n * direction that the collection scrolls.\n * @default 'vertical'\n */\n orientation?: Orientation\n}\n\nexport const ListBoxContext = createContext<ContextValue<ListBoxProps<any>, HTMLDivElement>>(null);\nexport const ListStateContext = createContext<ListState<any> | null>(null);\n\nfunction ListBox<T extends object>(props: ListBoxProps<T>, ref: ForwardedRef<HTMLDivElement>) {\n [props, ref] = useContextProps(props, ref, ListBoxContext);\n let isHidden = useContext(HiddenContext);\n let state = useContext(ListStateContext);\n let document = useContext(CollectionDocumentContext);\n\n // The structure of ListBox is a bit strange because it needs to work inside other components like ComboBox and Select.\n // Those components render two copies of their children so that the collection can be built even when the popover is closed.\n // The first copy sends a collection document via context which we render the collection portal into.\n // The second copy sends a ListState object via context which we use to render the ListBox without rebuilding the state.\n // Otherwise, we have a standalone ListBox, so we need to create a collection and state ourselves.\n\n if (document) {\n return <CollectionPortal {...props} />;\n }\n\n if (state) {\n return isHidden ? null : <ListBoxInner state={state} props={props} listBoxRef={ref} />;\n }\n\n return <StandaloneListBox props={props} listBoxRef={ref} />;\n}\n\nfunction StandaloneListBox({props, listBoxRef}) {\n let {portal, collection} = useCollection(props);\n props = {...props, collection, children: null, items: null};\n let state = useListState(props);\n return (\n <>\n {portal}\n <ListBoxInner state={state} props={props} listBoxRef={listBoxRef} />\n </>\n );\n}\n\n/**\n * A listbox displays a list of options and allows a user to select one or more of them.\n */\nconst _ListBox = /*#__PURE__*/ (forwardRef as forwardRefType)(ListBox);\nexport {_ListBox as ListBox};\n\ninterface ListBoxInnerProps<T> {\n state: ListState<T>,\n props: ListBoxProps<T> & AriaListBoxOptions<T>,\n listBoxRef: RefObject<HTMLDivElement>\n}\n\nfunction ListBoxInner<T>({state, props, listBoxRef}: ListBoxInnerProps<T>) {\n let {dragAndDropHooks, layout = 'stack', orientation = 'vertical'} = props;\n let {collection, selectionManager} = state;\n let isListDraggable = !!dragAndDropHooks?.useDraggableCollectionState;\n let isListDroppable = !!dragAndDropHooks?.useDroppableCollectionState;\n let {direction} = useLocale();\n let {disabledBehavior, disabledKeys} = selectionManager;\n let collator = useCollator({usage: 'search', sensitivity: 'base'});\n let keyboardDelegate = useMemo(() => (\n props.keyboardDelegate || new ListKeyboardDelegate({\n collection,\n collator,\n ref: listBoxRef,\n disabledKeys: disabledBehavior === 'selection' ? new Set<Key>() : disabledKeys,\n layout,\n orientation,\n direction\n })\n ), [collection, collator, listBoxRef, disabledBehavior, disabledKeys, orientation, direction, props.keyboardDelegate, layout]);\n\n let {listBoxProps} = useListBox({\n ...props,\n shouldSelectOnPressUp: isListDraggable || props.shouldSelectOnPressUp,\n keyboardDelegate\n }, state, listBoxRef);\n\n let children = useCachedChildren({\n items: collection,\n children: (item: Node<T>) => {\n switch (item.type) {\n case 'section':\n return <ListBoxSection section={item} />;\n case 'separator':\n return <Separator {...item.props} />;\n case 'item':\n return <Option item={item} />;\n default:\n throw new Error('Unsupported node type in Menu: ' + item.type);\n }\n }\n });\n\n let dragHooksProvided = useRef(isListDraggable);\n let dropHooksProvided = useRef(isListDroppable);\n useEffect(() => {\n if (dragHooksProvided.current !== isListDraggable) {\n console.warn('Drag hooks were provided during one render, but not another. This should be avoided as it may produce unexpected behavior.');\n }\n if (dropHooksProvided.current !== isListDroppable) {\n console.warn('Drop hooks were provided during one render, but not another. This should be avoided as it may produce unexpected behavior.');\n }\n }, [isListDraggable, isListDroppable]);\n\n let dragState: DraggableCollectionState | undefined = undefined;\n let dropState: DroppableCollectionState | undefined = undefined;\n let droppableCollection: DroppableCollectionResult | undefined = undefined;\n let isRootDropTarget = false;\n let dragPreview: JSX.Element | null = null;\n let preview = useRef<DragPreviewRenderer>(null);\n\n if (isListDraggable && dragAndDropHooks) {\n dragState = dragAndDropHooks.useDraggableCollectionState!({\n collection,\n selectionManager,\n preview: dragAndDropHooks.renderDragPreview ? preview : undefined\n });\n dragAndDropHooks.useDraggableCollection!({}, dragState, listBoxRef);\n\n let DragPreview = dragAndDropHooks.DragPreview!;\n dragPreview = dragAndDropHooks.renderDragPreview\n ? <DragPreview ref={preview}>{dragAndDropHooks.renderDragPreview}</DragPreview>\n : null;\n }\n\n if (isListDroppable && dragAndDropHooks) {\n dropState = dragAndDropHooks.useDroppableCollectionState!({\n collection,\n selectionManager\n });\n\n let dropTargetDelegate = dragAndDropHooks.dropTargetDelegate || new dragAndDropHooks.ListDropTargetDelegate(collection, listBoxRef, {orientation, layout, direction});\n droppableCollection = dragAndDropHooks.useDroppableCollection!({\n keyboardDelegate,\n dropTargetDelegate\n }, dropState, listBoxRef);\n\n isRootDropTarget = dropState.isDropTarget({type: 'root'});\n }\n\n let {focusProps, isFocused, isFocusVisible} = useFocusRing();\n let renderValues = {\n isDropTarget: isRootDropTarget,\n isEmpty: state.collection.size === 0,\n isFocused,\n isFocusVisible,\n layout: props.layout || 'stack',\n state\n };\n let renderProps = useRenderProps({\n className: props.className,\n style: props.style,\n defaultClassName: 'react-aria-ListBox',\n values: renderValues\n });\n\n let emptyState: JSX.Element | null = null;\n if (state.collection.size === 0 && props.renderEmptyState) {\n emptyState = (\n <div\n // eslint-disable-next-line\n role=\"option\"\n style={{display: 'contents'}}>\n {props.renderEmptyState(renderValues)}\n </div>\n );\n }\n\n return (\n <FocusScope>\n <div\n {...filterDOMProps(props)}\n {...mergeProps(listBoxProps, focusProps, droppableCollection?.collectionProps)}\n {...renderProps}\n ref={listBoxRef}\n slot={props.slot || undefined}\n onScroll={props.onScroll}\n data-drop-target={isRootDropTarget || undefined}\n data-empty={state.collection.size === 0 || undefined}\n data-focused={isFocused || undefined}\n data-focus-visible={isFocusVisible || undefined}\n data-layout={props.layout || 'stack'}\n data-orientation={props.orientation || 'vertical'}>\n <Provider\n values={[\n [ListBoxContext, props],\n [ListStateContext, state],\n [DragAndDropContext, {dragAndDropHooks, dragState, dropState}],\n [SeparatorContext, {elementType: 'div'}],\n [DropIndicatorContext, {render: ListBoxDropIndicatorWrapper}]\n ]}>\n {children}\n </Provider>\n {emptyState}\n {dragPreview}\n </div>\n </FocusScope>\n );\n}\n\ninterface ListBoxSectionProps<T> extends StyleProps {\n section: Node<T>\n}\n\nfunction ListBoxSection<T>({section, className, style}: ListBoxSectionProps<T>) {\n let state = useContext(ListStateContext)!;\n let [headingRef, heading] = useSlot();\n let {headingProps, groupProps} = useListBoxSection({\n heading,\n 'aria-label': section.props['aria-label'] ?? undefined\n });\n\n let children = useCachedChildren({\n items: state.collection.getChildren!(section.key),\n children: item => {\n switch (item.type) {\n case 'header': {\n return (\n <SectionHeader\n item={item}\n headingProps={headingProps}\n headingRef={headingRef} />\n );\n }\n case 'item':\n return <Option item={item} />;\n default:\n throw new Error('Unsupported element type in Section: ' + item.type);\n }\n }\n });\n\n return (\n <section\n {...filterDOMProps(section.props)}\n {...groupProps}\n className={className || section.props?.className || 'react-aria-Section'}\n style={style || section.props?.style}\n ref={section.props.ref}>\n {children}\n </section>\n );\n}\n\n// This is a separate component so that headingProps.id doesn't override the item key in useCachedChildren.\nfunction SectionHeader({item, headingProps, headingRef}) {\n let {ref, ...otherProps} = item.props;\n return (\n <Header\n {...headingProps}\n {...otherProps}\n ref={mergeRefs(headingRef, ref)}>\n {item.rendered}\n </Header>\n );\n}\n\nexport interface ListBoxItemRenderProps extends ItemRenderProps {}\n\nexport interface ListBoxItemProps<T = object> extends RenderProps<ListBoxItemRenderProps>, LinkDOMProps {\n /** The unique id of the item. */\n id?: Key,\n /** The object value that this item represents. When using dynamic collections, this is set automatically. */\n value?: T,\n /** A string representation of the item's contents, used for features like typeahead. */\n textValue?: string,\n /** An accessibility label for this item. */\n 'aria-label'?: string\n}\n\nfunction ListBoxItem<T extends object>(props: ListBoxItemProps<T>, ref: ForwardedRef<HTMLDivElement>): JSX.Element | null {\n return useSSRCollectionNode('item', props, ref, props.children);\n}\n\n/**\n * A ListBoxItem represents an individual option in a ListBox.\n */\nconst _ListBoxItem = /*#__PURE__*/ (forwardRef as forwardRefType)(ListBoxItem);\nexport {_ListBoxItem as ListBoxItem};\n\ninterface OptionProps<T> {\n item: Node<T>\n}\n\nfunction Option<T>({item}: OptionProps<T>) {\n let ref = useObjectRef<any>(item.props.ref);\n let state = useContext(ListStateContext)!;\n let {dragAndDropHooks, dragState, dropState} = useContext(DragAndDropContext)!;\n let {optionProps, labelProps, descriptionProps, ...states} = useOption(\n {key: item.key, 'aria-label': item.props?.['aria-label']},\n state,\n ref\n );\n\n let {hoverProps, isHovered} = useHover({\n isDisabled: !states.allowsSelection && !states.hasAction\n });\n\n let draggableItem: DraggableItemResult | null = null;\n if (dragState && dragAndDropHooks) {\n draggableItem = dragAndDropHooks.useDraggableItem!({key: item.key}, dragState);\n }\n\n let droppableItem: DroppableItemResult | null = null;\n if (dropState && dragAndDropHooks) {\n droppableItem = dragAndDropHooks.useDroppableItem!({\n target: {type: 'item', key: item.key, dropPosition: 'on'}\n }, dropState, ref);\n }\n\n let props: ListBoxItemProps<T> = item.props;\n let isDragging = dragState && dragState.isDragging(item.key);\n let renderProps = useRenderProps({\n ...props,\n id: undefined,\n children: item.rendered,\n defaultClassName: 'react-aria-ListBoxItem',\n values: {\n ...states,\n isHovered,\n selectionMode: state.selectionManager.selectionMode,\n selectionBehavior: state.selectionManager.selectionBehavior,\n allowsDragging: !!dragState,\n isDragging,\n isDropTarget: droppableItem?.isDropTarget\n }\n });\n\n let renderDropIndicator = dragAndDropHooks?.renderDropIndicator || (target => <DropIndicator target={target} />);\n\n useEffect(() => {\n if (!item.textValue) {\n console.warn('A `textValue` prop is required for <ListBoxItem> elements with non-plain text children in order to support accessibility features such as type to select.');\n }\n }, [item.textValue]);\n\n let ElementType: React.ElementType = props.href ? 'a' : 'div';\n\n return (\n <>\n {dragAndDropHooks?.useDropIndicator &&\n renderDropIndicator({type: 'item', key: item.key, dropPosition: 'before'})\n }\n <ElementType\n {...mergeProps(optionProps, hoverProps, draggableItem?.dragProps, droppableItem?.dropProps)}\n {...renderProps}\n ref={ref}\n data-allows-dragging={!!dragState || undefined}\n data-selected={states.isSelected || undefined}\n data-disabled={states.isDisabled || undefined}\n data-hovered={isHovered || undefined}\n data-focused={states.isFocused || undefined}\n data-focus-visible={states.isFocusVisible || undefined}\n data-pressed={states.isPressed || undefined}\n data-dragging={isDragging || undefined}\n data-drop-target={droppableItem?.isDropTarget || undefined}\n data-selection-mode={state.selectionManager.selectionMode === 'none' ? undefined : state.selectionManager.selectionMode}>\n <Provider\n values={[\n [TextContext, {\n slots: {\n label: labelProps,\n description: descriptionProps\n }\n }]\n ]}>\n {renderProps.children}\n </Provider>\n </ElementType>\n {dragAndDropHooks?.useDropIndicator && state.collection.getKeyAfter(item.key) == null &&\n renderDropIndicator({type: 'item', key: item.key, dropPosition: 'after'})\n }\n </>\n );\n}\n\nfunction ListBoxDropIndicatorWrapper(props: DropIndicatorProps, ref: ForwardedRef<HTMLElement>) {\n ref = useObjectRef(ref);\n let {dragAndDropHooks, dropState} = useContext(DragAndDropContext)!;\n let {dropIndicatorProps, isHidden, isDropTarget} = dragAndDropHooks!.useDropIndicator!(\n props,\n dropState!,\n ref\n );\n\n if (isHidden) {\n return null;\n }\n\n return (\n <ListBoxtDropIndicatorForwardRef {...props} dropIndicatorProps={dropIndicatorProps} isDropTarget={isDropTarget} ref={ref} />\n );\n}\n\ninterface ListBoxDropIndicatorProps extends DropIndicatorProps {\n dropIndicatorProps: React.HTMLAttributes<HTMLElement>,\n isDropTarget: boolean\n}\n\nfunction ListBoxtDropIndicator(props: ListBoxDropIndicatorProps, ref: ForwardedRef<HTMLElement>) {\n let {\n dropIndicatorProps,\n isDropTarget,\n ...otherProps\n } = props;\n\n let renderProps = useRenderProps({\n ...otherProps,\n defaultClassName: 'react-aria-DropIndicator',\n values: {\n isDropTarget\n }\n });\n\n return (\n <div\n {...dropIndicatorProps}\n {...renderProps}\n // eslint-disable-next-line\n role=\"option\"\n ref={ref as RefObject<HTMLDivElement>}\n data-drop-target={isDropTarget || undefined} />\n );\n}\n\nconst ListBoxtDropIndicatorForwardRef = forwardRef(ListBoxtDropIndicator);\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {ContextValue, forwardRefType, RenderProps, useContextProps, useRenderProps} from './utils';\nimport {PlacementAxis} from 'react-aria';\nimport React, {createContext, CSSProperties, ForwardedRef, forwardRef, HTMLAttributes} from 'react';\n\ninterface OverlayArrowContextValue extends OverlayArrowProps {\n placement: PlacementAxis\n}\n\nexport const OverlayArrowContext = createContext<ContextValue<OverlayArrowContextValue, HTMLDivElement>>({\n placement: 'bottom'\n});\n\nexport interface OverlayArrowProps extends Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'style' | 'children'>, RenderProps<OverlayArrowRenderProps> {}\n\nexport interface OverlayArrowRenderProps {\n /**\n * The placement of the overlay relative to the trigger.\n * @selector [data-placement=\"left | right | top | bottom\"]\n */\n placement: PlacementAxis\n}\n\nfunction OverlayArrow(props: OverlayArrowProps, ref: ForwardedRef<HTMLDivElement>) {\n [props, ref] = useContextProps(props, ref, OverlayArrowContext);\n let placement = (props as OverlayArrowContextValue).placement;\n let style: CSSProperties = {\n position: 'absolute',\n [placement]: '100%',\n transform: placement === 'top' || placement === 'bottom' ? 'translateX(-50%)' : 'translateY(-50%)'\n };\n\n let renderProps = useRenderProps({\n ...props,\n defaultClassName: 'react-aria-OverlayArrow',\n values: {\n placement\n }\n });\n // remove undefined values from renderProps.style object so that it can be\n // spread merged with the other style object\n if (renderProps.style) {\n Object.keys(renderProps.style).forEach(key => renderProps.style![key] === undefined && delete renderProps.style![key]);\n }\n\n return (\n <div\n {...props}\n {...renderProps}\n style={{\n ...style,\n ...renderProps.style\n }}\n ref={ref}\n data-placement={placement} />\n );\n}\n\n/**\n * An OverlayArrow renders a custom arrow element relative to an overlay element\n * such as a popover or tooltip such that it aligns with a trigger element.\n */\nconst _OverlayArrow = /*#__PURE__*/ (forwardRef as forwardRefType)(OverlayArrow);\nexport {_OverlayArrow as OverlayArrow};\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaPopoverProps, DismissButton, Overlay, PlacementAxis, PositionProps, usePopover} from 'react-aria';\nimport {ContextValue, forwardRefType, HiddenContext, RenderProps, SlotProps, useContextProps, useEnterAnimation, useExitAnimation, useRenderProps} from './utils';\nimport {filterDOMProps, mergeProps} from '@react-aria/utils';\nimport {OverlayArrowContext} from './OverlayArrow';\nimport {OverlayTriggerProps, OverlayTriggerState, useOverlayTriggerState} from 'react-stately';\nimport {OverlayTriggerStateContext} from './Dialog';\nimport React, {createContext, ForwardedRef, forwardRef, RefObject, useContext} from 'react';\n\nexport interface PopoverProps extends Omit<PositionProps, 'isOpen'>, Omit<AriaPopoverProps, 'popoverRef' | 'triggerRef' | 'offset'>, OverlayTriggerProps, RenderProps<PopoverRenderProps>, SlotProps {\n /**\n * The name of the component that triggered the popover. This is reflected on the element\n * as the `data-trigger` attribute, and can be used to provide specific\n * styles for the popover depending on which element triggered it.\n */\n trigger?: string,\n /**\n * The ref for the element which the popover positions itself with respect to.\n *\n * When used within a trigger component such as DialogTrigger, MenuTrigger, Select, etc.,\n * this is set automatically. It is only required when used standalone.\n */\n triggerRef?: RefObject<Element>,\n /**\n * Whether the popover is currently performing an entry animation.\n */\n isEntering?: boolean,\n /**\n * Whether the popover is currently performing an exit animation.\n */\n isExiting?: boolean,\n /**\n * The container element in which the overlay portal will be placed. This may have unknown behavior depending on where it is portalled to.\n * @default document.body\n */\n UNSTABLE_portalContainer?: Element,\n /**\n * The additional offset applied along the main axis between the element and its\n * anchor element.\n * @default 8\n */\n offset?: number\n}\n\nexport interface PopoverRenderProps {\n /**\n * The name of the component that triggered the popover, e.g. \"DialogTrigger\" or \"ComboBox\".\n * @selector [data-trigger=\"...\"]\n */\n trigger: string | null,\n /**\n * The placement of the popover relative to the trigger.\n * @selector [data-placement=\"left | right | top | bottom\"]\n */\n placement: PlacementAxis,\n /**\n * Whether the popover is currently entering. Use this to apply animations.\n * @selector [data-entering]\n */\n isEntering: boolean,\n /**\n * Whether the popover is currently exiting. Use this to apply animations.\n * @selector [data-exiting]\n */\n isExiting: boolean\n}\n\nexport const PopoverContext = createContext<ContextValue<PopoverProps, HTMLElement>>(null);\n\nfunction Popover(props: PopoverProps, ref: ForwardedRef<HTMLElement>) {\n [props, ref] = useContextProps(props, ref, PopoverContext);\n let contextState = useContext(OverlayTriggerStateContext);\n let localState = useOverlayTriggerState(props);\n let state = props.isOpen != null || props.defaultOpen != null || !contextState ? localState : contextState;\n let isExiting = useExitAnimation(ref, state.isOpen) || props.isExiting || false;\n let isHidden = useContext(HiddenContext);\n\n // If we are in a hidden tree, we still need to preserve our children.\n if (isHidden) {\n let children = props.children;\n if (typeof children === 'function') {\n children = children({\n trigger: props.trigger || null,\n placement: 'bottom',\n isEntering: false,\n isExiting: false\n });\n }\n\n return <>{children}</>;\n }\n\n if (state && !state.isOpen && !isExiting) {\n return null;\n }\n\n return (\n <PopoverInner\n {...props}\n triggerRef={props.triggerRef!}\n state={state}\n popoverRef={ref}\n isExiting={isExiting} />\n );\n}\n\n/**\n * A popover is an overlay element positioned relative to a trigger.\n */\nconst _Popover = /*#__PURE__*/ (forwardRef as forwardRefType)(Popover);\nexport {_Popover as Popover};\n\ninterface PopoverInnerProps extends AriaPopoverProps, RenderProps<PopoverRenderProps>, SlotProps {\n state: OverlayTriggerState,\n isEntering?: boolean,\n isExiting: boolean,\n UNSTABLE_portalContainer?: Element,\n trigger?: string\n}\n\nfunction PopoverInner({state, isExiting, UNSTABLE_portalContainer, ...props}: PopoverInnerProps) {\n let {popoverProps, underlayProps, arrowProps, placement} = usePopover({\n ...props,\n offset: props.offset ?? 8\n }, state);\n\n let ref = props.popoverRef as RefObject<HTMLDivElement>;\n let isEntering = useEnterAnimation(ref, !!placement) || props.isEntering || false;\n let renderProps = useRenderProps({\n ...props,\n defaultClassName: 'react-aria-Popover',\n values: {\n trigger: props.trigger || null,\n placement,\n isEntering,\n isExiting\n }\n });\n\n let style = {...popoverProps.style, ...renderProps.style};\n\n return (\n <Overlay isExiting={isExiting} portalContainer={UNSTABLE_portalContainer}>\n {!props.isNonModal && state.isOpen && <div data-testid=\"underlay\" {...underlayProps} style={{position: 'fixed', inset: 0}} />}\n <div\n {...mergeProps(filterDOMProps(props as any), popoverProps)}\n {...renderProps}\n ref={ref}\n slot={props.slot || undefined}\n style={style}\n data-trigger={props.trigger}\n data-placement={placement}\n data-entering={isEntering || undefined}\n data-exiting={isExiting || undefined}>\n {!props.isNonModal && <DismissButton onDismiss={state.close} />}\n <OverlayArrowContext.Provider value={{...arrowProps, placement}}>\n {renderProps.children}\n </OverlayArrowContext.Provider>\n <DismissButton onDismiss={state.close} />\n </div>\n </Overlay>\n );\n}\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nimport {AriaDialogProps, useDialog, useId, useOverlayTrigger} from 'react-aria';\nimport {ContextValue, defaultSlot, forwardRefType, Provider, SlotProps, StyleProps, useContextProps} from './utils';\nimport {filterDOMProps} from '@react-aria/utils';\nimport {HeadingContext} from './Heading';\nimport {OverlayTriggerProps, OverlayTriggerState, useOverlayTriggerState} from 'react-stately';\nimport {PopoverContext} from './Popover';\nimport {PressResponder} from '@react-aria/interactions';\nimport React, {createContext, ForwardedRef, forwardRef, ReactNode, useContext, useRef} from 'react';\n\nexport interface DialogTriggerProps extends OverlayTriggerProps {\n children: ReactNode\n}\n\ninterface DialogRenderProps {\n close: () => void\n}\n\nexport interface DialogProps extends AriaDialogProps, StyleProps, SlotProps {\n /** Children of the dialog. A function may be provided to access a function to close the dialog. */\n children?: ReactNode | ((opts: DialogRenderProps) => ReactNode)\n}\n\nexport const DialogContext = createContext<ContextValue<DialogProps, HTMLElement>>(null);\nexport const OverlayTriggerStateContext = createContext<OverlayTriggerState | null>(null);\n\n/**\n * A DialogTrigger opens a dialog when a trigger element is pressed.\n */\nexport function DialogTrigger(props: DialogTriggerProps) {\n let state = useOverlayTriggerState(props);\n\n let buttonRef = useRef<HTMLButtonElement>(null);\n let {triggerProps, overlayProps} = useOverlayTrigger({type: 'dialog'}, state, buttonRef);\n\n // Label dialog by the trigger as a fallback if there is no title slot.\n // This is done in RAC instead of hooks because otherwise we cannot distinguish\n // between context and props. Normally aria-labelledby overrides the title\n // but when sent by context we want the title to win.\n triggerProps.id = useId();\n overlayProps['aria-labelledby'] = triggerProps.id;\n\n return (\n <Provider\n values={[\n [OverlayTriggerStateContext, state],\n [DialogContext, overlayProps],\n [PopoverContext, {trigger: 'DialogTrigger', triggerRef: buttonRef}]\n ]}>\n <PressResponder {...triggerProps} ref={buttonRef} isPressed={state.isOpen}>\n {props.children}\n </PressResponder>\n </Provider>\n );\n}\n\nfunction Dialog(props: DialogProps, ref: ForwardedRef<HTMLElement>) {\n let originalAriaLabelledby = props['aria-labelledby'];\n [props, ref] = useContextProps(props, ref, DialogContext);\n let {dialogProps, titleProps} = useDialog({\n ...props,\n // Only pass aria-labelledby from props, not context.\n // Context is used as a fallback below.\n 'aria-labelledby': originalAriaLabelledby\n }, ref);\n let state = useContext(OverlayTriggerStateContext);\n\n let children = props.children;\n if (typeof children === 'function') {\n children = children({\n close: state?.close || (() => {})\n });\n }\n\n if (!dialogProps['aria-label'] && !dialogProps['aria-labelledby']) {\n // If aria-labelledby exists on props, we know it came from context.\n // Use that as a fallback in case there is no title slot.\n if (props['aria-labelledby']) {\n dialogProps['aria-labelledby'] = props['aria-labelledby'];\n } else {\n console.warn('If a Dialog does not contain a <Heading slot=\"title\">, it must have an aria-label or aria-labelledby attribute for accessibility.');\n }\n }\n\n return (\n <section\n {...filterDOMProps(props)}\n {...dialogProps}\n ref={ref}\n slot={props.slot || undefined}\n style={props.style}\n className={props.className ?? 'react-aria-Dialog'}>\n <Provider\n values={[\n [HeadingContext, {\n slots: {\n [defaultSlot]: {},\n title: {...titleProps, level: 2}\n }\n }]\n ]}>\n {children}\n </Provider>\n </section>\n );\n}\n\n/**\n * A dialog is an overlay shown above other content in an application.\n */\nconst _Dialog = /*#__PURE__*/ (forwardRef as forwardRefType)(Dialog);\nexport {_Dialog as Dialog};\n","const _temp0 = require(\"../intl/ar-AE.json\");\nconst _temp1 = require(\"../intl/bg-BG.json\");\nconst _temp2 = require(\"../intl/cs-CZ.json\");\nconst _temp3 = require(\"../intl/da-DK.json\");\nconst _temp4 = require(\"../intl/de-DE.json\");\nconst _temp5 = require(\"../intl/el-GR.json\");\nconst _temp6 = require(\"../intl/en-US.json\");\nconst _temp7 = require(\"../intl/es-ES.json\");\nconst _temp8 = require(\"../intl/et-EE.json\");\nconst _temp9 = require(\"../intl/fi-FI.json\");\nconst _temp10 = require(\"../intl/fr-FR.json\");\nconst _temp11 = require(\"../intl/he-IL.json\");\nconst _temp12 = require(\"../intl/hr-HR.json\");\nconst _temp13 = require(\"../intl/hu-HU.json\");\nconst _temp14 = require(\"../intl/it-IT.json\");\nconst _temp15 = require(\"../intl/ja-JP.json\");\nconst _temp16 = require(\"../intl/ko-KR.json\");\nconst _temp17 = require(\"../intl/lt-LT.json\");\nconst _temp18 = require(\"../intl/lv-LV.json\");\nconst _temp19 = require(\"../intl/nb-NO.json\");\nconst _temp20 = require(\"../intl/nl-NL.json\");\nconst _temp21 = require(\"../intl/pl-PL.json\");\nconst _temp22 = require(\"../intl/pt-BR.json\");\nconst _temp23 = require(\"../intl/pt-PT.json\");\nconst _temp24 = require(\"../intl/ro-RO.json\");\nconst _temp25 = require(\"../intl/ru-RU.json\");\nconst _temp26 = require(\"../intl/sk-SK.json\");\nconst _temp27 = require(\"../intl/sl-SI.json\");\nconst _temp28 = require(\"../intl/sr-SP.json\");\nconst _temp29 = require(\"../intl/sv-SE.json\");\nconst _temp30 = require(\"../intl/tr-TR.json\");\nconst _temp31 = require(\"../intl/uk-UA.json\");\nconst _temp32 = require(\"../intl/zh-CN.json\");\nconst _temp33 = require(\"../intl/zh-TW.json\");\nmodule.exports = {\n \"ar-AE\": _temp0,\n \"bg-BG\": _temp1,\n \"cs-CZ\": _temp2,\n \"da-DK\": _temp3,\n \"de-DE\": _temp4,\n \"el-GR\": _temp5,\n \"en-US\": _temp6,\n \"es-ES\": _temp7,\n \"et-EE\": _temp8,\n \"fi-FI\": _temp9,\n \"fr-FR\": _temp10,\n \"he-IL\": _temp11,\n \"hr-HR\": _temp12,\n \"hu-HU\": _temp13,\n \"it-IT\": _temp14,\n \"ja-JP\": _temp15,\n \"ko-KR\": _temp16,\n \"lt-LT\": _temp17,\n \"lv-LV\": _temp18,\n \"nb-NO\": _temp19,\n \"nl-NL\": _temp20,\n \"pl-PL\": _temp21,\n \"pt-BR\": _temp22,\n \"pt-PT\": _temp23,\n \"ro-RO\": _temp24,\n \"ru-RU\": _temp25,\n \"sk-SK\": _temp26,\n \"sl-SI\": _temp27,\n \"sr-SP\": _temp28,\n \"sv-SE\": _temp29,\n \"tr-TR\": _temp30,\n \"uk-UA\": _temp31,\n \"zh-CN\": _temp32,\n \"zh-TW\": _temp33\n}","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {ContextValue, useContextProps} from './utils';\nimport React, {createContext, ForwardedRef, forwardRef, HTMLAttributes} from 'react';\n\nexport const KeyboardContext = createContext<ContextValue<HTMLAttributes<HTMLElement>, HTMLElement>>({});\n\nfunction Keyboard(props: HTMLAttributes<HTMLElement>, ref: ForwardedRef<HTMLElement>) {\n [props, ref] = useContextProps(props, ref, KeyboardContext);\n return <kbd dir=\"ltr\" {...props} ref={ref} />;\n}\n\nconst _Keyboard = forwardRef(Keyboard);\nexport {_Keyboard as Keyboard};\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n\nimport {AriaMenuProps, FocusScope, mergeProps, useFocusRing, useMenu, useMenuItem, useMenuSection, useMenuTrigger} from 'react-aria';\nimport {BaseCollection, CollectionProps, ItemRenderProps, useCachedChildren, useCollection, useSSRCollectionNode} from './Collection';\nimport {MenuTriggerProps as BaseMenuTriggerProps, Node, TreeState, useMenuTriggerState, useTreeState} from 'react-stately';\nimport {ContextValue, forwardRefType, Provider, RenderProps, ScrollableProps, SlotProps, StyleProps, useContextProps, useRenderProps, useSlot, useSlottedContext} from './utils';\nimport {filterDOMProps, mergeRefs, useObjectRef, useResizeObserver} from '@react-aria/utils';\nimport {Header} from './Header';\nimport {Key, LinkDOMProps} from '@react-types/shared';\nimport {KeyboardContext} from './Keyboard';\nimport {OverlayTriggerStateContext} from './Dialog';\nimport {PopoverContext, PopoverProps} from './Popover';\nimport {PressResponder, useHover, useInteractOutside} from '@react-aria/interactions';\nimport React, {createContext, ForwardedRef, forwardRef, ReactElement, ReactNode, RefObject, useCallback, useContext, useRef, useState} from 'react';\nimport {RootMenuTriggerState, UNSTABLE_useSubmenuTriggerState} from '@react-stately/menu';\nimport {Separator, SeparatorContext} from './Separator';\nimport {TextContext} from './Text';\nimport {UNSTABLE_useSubmenuTrigger} from '@react-aria/menu';\n\nexport const MenuContext = createContext<ContextValue<MenuProps<any>, HTMLDivElement>>(null);\nexport const MenuStateContext = createContext<TreeState<unknown> | null>(null);\nexport const RootMenuTriggerStateContext = createContext<RootMenuTriggerState | null>(null);\n\nexport interface MenuTriggerProps extends BaseMenuTriggerProps {\n children?: ReactNode\n}\n\nexport function MenuTrigger(props: MenuTriggerProps) {\n let state = useMenuTriggerState(props);\n\n let ref = useRef<HTMLButtonElement>(null);\n let {menuTriggerProps, menuProps} = useMenuTrigger({\n ...props,\n type: 'menu'\n }, state, ref);\n // Allows menu width to match button\n let [buttonWidth, setButtonWidth] = useState<string | null>(null);\n let onResize = useCallback(() => {\n if (ref.current) {\n setButtonWidth(ref.current.offsetWidth + 'px');\n }\n }, [ref]);\n\n useResizeObserver({\n ref: ref,\n onResize: onResize\n });\n\n return (\n <Provider\n values={[\n [MenuContext, menuProps],\n [OverlayTriggerStateContext, state],\n [RootMenuTriggerStateContext, state],\n [PopoverContext, {\n trigger: 'MenuTrigger',\n triggerRef: ref,\n placement: 'bottom start',\n style: {'--trigger-width': buttonWidth} as React.CSSProperties\n }]\n ]}>\n <PressResponder {...menuTriggerProps} ref={ref} isPressed={state.isOpen}>\n {props.children}\n </PressResponder>\n </Provider>\n );\n}\n\nexport interface SubmenuTriggerProps {\n /**\n * The contents of the SubmenuTrigger. The first child should be an Item (the trigger) and the second child should be the Popover (for the submenu).\n */\n children: ReactElement[],\n /**\n * The delay time in milliseconds for the submenu to appear after hovering over the trigger.\n * @default 200\n */\n delay?: number\n}\n\n/**\n * A submenu trigger is used to wrap a submenu's trigger item and the submenu itself.\n *\n * @version alpha\n */\nexport function SubmenuTrigger(props: SubmenuTriggerProps, ref: ForwardedRef<HTMLDivElement>): JSX.Element | null {\n return useSSRCollectionNode('submenutrigger', props, ref, props.children, props.children[0]);\n}\n\nfunction SubmenuTriggerInner(props) {\n let {item, parentMenuRef} = props;\n let state = useContext(MenuStateContext)!;\n\n let children = useCachedChildren({\n items: state.collection.getChildren!(item.key),\n children: childItem => {\n switch (childItem.type) {\n case 'item':\n return <MenuItemTriggerInner item={childItem} popover={item.rendered[1]} parentMenuRef={parentMenuRef} delay={item.props.delay} />;\n default:\n throw new Error('Unsupported element type in SubmenuTrigger: ' + item.type);\n }\n }\n });\n\n return children;\n}\n\n\nexport interface MenuProps<T> extends Omit<AriaMenuProps<T>, 'children'>, CollectionProps<T>, StyleProps, SlotProps, ScrollableProps<HTMLDivElement> {}\n\nfunction Menu<T extends object>(props: MenuProps<T>, ref: ForwardedRef<HTMLDivElement>) {\n [props, ref] = useContextProps(props, ref, MenuContext);\n let {portal, collection} = useCollection(props);\n\n // Delay rendering the actual menu until we have the collection so that auto focus works properly.\n return (\n <>\n {collection.size > 0 && <MenuInner props={props} collection={collection} menuRef={ref} />}\n {portal}\n </>\n );\n}\n\ninterface MenuInnerProps<T> {\n props: MenuProps<T>,\n collection: BaseCollection<T>,\n menuRef: RefObject<HTMLDivElement>\n}\n\nfunction MenuInner<T extends object>({props, collection, menuRef: ref}: MenuInnerProps<T>) {\n let state = useTreeState({\n ...props,\n collection,\n children: undefined\n });\n let [popoverContainer, setPopoverContainer] = useState<HTMLDivElement | null>(null);\n let {menuProps} = useMenu(props, state, ref);\n let rootMenuTriggerState = useContext(RootMenuTriggerStateContext)!;\n let popoverContext = useContext(PopoverContext)!;\n\n let children = useCachedChildren({\n items: state.collection,\n children: (item) => {\n switch (item.type) {\n case 'section':\n return <MenuSection section={item} parentMenuRef={ref} />;\n case 'separator':\n return <Separator {...item.props} />;\n case 'item':\n return <MenuItemInner item={item} />;\n case 'submenutrigger':\n return <SubmenuTriggerInner item={item} parentMenuRef={ref} />;\n default:\n throw new Error('Unsupported node type in Menu: ' + item.type);\n }\n }\n });\n\n let isSubmenu = (popoverContext as PopoverProps)?.trigger === 'SubmenuTrigger';\n useInteractOutside({\n ref,\n onInteractOutside: (e) => {\n if (rootMenuTriggerState && !popoverContainer?.contains(e.target as HTMLElement)) {\n rootMenuTriggerState.close();\n }\n },\n isDisabled: isSubmenu || rootMenuTriggerState?.UNSTABLE_expandedKeysStack.length === 0\n });\n\n return (\n <FocusScope>\n <div\n {...filterDOMProps(props)}\n {...menuProps}\n ref={ref}\n slot={props.slot || undefined}\n onScroll={props.onScroll}\n style={props.style}\n className={props.className ?? 'react-aria-Menu'}>\n <Provider\n values={[\n [MenuStateContext, state],\n [SeparatorContext, {elementType: 'div'}],\n [PopoverContext, {UNSTABLE_portalContainer: popoverContainer || undefined}]\n ]}>\n {children}\n </Provider>\n </div>\n <div ref={setPopoverContainer} style={{width: '100vw', position: 'absolute', top: 0}} />\n </FocusScope>\n );\n}\n\n/**\n * A menu displays a list of actions or options that a user can choose.\n */\nconst _Menu = /*#__PURE__*/ (forwardRef as forwardRefType)(Menu);\nexport {_Menu as Menu};\n\ninterface MenuSectionProps<T> extends StyleProps {\n section: Node<T>,\n parentMenuRef: RefObject<HTMLDivElement>\n}\n\nfunction MenuSection<T>({section, className, style, parentMenuRef, ...otherProps}: MenuSectionProps<T>) {\n let state = useContext(MenuStateContext)!;\n let [headingRef, heading] = useSlot();\n let {headingProps, groupProps} = useMenuSection({\n heading,\n 'aria-label': section['aria-label'] ?? undefined\n });\n\n let children = useCachedChildren({\n items: state.collection.getChildren!(section.key),\n children: item => {\n switch (item.type) {\n case 'header': {\n let {ref, ...otherProps} = item.props;\n return (\n <Header\n {...headingProps}\n {...otherProps}\n ref={mergeRefs(headingRef, ref)}>\n {item.rendered}\n </Header>\n );\n }\n case 'item':\n return <MenuItemInner item={item} />;\n case 'submenutrigger':\n return <SubmenuTriggerInner item={item} parentMenuRef={parentMenuRef} />;\n default:\n throw new Error('Unsupported element type in Section: ' + item.type);\n }\n }\n });\n\n return (\n <section\n {...filterDOMProps(otherProps)}\n {...groupProps}\n className={className || section.props?.className || 'react-aria-Section'}\n style={style || section.props?.style}\n ref={section.props.ref}>\n {children}\n </section>\n );\n}\n\nexport interface MenuItemRenderProps extends ItemRenderProps {\n /**\n * Whether the item has a submenu.\n *\n * @selector [data-has-submenu]\n */\n hasSubmenu: boolean,\n /**\n * Whether the item's submenu is open.\n *\n * @selector [data-open]\n */\n isOpen: boolean\n}\n\nexport interface MenuItemProps<T = object> extends RenderProps<MenuItemRenderProps>, LinkDOMProps {\n /** The unique id of the item. */\n id?: Key,\n /** The object value that this item represents. When using dynamic collections, this is set automatically. */\n value?: T,\n /** A string representation of the item's contents, used for features like typeahead. */\n textValue?: string,\n /** An accessibility label for this item. */\n 'aria-label'?: string\n}\n\nfunction MenuItem<T extends object>(props: MenuItemProps<T>, ref: ForwardedRef<HTMLDivElement>): JSX.Element | null {\n return useSSRCollectionNode('item', props, ref, props.children);\n}\n\n/**\n * A MenuItem represents an individual action in a Menu.\n */\nconst _MenuItem = /*#__PURE__*/ (forwardRef as forwardRefType)(MenuItem);\nexport {_MenuItem as MenuItem};\n\ninterface MenuItemInnerProps<T> {\n item: Node<T>\n}\n\nfunction MenuItemInner<T>({item}: MenuItemInnerProps<T>) {\n let state = useContext(MenuStateContext)!;\n let ref = useObjectRef<any>(item.props.ref);\n let {menuItemProps, labelProps, descriptionProps, keyboardShortcutProps, ...states} = useMenuItem({key: item.key, 'aria-label': item.props?.['aria-label']}, state, ref);\n\n let props: MenuItemProps<T> = item.props;\n let {isFocusVisible, focusProps} = useFocusRing();\n let {hoverProps, isHovered} = useHover({isDisabled: states.isDisabled});\n let renderProps = useRenderProps({\n ...props,\n id: undefined,\n children: item.rendered,\n defaultClassName: 'react-aria-MenuItem',\n values: {\n ...states,\n isHovered,\n isFocusVisible,\n selectionMode: state.selectionManager.selectionMode,\n selectionBehavior: state.selectionManager.selectionBehavior,\n hasSubmenu: false,\n isOpen: false\n }\n });\n\n let ElementType: React.ElementType = props.href ? 'a' : 'div';\n\n return (\n <ElementType\n {...mergeProps(menuItemProps, focusProps, hoverProps)}\n {...renderProps}\n ref={ref}\n data-disabled={states.isDisabled || undefined}\n data-hovered={isHovered || undefined}\n data-focused={states.isFocused || undefined}\n data-focus-visible={isFocusVisible || undefined}\n data-pressed={states.isPressed || undefined}\n data-selected={states.isSelected || undefined}\n data-selection-mode={state.selectionManager.selectionMode === 'none' ? undefined : state.selectionManager.selectionMode}>\n <Provider\n values={[\n [TextContext, {\n slots: {\n label: labelProps,\n description: descriptionProps\n }\n }],\n [KeyboardContext, keyboardShortcutProps]\n ]}>\n {renderProps.children}\n </Provider>\n </ElementType>\n );\n}\n\ninterface MenuItemTriggerInnerProps<T> {\n item: Node<T>,\n popover: ReactElement,\n parentMenuRef: RefObject<HTMLDivElement>,\n delay?: number\n}\n\nfunction MenuItemTriggerInner<T>({item, popover, parentMenuRef, delay}: MenuItemTriggerInnerProps<T>) {\n let state = useContext(MenuStateContext)!;\n let popoverContext = useSlottedContext(PopoverContext)!;\n let ref = useObjectRef<any>(item.props.ref);\n let rootMenuTriggerState = useContext(RootMenuTriggerStateContext)!;\n let submenuTriggerState = UNSTABLE_useSubmenuTriggerState({triggerKey: item.key}, rootMenuTriggerState);\n let submenuRef = useRef<HTMLDivElement>(null);\n let {submenuTriggerProps, submenuProps, popoverProps} = UNSTABLE_useSubmenuTrigger({\n node: item,\n parentMenuRef,\n submenuRef,\n delay\n }, submenuTriggerState, ref);\n let {menuItemProps, labelProps, descriptionProps, keyboardShortcutProps, ...states} = useMenuItem({\n key: item.key,\n ...submenuTriggerProps\n }, state, ref);\n let props: MenuItemProps<T> = item.props;\n let {hoverProps, isHovered} = useHover({isDisabled: states.isDisabled});\n let {isFocusVisible, focusProps} = useFocusRing();\n let renderProps = useRenderProps({\n ...props,\n id: undefined,\n children: item.rendered,\n defaultClassName: 'react-aria-MenuItem',\n values: {\n ...states,\n isHovered,\n isFocusVisible,\n selectionMode: state.selectionManager.selectionMode,\n selectionBehavior: state.selectionManager.selectionBehavior,\n hasSubmenu: true,\n isOpen: submenuTriggerState.isOpen\n }\n });\n\n return (\n <Provider\n values={[\n [TextContext, {\n slots: {\n label: labelProps,\n description: descriptionProps\n }\n }],\n [KeyboardContext, keyboardShortcutProps],\n [MenuContext, submenuProps],\n [OverlayTriggerStateContext, submenuTriggerState],\n [PopoverContext, {\n ref: submenuRef,\n trigger: 'SubmenuTrigger',\n triggerRef: ref,\n placement: 'end top',\n UNSTABLE_portalContainer: popoverContext.UNSTABLE_portalContainer || undefined,\n ...popoverProps\n }]\n ]}>\n <div\n {...mergeProps(menuItemProps, focusProps, hoverProps)}\n {...renderProps}\n ref={ref}\n data-disabled={states.isDisabled || undefined}\n data-hovered={isHovered || undefined}\n data-focused={states.isFocused || undefined}\n data-focus-visible={isFocusVisible || undefined}\n data-pressed={states.isPressed || undefined}\n data-selected={states.isSelected || undefined}\n data-selection-mode={state.selectionManager.selectionMode === 'none' ? undefined : state.selectionManager.selectionMode}\n data-has-submenu\n data-open={submenuTriggerState.isOpen || undefined}>\n {renderProps.children}\n </div>\n {popover}\n </Provider>\n );\n}\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaSearchFieldProps, useSearchField} from 'react-aria';\nimport {ButtonContext} from './Button';\nimport {ContextValue, forwardRefType, Provider, RACValidation, removeDataAttributes, RenderProps, SlotProps, useContextProps, useRenderProps, useSlot} from './utils';\nimport {FieldErrorContext} from './FieldError';\nimport {filterDOMProps} from '@react-aria/utils';\nimport {GroupContext} from './Group';\nimport {InputContext} from './Input';\nimport {LabelContext} from './Label';\nimport React, {createContext, ForwardedRef, forwardRef, useRef} from 'react';\nimport {SearchFieldState, useSearchFieldState} from 'react-stately';\nimport {TextContext} from './Text';\n\nexport interface SearchFieldRenderProps {\n /**\n * Whether the search field is empty.\n * @selector [data-empty]\n */\n isEmpty: boolean,\n /**\n * Whether the search field is disabled.\n * @selector [data-disabled]\n */\n isDisabled: boolean,\n /**\n * Whether the search field is invalid.\n * @selector [data-invalid]\n */\n isInvalid: boolean,\n /**\n * State of the search field.\n */\n state: SearchFieldState\n}\n\nexport interface SearchFieldProps extends Omit<AriaSearchFieldProps, 'label' | 'placeholder' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'>, RACValidation, RenderProps<SearchFieldRenderProps>, SlotProps {}\n\nexport const SearchFieldContext = createContext<ContextValue<SearchFieldProps, HTMLDivElement>>(null);\n\nfunction SearchField(props: SearchFieldProps, ref: ForwardedRef<HTMLDivElement>) {\n [props, ref] = useContextProps(props, ref, SearchFieldContext);\n let inputRef = useRef<HTMLInputElement>(null);\n let [labelRef, label] = useSlot();\n let state = useSearchFieldState({\n ...props,\n validationBehavior: props.validationBehavior ?? 'native'\n });\n\n let {labelProps, inputProps, clearButtonProps, descriptionProps, errorMessageProps, ...validation} = useSearchField({\n ...removeDataAttributes(props),\n label,\n validationBehavior: props.validationBehavior ?? 'native'\n }, state, inputRef);\n\n let renderProps = useRenderProps({\n ...props,\n values: {\n isEmpty: state.value === '',\n isDisabled: props.isDisabled || false,\n isInvalid: validation.isInvalid || false,\n state\n },\n defaultClassName: 'react-aria-SearchField'\n });\n\n let DOMProps = filterDOMProps(props);\n delete DOMProps.id;\n\n return (\n <div\n {...DOMProps}\n {...renderProps}\n ref={ref}\n slot={props.slot || undefined}\n data-empty={state.value === '' || undefined}\n data-disabled={props.isDisabled || undefined}\n data-invalid={validation.isInvalid || undefined}>\n <Provider\n values={[\n [LabelContext, {...labelProps, ref: labelRef}],\n [InputContext, {...inputProps, ref: inputRef}],\n [ButtonContext, clearButtonProps],\n [TextContext, {\n slots: {\n description: descriptionProps,\n errorMessage: errorMessageProps\n }\n }],\n [GroupContext, {isInvalid: validation.isInvalid, isDisabled: props.isDisabled || false}],\n [FieldErrorContext, validation]\n ]}>\n {renderProps.children}\n </Provider>\n </div>\n );\n}\n\n/**\n * A search field allows a user to enter and clear a search query.\n */\nconst _SearchField = /*#__PURE__*/ (forwardRef as forwardRefType)(SearchField);\nexport {_SearchField as SearchField};\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaSelectProps, HiddenSelect, useFocusRing, useLocalizedStringFormatter, useSelect} from 'react-aria';\nimport {ButtonContext} from './Button';\nimport {CollectionDocumentContext, ItemRenderProps, useCollectionDocument} from './Collection';\nimport {ContextValue, forwardRefType, Hidden, Provider, RACValidation, removeDataAttributes, RenderProps, SlotProps, useContextProps, useRenderProps, useSlot, useSlottedContext} from './utils';\nimport {FieldErrorContext} from './FieldError';\nimport {filterDOMProps, useResizeObserver} from '@react-aria/utils';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {LabelContext} from './Label';\nimport {ListBoxContext, ListStateContext} from './ListBox';\nimport {OverlayTriggerStateContext} from './Dialog';\nimport {PopoverContext} from './Popover';\nimport React, {createContext, ForwardedRef, forwardRef, HTMLAttributes, ReactNode, useCallback, useContext, useMemo, useRef, useState} from 'react';\nimport {SelectState, useSelectState} from 'react-stately';\nimport {TextContext} from './Text';\n\nexport interface SelectRenderProps {\n /**\n * Whether the select is focused, either via a mouse or keyboard.\n * @selector [data-focused]\n */\n isFocused: boolean,\n /**\n * Whether the select is keyboard focused.\n * @selector [data-focus-visible]\n */\n isFocusVisible: boolean,\n /**\n * Whether the select is disabled.\n * @selector [data-disabled]\n */\n isDisabled: boolean,\n /**\n * Whether the select is currently open.\n * @selector [data-open]\n */\n isOpen: boolean,\n /**\n * Whether the select is invalid.\n * @selector [data-invalid]\n */\n isInvalid: boolean,\n /**\n * Whether the select is required.\n * @selector [data-required]\n */\n isRequired: boolean\n}\n\nexport interface SelectProps<T extends object> extends Omit<AriaSelectProps<T>, 'children' | 'label' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior' | 'items'>, RACValidation, RenderProps<SelectRenderProps>, SlotProps {}\n\nexport const SelectContext = createContext<ContextValue<SelectProps<any>, HTMLDivElement>>(null);\nexport const SelectStateContext = createContext<SelectState<unknown> | null>(null);\n\nfunction Select<T extends object>(props: SelectProps<T>, ref: ForwardedRef<HTMLDivElement>) {\n [props, ref] = useContextProps(props, ref, SelectContext);\n let {collection, document} = useCollectionDocument();\n let state = useSelectState({\n ...props,\n collection,\n children: undefined,\n validationBehavior: props.validationBehavior ?? 'native'\n });\n\n let {isFocusVisible, focusProps} = useFocusRing({within: true});\n\n // Get props for child elements from useSelect\n let buttonRef = useRef<HTMLButtonElement>(null);\n let [labelRef, label] = useSlot();\n let {\n labelProps,\n triggerProps,\n valueProps,\n menuProps,\n descriptionProps,\n errorMessageProps,\n ...validation\n } = useSelect({\n ...removeDataAttributes(props),\n label,\n validationBehavior: props.validationBehavior ?? 'native'\n }, state, buttonRef);\n\n // Make menu width match input + button\n let [buttonWidth, setButtonWidth] = useState<string | null>(null);\n let onResize = useCallback(() => {\n if (buttonRef.current) {\n setButtonWidth(buttonRef.current.offsetWidth + 'px');\n }\n }, [buttonRef]);\n\n useResizeObserver({\n ref: buttonRef,\n onResize: onResize\n });\n\n // Only expose a subset of state to renderProps function to avoid infinite render loop\n let renderPropsState = useMemo(() => ({\n isOpen: state.isOpen,\n isFocused: state.isFocused,\n isFocusVisible,\n isDisabled: props.isDisabled || false,\n isInvalid: validation.isInvalid || false,\n isRequired: props.isRequired || false\n }), [state.isOpen, state.isFocused, isFocusVisible, props.isDisabled, validation.isInvalid, props.isRequired]);\n\n let renderProps = useRenderProps({\n ...props,\n values: renderPropsState,\n defaultClassName: 'react-aria-Select'\n });\n\n let DOMProps = filterDOMProps(props);\n delete DOMProps.id;\n\n return (\n <>\n {/* Render a hidden copy of the children so that we can build the collection even when the popover is not open.\n * This should always come before the real DOM content so we have built the collection by the time it renders during SSR. */}\n <Hidden>\n <Provider\n values={[\n [SelectContext, props],\n [SelectStateContext, state],\n [CollectionDocumentContext, document]\n ]}>\n {renderProps.children}\n </Provider>\n </Hidden>\n <Provider\n values={[\n [SelectContext, props],\n [SelectStateContext, state],\n [SelectValueContext, valueProps],\n [LabelContext, {...labelProps, ref: labelRef, elementType: 'span'}],\n [ButtonContext, {...triggerProps, ref: buttonRef, isPressed: state.isOpen}],\n [OverlayTriggerStateContext, state],\n [PopoverContext, {\n trigger: 'Select',\n triggerRef: buttonRef,\n placement: 'bottom start',\n style: {'--trigger-width': buttonWidth} as React.CSSProperties\n }],\n [ListBoxContext, menuProps],\n [ListStateContext, state],\n [TextContext, {\n slots: {\n description: descriptionProps,\n errorMessage: errorMessageProps\n }\n }],\n [FieldErrorContext, validation]\n ]}>\n <div\n {...DOMProps}\n {...renderProps}\n {...focusProps}\n ref={ref}\n slot={props.slot || undefined}\n data-focused={state.isFocused || undefined}\n data-focus-visible={isFocusVisible || undefined}\n data-open={state.isOpen || undefined}\n data-disabled={props.isDisabled || undefined}\n data-invalid={validation.isInvalid || undefined}\n data-required={props.isRequired || undefined} />\n <HiddenSelect\n state={state}\n triggerRef={buttonRef}\n label={label}\n name={props.name}\n isDisabled={props.isDisabled} />\n </Provider>\n </>\n );\n}\n\n/**\n * A select displays a collapsible list of options and allows a user to select one of them.\n */\nconst _Select = /*#__PURE__*/ (forwardRef as forwardRefType)(Select);\nexport {_Select as Select};\n\nexport interface SelectValueRenderProps<T> {\n /**\n * Whether the value is a placeholder.\n * @selector [data-placeholder]\n */\n isPlaceholder: boolean,\n /** The object value of the currently selected item. */\n selectedItem: T | null,\n /** The textValue of the currently selected item. */\n selectedText: string | null\n}\n\nexport interface SelectValueProps<T extends object> extends Omit<HTMLAttributes<HTMLElement>, keyof RenderProps<unknown>>, RenderProps<SelectValueRenderProps<T>> {}\n\nexport const SelectValueContext = createContext<ContextValue<SelectValueProps<any>, HTMLSpanElement>>(null);\n\nfunction SelectValue<T extends object>(props: SelectValueProps<T>, ref: ForwardedRef<HTMLSpanElement>) {\n [props, ref] = useContextProps(props, ref, SelectValueContext);\n let state = useContext(SelectStateContext)!;\n let {placeholder} = useSlottedContext(SelectContext)!;\n let selectedItem = state.selectedKey != null\n ? state.collection.getItem(state.selectedKey)\n : null;\n let rendered = selectedItem?.rendered;\n if (typeof rendered === 'function') {\n // If the selected item has a function as a child, we need to call it to render to React.JSX.\n let fn = rendered as (s: ItemRenderProps) => ReactNode;\n rendered = fn({\n isHovered: false,\n isPressed: false,\n isSelected: false,\n isFocused: false,\n isFocusVisible: false,\n isDisabled: false,\n selectionMode: 'single',\n selectionBehavior: 'toggle'\n });\n }\n\n let stringFormatter = useLocalizedStringFormatter(intlMessages, 'react-aria-components');\n\n let renderProps = useRenderProps({\n ...props,\n defaultChildren: rendered || placeholder || stringFormatter.format('selectPlaceholder'),\n defaultClassName: 'react-aria-SelectValue',\n values: {\n selectedItem: state.selectedItem?.value as T ?? null,\n selectedText: state.selectedItem?.textValue ?? null,\n isPlaceholder: !selectedItem\n }\n });\n\n let DOMProps = filterDOMProps(props);\n\n return (\n <span ref={ref} {...DOMProps} {...renderProps} data-placeholder={!selectedItem || undefined}>\n {/* clear description and error message slots */}\n <TextContext.Provider value={undefined}>\n {renderProps.children}\n </TextContext.Provider>\n </span>\n );\n}\n\n/**\n * SelectValue renders the current value of a Select, or a placeholder if no value is selected.\n * It is usually placed within the button element.\n */\nconst _SelectValue = /*#__PURE__*/ (forwardRef as forwardRefType)(SelectValue);\nexport {_SelectValue as SelectValue};\n","import {AriaLabelingProps, HoverEvents, Key, LinkDOMProps} from '@react-types/shared';\nimport {BaseCollection, CollectionContext, CollectionProps, CollectionRendererContext, ItemRenderProps, NodeValue, useCachedChildren, useCollection, useCollectionChildren, useSSRCollectionNode} from './Collection';\nimport {buildHeaderRows, TableColumnResizeState} from '@react-stately/table';\nimport {ButtonContext} from './Button';\nimport {CheckboxContext} from './Checkbox';\nimport {ColumnSize, ColumnStaticSize, TableCollection as ITableCollection, TableProps as SharedTableProps} from '@react-types/table';\nimport {ContextValue, defaultSlot, DOMProps, forwardRefType, Provider, RenderProps, ScrollableProps, SlotProps, StyleProps, StyleRenderProps, useContextProps, useRenderProps} from './utils';\nimport {DisabledBehavior, DraggableCollectionState, DroppableCollectionState, Node, SelectionBehavior, SelectionMode, SortDirection, TableState, useTableColumnResizeState, useTableState} from 'react-stately';\nimport {DragAndDropContext, DragAndDropHooks, DropIndicator, DropIndicatorContext, DropIndicatorProps} from './useDragAndDrop';\nimport {DraggableItemResult, DragPreviewRenderer, DropIndicatorAria, DroppableCollectionResult, FocusScope, ListKeyboardDelegate, mergeProps, useFocusRing, useHover, useLocale, useLocalizedStringFormatter, useTable, useTableCell, useTableColumnHeader, useTableColumnResize, useTableHeaderRow, useTableRow, useTableRowGroup, useTableSelectAllCheckbox, useTableSelectionCheckbox, useVisuallyHidden} from 'react-aria';\nimport {filterDOMProps, useLayoutEffect, useObjectRef, useResizeObserver} from '@react-aria/utils';\nimport {GridNode} from '@react-types/grid';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport React, {createContext, ForwardedRef, forwardRef, JSX, ReactElement, ReactNode, RefObject, useCallback, useContext, useEffect, useMemo, useRef, useState} from 'react';\nimport ReactDOM from 'react-dom';\n\nclass TableCollection<T> extends BaseCollection<T> implements ITableCollection<T> {\n headerRows: GridNode<T>[] = [];\n columns: GridNode<T>[] = [];\n rowHeaderColumnKeys: Set<Key> = new Set();\n head: NodeValue<T> = new NodeValue('tableheader', -1);\n body: NodeValue<T> = new NodeValue('tablebody', -2);\n columnsDirty = true;\n\n addNode(node: NodeValue<T>) {\n super.addNode(node);\n\n this.columnsDirty ||= node.type === 'column';\n if (node.type === 'tableheader') {\n this.head = node;\n }\n\n if (node.type === 'tablebody') {\n this.body = node;\n }\n }\n\n commit(firstKey: Key, lastKey: Key, isSSR = false) {\n this.updateColumns(isSSR);\n super.commit(firstKey, lastKey, isSSR);\n }\n\n private updateColumns(isSSR: boolean) {\n if (!this.columnsDirty) {\n return;\n }\n\n this.rowHeaderColumnKeys = new Set();\n this.columns = [];\n\n let columnKeyMap = new Map();\n let visit = (node: Node<T>) => {\n switch (node.type) {\n case 'column':\n columnKeyMap.set(node.key, node);\n if (!node.hasChildNodes) {\n node.index = this.columns.length;\n this.columns.push(node);\n\n if (node.props.isRowHeader) {\n this.rowHeaderColumnKeys.add(node.key);\n }\n }\n break;\n }\n for (let child of this.getChildren(node.key)) {\n visit(child);\n }\n };\n\n for (let node of this.getChildren(this.head.key)) {\n visit(node);\n }\n\n this.headerRows = buildHeaderRows(columnKeyMap, this.columns);\n this.columnsDirty = false;\n if (this.rowHeaderColumnKeys.size === 0 && this.columns.length > 0 && !isSSR) {\n throw new Error('A table must have at least one Column with the isRowHeader prop set to true');\n }\n }\n\n get columnCount() {\n return this.columns.length;\n }\n\n get rows() {\n return [...this.getChildren(this.body.key)];\n }\n\n *[Symbol.iterator]() {\n yield* this.getChildren(this.body.key);\n }\n\n get size() {\n return [...this.getChildren(this.body.key)].length;\n }\n\n getFirstKey() {\n return [...this.getChildren(this.body.key)][0]?.key;\n }\n\n getLastKey() {\n let rows = [...this.getChildren(this.body.key)];\n return rows[rows.length - 1]?.key;\n }\n\n getKeyAfter(key: Key) {\n let node = this.getItem(key);\n if (node?.type === 'column') {\n return node.nextKey ?? null;\n }\n\n return super.getKeyAfter(key);\n }\n\n getKeyBefore(key: Key) {\n let node = this.getItem(key);\n if (node?.type === 'column') {\n return node.prevKey ?? null;\n }\n\n let k = super.getKeyBefore(key);\n if (k != null && this.getItem(k)?.type === 'tablebody') {\n return null;\n }\n\n return k;\n }\n\n getChildren(key: Key): Iterable<Node<T>> {\n if (!this.getItem(key)) {\n for (let row of this.headerRows) {\n if (row.key === key) {\n return row.childNodes;\n }\n }\n }\n\n return super.getChildren(key);\n }\n\n clone() {\n let collection = super.clone();\n collection.headerRows = this.headerRows;\n collection.columns = this.columns;\n collection.rowHeaderColumnKeys = this.rowHeaderColumnKeys;\n collection.head = this.head;\n collection.body = this.body;\n return collection;\n }\n\n getTextValue(key: Key): string {\n let row = this.getItem(key);\n if (!row) {\n return '';\n }\n\n // If the row has a textValue, use that.\n if (row.textValue) {\n return row.textValue;\n }\n\n // Otherwise combine the text of each of the row header columns.\n let rowHeaderColumnKeys = this.rowHeaderColumnKeys;\n let text: string[] = [];\n for (let cell of this.getChildren(key)) {\n let column = this.columns[cell.index!];\n if (rowHeaderColumnKeys.has(column.key) && cell.textValue) {\n text.push(cell.textValue);\n }\n\n if (text.length === rowHeaderColumnKeys.size) {\n break;\n }\n }\n\n return text.join(' ');\n }\n}\n\ninterface ResizableTableContainerContextValue {\n tableWidth: number,\n // Dependency inject useTableColumnResizeState so it doesn't affect bundle size unless you're using ResizableTableContainer.\n useTableColumnResizeState: typeof useTableColumnResizeState,\n onResizeStart?: (widths: Map<Key, ColumnSize>) => void,\n onResize?: (widths: Map<Key, ColumnSize>) => void,\n onResizeEnd?: (widths: Map<Key, ColumnSize>) => void\n}\n\nconst ResizableTableContainerContext = createContext<ResizableTableContainerContextValue | null>(null);\n\nexport interface ResizableTableContainerProps extends DOMProps, ScrollableProps<HTMLDivElement> {\n /**\n * Handler that is called when a user starts a column resize.\n */\n onResizeStart?: (widths: Map<Key, ColumnSize>) => void,\n /**\n * Handler that is called when a user performs a column resize.\n * Can be used with the width property on columns to put the column widths into\n * a controlled state.\n */\n onResize?: (widths: Map<Key, ColumnSize>) => void,\n /**\n * Handler that is called after a user performs a column resize.\n * Can be used to store the widths of columns for another future session.\n */\n onResizeEnd?: (widths: Map<Key, ColumnSize>) => void\n}\n\nfunction ResizableTableContainer(props: ResizableTableContainerProps, ref: ForwardedRef<HTMLDivElement>) {\n let objectRef = useObjectRef(ref);\n let [width, setWidth] = useState(0);\n useResizeObserver({\n ref: objectRef,\n onResize() {\n setWidth(objectRef.current?.clientWidth ?? 0);\n }\n });\n\n useLayoutEffect(() => {\n setWidth(objectRef.current?.clientWidth ?? 0);\n }, [objectRef]);\n\n let ctx = useMemo(() => ({\n tableWidth: width,\n useTableColumnResizeState,\n onResizeStart: props.onResizeStart,\n onResize: props.onResize,\n onResizeEnd: props.onResizeEnd\n }), [width, props.onResizeStart, props.onResize, props.onResizeEnd]);\n\n return (\n <div\n {...filterDOMProps(props as any)}\n ref={objectRef}\n className={props.className || 'react-aria-ResizableTableContainer'}\n style={props.style}\n onScroll={props.onScroll}>\n <ResizableTableContainerContext.Provider value={ctx}>\n {props.children}\n </ResizableTableContainerContext.Provider>\n </div>\n );\n}\n\nconst _ResizableTableContainer = forwardRef(ResizableTableContainer);\nexport {_ResizableTableContainer as ResizableTableContainer};\n\nexport const TableContext = createContext<ContextValue<TableProps, HTMLTableElement>>(null);\nexport const TableStateContext = createContext<TableState<unknown> | null>(null);\nexport const TableColumnResizeStateContext = createContext<TableColumnResizeState<unknown> | null>(null);\n\nexport interface TableRenderProps {\n /**\n * Whether the table is currently focused.\n * @selector [data-focused]\n */\n isFocused: boolean,\n /**\n * Whether the table is currently keyboard focused.\n * @selector [data-focus-visible]\n */\n isFocusVisible: boolean,\n /**\n * Whether the table is currently the active drop target.\n * @selector [data-drop-target]\n */\n isDropTarget: boolean,\n /**\n * State of the table.\n */\n state: TableState<unknown>\n}\n\nexport interface TableProps extends Omit<SharedTableProps<any>, 'children'>, StyleRenderProps<TableRenderProps>, SlotProps, AriaLabelingProps, ScrollableProps<HTMLTableElement> {\n /** The elements that make up the table. Includes the TableHeader, TableBody, Columns, and Rows. */\n children?: ReactNode,\n /**\n * How multiple selection should behave in the collection.\n * @default \"toggle\"\n */\n selectionBehavior?: SelectionBehavior,\n /**\n * Whether `disabledKeys` applies to all interactions, or only selection.\n * @default \"selection\"\n */\n disabledBehavior?: DisabledBehavior,\n /** Handler that is called when a user performs an action on the row. */\n onRowAction?: (key: Key) => void,\n /** The drag and drop hooks returned by `useDragAndDrop` used to enable drag and drop behavior for the Table. */\n dragAndDropHooks?: DragAndDropHooks\n}\n\nfunction Table(props: TableProps, ref: ForwardedRef<HTMLTableElement>) {\n [props, ref] = useContextProps(props, ref, TableContext);\n let initialCollection = useMemo(() => new TableCollection<any>(), []);\n let {portal, collection} = useCollection(props, initialCollection);\n let state = useTableState({\n ...props,\n collection,\n children: undefined\n });\n\n let {gridProps} = useTable(props, state, ref);\n\n let {dragAndDropHooks} = props;\n let selectionManager = state.selectionManager;\n let isListDraggable = !!dragAndDropHooks?.useDraggableCollectionState;\n let isListDroppable = !!dragAndDropHooks?.useDroppableCollectionState;\n let dragHooksProvided = useRef(isListDraggable);\n let dropHooksProvided = useRef(isListDroppable);\n useEffect(() => {\n if (dragHooksProvided.current !== isListDraggable) {\n console.warn('Drag hooks were provided during one render, but not another. This should be avoided as it may produce unexpected behavior.');\n }\n if (dropHooksProvided.current !== isListDroppable) {\n console.warn('Drop hooks were provided during one render, but not another. This should be avoided as it may produce unexpected behavior.');\n }\n }, [isListDraggable, isListDroppable]);\n\n let dragState: DraggableCollectionState | undefined = undefined;\n let dropState: DroppableCollectionState | undefined = undefined;\n let droppableCollection: DroppableCollectionResult | undefined = undefined;\n let isRootDropTarget = false;\n let dragPreview: JSX.Element | null = null;\n let preview = useRef<DragPreviewRenderer>(null);\n\n if (isListDraggable && dragAndDropHooks) {\n dragState = dragAndDropHooks.useDraggableCollectionState!({\n collection,\n selectionManager,\n preview: dragAndDropHooks.renderDragPreview ? preview : undefined\n });\n dragAndDropHooks.useDraggableCollection!({}, dragState, ref);\n\n let DragPreview = dragAndDropHooks.DragPreview!;\n dragPreview = dragAndDropHooks.renderDragPreview\n ? <DragPreview ref={preview}>{dragAndDropHooks.renderDragPreview}</DragPreview>\n : null;\n }\n\n if (isListDroppable && dragAndDropHooks) {\n dropState = dragAndDropHooks.useDroppableCollectionState!({\n collection,\n selectionManager\n });\n\n let keyboardDelegate = new ListKeyboardDelegate(\n collection,\n selectionManager.disabledBehavior === 'selection' ? new Set() : selectionManager.disabledKeys,\n ref\n );\n let dropTargetDelegate = dragAndDropHooks.dropTargetDelegate || new dragAndDropHooks.ListDropTargetDelegate(collection, ref);\n droppableCollection = dragAndDropHooks.useDroppableCollection!({\n keyboardDelegate,\n dropTargetDelegate\n }, dropState, ref);\n\n isRootDropTarget = dropState.isDropTarget({type: 'root'});\n }\n\n let {focusProps, isFocused, isFocusVisible} = useFocusRing();\n let renderProps = useRenderProps({\n className: props.className,\n style: props.style,\n defaultClassName: 'react-aria-Table',\n values: {\n isDropTarget: isRootDropTarget,\n isFocused,\n isFocusVisible,\n state\n }\n });\n\n let {selectionBehavior, selectionMode, disallowEmptySelection} = state.selectionManager;\n let ctx = useMemo(() => ({\n selectionBehavior: selectionMode === 'none' ? null : selectionBehavior,\n selectionMode,\n disallowEmptySelection,\n allowsDragging: isListDraggable\n }), [selectionBehavior, selectionMode, disallowEmptySelection, isListDraggable]);\n\n let style = renderProps.style;\n let tableContainerContext = useContext(ResizableTableContainerContext);\n let layoutState: TableColumnResizeState<unknown> | null = null;\n if (tableContainerContext) {\n layoutState = tableContainerContext.useTableColumnResizeState({\n tableWidth: tableContainerContext.tableWidth\n }, state);\n style = {\n ...style,\n tableLayout: 'fixed',\n width: 'fit-content'\n };\n }\n\n return (\n <>\n <TableOptionsContext.Provider value={ctx}>\n {portal}\n </TableOptionsContext.Provider>\n <Provider\n values={[\n [TableStateContext, state],\n [TableColumnResizeStateContext, layoutState],\n [DragAndDropContext, {dragAndDropHooks, dragState, dropState}],\n [DropIndicatorContext, {render: TableDropIndicatorWrapper}]\n ]}>\n <FocusScope>\n <table\n {...filterDOMProps(props)}\n {...renderProps}\n {...mergeProps(gridProps, focusProps, droppableCollection?.collectionProps)}\n style={style}\n ref={ref}\n slot={props.slot || undefined}\n onScroll={props.onScroll}\n data-allows-dragging={isListDraggable || undefined}\n data-drop-target={isRootDropTarget || undefined}\n data-focused={isFocused || undefined}\n data-focus-visible={isFocusVisible || undefined}>\n <TableHeaderRowGroup collection={collection} />\n <TableBodyRowGroup collection={collection} isDroppable={isListDroppable} />\n </table>\n </FocusScope>\n {dragPreview}\n </Provider>\n </>\n );\n}\n\n/**\n * A table displays data in rows and columns and enables a user to navigate its contents via directional navigation keys,\n * and optionally supports row selection and sorting.\n */\nconst _Table = forwardRef(Table);\nexport {_Table as Table};\n\nexport interface TableOptionsContextValue {\n /** The type of selection that is allowed in the table. */\n selectionMode: SelectionMode,\n /** The selection behavior for the table. If selectionMode is `\"none\"`, this will be `null`. */\n selectionBehavior: SelectionBehavior | null,\n /** Whether the table allows empty selection. */\n disallowEmptySelection: boolean,\n /** Whether the table allows rows to be dragged. */\n allowsDragging: boolean\n}\n\nconst TableOptionsContext = createContext<TableOptionsContextValue | null>(null);\n\n/**\n * Returns options from the parent `<Table>` component.\n */\nexport function useTableOptions(): TableOptionsContextValue {\n return useContext(TableOptionsContext)!;\n}\n\nexport interface TableHeaderProps<T> extends StyleProps {\n /** A list of table columns. */\n columns?: T[],\n /** A list of `Column(s)` or a function. If the latter, a list of columns must be provided using the `columns` prop. */\n children?: ReactNode | ((item: T) => ReactElement),\n /** Values that should invalidate the column cache when using dynamic collections. */\n dependencies?: any[]\n}\n\nfunction TableHeader<T extends object>(props: TableHeaderProps<T>, ref: ForwardedRef<HTMLTableSectionElement>) {\n let children = useCollectionChildren({\n children: props.children,\n items: props.columns,\n dependencies: props.dependencies\n });\n\n let renderer = typeof props.children === 'function' ? props.children : null;\n return (\n <CollectionRendererContext.Provider value={renderer}>\n {useSSRCollectionNode('tableheader', props, ref, null, children)}\n </CollectionRendererContext.Provider>\n );\n}\n\n/**\n * A header within a `<Table>`, containing the table columns.\n */\nconst _TableHeader = /*#__PURE__*/ (forwardRef as forwardRefType)(TableHeader);\nexport {_TableHeader as TableHeader};\n\nexport interface ColumnRenderProps {\n /**\n * Whether the item is currently hovered with a mouse.\n * @selector [data-hovered]\n */\n isHovered: boolean,\n /**\n * Whether the item is currently focused.\n * @selector [data-focused]\n */\n isFocused: boolean,\n /**\n * Whether the item is currently keyboard focused.\n * @selector [data-focus-visible]\n */\n isFocusVisible: boolean,\n /**\n * Whether the column allows sorting.\n * @selector [data-allows-sorting]\n */\n allowsSorting: boolean,\n /**\n * The current sort direction.\n * @selector [data-sort-direction=\"ascending | descending\"]\n */\n sortDirection: SortDirection | undefined,\n /**\n * Whether the column is currently being resized.\n * @selector [data-resizing]\n */\n isResizing: boolean,\n /**\n * Triggers sorting for this column in the given direction.\n */\n sort(direction: SortDirection): void,\n /**\n * Starts column resizing if the table is contained in a `<ResizableTableContainer>` element.\n */\n startResize(): void\n}\n\nexport interface ColumnProps extends RenderProps<ColumnRenderProps> {\n /** The unique id of the column. */\n id?: Key,\n /** Whether the column allows sorting. */\n allowsSorting?: boolean,\n /** Whether a column is a [row header](https://www.w3.org/TR/wai-aria-1.1/#rowheader) and should be announced by assistive technology during row navigation. */\n isRowHeader?: boolean,\n /** A string representation of the column's contents, used for accessibility announcements. */\n textValue?: string,\n /** The width of the column. This prop only applies when the `<Table>` is wrapped in a `<ResizableTableContainer>`. */\n width?: ColumnSize | null,\n /** The default width of the column. This prop only applies when the `<Table>` is wrapped in a `<ResizableTableContainer>`. */\n defaultWidth?: ColumnSize | null,\n /** The minimum width of the column. This prop only applies when the `<Table>` is wrapped in a `<ResizableTableContainer>`. */\n minWidth?: ColumnStaticSize | null,\n /** The maximum width of the column. This prop only applies when the `<Table>` is wrapped in a `<ResizableTableContainer>`. */\n maxWidth?: ColumnStaticSize | null\n}\n\nfunction Column(props: ColumnProps, ref: ForwardedRef<HTMLTableCellElement>): JSX.Element | null {\n return useSSRCollectionNode('column', props, ref, props.children);\n}\n\n/**\n * A column within a `<Table>`.\n */\nconst _Column = /*#__PURE__*/ (forwardRef as forwardRefType)(Column);\nexport {_Column as Column};\n\nexport interface TableBodyRenderProps {\n /**\n * Whether the table body has no rows and should display its empty state.\n * @selector [data-empty]\n */\n isEmpty: boolean,\n /**\n * Whether the Table is currently the active drop target.\n * @selector [data-drop-target]\n */\n isDropTarget: boolean\n}\n\nexport interface TableBodyProps<T> extends CollectionProps<T>, StyleRenderProps<TableBodyRenderProps> {\n /** Provides content to display when there are no rows in the table. */\n renderEmptyState?: (props: TableBodyRenderProps) => ReactNode\n}\n\nfunction TableBody<T extends object>(props: TableBodyProps<T>, ref: ForwardedRef<HTMLTableSectionElement>): JSX.Element | null {\n let children = useCollectionChildren(props);\n return useSSRCollectionNode('tablebody', props, ref, null, children);\n}\n\n/**\n * The body of a `<Table>`, containing the table rows.\n */\nconst _TableBody = /*#__PURE__*/ (forwardRef as forwardRefType)(TableBody);\nexport {_TableBody as TableBody};\n\nexport interface RowRenderProps extends ItemRenderProps {}\n\nexport interface RowProps<T> extends StyleRenderProps<RowRenderProps>, LinkDOMProps {\n /** The unique id of the row. */\n id?: Key,\n /** A list of columns used when dynamically rendering cells. */\n columns?: Iterable<T>,\n /** The cells within the row. Supports static items or a function for dynamic rendering. */\n children?: ReactNode | ((item: T) => ReactElement),\n /** The object value that this row represents. When using dynamic collections, this is set automatically. */\n value?: T,\n /** Values that should invalidate the cell cache when using dynamic collections. */\n dependencies?: any[],\n /** A string representation of the row's contents, used for features like typeahead. */\n textValue?: string\n}\n\nfunction Row<T extends object>(props: RowProps<T>, ref: ForwardedRef<HTMLTableRowElement>): JSX.Element | null {\n let dependencies = [props.value].concat(props.dependencies);\n let children = useCollectionChildren({\n dependencies,\n children: props.children,\n items: props.columns,\n idScope: props.id\n });\n\n let ctx = useMemo(() => ({idScope: props.id, dependencies}), [props.id, ...dependencies]);\n\n return useSSRCollectionNode('item', props, ref, null, (\n <CollectionContext.Provider value={ctx}>\n {children}\n </CollectionContext.Provider>\n ));\n}\n\n/**\n * A row within a `<Table>`.\n */\nconst _Row = /*#__PURE__*/ (forwardRef as forwardRefType)(Row);\nexport {_Row as Row};\n\nexport interface CellRenderProps {\n /**\n * Whether the cell is currently in a pressed state.\n * @selector [data-pressed]\n */\n isPressed: boolean,\n /**\n * Whether the cell is currently focused.\n * @selector [data-focused]\n */\n isFocused: boolean,\n /**\n * Whether the cell is currently keyboard focused.\n * @selector [data-focus-visible]\n */\n isFocusVisible: boolean,\n /**\n * Whether the cell is currently hovered with a mouse.\n * @selector [data-hovered]\n */\n isHovered: boolean\n}\n\nexport interface CellProps extends RenderProps<CellRenderProps> {\n /** The unique id of the cell. */\n id?: Key,\n /** A string representation of the cell's contents, used for features like typeahead. */\n textValue?: string\n}\n\nfunction Cell(props: CellProps, ref: ForwardedRef<HTMLTableCellElement>): JSX.Element | null {\n return useSSRCollectionNode('cell', props, ref, props.children);\n}\n\n/**\n * A cell within a table row.\n */\nconst _Cell = /*#__PURE__*/ (forwardRef as forwardRefType)(Cell);\nexport {_Cell as Cell};\n\nfunction TableHeaderRowGroup<T>({collection}: {collection: TableCollection<T>}) {\n let headerRows = useCachedChildren({\n items: collection.headerRows,\n children: useCallback((item: Node<T>) => {\n switch (item.type) {\n case 'headerrow':\n return <TableHeaderRow item={item} />;\n default:\n throw new Error('Unsupported node type in TableHeader: ' + item.type);\n }\n }, [])\n });\n\n let {rowGroupProps} = useTableRowGroup();\n return (\n <thead\n {...filterDOMProps(collection.head.props)}\n {...rowGroupProps}\n ref={collection.head.props.ref}\n className={collection.head.props.className ?? 'react-aria-TableHeader'}\n style={collection.head.props.style}>\n {headerRows}\n </thead>\n );\n}\n\nfunction TableBodyRowGroup<T>(props: {collection: TableCollection<T>, isDroppable: boolean}) {\n let {collection, isDroppable} = props;\n let bodyRows = useCachedChildren({\n items: collection.rows,\n children: useCallback((item: Node<T>) => {\n switch (item.type) {\n case 'item':\n return <TableRow item={item} />;\n default:\n throw new Error('Unsupported node type in TableBody: ' + item.type);\n }\n }, [])\n });\n\n let state = useContext(TableStateContext);\n let {dropState} = useContext(DragAndDropContext);\n let isRootDropTarget = isDroppable && !!dropState && (dropState.isDropTarget({type: 'root'}) ?? false);\n\n let bodyProps: TableBodyProps<T> = collection.body.props;\n let renderValues = {\n isDropTarget: isRootDropTarget,\n isEmpty: collection.size === 0\n };\n let renderProps = useRenderProps({\n ...bodyProps,\n id: undefined,\n children: undefined,\n defaultClassName: 'react-aria-TableBody',\n values: renderValues\n });\n\n let emptyState;\n if (collection.size === 0 && bodyProps.renderEmptyState && state) {\n emptyState = (\n <tr role=\"row\">\n <td role=\"gridcell\" colSpan={collection.columnCount}>\n {bodyProps.renderEmptyState(renderValues)}\n </td>\n </tr>\n );\n }\n\n let {rowGroupProps} = useTableRowGroup();\n return (\n <tbody\n {...mergeProps(filterDOMProps(bodyProps as any), rowGroupProps)}\n {...renderProps}\n ref={collection.body.props.ref}\n data-empty={collection.size === 0 || undefined}>\n {isDroppable && <RootDropIndicator />}\n {bodyRows}\n {emptyState}\n </tbody>\n );\n}\n\nfunction TableHeaderRow<T>({item}: {item: GridNode<T>}) {\n let ref = useRef<HTMLTableRowElement>(null);\n let state = useContext(TableStateContext)!;\n let {rowProps} = useTableHeaderRow({node: item}, state, ref);\n let {checkboxProps} = useTableSelectAllCheckbox(state);\n\n let cells = useCachedChildren({\n items: state.collection.getChildren!(item.key),\n children: (item) => {\n switch (item.type) {\n case 'column':\n return <TableColumnHeader column={item} />;\n default:\n throw new Error('Unsupported node type in Row: ' + item.type);\n }\n }\n });\n\n return (\n <tr {...rowProps} ref={ref}>\n <Provider\n values={[\n [CheckboxContext, {\n slots: {\n selection: checkboxProps\n }\n }]\n ]}>\n {cells}\n </Provider>\n </tr>\n );\n}\n\ninterface ColumnResizerContextValue {\n column: GridNode<unknown>,\n triggerRef: RefObject<HTMLDivElement>\n}\n\nconst ColumnResizerContext = createContext<ColumnResizerContextValue | null>(null);\n\nfunction TableColumnHeader<T>({column}: {column: GridNode<T>}) {\n let ref = useObjectRef<HTMLTableHeaderCellElement>(column.props.ref);\n let state = useContext(TableStateContext)!;\n let {columnHeaderProps} = useTableColumnHeader(\n {node: column},\n state,\n ref\n );\n let {isFocused, isFocusVisible, focusProps} = useFocusRing();\n\n let layoutState = useContext(TableColumnResizeStateContext);\n let isResizing = false;\n if (layoutState) {\n isResizing = layoutState.resizingColumn === column.key;\n } else {\n for (let prop in ['width', 'defaultWidth', 'minWidth', 'maxWidth']) {\n if (prop in column.props) {\n console.warn(`The ${prop} prop on a <Column> only applies when a <Table> is wrapped in a <ResizableTableContainer>. If you aren't using column resizing, you can set the width of a column with CSS.`);\n }\n }\n }\n\n let props: ColumnProps = column.props;\n let {hoverProps, isHovered} = useHover({isDisabled: !props.allowsSorting});\n let renderProps = useRenderProps({\n ...props,\n id: undefined,\n children: column.rendered,\n defaultClassName: 'react-aria-Column',\n values: {\n isHovered,\n isFocused,\n isFocusVisible,\n allowsSorting: column.props.allowsSorting,\n sortDirection: state.sortDescriptor?.column === column.key\n ? state.sortDescriptor.direction\n : undefined,\n isResizing,\n startResize: () => {\n if (layoutState) {\n layoutState.startResize(column.key);\n state.setKeyboardNavigationDisabled(true);\n } else {\n throw new Error('Wrap your <Table> in a <ResizableTableContainer> to enable column resizing');\n }\n },\n sort: (direction) => {\n state.sort(column.key, direction);\n }\n }\n });\n\n let style = renderProps.style;\n if (layoutState) {\n style = {...style, width: layoutState.getColumnWidth(column.key)};\n }\n\n return (\n <th\n {...mergeProps(filterDOMProps(props as any), columnHeaderProps, focusProps, hoverProps)}\n {...renderProps}\n style={style}\n colSpan={column.colspan}\n ref={ref}\n data-hovered={isHovered || undefined}\n data-focused={isFocused || undefined}\n data-focus-visible={isFocusVisible || undefined}\n data-resizing={isResizing || undefined}\n data-allows-sorting={column.props.allowsSorting || undefined}\n data-sort-direction={state.sortDescriptor?.column === column.key ? state.sortDescriptor.direction : undefined}>\n <ColumnResizerContext.Provider value={{column, triggerRef: ref}}>\n {renderProps.children}\n </ColumnResizerContext.Provider>\n </th>\n );\n}\n\nexport interface ColumnResizerRenderProps {\n /**\n * Whether the resizer is currently hovered with a mouse.\n * @selector [data-hovered]\n */\n isHovered: boolean,\n /**\n * Whether the resizer is currently focused.\n * @selector [data-focused]\n */\n isFocused: boolean,\n /**\n * Whether the resizer is currently keyboard focused.\n * @selector [data-focus-visible]\n */\n isFocusVisible: boolean,\n /**\n * Whether the resizer is currently being resized.\n * @selector [data-resizing]\n */\n isResizing: boolean,\n /**\n * The direction that the column is currently resizable.\n * @selector [data-resizable-direction=\"right | left | both\"]\n */\n resizableDirection: 'right' | 'left' | 'both'\n}\n\nexport interface ColumnResizerProps extends HoverEvents, RenderProps<ColumnResizerRenderProps> {\n /** A custom accessibility label for the resizer. */\n 'aria-label'?: string\n}\n\nfunction ColumnResizer(props: ColumnResizerProps, ref: ForwardedRef<HTMLDivElement>) {\n let layoutState = useContext(TableColumnResizeStateContext);\n if (!layoutState) {\n throw new Error('Wrap your <Table> in a <ResizableTableContainer> to enable column resizing');\n }\n let stringFormatter = useLocalizedStringFormatter(intlMessages, 'react-aria-components');\n\n let {onResizeStart, onResize, onResizeEnd} = useContext(ResizableTableContainerContext)!;\n let {column, triggerRef} = useContext(ColumnResizerContext)!;\n let inputRef = useRef<HTMLInputElement>(null);\n let {resizerProps, inputProps, isResizing} = useTableColumnResize(\n {\n column,\n 'aria-label': props['aria-label'] || stringFormatter.format('tableResizer'),\n onResizeStart,\n onResize,\n onResizeEnd,\n triggerRef\n },\n layoutState,\n inputRef\n );\n let {focusProps, isFocused, isFocusVisible} = useFocusRing();\n let {hoverProps, isHovered} = useHover(props);\n\n let isEResizable = layoutState.getColumnMinWidth(column.key) >= layoutState.getColumnWidth(column.key);\n let isWResizable = layoutState.getColumnMaxWidth(column.key) <= layoutState.getColumnWidth(column.key);\n let {direction} = useLocale();\n let resizableDirection: ColumnResizerRenderProps['resizableDirection'] = 'both';\n if (isEResizable) {\n resizableDirection = direction === 'rtl' ? 'right' : 'left';\n } else if (isWResizable) {\n resizableDirection = direction === 'rtl' ? 'left' : 'right';\n } else {\n resizableDirection = 'both';\n }\n\n let objectRef = useObjectRef(ref);\n let [cursor, setCursor] = useState('');\n useEffect(() => {\n if (!objectRef.current) {\n return;\n }\n let style = window.getComputedStyle(objectRef.current);\n setCursor(style.cursor);\n }, [objectRef, resizableDirection]);\n\n let renderProps = useRenderProps({\n ...props,\n defaultClassName: 'react-aria-ColumnResizer',\n values: {\n isFocused,\n isFocusVisible,\n isResizing,\n isHovered,\n resizableDirection\n }\n });\n\n let [isMouseDown, setMouseDown] = useState(false);\n let onPointerDown = (e: PointerEvent) => {\n if (e.pointerType === 'mouse') {\n setMouseDown(true);\n }\n };\n\n if (!isResizing && isMouseDown) {\n setMouseDown(false);\n }\n\n return (\n <div\n ref={objectRef}\n role=\"presentation\"\n {...renderProps}\n {...mergeProps(resizerProps, {onPointerDown}, hoverProps)}\n data-hovered={isHovered || undefined}\n data-focused={isFocused || undefined}\n data-focus-visible={isFocusVisible || undefined}\n data-resizing={isResizing || undefined}\n data-resizable-direction={resizableDirection}>\n {renderProps.children}\n <input\n ref={inputRef}\n {...mergeProps(inputProps, focusProps)} />\n {isResizing && isMouseDown && ReactDOM.createPortal(<div style={{position: 'fixed', top: 0, left: 0, bottom: 0, right: 0, cursor}} />, document.body)}\n </div>\n );\n}\n\nconst _ColumnResizer = forwardRef(ColumnResizer);\nexport {_ColumnResizer as ColumnResizer};\n\nfunction TableRow<T>({item}: {item: GridNode<T>}) {\n let ref = useObjectRef<HTMLTableRowElement>(item.props.ref);\n let state = useContext(TableStateContext)!;\n let {dragAndDropHooks, dragState, dropState} = useContext(DragAndDropContext);\n let {rowProps, ...states} = useTableRow(\n {\n node: item,\n shouldSelectOnPressUp: !!dragState\n },\n state,\n ref\n );\n let {isFocused, isFocusVisible, focusProps} = useFocusRing();\n let {hoverProps, isHovered} = useHover({\n isDisabled: !states.allowsSelection && !states.hasAction\n });\n\n let {checkboxProps} = useTableSelectionCheckbox(\n {key: item.key},\n state\n );\n\n let draggableItem: DraggableItemResult | undefined = undefined;\n if (dragState && dragAndDropHooks) {\n draggableItem = dragAndDropHooks.useDraggableItem!({key: item.key, hasDragButton: true}, dragState);\n }\n\n let dropIndicator: DropIndicatorAria | undefined = undefined;\n let dropIndicatorRef = useRef<HTMLDivElement>(null);\n let {visuallyHiddenProps} = useVisuallyHidden();\n if (dropState && dragAndDropHooks) {\n dropIndicator = dragAndDropHooks.useDropIndicator!({\n target: {type: 'item', key: item.key, dropPosition: 'on'}\n }, dropState, dropIndicatorRef);\n }\n\n let renderDropIndicator = dragAndDropHooks?.renderDropIndicator || (target => <DropIndicator target={target} />);\n let dragButtonRef = useRef<HTMLButtonElement>(null);\n useEffect(() => {\n if (dragState && !dragButtonRef.current) {\n console.warn('Draggable items in a Table must contain a <Button slot=\"drag\"> element so that keyboard and screen reader users can drag them.');\n }\n // eslint-disable-next-line\n }, []);\n\n let props = item.props as RowProps<unknown>;\n let isDragging = dragState && dragState.isDragging(item.key);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let {children: _, ...restProps} = props;\n let renderProps = useRenderProps({\n ...restProps,\n id: undefined,\n defaultClassName: 'react-aria-Row',\n values: {\n ...states,\n isHovered,\n isFocused,\n isFocusVisible,\n selectionMode: state.selectionManager.selectionMode,\n selectionBehavior: state.selectionManager.selectionBehavior,\n isDragging,\n isDropTarget: dropIndicator?.isDropTarget\n }\n });\n\n let cells = useCachedChildren({\n items: state.collection.getChildren!(item.key),\n children: (item: Node<unknown>) => {\n switch (item.type) {\n case 'cell':\n return <TableCell cell={item} />;\n default:\n throw new Error('Unsupported node type in Row: ' + item.type);\n }\n }\n });\n\n return (\n <>\n {dragAndDropHooks?.useDropIndicator &&\n renderDropIndicator({type: 'item', key: item.key, dropPosition: 'before'})\n }\n {dropIndicator && !dropIndicator.isHidden && (\n <tr role=\"row\" style={{height: 0}}>\n <td role=\"gridcell\" colSpan={state.collection.columnCount} style={{padding: 0}}>\n <div role=\"button\" {...visuallyHiddenProps} {...dropIndicator.dropIndicatorProps} ref={dropIndicatorRef} />\n </td>\n </tr>\n )}\n <tr\n {...mergeProps(filterDOMProps(props as any), rowProps, focusProps, hoverProps, draggableItem?.dragProps)}\n {...renderProps}\n ref={ref}\n data-disabled={states.isDisabled || undefined}\n data-selected={states.isSelected || undefined}\n data-hovered={isHovered || undefined}\n data-focused={states.isFocused || undefined}\n data-focus-visible={isFocusVisible || undefined}\n data-pressed={states.isPressed || undefined}\n data-dragging={isDragging || undefined}\n data-drop-target={dropIndicator?.isDropTarget || undefined}\n data-selection-mode={state.selectionManager.selectionMode === 'none' ? undefined : state.selectionManager.selectionMode}>\n <Provider\n values={[\n [CheckboxContext, {\n slots: {\n selection: checkboxProps\n }\n }],\n [ButtonContext, {\n slots: {\n [defaultSlot]: {},\n drag: {\n ...draggableItem?.dragButtonProps,\n ref: dragButtonRef,\n style: {\n pointerEvents: 'none'\n }\n }\n }\n }]\n ]}>\n {cells}\n </Provider>\n </tr>\n {dragAndDropHooks?.useDropIndicator && state.collection.getKeyAfter(item.key) == null &&\n renderDropIndicator({type: 'item', key: item.key, dropPosition: 'after'})\n }\n </>\n );\n}\n\nfunction TableCell<T>({cell}: {cell: GridNode<T>}) {\n let ref = useObjectRef<HTMLTableCellElement>(cell.props.ref);\n let state = useContext(TableStateContext)!;\n let {dragState} = useContext(DragAndDropContext);\n\n // @ts-ignore\n cell.column = state.collection.columns[cell.index];\n\n let {gridCellProps, isPressed} = useTableCell({\n node: cell,\n shouldSelectOnPressUp: !!dragState\n }, state, ref);\n let {isFocused, isFocusVisible, focusProps} = useFocusRing();\n let {hoverProps, isHovered} = useHover({});\n\n let props: CellProps = cell.props;\n let renderProps = useRenderProps({\n ...props,\n id: undefined,\n defaultClassName: 'react-aria-Cell',\n values: {\n isFocused,\n isFocusVisible,\n isPressed,\n isHovered\n }\n });\n\n return (\n <td\n {...mergeProps(filterDOMProps(props as any), gridCellProps, focusProps, hoverProps)}\n {...renderProps}\n ref={ref}\n data-focused={isFocused || undefined}\n data-focus-visible={isFocusVisible || undefined}\n data-pressed={isPressed || undefined}>\n {renderProps.children}\n </td>\n );\n}\n\nfunction TableDropIndicatorWrapper(props: DropIndicatorProps, ref: ForwardedRef<HTMLElement>) {\n ref = useObjectRef(ref);\n let {dragAndDropHooks, dropState} = useContext(DragAndDropContext)!;\n let buttonRef = useRef<HTMLDivElement>(null);\n let {dropIndicatorProps, isHidden, isDropTarget} = dragAndDropHooks!.useDropIndicator!(\n props,\n dropState!,\n buttonRef\n );\n\n if (isHidden) {\n return null;\n }\n\n return (\n <TableDropIndicatorForwardRef {...props} dropIndicatorProps={dropIndicatorProps} isDropTarget={isDropTarget} buttonRef={buttonRef} ref={ref} />\n );\n}\n\ninterface TableDropIndicatorProps extends DropIndicatorProps {\n dropIndicatorProps: React.HTMLAttributes<HTMLElement>,\n isDropTarget: boolean,\n buttonRef: RefObject<HTMLDivElement>\n}\n\nfunction TableDropIndicator(props: TableDropIndicatorProps, ref: ForwardedRef<HTMLElement>) {\n let {\n dropIndicatorProps,\n isDropTarget,\n buttonRef,\n ...otherProps\n } = props;\n\n let state = useContext(TableStateContext)!;\n let {visuallyHiddenProps} = useVisuallyHidden();\n let renderProps = useRenderProps({\n ...otherProps,\n defaultClassName: 'react-aria-DropIndicator',\n values: {\n isDropTarget\n }\n });\n\n return (\n <tr\n {...filterDOMProps(props as any)}\n {...renderProps}\n role=\"row\"\n ref={ref as RefObject<HTMLTableRowElement>}\n data-drop-target={isDropTarget || undefined}>\n <td\n role=\"gridcell\"\n colSpan={state.collection.columnCount}\n style={{padding: 0}}>\n <div {...visuallyHiddenProps} role=\"button\" {...dropIndicatorProps} ref={buttonRef} />\n {renderProps.children}\n </td>\n </tr>\n );\n}\n\nconst TableDropIndicatorForwardRef = forwardRef(TableDropIndicator);\n\nfunction RootDropIndicator() {\n let state = useContext(TableStateContext)!;\n let {dragAndDropHooks, dropState} = useContext(DragAndDropContext);\n let ref = useRef<HTMLDivElement>(null);\n let {dropIndicatorProps} = dragAndDropHooks!.useDropIndicator!({\n target: {type: 'root'}\n }, dropState!, ref);\n let isDropTarget = dropState!.isDropTarget({type: 'root'});\n let {visuallyHiddenProps} = useVisuallyHidden();\n\n if (!isDropTarget && dropIndicatorProps['aria-hidden']) {\n return null;\n }\n\n return (\n <tr\n role=\"row\"\n aria-hidden={dropIndicatorProps['aria-hidden']}\n style={{height: 0}}>\n <td\n role=\"gridcell\"\n colSpan={state.collection.columnCount}\n style={{padding: 0}}>\n <div role=\"button\" {...visuallyHiddenProps} {...dropIndicatorProps} ref={ref} />\n </td>\n </tr>\n );\n}\n","import { useEffect } from 'react'\n\nconst useOutsideClick = (ref, callback) => {\n useEffect(() => {\n\n function handleClickOutside (event) {\n if (ref.current && !ref.current.contains(event.target)) {\n callback()\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [ref, callback])\n}\n\nexport default useOutsideClick\n","import React, { useEffect, useRef, useState } from 'react'\nimport { Button, Label, ListBox, ListBoxItem, Popover, Select, SelectValue } from 'react-aria-components'\nimport { useClickOutside } from '$themehooks'\n\n\nimport './Switcher.scss'\n\nconst Switcher = (props) => {\n const { className, items, label, selected, onSelected, renderSelection, renderItem } = props\n const [isOpen, setIsOpen] = useState(false)\n const popoverRef = useRef(null)\n\n useClickOutside(popoverRef, () => setIsOpen(false))\n\n useEffect(() => {\n if (isOpen) {\n popoverRef.current.style.position = 'fixed'\n document.documentElement.style.overflow = ''\n document.documentElement.style.paddingRight = ''\n }\n }, [isOpen])\n\n if (!items) {\n return <div/>\n }\n\n const onSelectBlur = (e) => {\n if (e.target.getAttribute('role') === 'option') {\n window.queueMicrotask(() => {\n e.target.setAttribute('tabindex', 0)\n e.target.focus()\n })\n }\n }\n\n return (\n <Select className={`switcher ${className}`} selectedKey={selected.value}\n onSelectionChange={(keys) => onSelected(keys)}\n isOpen={isOpen} onOpenChange={setIsOpen}\n onBlur={onSelectBlur}>\n <Label>{label}</Label>\n <Button>\n <SelectValue>\n {renderSelection && renderSelection(selected)}\n </SelectValue>\n </Button>\n <Popover className={`switcher-popup ${className}`} shouldCloseOnInteractOutside={() => false} ref={popoverRef}>\n <ListBox items={items} selectionMode=\"single\" selectionBehavior=\"toggle\">\n {(item) => <ListBoxItem key={item.id} value={item.value}>\n {renderItem && renderItem(item)}\n </ListBoxItem>}\n </ListBox>\n </Popover>\n </Select>\n )\n}\n\nexport default Switcher\n","/**\n * Rounds number to given decimal\n * eg. roundNumber(2.34343, 1) => 2.3\n */\nexport var roundNumber = function (num, decimal) {\n return Number(num.toFixed(decimal));\n};\n/**\n * Checks if value is number, if not it returns default value\n * 1# eg. checkIsNumber(2, 30) => 2\n * 2# eg. checkIsNumber(null, 30) => 30\n */\nexport var checkIsNumber = function (num, defaultValue) {\n return typeof num === \"number\" ? num : defaultValue;\n};\n","export var handleCallback = function (context, event, callback) {\n if (callback && typeof callback === \"function\") {\n callback(context, event);\n }\n};\n","/* eslint-disable no-plusplus */\n/* eslint-disable no-param-reassign */\n/**\n * Functions should return denominator of the target value, which is the next animation step.\n * t is a value from 0 to 1, reflecting the percentage of animation status.\n */\nvar easeOut = function (t) {\n return -Math.cos(t * Math.PI) / 2 + 0.5;\n};\n// linear\nvar linear = function (t) {\n return t;\n};\n// accelerating from zero velocity\nvar easeInQuad = function (t) {\n return t * t;\n};\n// decelerating to zero velocity\nvar easeOutQuad = function (t) {\n return t * (2 - t);\n};\n// acceleration until halfway, then deceleration\nvar easeInOutQuad = function (t) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n};\n// accelerating from zero velocity\nvar easeInCubic = function (t) {\n return t * t * t;\n};\n// decelerating to zero velocity\nvar easeOutCubic = function (t) {\n return --t * t * t + 1;\n};\n// acceleration until halfway, then deceleration\nvar easeInOutCubic = function (t) {\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n};\n// accelerating from zero velocity\nvar easeInQuart = function (t) {\n return t * t * t * t;\n};\n// decelerating to zero velocity\nvar easeOutQuart = function (t) {\n return 1 - --t * t * t * t;\n};\n// acceleration until halfway, then deceleration\nvar easeInOutQuart = function (t) {\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n};\n// accelerating from zero velocity\nvar easeInQuint = function (t) {\n return t * t * t * t * t;\n};\n// decelerating to zero velocity\nvar easeOutQuint = function (t) {\n return 1 + --t * t * t * t * t;\n};\n// acceleration until halfway, then deceleration\nvar easeInOutQuint = function (t) {\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\n};\nexport var animations = {\n easeOut: easeOut,\n linear: linear,\n easeInQuad: easeInQuad,\n easeOutQuad: easeOutQuad,\n easeInOutQuad: easeInOutQuad,\n easeInCubic: easeInCubic,\n easeOutCubic: easeOutCubic,\n easeInOutCubic: easeInOutCubic,\n easeInQuart: easeInQuart,\n easeOutQuart: easeOutQuart,\n easeInOutQuart: easeInOutQuart,\n easeInQuint: easeInQuint,\n easeOutQuint: easeOutQuint,\n easeInOutQuint: easeInOutQuint,\n};\n","/* eslint-disable no-param-reassign */\nimport { animations } from \"./animations.constants\";\nvar handleCancelAnimationFrame = function (animation) {\n if (typeof animation === \"number\") {\n cancelAnimationFrame(animation);\n }\n};\nexport var handleCancelAnimation = function (contextInstance) {\n if (!contextInstance.mounted)\n return;\n handleCancelAnimationFrame(contextInstance.animation);\n // Clear animation state\n contextInstance.animate = false;\n contextInstance.animation = null;\n contextInstance.velocity = null;\n};\nexport function handleSetupAnimation(contextInstance, animationName, animationTime, callback) {\n if (!contextInstance.mounted)\n return;\n var startTime = new Date().getTime();\n var lastStep = 1;\n // if another animation is active\n handleCancelAnimation(contextInstance);\n // new animation\n contextInstance.animation = function () {\n if (!contextInstance.mounted) {\n return handleCancelAnimationFrame(contextInstance.animation);\n }\n var frameTime = new Date().getTime() - startTime;\n var animationProgress = frameTime / animationTime;\n var animationType = animations[animationName];\n var step = animationType(animationProgress);\n if (frameTime >= animationTime) {\n callback(lastStep);\n contextInstance.animation = null;\n }\n else if (contextInstance.animation) {\n callback(step);\n requestAnimationFrame(contextInstance.animation);\n }\n };\n requestAnimationFrame(contextInstance.animation);\n}\nfunction isValidTargetState(targetState) {\n var scale = targetState.scale, positionX = targetState.positionX, positionY = targetState.positionY;\n if (Number.isNaN(scale) ||\n Number.isNaN(positionX) ||\n Number.isNaN(positionY)) {\n return false;\n }\n return true;\n}\nexport function animate(contextInstance, targetState, animationTime, animationName) {\n var isValid = isValidTargetState(targetState);\n if (!contextInstance.mounted || !isValid)\n return;\n var setTransformState = contextInstance.setTransformState;\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n var scaleDiff = targetState.scale - scale;\n var positionXDiff = targetState.positionX - positionX;\n var positionYDiff = targetState.positionY - positionY;\n if (animationTime === 0) {\n setTransformState(targetState.scale, targetState.positionX, targetState.positionY);\n }\n else {\n // animation start timestamp\n handleSetupAnimation(contextInstance, animationName, animationTime, function (step) {\n var newScale = scale + scaleDiff * step;\n var newPositionX = positionX + positionXDiff * step;\n var newPositionY = positionY + positionYDiff * step;\n setTransformState(newScale, newPositionX, newPositionY);\n });\n }\n}\n","/* eslint-disable no-param-reassign */\nimport { roundNumber } from \"../../utils\";\nexport function getComponentsSizes(wrapperComponent, contentComponent, newScale) {\n var wrapperWidth = wrapperComponent.offsetWidth;\n var wrapperHeight = wrapperComponent.offsetHeight;\n var contentWidth = contentComponent.offsetWidth;\n var contentHeight = contentComponent.offsetHeight;\n var newContentWidth = contentWidth * newScale;\n var newContentHeight = contentHeight * newScale;\n var newDiffWidth = wrapperWidth - newContentWidth;\n var newDiffHeight = wrapperHeight - newContentHeight;\n return {\n wrapperWidth: wrapperWidth,\n wrapperHeight: wrapperHeight,\n newContentWidth: newContentWidth,\n newDiffWidth: newDiffWidth,\n newContentHeight: newContentHeight,\n newDiffHeight: newDiffHeight,\n };\n}\nexport var getBounds = function (wrapperWidth, newContentWidth, diffWidth, wrapperHeight, newContentHeight, diffHeight, centerZoomedOut) {\n var scaleWidthFactor = wrapperWidth > newContentWidth\n ? diffWidth * (centerZoomedOut ? 1 : 0.5)\n : 0;\n var scaleHeightFactor = wrapperHeight > newContentHeight\n ? diffHeight * (centerZoomedOut ? 1 : 0.5)\n : 0;\n var minPositionX = wrapperWidth - newContentWidth - scaleWidthFactor;\n var maxPositionX = scaleWidthFactor;\n var minPositionY = wrapperHeight - newContentHeight - scaleHeightFactor;\n var maxPositionY = scaleHeightFactor;\n return { minPositionX: minPositionX, maxPositionX: maxPositionX, minPositionY: minPositionY, maxPositionY: maxPositionY };\n};\nexport var calculateBounds = function (contextInstance, newScale) {\n var wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n var centerZoomedOut = contextInstance.setup.centerZoomedOut;\n if (!wrapperComponent || !contentComponent) {\n throw new Error(\"Components are not mounted\");\n }\n var _a = getComponentsSizes(wrapperComponent, contentComponent, newScale), wrapperWidth = _a.wrapperWidth, wrapperHeight = _a.wrapperHeight, newContentWidth = _a.newContentWidth, newDiffWidth = _a.newDiffWidth, newContentHeight = _a.newContentHeight, newDiffHeight = _a.newDiffHeight;\n var bounds = getBounds(wrapperWidth, newContentWidth, newDiffWidth, wrapperHeight, newContentHeight, newDiffHeight, Boolean(centerZoomedOut));\n return bounds;\n};\nexport function clamp(v, min, max) {\n return Math.max(min, Math.min(v, max));\n}\n// Based on @aholachek ;)\n// https://twitter.com/chpwn/status/285540192096497664\n// iOS constant = 0.55\n// https://medium.com/@nathangitter/building-fluid-interfaces-ios-swift-9732bb934bf5\nfunction rubberband(distance, dimension, constant) {\n if (dimension === 0 || Math.abs(dimension) === Infinity)\n return Math.pow(distance, (constant * 5));\n return (distance * dimension * constant) / (dimension + constant * distance);\n}\nexport function rubberbandIfOutOfBounds(position, min, max, constant) {\n if (constant === void 0) { constant = 0.15; }\n if (constant === 0)\n return clamp(position, min, max);\n if (position < min)\n return -rubberband(min - position, max - min, constant) + min;\n if (position > max)\n return +rubberband(position - max, max - min, constant) + max;\n return position;\n}\n/**\n * Keeps value between given bounds, used for limiting view to given boundaries\n * 1# eg. boundLimiter(2, 0, 3, true) => 2\n * 2# eg. boundLimiter(4, 0, 3, true) => 3\n * 3# eg. boundLimiter(-2, 0, 3, true) => 0\n * 4# eg. boundLimiter(10, 0, 3, false) => 10\n */\nexport var boundLimiter = function (value, minBound, maxBound, isActive) {\n if (!isActive)\n return roundNumber(value, 2);\n if (value < minBound)\n return roundNumber(minBound, 2);\n if (value > maxBound)\n return roundNumber(maxBound, 2);\n return roundNumber(value, 2);\n};\nexport var handleCalculateBounds = function (contextInstance, newScale) {\n var bounds = calculateBounds(contextInstance, newScale);\n // Save bounds\n contextInstance.bounds = bounds;\n return bounds;\n};\nexport function getMouseBoundedPosition(positionX, positionY, bounds, limitToBounds, paddingValueX, paddingValueY, wrapperComponent) {\n var minPositionX = bounds.minPositionX, minPositionY = bounds.minPositionY, maxPositionX = bounds.maxPositionX, maxPositionY = bounds.maxPositionY;\n var paddingX = 0;\n var paddingY = 0;\n if (wrapperComponent) {\n paddingX = paddingValueX;\n paddingY = paddingValueY;\n }\n var x = boundLimiter(positionX, minPositionX - paddingX, maxPositionX + paddingX, limitToBounds);\n var y = boundLimiter(positionY, minPositionY - paddingY, maxPositionY + paddingY, limitToBounds);\n return { x: x, y: y };\n}\n","import { getMouseBoundedPosition } from \"../bounds/bounds.utils\";\nexport function handleCalculateZoomPositions(contextInstance, mouseX, mouseY, newScale, bounds, limitToBounds) {\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n var scaleDifference = newScale - scale;\n if (typeof mouseX !== \"number\" || typeof mouseY !== \"number\") {\n console.error(\"Mouse X and Y position were not provided!\");\n return { x: positionX, y: positionY };\n }\n var calculatedPositionX = positionX - mouseX * scaleDifference;\n var calculatedPositionY = positionY - mouseY * scaleDifference;\n // do not limit to bounds when there is padding animation,\n // it causes animation strange behaviour\n var newPositions = getMouseBoundedPosition(calculatedPositionX, calculatedPositionY, bounds, limitToBounds, 0, 0, null);\n return newPositions;\n}\nexport function checkZoomBounds(zoom, minScale, maxScale, zoomPadding, enablePadding) {\n var scalePadding = enablePadding ? zoomPadding : 0;\n var minScaleWithPadding = minScale - scalePadding;\n if (!Number.isNaN(maxScale) && zoom >= maxScale)\n return maxScale;\n if (!Number.isNaN(minScale) && zoom <= minScaleWithPadding)\n return minScaleWithPadding;\n return zoom;\n}\n","import { isExcludedNode } from \"../../utils\";\nimport { getMouseBoundedPosition } from \"../bounds/bounds.utils\";\nimport { handleCalculateZoomPositions } from \"../zoom/zoom.utils\";\nexport var isPanningStartAllowed = function (contextInstance, event) {\n var excluded = contextInstance.setup.panning.excluded;\n var isInitialized = contextInstance.isInitialized, wrapperComponent = contextInstance.wrapperComponent;\n var target = event.target;\n var targetIsShadowDom = \"shadowRoot\" in target && \"composedPath\" in event;\n var isWrapperChild = targetIsShadowDom\n ? event.composedPath().some(function (el) {\n if (!(el instanceof Element)) {\n return false;\n }\n return wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.contains(el);\n })\n : wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.contains(target);\n var isAllowed = isInitialized && target && isWrapperChild;\n if (!isAllowed)\n return false;\n var isExcluded = isExcludedNode(target, excluded);\n if (isExcluded)\n return false;\n return true;\n};\nexport var isPanningAllowed = function (contextInstance) {\n var isInitialized = contextInstance.isInitialized, isPanning = contextInstance.isPanning, setup = contextInstance.setup;\n var disabled = setup.panning.disabled;\n var isAllowed = isInitialized && isPanning && !disabled;\n if (!isAllowed)\n return false;\n return true;\n};\nexport var handlePanningSetup = function (contextInstance, event) {\n var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY;\n contextInstance.isPanning = true;\n // Panning with mouse\n var x = event.clientX;\n var y = event.clientY;\n contextInstance.startCoords = { x: x - positionX, y: y - positionY };\n};\nexport var handleTouchPanningSetup = function (contextInstance, event) {\n var touches = event.touches;\n var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY;\n contextInstance.isPanning = true;\n // Panning with touch\n var oneFingerTouch = touches.length === 1;\n if (oneFingerTouch) {\n var x = touches[0].clientX;\n var y = touches[0].clientY;\n contextInstance.startCoords = { x: x - positionX, y: y - positionY };\n }\n};\nexport function handlePanToBounds(contextInstance) {\n var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY, scale = _a.scale;\n var _b = contextInstance.setup, disabled = _b.disabled, limitToBounds = _b.limitToBounds, centerZoomedOut = _b.centerZoomedOut;\n var wrapperComponent = contextInstance.wrapperComponent;\n if (disabled || !wrapperComponent || !contextInstance.bounds)\n return;\n var _c = contextInstance.bounds, maxPositionX = _c.maxPositionX, minPositionX = _c.minPositionX, maxPositionY = _c.maxPositionY, minPositionY = _c.minPositionY;\n var xChanged = positionX > maxPositionX || positionX < minPositionX;\n var yChanged = positionY > maxPositionY || positionY < minPositionY;\n var mousePosX = positionX > maxPositionX\n ? wrapperComponent.offsetWidth\n : contextInstance.setup.minPositionX || 0;\n var mousePosY = positionY > maxPositionY\n ? wrapperComponent.offsetHeight\n : contextInstance.setup.minPositionY || 0;\n var _d = handleCalculateZoomPositions(contextInstance, mousePosX, mousePosY, scale, contextInstance.bounds, limitToBounds || centerZoomedOut), x = _d.x, y = _d.y;\n return {\n scale: scale,\n positionX: xChanged ? x : positionX,\n positionY: yChanged ? y : positionY,\n };\n}\nexport function handlePaddingAnimation(contextInstance, positionX, positionY) {\n var scale = contextInstance.transformState.scale;\n var _a = contextInstance.setup.alignmentAnimation, sizeX = _a.sizeX, sizeY = _a.sizeY;\n if (!sizeX && !sizeY)\n return;\n contextInstance.setTransformState(scale, positionX, positionY);\n}\nexport function handleNewPosition(contextInstance, newPositionX, newPositionY, paddingValueX, paddingValueY) {\n var limitToBounds = contextInstance.setup.limitToBounds;\n var wrapperComponent = contextInstance.wrapperComponent, bounds = contextInstance.bounds;\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n if (wrapperComponent === null ||\n bounds === null ||\n (newPositionX === positionX && newPositionY === positionY)) {\n return;\n }\n var _b = getMouseBoundedPosition(newPositionX, newPositionY, bounds, limitToBounds, paddingValueX, paddingValueY, wrapperComponent), x = _b.x, y = _b.y;\n contextInstance.setTransformState(scale, x, y);\n}\nexport var getPanningClientPosition = function (contextInstance, clientX, clientY) {\n var startCoords = contextInstance.startCoords, transformState = contextInstance.transformState;\n var panning = contextInstance.setup.panning;\n var lockAxisX = panning.lockAxisX, lockAxisY = panning.lockAxisY;\n var positionX = transformState.positionX, positionY = transformState.positionY;\n if (!startCoords) {\n return { x: positionX, y: positionY };\n }\n var mouseX = clientX - startCoords.x;\n var mouseY = clientY - startCoords.y;\n var newPositionX = lockAxisX ? positionX : mouseX;\n var newPositionY = lockAxisY ? positionY : mouseY;\n return { x: newPositionX, y: newPositionY };\n};\nexport var getPaddingValue = function (contextInstance, size) {\n var setup = contextInstance.setup, transformState = contextInstance.transformState;\n var scale = transformState.scale;\n var minScale = setup.minScale, disablePadding = setup.disablePadding;\n if (size > 0 && scale >= minScale && !disablePadding) {\n return size;\n }\n return 0;\n};\n","import { boundLimiter } from \"../bounds/bounds.utils\";\nexport var isVelocityCalculationAllowed = function (contextInstance) {\n var mounted = contextInstance.mounted;\n var _a = contextInstance.setup, disabled = _a.disabled, velocityAnimation = _a.velocityAnimation;\n var scale = contextInstance.transformState.scale;\n var disabledVelocity = velocityAnimation.disabled;\n var isAllowed = !disabledVelocity || scale > 1 || !disabled || mounted;\n if (!isAllowed)\n return false;\n return true;\n};\nexport var isVelocityAllowed = function (contextInstance) {\n var mounted = contextInstance.mounted, velocity = contextInstance.velocity, bounds = contextInstance.bounds;\n var _a = contextInstance.setup, disabled = _a.disabled, velocityAnimation = _a.velocityAnimation;\n var scale = contextInstance.transformState.scale;\n var disabledVelocity = velocityAnimation.disabled;\n var isAllowed = !disabledVelocity || scale > 1 || !disabled || mounted;\n if (!isAllowed)\n return false;\n if (!velocity || !bounds)\n return false;\n return true;\n};\nexport function getVelocityMoveTime(contextInstance, velocity) {\n var velocityAnimation = contextInstance.setup.velocityAnimation;\n var equalToMove = velocityAnimation.equalToMove, animationTime = velocityAnimation.animationTime, sensitivity = velocityAnimation.sensitivity;\n if (equalToMove) {\n return animationTime * velocity * sensitivity;\n }\n return animationTime;\n}\nexport function getVelocityPosition(newPosition, startPosition, currentPosition, isLocked, limitToBounds, minPosition, maxPosition, minTarget, maxTarget, step) {\n if (limitToBounds) {\n if (startPosition > maxPosition && currentPosition > maxPosition) {\n var calculatedPosition = maxPosition + (newPosition - maxPosition) * step;\n if (calculatedPosition > maxTarget)\n return maxTarget;\n if (calculatedPosition < maxPosition)\n return maxPosition;\n return calculatedPosition;\n }\n if (startPosition < minPosition && currentPosition < minPosition) {\n var calculatedPosition = minPosition + (newPosition - minPosition) * step;\n if (calculatedPosition < minTarget)\n return minTarget;\n if (calculatedPosition > minPosition)\n return minPosition;\n return calculatedPosition;\n }\n }\n if (isLocked)\n return startPosition;\n return boundLimiter(newPosition, minPosition, maxPosition, limitToBounds);\n}\n","import { animations } from \"../animations/animations.constants\";\nimport { handleSetupAnimation } from \"../animations/animations.utils\";\nimport { getPaddingValue } from \"./panning.utils\";\nimport { getVelocityPosition, getVelocityMoveTime, isVelocityAllowed, isVelocityCalculationAllowed, } from \"./velocity.utils\";\nexport function getSizeMultiplier(wrapperComponent, equalToMove) {\n var defaultMultiplier = 1;\n if (equalToMove) {\n return Math.min(defaultMultiplier, wrapperComponent.offsetWidth / window.innerWidth);\n }\n return defaultMultiplier;\n}\nexport function handleCalculateVelocity(contextInstance, position) {\n var isAllowed = isVelocityCalculationAllowed(contextInstance);\n if (!isAllowed) {\n return;\n }\n var lastMousePosition = contextInstance.lastMousePosition, velocityTime = contextInstance.velocityTime, setup = contextInstance.setup;\n var wrapperComponent = contextInstance.wrapperComponent;\n var equalToMove = setup.velocityAnimation.equalToMove;\n var now = Date.now();\n if (lastMousePosition && velocityTime && wrapperComponent) {\n var sizeMultiplier = getSizeMultiplier(wrapperComponent, equalToMove);\n var distanceX = position.x - lastMousePosition.x;\n var distanceY = position.y - lastMousePosition.y;\n var velocityX = distanceX / sizeMultiplier;\n var velocityY = distanceY / sizeMultiplier;\n var interval = now - velocityTime;\n var speed = distanceX * distanceX + distanceY * distanceY;\n var velocity = Math.sqrt(speed) / interval;\n contextInstance.velocity = { velocityX: velocityX, velocityY: velocityY, total: velocity };\n }\n contextInstance.lastMousePosition = position;\n contextInstance.velocityTime = now;\n}\nexport function handleVelocityPanning(contextInstance) {\n var velocity = contextInstance.velocity, bounds = contextInstance.bounds, setup = contextInstance.setup, wrapperComponent = contextInstance.wrapperComponent;\n var isAllowed = isVelocityAllowed(contextInstance);\n if (!isAllowed || !velocity || !bounds || !wrapperComponent) {\n return;\n }\n var velocityX = velocity.velocityX, velocityY = velocity.velocityY, total = velocity.total;\n var maxPositionX = bounds.maxPositionX, minPositionX = bounds.minPositionX, maxPositionY = bounds.maxPositionY, minPositionY = bounds.minPositionY;\n var limitToBounds = setup.limitToBounds, alignmentAnimation = setup.alignmentAnimation;\n var zoomAnimation = setup.zoomAnimation, panning = setup.panning;\n var lockAxisY = panning.lockAxisY, lockAxisX = panning.lockAxisX;\n var animationType = zoomAnimation.animationType;\n var sizeX = alignmentAnimation.sizeX, sizeY = alignmentAnimation.sizeY, velocityAlignmentTime = alignmentAnimation.velocityAlignmentTime;\n var alignAnimationTime = velocityAlignmentTime;\n var moveAnimationTime = getVelocityMoveTime(contextInstance, total);\n var finalAnimationTime = Math.max(moveAnimationTime, alignAnimationTime);\n var paddingValueX = getPaddingValue(contextInstance, sizeX);\n var paddingValueY = getPaddingValue(contextInstance, sizeY);\n var paddingX = (paddingValueX * wrapperComponent.offsetWidth) / 100;\n var paddingY = (paddingValueY * wrapperComponent.offsetHeight) / 100;\n var maxTargetX = maxPositionX + paddingX;\n var minTargetX = minPositionX - paddingX;\n var maxTargetY = maxPositionY + paddingY;\n var minTargetY = minPositionY - paddingY;\n var startState = contextInstance.transformState;\n var startTime = new Date().getTime();\n handleSetupAnimation(contextInstance, animationType, finalAnimationTime, function (step) {\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n var frameTime = new Date().getTime() - startTime;\n var animationProgress = frameTime / alignAnimationTime;\n var alignAnimation = animations[alignmentAnimation.animationType];\n var alignStep = 1 - alignAnimation(Math.min(1, animationProgress));\n var customStep = 1 - step;\n var newPositionX = positionX + velocityX * customStep;\n var newPositionY = positionY + velocityY * customStep;\n var currentPositionX = getVelocityPosition(newPositionX, startState.positionX, positionX, lockAxisX, limitToBounds, minPositionX, maxPositionX, minTargetX, maxTargetX, alignStep);\n var currentPositionY = getVelocityPosition(newPositionY, startState.positionY, positionY, lockAxisY, limitToBounds, minPositionY, maxPositionY, minTargetY, maxTargetY, alignStep);\n if (positionX !== newPositionX || positionY !== newPositionY) {\n contextInstance.setTransformState(scale, currentPositionX, currentPositionY);\n }\n });\n}\n","import { animate, handleCancelAnimation } from \"../animations/animations.utils\";\nimport { handleCalculateBounds } from \"../bounds/bounds.utils\";\nimport { getPaddingValue, getPanningClientPosition, handleNewPosition, handlePanningSetup, handlePanToBounds, handleTouchPanningSetup, } from \"./panning.utils\";\nimport { handleVelocityPanning, handleCalculateVelocity, } from \"./velocity.logic\";\nexport function handlePanningStart(contextInstance, event) {\n var scale = contextInstance.transformState.scale;\n handleCancelAnimation(contextInstance);\n handleCalculateBounds(contextInstance, scale);\n if (window.TouchEvent !== undefined && event instanceof TouchEvent) {\n handleTouchPanningSetup(contextInstance, event);\n }\n else {\n handlePanningSetup(contextInstance, event);\n }\n}\nexport function handleAlignToBounds(contextInstance) {\n var scale = contextInstance.transformState.scale;\n var _a = contextInstance.setup, minScale = _a.minScale, alignmentAnimation = _a.alignmentAnimation;\n var disabled = alignmentAnimation.disabled, sizeX = alignmentAnimation.sizeX, sizeY = alignmentAnimation.sizeY, animationTime = alignmentAnimation.animationTime, animationType = alignmentAnimation.animationType;\n var isDisabled = disabled || scale < minScale || (!sizeX && !sizeY);\n if (isDisabled)\n return;\n var targetState = handlePanToBounds(contextInstance);\n if (targetState) {\n animate(contextInstance, targetState, animationTime, animationType);\n }\n}\nexport function handlePanning(contextInstance, clientX, clientY) {\n var startCoords = contextInstance.startCoords, setup = contextInstance.setup;\n var _a = setup.alignmentAnimation, sizeX = _a.sizeX, sizeY = _a.sizeY;\n if (!startCoords)\n return;\n var _b = getPanningClientPosition(contextInstance, clientX, clientY), x = _b.x, y = _b.y;\n var paddingValueX = getPaddingValue(contextInstance, sizeX);\n var paddingValueY = getPaddingValue(contextInstance, sizeY);\n handleCalculateVelocity(contextInstance, { x: x, y: y });\n handleNewPosition(contextInstance, x, y, paddingValueX, paddingValueY);\n}\nexport function handlePanningEnd(contextInstance) {\n if (contextInstance.isPanning) {\n var velocityDisabled = contextInstance.setup.panning.velocityDisabled;\n var velocity = contextInstance.velocity, wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n contextInstance.isPanning = false;\n contextInstance.animate = false;\n contextInstance.animation = null;\n var wrapperRect = wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.getBoundingClientRect();\n var contentRect = contentComponent === null || contentComponent === void 0 ? void 0 : contentComponent.getBoundingClientRect();\n var wrapperWidth = (wrapperRect === null || wrapperRect === void 0 ? void 0 : wrapperRect.width) || 0;\n var wrapperHeight = (wrapperRect === null || wrapperRect === void 0 ? void 0 : wrapperRect.height) || 0;\n var contentWidth = (contentRect === null || contentRect === void 0 ? void 0 : contentRect.width) || 0;\n var contentHeight = (contentRect === null || contentRect === void 0 ? void 0 : contentRect.height) || 0;\n var isZoomed = wrapperWidth < contentWidth || wrapperHeight < contentHeight;\n var shouldAnimate = !velocityDisabled && velocity && (velocity === null || velocity === void 0 ? void 0 : velocity.total) > 0.1 && isZoomed;\n if (shouldAnimate) {\n handleVelocityPanning(contextInstance);\n }\n else {\n handleAlignToBounds(contextInstance);\n }\n }\n}\n","import { roundNumber } from \"../../utils\";\nimport { animate } from \"../animations/animations.utils\";\nimport { handleCalculateBounds } from \"../bounds/bounds.utils\";\nimport { handleAlignToBounds } from \"../pan/panning.logic\";\nimport { checkZoomBounds, handleCalculateZoomPositions } from \"./zoom.utils\";\nexport function handleZoomToPoint(contextInstance, scale, mouseX, mouseY) {\n var _a = contextInstance.setup, minScale = _a.minScale, maxScale = _a.maxScale, limitToBounds = _a.limitToBounds;\n var newScale = checkZoomBounds(roundNumber(scale, 2), minScale, maxScale, 0, false);\n var bounds = handleCalculateBounds(contextInstance, newScale);\n var _b = handleCalculateZoomPositions(contextInstance, mouseX, mouseY, newScale, bounds, limitToBounds), x = _b.x, y = _b.y;\n return { scale: newScale, positionX: x, positionY: y };\n}\nexport function handleAlignToScaleBounds(contextInstance, mousePositionX, mousePositionY) {\n var scale = contextInstance.transformState.scale;\n var wrapperComponent = contextInstance.wrapperComponent;\n var _a = contextInstance.setup, minScale = _a.minScale, limitToBounds = _a.limitToBounds, zoomAnimation = _a.zoomAnimation;\n var disabled = zoomAnimation.disabled, animationTime = zoomAnimation.animationTime, animationType = zoomAnimation.animationType;\n var isDisabled = disabled || scale >= minScale;\n if (scale >= 1 || limitToBounds) {\n // fire fit to bounds animation\n handleAlignToBounds(contextInstance);\n }\n if (isDisabled || !wrapperComponent || !contextInstance.mounted)\n return;\n var mouseX = mousePositionX || wrapperComponent.offsetWidth / 2;\n var mouseY = mousePositionY || wrapperComponent.offsetHeight / 2;\n var targetState = handleZoomToPoint(contextInstance, minScale, mouseX, mouseY);\n if (targetState) {\n animate(contextInstance, targetState, animationTime, animationType);\n }\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.push(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.push(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","export var initialState = {\n previousScale: 1,\n scale: 1,\n positionX: 0,\n positionY: 0,\n};\nexport var initialSetup = {\n disabled: false,\n minPositionX: null,\n maxPositionX: null,\n minPositionY: null,\n maxPositionY: null,\n minScale: 1,\n maxScale: 8,\n limitToBounds: true,\n centerZoomedOut: false,\n centerOnInit: false,\n disablePadding: false,\n smooth: true,\n wheel: {\n step: 0.2,\n disabled: false,\n smoothStep: 0.001,\n wheelDisabled: false,\n touchPadDisabled: false,\n activationKeys: [],\n excluded: [],\n },\n panning: {\n disabled: false,\n velocityDisabled: false,\n lockAxisX: false,\n lockAxisY: false,\n allowLeftClickPan: true,\n allowMiddleClickPan: true,\n allowRightClickPan: true,\n wheelPanning: false,\n activationKeys: [],\n excluded: [],\n },\n pinch: {\n step: 5,\n disabled: false,\n excluded: [],\n },\n doubleClick: {\n disabled: false,\n step: 0.7,\n mode: \"zoomIn\",\n animationType: \"easeOut\",\n animationTime: 200,\n excluded: [],\n },\n zoomAnimation: {\n disabled: false,\n size: 0.4,\n animationTime: 200,\n animationType: \"easeOut\",\n },\n alignmentAnimation: {\n disabled: false,\n sizeX: 100,\n sizeY: 100,\n animationTime: 200,\n velocityAlignmentTime: 400,\n animationType: \"easeOut\",\n },\n velocityAnimation: {\n disabled: false,\n sensitivity: 1,\n animationTime: 400,\n animationType: \"easeOut\",\n equalToMove: true,\n },\n};\n","import { __assign, __spreadArray } from \"tslib\";\nimport { initialSetup, initialState } from \"../constants/state.constants\";\nexport var createState = function (props) {\n var _a, _b, _c, _d;\n return {\n previousScale: (_a = props.initialScale) !== null && _a !== void 0 ? _a : initialState.scale,\n scale: (_b = props.initialScale) !== null && _b !== void 0 ? _b : initialState.scale,\n positionX: (_c = props.initialPositionX) !== null && _c !== void 0 ? _c : initialState.positionX,\n positionY: (_d = props.initialPositionY) !== null && _d !== void 0 ? _d : initialState.positionY,\n };\n};\nexport var createSetup = function (props) {\n var newSetup = __assign({}, initialSetup);\n Object.keys(props).forEach(function (key) {\n var validValue = typeof props[key] !== \"undefined\";\n var validParameter = typeof initialSetup[key] !== \"undefined\";\n if (validParameter && validValue) {\n var dataType = Object.prototype.toString.call(initialSetup[key]);\n var isObject = dataType === \"[object Object]\";\n var isArray = dataType === \"[object Array]\";\n if (isObject) {\n newSetup[key] = __assign(__assign({}, initialSetup[key]), props[key]);\n }\n else if (isArray) {\n newSetup[key] = __spreadArray(__spreadArray([], initialSetup[key], true), props[key], true);\n }\n else {\n newSetup[key] = props[key];\n }\n }\n });\n return newSetup;\n};\n","import { handleZoomToPoint } from \"../zoom/zoom.logic\";\nimport { animate } from \"../animations/animations.utils\";\nimport { createState } from \"../../utils/state.utils\";\nimport { checkZoomBounds } from \"../zoom/zoom.utils\";\nimport { roundNumber } from \"../../utils\";\nimport { calculateBounds, getMouseBoundedPosition, } from \"../bounds/bounds.utils\";\nexport var handleCalculateButtonZoom = function (contextInstance, delta, step) {\n var scale = contextInstance.transformState.scale;\n var wrapperComponent = contextInstance.wrapperComponent, setup = contextInstance.setup;\n var maxScale = setup.maxScale, minScale = setup.minScale, zoomAnimation = setup.zoomAnimation, smooth = setup.smooth;\n var size = zoomAnimation.size;\n if (!wrapperComponent) {\n throw new Error(\"Wrapper is not mounted\");\n }\n var targetScale = smooth\n ? scale * Math.exp(delta * step)\n : scale + delta * step;\n var newScale = checkZoomBounds(roundNumber(targetScale, 3), minScale, maxScale, size, false);\n return newScale;\n};\nexport function handleZoomToViewCenter(contextInstance, delta, step, animationTime, animationType) {\n var wrapperComponent = contextInstance.wrapperComponent;\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n if (!wrapperComponent)\n return console.error(\"No WrapperComponent found\");\n var wrapperWidth = wrapperComponent.offsetWidth;\n var wrapperHeight = wrapperComponent.offsetHeight;\n var mouseX = (wrapperWidth / 2 - positionX) / scale;\n var mouseY = (wrapperHeight / 2 - positionY) / scale;\n var newScale = handleCalculateButtonZoom(contextInstance, delta, step);\n var targetState = handleZoomToPoint(contextInstance, newScale, mouseX, mouseY);\n if (!targetState) {\n return console.error(\"Error during zoom event. New transformation state was not calculated.\");\n }\n animate(contextInstance, targetState, animationTime, animationType);\n}\nexport function resetTransformations(contextInstance, animationTime, animationType, onResetTransformation) {\n var setup = contextInstance.setup, wrapperComponent = contextInstance.wrapperComponent;\n var limitToBounds = setup.limitToBounds;\n var initialTransformation = createState(contextInstance.props);\n var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n if (!wrapperComponent)\n return;\n var newBounds = calculateBounds(contextInstance, initialTransformation.scale);\n var boundedPositions = getMouseBoundedPosition(initialTransformation.positionX, initialTransformation.positionY, newBounds, limitToBounds, 0, 0, wrapperComponent);\n var newState = {\n scale: initialTransformation.scale,\n positionX: boundedPositions.x,\n positionY: boundedPositions.y,\n };\n if (scale === initialTransformation.scale &&\n positionX === initialTransformation.positionX &&\n positionY === initialTransformation.positionY) {\n return;\n }\n onResetTransformation === null || onResetTransformation === void 0 ? void 0 : onResetTransformation();\n animate(contextInstance, newState, animationTime, animationType);\n}\nexport function getOffset(element, wrapper, content, state) {\n var offset = element.getBoundingClientRect();\n var wrapperOffset = wrapper.getBoundingClientRect();\n var contentOffset = content.getBoundingClientRect();\n var xOff = wrapperOffset.x * state.scale;\n var yOff = wrapperOffset.y * state.scale;\n return {\n x: (offset.x - contentOffset.x + xOff) / state.scale,\n y: (offset.y - contentOffset.y + yOff) / state.scale,\n };\n}\nexport function calculateZoomToNode(contextInstance, node, customZoom) {\n var wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent, transformState = contextInstance.transformState;\n var _a = contextInstance.setup, limitToBounds = _a.limitToBounds, minScale = _a.minScale, maxScale = _a.maxScale;\n if (!wrapperComponent || !contentComponent)\n return transformState;\n var wrapperRect = wrapperComponent.getBoundingClientRect();\n var nodeRect = node.getBoundingClientRect();\n var nodeOffset = getOffset(node, wrapperComponent, contentComponent, transformState);\n var nodeLeft = nodeOffset.x;\n var nodeTop = nodeOffset.y;\n var nodeWidth = nodeRect.width / transformState.scale;\n var nodeHeight = nodeRect.height / transformState.scale;\n var scaleX = wrapperComponent.offsetWidth / nodeWidth;\n var scaleY = wrapperComponent.offsetHeight / nodeHeight;\n var newScale = checkZoomBounds(customZoom || Math.min(scaleX, scaleY), minScale, maxScale, 0, false);\n var offsetX = (wrapperRect.width - nodeWidth * newScale) / 2;\n var offsetY = (wrapperRect.height - nodeHeight * newScale) / 2;\n var newPositionX = (wrapperRect.left - nodeLeft) * newScale + offsetX;\n var newPositionY = (wrapperRect.top - nodeTop) * newScale + offsetY;\n var bounds = calculateBounds(contextInstance, newScale);\n var _b = getMouseBoundedPosition(newPositionX, newPositionY, bounds, limitToBounds, 0, 0, wrapperComponent), x = _b.x, y = _b.y;\n return { positionX: x, positionY: y, scale: newScale };\n}\n","import { calculateZoomToNode, handleZoomToViewCenter, resetTransformations, } from \"./handlers.utils\";\nimport { animate, handleCancelAnimation } from \"../animations/animations.utils\";\nimport { getCenterPosition } from \"../../utils\";\nexport var zoomIn = function (contextInstance) {\n return function (step, animationTime, animationType) {\n if (step === void 0) { step = 0.5; }\n if (animationTime === void 0) { animationTime = 300; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n handleZoomToViewCenter(contextInstance, 1, step, animationTime, animationType);\n };\n};\nexport var zoomOut = function (contextInstance) {\n return function (step, animationTime, animationType) {\n if (step === void 0) { step = 0.5; }\n if (animationTime === void 0) { animationTime = 300; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n handleZoomToViewCenter(contextInstance, -1, step, animationTime, animationType);\n };\n};\nexport var setTransform = function (contextInstance) {\n return function (newPositionX, newPositionY, newScale, animationTime, animationType) {\n if (animationTime === void 0) { animationTime = 300; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY, scale = _a.scale;\n var wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n var disabled = contextInstance.setup.disabled;\n if (disabled || !wrapperComponent || !contentComponent)\n return;\n var targetState = {\n positionX: Number.isNaN(newPositionX) ? positionX : newPositionX,\n positionY: Number.isNaN(newPositionY) ? positionY : newPositionY,\n scale: Number.isNaN(newScale) ? scale : newScale,\n };\n animate(contextInstance, targetState, animationTime, animationType);\n };\n};\nexport var resetTransform = function (contextInstance) {\n return function (animationTime, animationType) {\n if (animationTime === void 0) { animationTime = 200; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n resetTransformations(contextInstance, animationTime, animationType);\n };\n};\nexport var centerView = function (contextInstance) {\n return function (scale, animationTime, animationType) {\n if (animationTime === void 0) { animationTime = 200; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n var transformState = contextInstance.transformState, wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n if (wrapperComponent && contentComponent) {\n var targetState = getCenterPosition(scale || transformState.scale, wrapperComponent, contentComponent);\n animate(contextInstance, targetState, animationTime, animationType);\n }\n };\n};\nexport var zoomToElement = function (contextInstance) {\n return function (node, scale, animationTime, animationType) {\n if (animationTime === void 0) { animationTime = 600; }\n if (animationType === void 0) { animationType = \"easeOut\"; }\n handleCancelAnimation(contextInstance);\n var wrapperComponent = contextInstance.wrapperComponent;\n var target = typeof node === \"string\" ? document.getElementById(node) : node;\n if (wrapperComponent && target && wrapperComponent.contains(target)) {\n var targetState = calculateZoomToNode(contextInstance, target, scale);\n animate(contextInstance, targetState, animationTime, animationType);\n }\n };\n};\n","import { zoomIn, zoomOut, setTransform, resetTransform, zoomToElement, centerView, } from \"../core/handlers/handlers.logic\";\nexport var getControls = function (contextInstance) {\n return {\n instance: contextInstance,\n zoomIn: zoomIn(contextInstance),\n zoomOut: zoomOut(contextInstance),\n setTransform: setTransform(contextInstance),\n resetTransform: resetTransform(contextInstance),\n centerView: centerView(contextInstance),\n zoomToElement: zoomToElement(contextInstance),\n };\n};\nexport var getState = function (contextInstance) {\n return {\n instance: contextInstance,\n state: contextInstance.transformState,\n };\n};\nexport var getContext = function (contextInstance) {\n var ref = {};\n Object.assign(ref, getState(contextInstance));\n Object.assign(ref, getControls(contextInstance));\n return ref;\n};\n","// We want to make event listeners non-passive, and to do so have to check\n// that browsers support EventListenerOptions in the first place.\n// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\nvar passiveSupported = false;\nexport function makePassiveEventOption() {\n try {\n var options = {\n get passive() {\n // This function will be called when the browser\n // attempts to access the passive property.\n passiveSupported = true;\n return false;\n },\n };\n return options;\n }\n catch (err) {\n passiveSupported = false;\n return passiveSupported;\n }\n}\n","export var isExcludedNode = function (node, excluded) {\n return excluded.some(function (exclude) {\n return node.matches(\"\".concat(exclude, \", .\").concat(exclude, \", \").concat(exclude, \" *, .\").concat(exclude, \" *\"));\n });\n};\nexport var cancelTimeout = function (timeout) {\n if (timeout) {\n clearTimeout(timeout);\n }\n};\n","export var getTransformStyles = function (x, y, scale) {\n // Standard translate prevents blurry svg on the safari\n return \"translate(\".concat(x, \"px, \").concat(y, \"px) scale(\").concat(scale, \")\");\n};\nexport var getMatrixTransformStyles = function (x, y, scale) {\n // The shorthand for matrix does not work for Safari hence the need to explicitly use matrix3d\n // Refer to https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix\n var a = scale;\n var b = 0;\n var c = 0;\n var d = scale;\n var tx = x;\n var ty = y;\n return \"matrix3d(\".concat(a, \", \").concat(b, \", 0, 0, \").concat(c, \", \").concat(d, \", 0, 0, 0, 0, 1, 0, \").concat(tx, \", \").concat(ty, \", 0, 1)\");\n};\nexport var getCenterPosition = function (scale, wrapperComponent, contentComponent) {\n var contentWidth = contentComponent.offsetWidth * scale;\n var contentHeight = contentComponent.offsetHeight * scale;\n var centerPositionX = (wrapperComponent.offsetWidth - contentWidth) / 2;\n var centerPositionY = (wrapperComponent.offsetHeight - contentHeight) / 2;\n return {\n scale: scale,\n positionX: centerPositionX,\n positionY: centerPositionY,\n };\n};\n","import { checkIsNumber, isExcludedNode, roundNumber } from \"../../utils\";\nimport { checkZoomBounds } from \"../zoom/zoom.utils\";\nexport var isWheelAllowed = function (contextInstance, event) {\n var _a = contextInstance.setup.wheel, disabled = _a.disabled, wheelDisabled = _a.wheelDisabled, touchPadDisabled = _a.touchPadDisabled, excluded = _a.excluded;\n var isInitialized = contextInstance.isInitialized, isPanning = contextInstance.isPanning;\n var target = event.target;\n var isAllowed = isInitialized && !isPanning && !disabled && target;\n if (!isAllowed)\n return false;\n // Event ctrlKey detects if touchpad action is executing wheel or pinch gesture\n if (wheelDisabled && !event.ctrlKey)\n return false;\n if (touchPadDisabled && event.ctrlKey)\n return false;\n var isExcluded = isExcludedNode(target, excluded);\n if (isExcluded)\n return false;\n return true;\n};\nexport var getDeltaY = function (event) {\n if (event) {\n return event.deltaY < 0 ? 1 : -1;\n }\n return 0;\n};\nexport function getDelta(event, customDelta) {\n var deltaY = getDeltaY(event);\n var delta = checkIsNumber(customDelta, deltaY);\n return delta;\n}\nexport function getMousePosition(event, contentComponent, scale) {\n var contentRect = contentComponent.getBoundingClientRect();\n var mouseX = 0;\n var mouseY = 0;\n if (\"clientX\" in event) {\n // mouse position x, y over wrapper component\n mouseX = (event.clientX - contentRect.left) / scale;\n mouseY = (event.clientY - contentRect.top) / scale;\n }\n else {\n var touch = event.touches[0];\n mouseX = (touch.clientX - contentRect.left) / scale;\n mouseY = (touch.clientY - contentRect.top) / scale;\n }\n if (Number.isNaN(mouseX) || Number.isNaN(mouseY))\n console.error(\"No mouse or touch offset found\");\n return {\n x: mouseX,\n y: mouseY,\n };\n}\nexport var handleCalculateWheelZoom = function (contextInstance, delta, step, disable, getTarget) {\n var scale = contextInstance.transformState.scale;\n var wrapperComponent = contextInstance.wrapperComponent, setup = contextInstance.setup;\n var maxScale = setup.maxScale, minScale = setup.minScale, zoomAnimation = setup.zoomAnimation, disablePadding = setup.disablePadding;\n var size = zoomAnimation.size, disabled = zoomAnimation.disabled;\n if (!wrapperComponent) {\n throw new Error(\"Wrapper is not mounted\");\n }\n var targetScale = scale + delta * step;\n if (getTarget)\n return targetScale;\n var paddingEnabled = disable ? false : !disabled;\n var newScale = checkZoomBounds(roundNumber(targetScale, 3), minScale, maxScale, size, paddingEnabled && !disablePadding);\n return newScale;\n};\nexport var handleWheelZoomStop = function (contextInstance, event) {\n var previousWheelEvent = contextInstance.previousWheelEvent;\n var scale = contextInstance.transformState.scale;\n var _a = contextInstance.setup, maxScale = _a.maxScale, minScale = _a.minScale;\n if (!previousWheelEvent)\n return false;\n if (scale < maxScale || scale > minScale)\n return true;\n if (Math.sign(previousWheelEvent.deltaY) !== Math.sign(event.deltaY))\n return true;\n if (previousWheelEvent.deltaY > 0 && previousWheelEvent.deltaY < event.deltaY)\n return true;\n if (previousWheelEvent.deltaY < 0 && previousWheelEvent.deltaY > event.deltaY)\n return true;\n if (Math.sign(previousWheelEvent.deltaY) !== Math.sign(event.deltaY))\n return true;\n return false;\n};\n","import { isExcludedNode, roundNumber } from \"../../utils\";\nimport { checkZoomBounds } from \"../zoom/zoom.utils\";\nexport var isPinchStartAllowed = function (contextInstance, event) {\n var _a = contextInstance.setup.pinch, disabled = _a.disabled, excluded = _a.excluded;\n var isInitialized = contextInstance.isInitialized;\n var target = event.target;\n var isAllowed = isInitialized && !disabled && target;\n if (!isAllowed)\n return false;\n var isExcluded = isExcludedNode(target, excluded);\n if (isExcluded)\n return false;\n return true;\n};\nexport var isPinchAllowed = function (contextInstance) {\n var disabled = contextInstance.setup.pinch.disabled;\n var isInitialized = contextInstance.isInitialized, pinchStartDistance = contextInstance.pinchStartDistance;\n var isAllowed = isInitialized && !disabled && pinchStartDistance;\n if (!isAllowed)\n return false;\n return true;\n};\nexport var calculateTouchMidPoint = function (event, scale, contentComponent) {\n var contentRect = contentComponent.getBoundingClientRect();\n var touches = event.touches;\n var firstPointX = roundNumber(touches[0].clientX - contentRect.left, 5);\n var firstPointY = roundNumber(touches[0].clientY - contentRect.top, 5);\n var secondPointX = roundNumber(touches[1].clientX - contentRect.left, 5);\n var secondPointY = roundNumber(touches[1].clientY - contentRect.top, 5);\n return {\n x: (firstPointX + secondPointX) / 2 / scale,\n y: (firstPointY + secondPointY) / 2 / scale,\n };\n};\nexport var getTouchDistance = function (event) {\n return Math.sqrt(Math.pow((event.touches[0].pageX - event.touches[1].pageX), 2) +\n Math.pow((event.touches[0].pageY - event.touches[1].pageY), 2));\n};\nexport var calculatePinchZoom = function (contextInstance, currentDistance) {\n var pinchStartScale = contextInstance.pinchStartScale, pinchStartDistance = contextInstance.pinchStartDistance, setup = contextInstance.setup;\n var maxScale = setup.maxScale, minScale = setup.minScale, zoomAnimation = setup.zoomAnimation, disablePadding = setup.disablePadding;\n var size = zoomAnimation.size, disabled = zoomAnimation.disabled;\n if (!pinchStartScale || pinchStartDistance === null || !currentDistance) {\n throw new Error(\"Pinch touches distance was not provided\");\n }\n if (currentDistance < 0) {\n return contextInstance.transformState.scale;\n }\n var touchProportion = currentDistance / pinchStartDistance;\n var scaleDifference = touchProportion * pinchStartScale;\n return checkZoomBounds(roundNumber(scaleDifference, 2), minScale, maxScale, size, !disabled && !disablePadding);\n};\n","import { handleCallback } from \"../../utils/callback.utils\";\nimport { getContext } from \"../../utils/context.utils\";\nimport { cancelTimeout } from \"../../utils/helpers.utils\";\nimport { handleCancelAnimation } from \"../animations/animations.utils\";\nimport { handleCalculateBounds } from \"../bounds/bounds.utils\";\nimport { getDelta, handleCalculateWheelZoom, handleWheelZoomStop, getMousePosition, } from \"./wheel.utils\";\nimport { handleAlignToScaleBounds } from \"../zoom/zoom.logic\";\nimport { handleCalculateZoomPositions } from \"../zoom/zoom.utils\";\nvar wheelStopEventTime = 160;\nvar wheelAnimationTime = 100;\nexport var handleWheelStart = function (contextInstance, event) {\n var _a = contextInstance.props, onWheelStart = _a.onWheelStart, onZoomStart = _a.onZoomStart;\n if (!contextInstance.wheelStopEventTimer) {\n handleCancelAnimation(contextInstance);\n handleCallback(getContext(contextInstance), event, onWheelStart);\n handleCallback(getContext(contextInstance), event, onZoomStart);\n }\n};\nexport var handleWheelZoom = function (contextInstance, event) {\n var _a = contextInstance.props, onWheel = _a.onWheel, onZoom = _a.onZoom;\n var contentComponent = contextInstance.contentComponent, setup = contextInstance.setup, transformState = contextInstance.transformState;\n var scale = transformState.scale;\n var limitToBounds = setup.limitToBounds, centerZoomedOut = setup.centerZoomedOut, zoomAnimation = setup.zoomAnimation, wheel = setup.wheel, disablePadding = setup.disablePadding, smooth = setup.smooth;\n var size = zoomAnimation.size, disabled = zoomAnimation.disabled;\n var step = wheel.step, smoothStep = wheel.smoothStep;\n if (!contentComponent) {\n throw new Error(\"Component not mounted\");\n }\n event.preventDefault();\n event.stopPropagation();\n var delta = getDelta(event, null);\n var zoomStep = smooth ? smoothStep * Math.abs(event.deltaY) : step;\n var newScale = handleCalculateWheelZoom(contextInstance, delta, zoomStep, !event.ctrlKey);\n // if scale not change\n if (scale === newScale)\n return;\n var bounds = handleCalculateBounds(contextInstance, newScale);\n var mousePosition = getMousePosition(event, contentComponent, scale);\n var isPaddingDisabled = disabled || size === 0 || centerZoomedOut || disablePadding;\n var isLimitedToBounds = limitToBounds && isPaddingDisabled;\n var _b = handleCalculateZoomPositions(contextInstance, mousePosition.x, mousePosition.y, newScale, bounds, isLimitedToBounds), x = _b.x, y = _b.y;\n contextInstance.previousWheelEvent = event;\n contextInstance.setTransformState(newScale, x, y);\n handleCallback(getContext(contextInstance), event, onWheel);\n handleCallback(getContext(contextInstance), event, onZoom);\n};\nexport var handleWheelStop = function (contextInstance, event) {\n var _a = contextInstance.props, onWheelStop = _a.onWheelStop, onZoomStop = _a.onZoomStop;\n // fire animation\n cancelTimeout(contextInstance.wheelAnimationTimer);\n contextInstance.wheelAnimationTimer = setTimeout(function () {\n if (!contextInstance.mounted)\n return;\n handleAlignToScaleBounds(contextInstance, event.x, event.y);\n contextInstance.wheelAnimationTimer = null;\n }, wheelAnimationTime);\n // Wheel stop event\n var hasStoppedZooming = handleWheelZoomStop(contextInstance, event);\n if (hasStoppedZooming) {\n cancelTimeout(contextInstance.wheelStopEventTimer);\n contextInstance.wheelStopEventTimer = setTimeout(function () {\n if (!contextInstance.mounted)\n return;\n contextInstance.wheelStopEventTimer = null;\n handleCallback(getContext(contextInstance), event, onWheelStop);\n handleCallback(getContext(contextInstance), event, onZoomStop);\n }, wheelStopEventTime);\n }\n};\n","import { handleCancelAnimation } from \"../animations/animations.utils\";\nimport { handleAlignToScaleBounds } from \"../zoom/zoom.logic\";\nimport { calculatePinchZoom, calculateTouchMidPoint, getTouchDistance, } from \"./pinch.utils\";\nimport { handleCalculateBounds } from \"../bounds/bounds.utils\";\nimport { handleCalculateZoomPositions } from \"../zoom/zoom.utils\";\nexport var handlePinchStart = function (contextInstance, event) {\n var distance = getTouchDistance(event);\n contextInstance.pinchStartDistance = distance;\n contextInstance.lastDistance = distance;\n contextInstance.pinchStartScale = contextInstance.transformState.scale;\n contextInstance.isPanning = false;\n handleCancelAnimation(contextInstance);\n};\nexport var handlePinchZoom = function (contextInstance, event) {\n var contentComponent = contextInstance.contentComponent, pinchStartDistance = contextInstance.pinchStartDistance;\n var scale = contextInstance.transformState.scale;\n var _a = contextInstance.setup, limitToBounds = _a.limitToBounds, centerZoomedOut = _a.centerZoomedOut, zoomAnimation = _a.zoomAnimation;\n var disabled = zoomAnimation.disabled, size = zoomAnimation.size;\n // if one finger starts from outside of wrapper\n if (pinchStartDistance === null || !contentComponent)\n return;\n var midPoint = calculateTouchMidPoint(event, scale, contentComponent);\n // if touches goes off of the wrapper element\n if (!Number.isFinite(midPoint.x) || !Number.isFinite(midPoint.y))\n return;\n var currentDistance = getTouchDistance(event);\n var newScale = calculatePinchZoom(contextInstance, currentDistance);\n if (newScale === scale)\n return;\n var bounds = handleCalculateBounds(contextInstance, newScale);\n var isPaddingDisabled = disabled || size === 0 || centerZoomedOut;\n var isLimitedToBounds = limitToBounds && isPaddingDisabled;\n var _b = handleCalculateZoomPositions(contextInstance, midPoint.x, midPoint.y, newScale, bounds, isLimitedToBounds), x = _b.x, y = _b.y;\n contextInstance.pinchMidpoint = midPoint;\n contextInstance.lastDistance = currentDistance;\n contextInstance.setTransformState(newScale, x, y);\n};\nexport var handlePinchStop = function (contextInstance) {\n var pinchMidpoint = contextInstance.pinchMidpoint;\n contextInstance.velocity = null;\n contextInstance.lastDistance = null;\n contextInstance.pinchMidpoint = null;\n contextInstance.pinchStartScale = null;\n contextInstance.pinchStartDistance = null;\n handleAlignToScaleBounds(contextInstance, pinchMidpoint === null || pinchMidpoint === void 0 ? void 0 : pinchMidpoint.x, pinchMidpoint === null || pinchMidpoint === void 0 ? void 0 : pinchMidpoint.y);\n};\n","import { animate } from \"../animations/animations.utils\";\nimport { getMousePosition } from \"../wheel/wheel.utils\";\nimport { handleZoomToPoint } from \"../zoom/zoom.logic\";\nimport { cancelTimeout, getContext, handleCallback, isExcludedNode, } from \"../../utils\";\nimport { handleCalculateButtonZoom, resetTransformations, } from \"../handlers/handlers.utils\";\nexport var handleDoubleClickStop = function (contextInstance, event) {\n var onZoomStop = contextInstance.props.onZoomStop;\n var animationTime = contextInstance.setup.doubleClick.animationTime;\n cancelTimeout(contextInstance.doubleClickStopEventTimer);\n contextInstance.doubleClickStopEventTimer = setTimeout(function () {\n contextInstance.doubleClickStopEventTimer = null;\n handleCallback(getContext(contextInstance), event, onZoomStop);\n }, animationTime);\n};\nexport var handleDoubleClickResetMode = function (contextInstance, event) {\n var _a = contextInstance.props, onZoomStart = _a.onZoomStart, onZoom = _a.onZoom;\n var _b = contextInstance.setup.doubleClick, animationTime = _b.animationTime, animationType = _b.animationType;\n handleCallback(getContext(contextInstance), event, onZoomStart);\n resetTransformations(contextInstance, animationTime, animationType, function () {\n return handleCallback(getContext(contextInstance), event, onZoom);\n });\n handleDoubleClickStop(contextInstance, event);\n};\nfunction getDoubleClickScale(mode, scale) {\n if (mode === \"toggle\") {\n return scale === 1 ? 1 : -1;\n }\n return mode === \"zoomOut\" ? -1 : 1;\n}\nexport function handleDoubleClick(contextInstance, event) {\n var setup = contextInstance.setup, doubleClickStopEventTimer = contextInstance.doubleClickStopEventTimer, transformState = contextInstance.transformState, contentComponent = contextInstance.contentComponent;\n var scale = transformState.scale;\n var _a = contextInstance.props, onZoomStart = _a.onZoomStart, onZoom = _a.onZoom;\n var _b = setup.doubleClick, disabled = _b.disabled, mode = _b.mode, step = _b.step, animationTime = _b.animationTime, animationType = _b.animationType;\n if (disabled)\n return;\n if (doubleClickStopEventTimer)\n return;\n if (mode === \"reset\") {\n return handleDoubleClickResetMode(contextInstance, event);\n }\n if (!contentComponent)\n return console.error(\"No ContentComponent found\");\n var delta = getDoubleClickScale(mode, contextInstance.transformState.scale);\n var newScale = handleCalculateButtonZoom(contextInstance, delta, step);\n // stop execution when scale didn't change\n if (scale === newScale)\n return;\n handleCallback(getContext(contextInstance), event, onZoomStart);\n var mousePosition = getMousePosition(event, contentComponent, scale);\n var targetState = handleZoomToPoint(contextInstance, newScale, mousePosition.x, mousePosition.y);\n if (!targetState) {\n return console.error(\"Error during zoom event. New transformation state was not calculated.\");\n }\n handleCallback(getContext(contextInstance), event, onZoom);\n animate(contextInstance, targetState, animationTime, animationType);\n handleDoubleClickStop(contextInstance, event);\n}\nexport var isDoubleClickAllowed = function (contextInstance, event) {\n var isInitialized = contextInstance.isInitialized, setup = contextInstance.setup, wrapperComponent = contextInstance.wrapperComponent;\n var _a = setup.doubleClick, disabled = _a.disabled, excluded = _a.excluded;\n var target = event.target;\n var isWrapperChild = wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.contains(target);\n var isAllowed = isInitialized && target && isWrapperChild && !disabled;\n if (!isAllowed)\n return false;\n var isExcluded = isExcludedNode(target, excluded);\n if (isExcluded)\n return false;\n return true;\n};\n","import { getContext, createSetup, createState, handleCallback, getTransformStyles, makePassiveEventOption, getCenterPosition, } from \"../utils\";\nimport { handleCancelAnimation } from \"./animations/animations.utils\";\nimport { isWheelAllowed } from \"./wheel/wheel.utils\";\nimport { isPinchAllowed, isPinchStartAllowed } from \"./pinch/pinch.utils\";\nimport { handleCalculateBounds } from \"./bounds/bounds.utils\";\nimport { handleWheelStart, handleWheelZoom, handleWheelStop, } from \"./wheel/wheel.logic\";\nimport { getPaddingValue, handleNewPosition, isPanningAllowed, isPanningStartAllowed, } from \"./pan/panning.utils\";\nimport { handlePanning, handlePanningEnd, handlePanningStart, } from \"./pan/panning.logic\";\nimport { handlePinchStart, handlePinchStop, handlePinchZoom, } from \"./pinch/pinch.logic\";\nimport { handleDoubleClick, isDoubleClickAllowed, } from \"./double-click/double-click.logic\";\nvar ZoomPanPinch = /** @class */ (function () {\n function ZoomPanPinch(props) {\n var _this = this;\n this.mounted = true;\n this.onChangeCallbacks = new Set();\n this.onInitCallbacks = new Set();\n // Components\n this.wrapperComponent = null;\n this.contentComponent = null;\n // Initialization\n this.isInitialized = false;\n this.bounds = null;\n // wheel helpers\n this.previousWheelEvent = null;\n this.wheelStopEventTimer = null;\n this.wheelAnimationTimer = null;\n // panning helpers\n this.isPanning = false;\n this.isWheelPanning = false;\n this.startCoords = null;\n this.lastTouch = null;\n // pinch helpers\n this.distance = null;\n this.lastDistance = null;\n this.pinchStartDistance = null;\n this.pinchStartScale = null;\n this.pinchMidpoint = null;\n // double click helpers\n this.doubleClickStopEventTimer = null;\n // velocity helpers\n this.velocity = null;\n this.velocityTime = null;\n this.lastMousePosition = null;\n // animations helpers\n this.animate = false;\n this.animation = null;\n this.maxBounds = null;\n // key press\n this.pressedKeys = {};\n this.mount = function () {\n _this.initializeWindowEvents();\n };\n this.unmount = function () {\n _this.cleanupWindowEvents();\n };\n this.update = function (newProps) {\n _this.props = newProps;\n handleCalculateBounds(_this, _this.transformState.scale);\n _this.setup = createSetup(newProps);\n };\n this.initializeWindowEvents = function () {\n var _a, _b;\n var passive = makePassiveEventOption();\n var currentDocument = (_a = _this.wrapperComponent) === null || _a === void 0 ? void 0 : _a.ownerDocument;\n var currentWindow = currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.defaultView;\n (_b = _this.wrapperComponent) === null || _b === void 0 ? void 0 : _b.addEventListener(\"wheel\", _this.onWheelPanning, passive);\n // Panning on window to allow panning when mouse is out of component wrapper\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"mousedown\", _this.onPanningStart, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"mousemove\", _this.onPanning, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"mouseup\", _this.onPanningStop, passive);\n currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.addEventListener(\"mouseleave\", _this.clearPanning, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"keyup\", _this.setKeyUnPressed, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"keydown\", _this.setKeyPressed, passive);\n };\n this.cleanupWindowEvents = function () {\n var _a, _b;\n var passive = makePassiveEventOption();\n var currentDocument = (_a = _this.wrapperComponent) === null || _a === void 0 ? void 0 : _a.ownerDocument;\n var currentWindow = currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.defaultView;\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"mousedown\", _this.onPanningStart, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"mousemove\", _this.onPanning, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"mouseup\", _this.onPanningStop, passive);\n currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.removeEventListener(\"mouseleave\", _this.clearPanning, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"keyup\", _this.setKeyUnPressed, passive);\n currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"keydown\", _this.setKeyPressed, passive);\n document.removeEventListener(\"mouseleave\", _this.clearPanning, passive);\n handleCancelAnimation(_this);\n (_b = _this.observer) === null || _b === void 0 ? void 0 : _b.disconnect();\n };\n this.handleInitializeWrapperEvents = function (wrapper) {\n // Zooming events on wrapper\n var passive = makePassiveEventOption();\n wrapper.addEventListener(\"wheel\", _this.onWheelZoom, passive);\n wrapper.addEventListener(\"dblclick\", _this.onDoubleClick, passive);\n wrapper.addEventListener(\"touchstart\", _this.onTouchPanningStart, passive);\n wrapper.addEventListener(\"touchmove\", _this.onTouchPanning, passive);\n wrapper.addEventListener(\"touchend\", _this.onTouchPanningStop, passive);\n };\n this.handleInitialize = function (contentComponent) {\n var centerOnInit = _this.setup.centerOnInit;\n _this.applyTransformation();\n _this.onInitCallbacks.forEach(function (callback) { return callback(getContext(_this)); });\n if (centerOnInit) {\n _this.setCenter();\n _this.observer = new ResizeObserver(function () {\n var _a;\n _this.onInitCallbacks.forEach(function (callback) { return callback(getContext(_this)); });\n _this.setCenter();\n (_a = _this.observer) === null || _a === void 0 ? void 0 : _a.disconnect();\n });\n // Start observing the target node for configured mutations\n _this.observer.observe(contentComponent);\n }\n };\n /// ///////\n // Zoom\n /// ///////\n this.onWheelZoom = function (event) {\n var disabled = _this.setup.disabled;\n if (disabled)\n return;\n var isAllowed = isWheelAllowed(_this, event);\n if (!isAllowed)\n return;\n var keysPressed = _this.isPressingKeys(_this.setup.wheel.activationKeys);\n if (!keysPressed)\n return;\n handleWheelStart(_this, event);\n handleWheelZoom(_this, event);\n handleWheelStop(_this, event);\n };\n /// ///////\n // Pan\n /// ///////\n this.onWheelPanning = function (event) {\n var _a = _this.setup, disabled = _a.disabled, wheel = _a.wheel, panning = _a.panning;\n if (!_this.wrapperComponent ||\n !_this.contentComponent ||\n disabled ||\n !wheel.wheelDisabled ||\n panning.disabled ||\n !panning.wheelPanning ||\n event.ctrlKey) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n var _b = _this.transformState, positionX = _b.positionX, positionY = _b.positionY;\n var mouseX = positionX - event.deltaX;\n var mouseY = positionY - event.deltaY;\n var newPositionX = panning.lockAxisX ? positionX : mouseX;\n var newPositionY = panning.lockAxisY ? positionY : mouseY;\n var _c = _this.setup.alignmentAnimation, sizeX = _c.sizeX, sizeY = _c.sizeY;\n var paddingValueX = getPaddingValue(_this, sizeX);\n var paddingValueY = getPaddingValue(_this, sizeY);\n if (newPositionX === positionX && newPositionY === positionY)\n return;\n handleNewPosition(_this, newPositionX, newPositionY, paddingValueX, paddingValueY);\n };\n this.onPanningStart = function (event) {\n var disabled = _this.setup.disabled;\n var onPanningStart = _this.props.onPanningStart;\n if (disabled)\n return;\n var isAllowed = isPanningStartAllowed(_this, event);\n if (!isAllowed)\n return;\n var keysPressed = _this.isPressingKeys(_this.setup.panning.activationKeys);\n if (!keysPressed)\n return;\n if (event.button === 0 && !_this.setup.panning.allowLeftClickPan)\n return;\n if (event.button === 1 && !_this.setup.panning.allowMiddleClickPan)\n return;\n if (event.button === 2 && !_this.setup.panning.allowRightClickPan)\n return;\n event.preventDefault();\n event.stopPropagation();\n handleCancelAnimation(_this);\n handlePanningStart(_this, event);\n handleCallback(getContext(_this), event, onPanningStart);\n };\n this.onPanning = function (event) {\n var disabled = _this.setup.disabled;\n var onPanning = _this.props.onPanning;\n if (disabled)\n return;\n var isAllowed = isPanningAllowed(_this);\n if (!isAllowed)\n return;\n var keysPressed = _this.isPressingKeys(_this.setup.panning.activationKeys);\n if (!keysPressed)\n return;\n event.preventDefault();\n event.stopPropagation();\n handlePanning(_this, event.clientX, event.clientY);\n handleCallback(getContext(_this), event, onPanning);\n };\n this.onPanningStop = function (event) {\n var onPanningStop = _this.props.onPanningStop;\n if (_this.isPanning) {\n handlePanningEnd(_this);\n handleCallback(getContext(_this), event, onPanningStop);\n }\n };\n /// ///////\n // Pinch\n /// ///////\n this.onPinchStart = function (event) {\n var disabled = _this.setup.disabled;\n var _a = _this.props, onPinchingStart = _a.onPinchingStart, onZoomStart = _a.onZoomStart;\n if (disabled)\n return;\n var isAllowed = isPinchStartAllowed(_this, event);\n if (!isAllowed)\n return;\n handlePinchStart(_this, event);\n handleCancelAnimation(_this);\n handleCallback(getContext(_this), event, onPinchingStart);\n handleCallback(getContext(_this), event, onZoomStart);\n };\n this.onPinch = function (event) {\n var disabled = _this.setup.disabled;\n var _a = _this.props, onPinching = _a.onPinching, onZoom = _a.onZoom;\n if (disabled)\n return;\n var isAllowed = isPinchAllowed(_this);\n if (!isAllowed)\n return;\n event.preventDefault();\n event.stopPropagation();\n handlePinchZoom(_this, event);\n handleCallback(getContext(_this), event, onPinching);\n handleCallback(getContext(_this), event, onZoom);\n };\n this.onPinchStop = function (event) {\n var _a = _this.props, onPinchingStop = _a.onPinchingStop, onZoomStop = _a.onZoomStop;\n if (_this.pinchStartScale) {\n handlePinchStop(_this);\n handleCallback(getContext(_this), event, onPinchingStop);\n handleCallback(getContext(_this), event, onZoomStop);\n }\n };\n /// ///////\n // Touch\n /// ///////\n this.onTouchPanningStart = function (event) {\n var disabled = _this.setup.disabled;\n var onPanningStart = _this.props.onPanningStart;\n if (disabled)\n return;\n var isAllowed = isPanningStartAllowed(_this, event);\n if (!isAllowed)\n return;\n var isDoubleTap = _this.lastTouch && +new Date() - _this.lastTouch < 200;\n if (isDoubleTap && event.touches.length === 1) {\n _this.onDoubleClick(event);\n }\n else {\n _this.lastTouch = +new Date();\n handleCancelAnimation(_this);\n var touches = event.touches;\n var isPanningAction = touches.length === 1;\n var isPinchAction = touches.length === 2;\n if (isPanningAction) {\n handleCancelAnimation(_this);\n handlePanningStart(_this, event);\n handleCallback(getContext(_this), event, onPanningStart);\n }\n if (isPinchAction) {\n _this.onPinchStart(event);\n }\n }\n };\n this.onTouchPanning = function (event) {\n var disabled = _this.setup.disabled;\n var onPanning = _this.props.onPanning;\n if (_this.isPanning && event.touches.length === 1) {\n if (disabled)\n return;\n var isAllowed = isPanningAllowed(_this);\n if (!isAllowed)\n return;\n event.preventDefault();\n event.stopPropagation();\n var touch = event.touches[0];\n handlePanning(_this, touch.clientX, touch.clientY);\n handleCallback(getContext(_this), event, onPanning);\n }\n else if (event.touches.length > 1) {\n _this.onPinch(event);\n }\n };\n this.onTouchPanningStop = function (event) {\n _this.onPanningStop(event);\n _this.onPinchStop(event);\n };\n /// ///////\n // Double Click\n /// ///////\n this.onDoubleClick = function (event) {\n var disabled = _this.setup.disabled;\n if (disabled)\n return;\n var isAllowed = isDoubleClickAllowed(_this, event);\n if (!isAllowed)\n return;\n handleDoubleClick(_this, event);\n };\n /// ///////\n // Helpers\n /// ///////\n this.clearPanning = function (event) {\n if (_this.isPanning) {\n _this.onPanningStop(event);\n }\n };\n this.setKeyPressed = function (e) {\n _this.pressedKeys[e.key] = true;\n };\n this.setKeyUnPressed = function (e) {\n _this.pressedKeys[e.key] = false;\n };\n this.isPressingKeys = function (keys) {\n if (!keys.length) {\n return true;\n }\n return Boolean(keys.find(function (key) { return _this.pressedKeys[key]; }));\n };\n this.setTransformState = function (scale, positionX, positionY) {\n var onTransformed = _this.props.onTransformed;\n if (!Number.isNaN(scale) &&\n !Number.isNaN(positionX) &&\n !Number.isNaN(positionY)) {\n if (scale !== _this.transformState.scale) {\n _this.transformState.previousScale = _this.transformState.scale;\n _this.transformState.scale = scale;\n }\n _this.transformState.positionX = positionX;\n _this.transformState.positionY = positionY;\n _this.applyTransformation();\n var ctx_1 = getContext(_this);\n _this.onChangeCallbacks.forEach(function (callback) { return callback(ctx_1); });\n handleCallback(ctx_1, { scale: scale, positionX: positionX, positionY: positionY }, onTransformed);\n }\n else {\n console.error(\"Detected NaN set state values\");\n }\n };\n this.setCenter = function () {\n if (_this.wrapperComponent && _this.contentComponent) {\n var targetState = getCenterPosition(_this.transformState.scale, _this.wrapperComponent, _this.contentComponent);\n _this.setTransformState(targetState.scale, targetState.positionX, targetState.positionY);\n }\n };\n this.handleTransformStyles = function (x, y, scale) {\n if (_this.props.customTransform) {\n return _this.props.customTransform(x, y, scale);\n }\n return getTransformStyles(x, y, scale);\n };\n this.applyTransformation = function () {\n if (!_this.mounted || !_this.contentComponent)\n return;\n var _a = _this.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n var transform = _this.handleTransformStyles(positionX, positionY, scale);\n _this.contentComponent.style.transform = transform;\n };\n this.getContext = function () {\n return getContext(_this);\n };\n /**\n * Hooks\n */\n this.onChange = function (callback) {\n if (!_this.onChangeCallbacks.has(callback)) {\n _this.onChangeCallbacks.add(callback);\n }\n return function () {\n _this.onChangeCallbacks.delete(callback);\n };\n };\n this.onInit = function (callback) {\n if (!_this.onInitCallbacks.has(callback)) {\n _this.onInitCallbacks.add(callback);\n }\n return function () {\n _this.onInitCallbacks.delete(callback);\n };\n };\n /**\n * Initialization\n */\n this.init = function (wrapperComponent, contentComponent) {\n _this.cleanupWindowEvents();\n _this.wrapperComponent = wrapperComponent;\n _this.contentComponent = contentComponent;\n handleCalculateBounds(_this, _this.transformState.scale);\n _this.handleInitializeWrapperEvents(wrapperComponent);\n _this.handleInitialize(contentComponent);\n _this.initializeWindowEvents();\n _this.isInitialized = true;\n var ctx = getContext(_this);\n handleCallback(ctx, undefined, _this.props.onInit);\n };\n this.props = props;\n this.setup = createSetup(this.props);\n this.transformState = createState(this.props);\n }\n return ZoomPanPinch;\n}());\nexport { ZoomPanPinch };\n","import React, { useEffect, useImperativeHandle, useRef } from \"react\";\nimport { ZoomPanPinch } from \"../../core/instance.core\";\nimport { getControls } from \"../../utils\";\nexport var Context = React.createContext(null);\nvar getContent = function (children, ctx) {\n if (typeof children === \"function\") {\n return children(ctx);\n }\n return children;\n};\nexport var TransformWrapper = React.forwardRef(function (props, ref) {\n var instance = useRef(new ZoomPanPinch(props)).current;\n var content = getContent(props.children, getControls(instance));\n useImperativeHandle(ref, function () { return getControls(instance); }, [instance]);\n useEffect(function () {\n instance.update(props);\n }, [instance, props]);\n return React.createElement(Context.Provider, { value: instance }, content);\n});\n","import { __assign } from \"tslib\";\nimport React, { useContext, useEffect, useRef } from \"react\";\nimport { mergeRefs } from \"utils/ref.utils\";\nimport { Context } from \"../transform-wrapper/transform-wrapper\";\nexport var KeepScale = React.forwardRef(function (props, ref) {\n var localRef = useRef(null);\n var instance = useContext(Context);\n useEffect(function () {\n return instance.onChange(function (ctx) {\n if (localRef.current) {\n var positionX = 0;\n var positionY = 0;\n localRef.current.style.transform = instance.handleTransformStyles(positionX, positionY, 1 / ctx.instance.transformState.scale);\n }\n });\n }, [instance]);\n return React.createElement(\"div\", __assign({}, props, { ref: mergeRefs([localRef, ref]) }));\n});\n","export function mergeRefs(refs) {\n return function (value) {\n refs.forEach(function (ref) {\n if (typeof ref === \"function\") {\n ref(value);\n }\n else if (ref != null) {\n ref.current = value;\n }\n });\n };\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { __assign } from \"tslib\";\n/* eslint-disable react/require-default-props */\nimport React, { useContext, useEffect, useRef } from \"react\";\nimport { Context } from \"../transform-wrapper/transform-wrapper\";\nimport styles from \"./transform-component.module.css\";\nexport var TransformComponent = function (_a) {\n var children = _a.children, _b = _a.wrapperClass, wrapperClass = _b === void 0 ? \"\" : _b, _c = _a.contentClass, contentClass = _c === void 0 ? \"\" : _c, wrapperStyle = _a.wrapperStyle, contentStyle = _a.contentStyle, _d = _a.wrapperProps, wrapperProps = _d === void 0 ? {} : _d, _e = _a.contentProps, contentProps = _e === void 0 ? {} : _e;\n var _f = useContext(Context), init = _f.init, cleanupWindowEvents = _f.cleanupWindowEvents;\n var wrapperRef = useRef(null);\n var contentRef = useRef(null);\n useEffect(function () {\n var wrapper = wrapperRef.current;\n var content = contentRef.current;\n if (wrapper !== null && content !== null && init) {\n init === null || init === void 0 ? void 0 : init(wrapper, content);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return function () {\n cleanupWindowEvents === null || cleanupWindowEvents === void 0 ? void 0 : cleanupWindowEvents();\n };\n }, []);\n return (React.createElement(\"div\", __assign({}, wrapperProps, { ref: wrapperRef, className: \"react-transform-wrapper \".concat(styles.wrapper, \" \").concat(wrapperClass), style: wrapperStyle }),\n React.createElement(\"div\", __assign({}, contentProps, { ref: contentRef, className: \"react-transform-component \".concat(styles.content, \" \").concat(contentClass), style: contentStyle }), children)));\n};\n","import { useContext } from \"react\";\nimport { Context } from \"components\";\nexport var useTransformContext = function () {\n var libraryContext = useContext(Context);\n if (!libraryContext) {\n throw new Error(\"Transform context must be placed inside TransformWrapper\");\n }\n return libraryContext;\n};\n","import { useEffect } from \"react\";\nimport { getState } from \"utils\";\nimport { useTransformContext } from \"./use-transform-context\";\nexport var useTransformEffect = function (callback) {\n var libraryContext = useTransformContext();\n useEffect(function () {\n var unmountCallback;\n var unmount = libraryContext.onChange(function (ref) {\n unmountCallback = callback(getState(ref.instance));\n });\n return function () {\n unmount();\n unmountCallback === null || unmountCallback === void 0 ? void 0 : unmountCallback();\n };\n }, [callback, libraryContext]);\n};\n","import React, { useEffect, useState, useRef } from 'react'\nimport './ImageLoader.scss'\nimport { ImageLoader } from './index'\nimport { useControls, useTransformEffect, useTransformContext } from 'react-zoom-pan-pinch'\n\nconst Zoom = ({\n className,\n src,\n setShowLoading,\n activeImage,\n index,\n setIsImageZoomed,\n}) => {\n const [scale, setScale] = useState(1)\n const [isPanning, setIsPanning] = useState()\n const transformCoordinates = useRef(null)\n const [allowPanning, setAllowPanning] = useState(false)\n const { resetTransform, zoomIn, zoomOut } = useControls()\n const context = useTransformContext()\n\n useEffect(() => {\n if (scale > 1 && index !== activeImage) {\n resetTransform()\n }\n return () => resetTransform()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeImage])\n\n useTransformEffect(({ state, instance }) => {\n setIsImageZoomed(state.scale > 1)\n setScale(state.scale)\n setIsPanning(instance.isPanning)\n })\n\n const onClick = (e) => {\n if (isPanning) return\n transformCoordinates.current = {\n x: e.pageX,\n y: e.pageY\n }\n const { transformState } = context\n if (transformState.scale === 1) {\n zoomIn()\n } else {\n zoomOut()\n }\n setAllowPanning(!allowPanning)\n }\n\n const onMouseMove = (e) => {\n if (allowPanning) {\n const currentCoordinates = {\n x: e.pageX,\n y: e.pageY\n }\n const deltaX = transformCoordinates.current.x - currentCoordinates.x\n const deltaY = transformCoordinates.current.y - currentCoordinates.y\n transformCoordinates.current = currentCoordinates\n\n const newCoordinateX = context.transformState.positionX + deltaX\n const newCoordinateY = context.transformState.positionY + deltaY\n context.setTransformState(context.transformState.scale, newCoordinateX, newCoordinateY)\n }\n }\n\n const onMouseLeave = () => {\n setAllowPanning(false)\n resetTransform()\n }\n\n const getPinchPanClasses = () => {\n if (isPanning) return 'panning'\n return scale > 1 ? 'zoomOut' : 'zoomIn'\n }\n\n return (\n <ImageLoader\n onMouseLeave={onMouseLeave}\n onClick={onClick}\n onMouseMove={onMouseMove}\n className={`${className || ''} ${getPinchPanClasses()}`}\n setShowLoading={setShowLoading}\n src={src}\n activeImage={activeImage}\n />\n )\n}\n\nexport default Zoom\n","import { getControls } from \"utils\";\nimport { useTransformContext } from \"./use-transform-context\";\nexport var useControls = function () {\n var libraryContext = useTransformContext();\n return getControls(libraryContext);\n};\n","import React, {useState} from 'react'\nimport './ImageLoader.scss'\nimport {TransformComponent, TransformWrapper} from \"react-zoom-pan-pinch\";\nimport {ImageLoader} from \"./index\";\nimport Zoom from \"./Zoom\";\n\nconst ImageView = ({zoomAllowed = false, className, src, activeImage, index, isImageZoomed, setIsImageZoomed}) => {\n const [showLoading, setShowLoading] = useState(true)\n return (\n zoomAllowed ? <div className={`image-loader ${className ? className : ''}`}>\n {showLoading && <div className=\"animated loading\"/>}\n <TransformWrapper panning={{disabled: !isImageZoomed}} initialScale={1} wheel={{smoothStep: 0.02}}>\n <TransformComponent>\n <Zoom\n className={className}\n setShowLoading={setShowLoading}\n src={src}\n activeImage={activeImage}\n index={index}\n setIsImageZoomed={setIsImageZoomed}\n />\n </TransformComponent>\n </TransformWrapper>\n </div> :\n <ImageLoader\n className={className}\n setShowLoading={setShowLoading}\n src={src}\n activeImage={activeImage}\n />\n )\n}\nexport default ImageView\n","import themeContext from './themeContext';\nimport routes from '$routes';\n\nclass UrlGenerator {\n\n constructor() {\n this.routes = routes.filter(r => (\n r.indexOf(':languageCode') > -1 &&\n r.indexOf(':page') > -1)\n )\n }\n\n get(params) {\n const { languageCode, storeID, storeFriendlyID } = themeContext.get();\n params.languageCode = params.languageCode || languageCode;\n params.storeID = storeID;\n params.storeFriendlyID = storeFriendlyID\n const entries = Object.entries(params);\n\n const r = this.routes.map(r => {\n let result = r;\n entries.forEach(([key, value]) => {\n const encodedValue = typeof value === 'string' && params.page !== 'search'\n ? value\n .replace(/<[^>]*>?/gm, '')\n .replace(/[+}{!@#$%^&*()/|:;<>?’~_\\-\"\"',.\\\\\\s]/g, '-')\n .replace(/-+/g, '-')\n : value\n\n result = result.replace(`:${key}`, encodedValue)\n });\n return result;\n }).filter(r => r.indexOf(':') === -1)\n .reduce((res, r) => res.length < r.length ? r : res, '');\n\n return r;\n }\n}\n\nconst urlGenerator = new UrlGenerator();\nexport default urlGenerator\n","import React from 'react'\nimport { UStoreProvider } from '@ustore/core'\nimport { useNavigate, useParams } from 'react-router-dom'\nimport { t } from '$themelocalization'\n\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\n\nconst Slot = (props) => {\n const { name, data } = props\n const navigate = useNavigate()\n const { page } = useParams()\n\n return window.xmpie_uStore_widgets.instances\n .filter(widget => widget.location === name )\n .map((widget, index) => {\n const context = {\n page,\n slot: widget.name,\n place: index,\n data,\n navigate,\n urlGenerator,\n t,\n }\n const WidgetComponent = window[widget.name]?.default;\n const widgetConfig = Object.keys(window.uStoreWidgetsConfiguration).length && window.uStoreWidgetsConfiguration[widget.id]\n ? atob(window.uStoreWidgetsConfiguration[widget.id]).toString()\n : null\n\n return React.createElement(WidgetComponent, { key: widget.name, uStoreProvider: UStoreProvider, config: widgetConfig, context, ...props })\n })\n};\n\nSlot.defaultProps = {\n data: {},\n}\n\nexport default Slot;","import themeContext from '$ustoreinternal/services/themeContext'\n\nconst HIDDEN = 1\nconst SUFFIX = 2\nconst PREFIX = 3\n\nconst PRODUCT = 'product'\nconst PRODUCTS = 'products'\nconst CATEGORY = 'category'\nconst HOME = 'home'\n\nconst getSEO = (data, defaults) => {\n const { title, description } = defaults\n\n if (!data) {\n return { title, description }\n }\n\n return { title: data.Title, description: data.Description }\n}\n\n/**\n @param {string} string - capitalize first letter\n */\nconst capitalize = (string) => {\n return string ? string.charAt(0).toUpperCase() + string.slice(1) : ''\n}\n\n/**\n *\n * @param {string} pageTitle\n * @param {string} storeTitle\n * @param {number} type\n */\nconst concatenate = (pageTitle, storeTitle, type = SUFFIX) => {\n if (!pageTitle || !storeTitle) {\n return\n }\n\n switch (type) {\n case HIDDEN:\n return pageTitle\n case PREFIX:\n return `${storeTitle} ${pageTitle}`\n case SUFFIX:\n return `${pageTitle} ${storeTitle}`\n default:\n return ''\n }\n}\n\nconst HeadSEO = ({ currentStore, customState }) => {\n if (!currentStore || !customState) {\n return null\n }\n\n const { Name: storeTitle, Description: storeDescription, SeoConfiguration } = currentStore\n const { page } = themeContext.get()\n\n let titleAdditionFormat = SUFFIX\n let titleAdditionText = storeTitle\n if (SeoConfiguration) {\n titleAdditionFormat = SeoConfiguration.TitleTagType\n titleAdditionText = SeoConfiguration.TitleTag\n }\n\n let title = storeTitle\n let description = ''\n let data\n\n switch (page) {\n case HOME:\n data = getSEO(\n SeoConfiguration,\n { title: storeTitle, description: storeDescription }\n )\n\n title = data.title\n description = data.description\n break\n case CATEGORY:\n const { currentCategory } = customState\n\n if (currentCategory) {\n data = getSEO(\n currentCategory.SeoConfiguration,\n { title: currentCategory.Name, description: currentCategory.Description }\n )\n\n title = concatenate(data.title, titleAdditionText, titleAdditionFormat)\n description = data.description\n }\n\n break\n\n case PRODUCTS:\n case PRODUCT:\n const { currentProduct } = customState\n\n if (currentProduct) {\n data = getSEO(\n currentProduct.SeoConfiguration,\n { title: currentProduct.Name, description: currentProduct.Description }\n )\n\n title = concatenate(data.title, titleAdditionText, titleAdditionFormat)\n description = data.description\n }\n\n break\n default:\n title = concatenate(capitalize(page), titleAdditionText, titleAdditionFormat)\n }\n\n document.title = title.replace(/<[^>]*>?/gm, '') || ''\n if (description) {\n const metaTag = document.head.querySelector(`[name='description']`)\n if (metaTag) metaTag.setAttribute('content', description)\n }\n return null\n}\n\nexport default HeadSEO\n","import themeContext from \"$ustoreinternal/services/themeContext\";\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\n\n//NOTE: this method is not supported in SSR\nimport { getNextConfig } from \"./utils\";\n\nexport const getVariableValue = (varName, defaultValue, isImageURL, isURL) => {\n const setVarValue = (value) => {\n value = value.trim()\n if (value.startsWith(\"\\\"\") || value.startsWith(\"'\")) {\n value = value.substring(1, value.length - 1)\n }\n if (isImageURL && (value.startsWith(\"Assets\") || value.startsWith(\"assets\"))) {\n const { showThemeAsDraft, storeID } = themeContext.get()\n const { themeCustomizationUrl } = getNextConfig()\n const imagePrefix = `${themeCustomizationUrl}/${storeID}/${showThemeAsDraft === 'true' ? 'Draft' : 'Published'}`\n value = `${imagePrefix}/${value}`\n }\n if (isURL && value.startsWith(\"/\")) {\n let qs = null\n\n if (value.indexOf('?') > -1) {\n qs = value.split('?')[1]\n value = value.substring(0, value.indexOf('?'))\n }\n\n const params = value.split('/')\n const paramsObj = { page: params[1] }\n if (params.length > 2) {\n paramsObj.id = params[2]\n }\n\n value = `${urlGenerator.get(paramsObj)}${qs ? `?${qs}` : ''}`\n }\n return value\n }\n\n\n const style = window.getComputedStyle(document.body)\n let varValue = style.getPropertyValue(varName)\n varValue = setVarValue(varValue)\n return (varValue && varValue.length) ? varValue : defaultValue\n\n}\n","/**\n * Wrapper component for flag image\n *\n * @param {object} props - all the properties we would like to pass to the flag image tag including:\n * @param {string} name - the flag file name\n * @param {number} width - the flag image width\n * @param {number} height - the flag image height\n * @param {string} [className] - a class to place on flag image element\n */\nimport React from 'react'\nimport themeContext from '$ustoreinternal/services/themeContext'\n\nconst Flag = (props) => {\n const assetPrefix = (themeContext && themeContext.get().hasOwnProperty('assetPrefix')) ? themeContext.get().assetPrefix : props.assetPrefix\n const { name } = props\n\n if (!name) {\n return null\n }\n\n const src = (`${assetPrefix}/static-internal/images/flags/${name.toLowerCase()}`)\n return (\n <img\n {...props}\n alt=''\n src={src}\n style={{ display: 'inline-block' }}\n />\n )\n}\n\nexport default Flag\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import { UStoreProvider } from '@ustore/core'\nimport { debounce } from 'throttle-debounce'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport { queryOrCookieStrToObj, getNextConfig } from '$ustoreinternal/services/utils'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport variables from '$styles/_theme.scss'\nimport logger from './logger'\n\nconst ngToLegacyConversions = [\n {\n reg: /^((?!product|category).)*\\/drafts/,\n generateURL: () => `Drafts`\n },\n {\n reg: /(.*)\\/product\\/(.*)/,\n generateURL: (storeFriendlyID, id) => `${storeFriendlyID}/Category/0/Product/${id}/`,\n\n },\n {\n reg: /.*\\/order-final-step/,\n generateURL: () => `OrderFinalStep.aspx`\n },\n {\n reg: /^((?!product|category).)*\\/cart/,\n generateURL: () => `Cart`\n },\n {\n // In case `product` or `category` are used as folder names\n reg: /(product|categor).*\\/\\w{2}(-\\w{2})?\\/cart/,\n generateURL: () => `Cart`\n },\n {\n reg: /^((?!product|category).)*\\/addresses/,\n generateURL: () => `Adresses`\n },\n {\n reg: /.*\\/checkout-complete/,\n generateURL: () => `CheckoutComplete.aspx`\n },\n {\n reg: /.*\\/checkout-final/,\n generateURL: () => `CheckoutFinal.aspx`\n },\n {\n reg: /.*\\/checkout-payment-submission/,\n generateURL: () => `CheckoutPaymentSubmission.aspx`\n },\n {\n reg: /.*\\/clearing-unknown-order/,\n generateURL: () => `Clearing/UnknownOrder.aspx`\n },\n {\n reg: /.*\\/customization/,\n generateURL: () => `Customization.aspx`\n },\n {\n reg: /.*\\/custom-main/,\n generateURL: () => `CustomMain.aspx`\n },\n {\n reg: /.*\\/empty-page/,\n generateURL: () => `EmptyPage.aspx`\n },\n {\n reg: /.*\\/error-page/,\n generateURL: () => `ErrorPage.aspx`\n },\n {\n reg: /.*\\/file-submission/,\n generateURL: () => `FileSubmission/FileSubmission.aspx`\n },\n {\n reg: /.*\\/my-recipient-lists/,\n generateURL: () => `MyRecipientLists`\n },\n {\n reg: /.*\\/order-approval-list/,\n generateURL: () => `OrderApprovalList.aspx`\n },\n {\n reg: /.*\\/order-details/,\n generateURL: () => `OrderDetails.aspx`\n },\n {\n reg: /.*\\/order-history/,\n generateURL: () => `OrderHistory`\n },\n {\n reg: /.*\\/personal-information/,\n generateURL: () => `PersonalInformation`\n },\n {\n reg: /.*\\/product-details/,\n generateURL: () => `ProductDetails`\n },\n {\n reg: /.*\\/product-unavailable/,\n generateURL: () => `ProductUnavailable.aspx`\n },\n {\n reg: /^((?!product|category).)*\\/recipient/,\n generateURL: () => `Recipient.aspx`\n },\n // {\n // reg: /^((?!product|category).)*\\/search/,\n // generateURL: (storeFriendlyID, id) => `${storeFriendlyID}/Search/${id}`\n // },\n {\n reg: /.*\\/split-shipping-addresses/,\n generateURL: () => `SplitShipping/Addresses.aspx`\n },\n {\n reg: /.*\\/split-shipping-items/,\n generateURL: () => `SplitShipping/Items.aspx`\n },\n {\n reg: /.*\\/uedit-customization/,\n generateURL: () => `uEditCustomization.aspx`\n },\n]\n\nconst legacyToNGConversions = [\n {\n reg: /\\/category\\/0\\/product\\//,\n page: 'product',\n params: (url) => {\n const res = url.match(/\\/product\\/(\\d+)\\/(.*)/)\n\n return {\n id: res[1],\n name: res[2]\n }\n }\n },\n {\n reg: /\\/ustore\\/orderfinalstep/,\n page: 'order-final-step'\n },\n {\n reg: /\\/ustore\\/productdetails/,\n page: 'product-details'\n },\n {\n reg: /\\/ustore\\/(cart|checkout)(?!final|paymentsubmission|complete)/,\n page: 'cart'\n },\n {\n reg: /\\/ustore\\/checkoutfinal/,\n page: 'checkout-final'\n },\n {\n reg: /\\/ustore\\/checkoutpaymentsubmission/,\n page: 'checkout-payment-submission'\n },\n {\n reg: /\\/ustore\\/checkoutcomplete/,\n page: 'checkout-complete'\n },\n {\n reg: /\\/ustore\\/(orderhistory|orderlist)/,\n page: 'order-history'\n },\n {\n reg: /\\/ustore\\/(personalinformation|accountsettings)/,\n page: 'personal-information'\n },\n {\n reg: /\\/ustore\\/(adresses|deliveryaddress)/,\n page: 'addresses'\n },\n {\n reg: /\\/ustore\\/recipient(?!manager)/,\n page: 'recipient'\n },\n {\n reg: /\\/ustore\\/(myrecipientlists|recipientmanager)/,\n page: 'my-recipient-lists'\n },\n {\n reg: /\\/ustore\\/filesubmission\\/filesubmission/,\n page: 'file-submission'\n },\n {\n reg: /\\/ustore\\/customization/,\n page: 'customization'\n },\n {\n reg: /\\/ustore\\/ueditcustomization/,\n page: 'uedit-customization'\n },\n {\n reg: /\\/ustore\\/splitshipping\\/addresses/,\n page: 'split-shipping-addresses'\n },\n {\n reg: /\\/ustore\\/splitshipping\\/items/,\n page: 'split-shipping-items'\n },\n {\n reg: /\\/ustore\\/orderdetails/,\n page: 'order-details'\n },\n {\n reg: /\\/ustore\\/product-unavailable/,\n page: 'order-details'\n },\n {\n reg: /\\/ustore\\/drafts/,\n page: 'drafts'\n },\n {\n reg: /\\/ustore\\/emptypage/,\n page: 'empty-page'\n },\n {\n reg: /\\/ustore\\/errorpage/,\n page: 'error-page'\n },\n // {\n // reg: /\\/ustore\\/([\\w-]+)\\/search/,\n // page: 'search',\n // params: (url) => ({ id: url.match(/\\/search\\/(.*)\\?/)[1] })\n // },\n {\n reg: /\\/ustore\\/orderapprovallist/,\n page: 'order-approval-list'\n },\n {\n reg: /\\/ustore\\/custommain/,\n page: 'custom-main'\n },\n {\n reg: /\\/ustore\\/clearing\\/unknownorder/,\n page: 'clearing-unknown-order'\n },\n {\n reg: /\\/ustore(\\/?(([\\w-]+)\\/home\\/?)?)$/,\n page: 'home'\n },\n {\n reg: /\\/ustore\\/default/,\n page: 'home'\n }\n]\n\nclass LegacyIframeHandler {\n constructor() {\n this.viewMobileState = null\n this._iframeElm = null\n this.iframeID = 'legacy-iframe'\n this.clearContentSrc = 'about:blank'\n this.iframeContainer = null\n this.isIframeVisible = false\n this.buildType = getNextConfig().buildType\n this.router = null\n //TODO: No events listener for react-router, need to fix\n // Router.events.on('routeChangeComplete', this.handleRoute)\n }\n\n get iframeElm() {\n if (!this._iframeElm) {\n this._iframeElm = document.getElementById(this.iframeID)\n }\n return this._iframeElm\n }\n\n set setNavigate(navigateFn) {\n this.router = navigateFn\n }\n\n postMessage(message) {\n logger.info('message to iframe', message)\n\n if (!this.iframeElm) {\n return\n }\n this.iframeElm.contentWindow.postMessage(message, '*')\n }\n\n removeRandParamFromUrl(string) {\n if (!string) {\n return string\n }\n\n const randIndex = string.indexOf('rand')\n if (randIndex === -1) {\n return string\n }\n\n const ampersandIndex = string.indexOf('&', randIndex)\n return string.replace(\n ampersandIndex === -1 ? string.substring(randIndex - 1) : string.substring(randIndex, ampersandIndex + 1),\n ''\n )\n }\n\n setIframeSrc(url, mobileViewChanged = false) {\n if (window.uStoreConfig.uStoreRemoteServerUrl.includes('https://')) {\n return\n }\n try {\n const { pathname, search } = this.iframeElm.contentWindow.location\n\n const pathnameAfterCategoryFix = pathname\n .replace(/\\/Category\\/\\d+\\/Product\\//i, '/Category/0/Product/')\n .replace(/(\\/Category\\/0\\/Product\\/\\d+)(.*)/i, '$1')\n\n const pathIsTheSame = this.removeRandParamFromUrl(url)\n .toLowerCase()\n .startsWith(`${pathnameAfterCategoryFix}${this.removeRandParamFromUrl(search)}`.toLowerCase())\n\n if (!pathIsTheSame || mobileViewChanged) {\n this.iframeElm.contentWindow.location.replace(url)\n }\n } catch (e) {\n const ngurl = this.convertUrlLegacyToNG(url)\n window.location.href = ngurl\n }\n }\n\n getIframeSrc() {\n const { pathname, search, hash } = this.iframeElm.contentWindow.location\n return `${pathname}${search}${hash}`\n }\n\n handleRoute = (url) => {\n if (!this.iframeElm) {\n return\n }\n\n this.iframeElm.setAttribute('scrolling', 'no')\n\n // Send message to theme editor on routing changes\n window.parent.postMessage({\n type: '@CHANGE_NG_ROUTE',\n data: url\n }, '*')\n\n const { storeFriendlyID } = themeContext.get()\n\n // In case of a client only build on reload we need to wait until the\n // state is ready with currentStore, currentCulture and currentCurrency\n // for legacy iframe to be rendered correctly.\n const { currentCulture, currentCurrency } = UStoreProvider.state.get()\n if (!storeFriendlyID || !currentCurrency || !currentCulture) {\n setTimeout(() => this.handleRoute(url), 100)\n return\n }\n\n //Identify if the 'url' is legacy or NG.\n //If NG - hide iframe\n //If legacy - show iframe and set it's src\n const legacyURL = this.iframeURLWithMobileBreak(this.getLegacyUrl(url))\n const isCartPage = /^((?!product|category).)*\\/cart/i.test(legacyURL)\n const {currentStore} = window.UStoreProvider.state.get()\n const newCartPage = currentStore?.Attributes?.find((attr) => attr.Name === 'ForceCartAspx' && attr.Value === 'False')\n\n if (isCartPage && newCartPage) {\n this.hideIframe()\n return\n }\n if (legacyURL && legacyURL.length > 0 ) {\n this.isIframeVisible = true\n this.setIframeSrc(legacyURL)\n } else {\n this.hideIframe()\n }\n }\n\n iframeURLWithMobileBreak(url) {\n if (!url || url.length === 0 || url === this.clearContentSrc) {\n return url\n }\n\n const addViewMobile = (u, val) => url.includes(\"viewMobile\") ?\n u.replace(/viewMobile=false|viewMobile=true/gi, val) :\n u.includes('?') ? url.concat(`&${val}`) : url.concat(`?${val}`)\n\n const desktopBreakpoint = parseInt(variables.lg.replace('px', ''))\n const viewMobileVal = document.body.clientWidth > desktopBreakpoint ? 'viewMobile=false' : 'viewMobile=true'\n if (!this.viewMobileState || viewMobileVal !== this.viewMobileState) {\n this.viewMobileState = viewMobileVal\n return addViewMobile(url, viewMobileVal)\n }\n return url\n }\n\n getLegacyUrl(url) {\n let legacyUrl = this.convertUrlNGToLegacy(url)\n if (!legacyUrl || legacyUrl.length === 0) {\n return legacyUrl\n }\n const queryString = this.createCleanQueryString(url)\n legacyUrl += `${queryString.length > 0 ? '?' : ''}${queryString}`\n return this.appendMessagingParams(legacyUrl)\n }\n\n appendMessagingParams(url) {\n const { showThemeAsDraft, storeID, securityToken } = themeContext.get()\n const isDraft = showThemeAsDraft && showThemeAsDraft.toLowerCase() === 'true'\n const { currentCulture, currentCurrency, currentUser } = UStoreProvider.state.get()\n url += url.includes('showThemeAsDraft') ? '' : (`${url.includes('?') ? '&' : '?'}showThemeAsDraft=${isDraft}&isFrameMode=true`)\n url += url.includes('currentCultureFriendlyID') ? '' : `¤tCultureFriendlyID=${currentCulture ? currentCulture.FriendlyID : ''}`\n url += url.includes('currentCurrencyFriendlyID') ? '' : `¤tCurrencyFriendlyID=${currentCurrency ? currentCurrency.FriendlyID : ''}`\n url += url.includes('rand') ? '' : `&rand=${Math.random()}`\n url += url.includes('userUniqueId') ? '' : `&userUniqueId=${currentUser ? currentUser.ID : ''}`\n url += url.includes('parentUrl') ? '' : `&parentUrl=${encodeURIComponent(window.location.href)}`\n url += url.includes('StoreGuid') ? '' : `&StoreGuid=${storeID ? storeID : ''}`\n url += url.includes('securityToken') ? '' : `&securityToken=${securityToken ? securityToken : ''}`\n\n return url\n }\n\n convertUrlLegacyToNG(legacyUrl) {\n const url = legacyUrl.toLowerCase();\n const ngUrl = legacyToNGConversions.reduce((res, { reg, page, params }) => {\n if (reg.test(url)) {\n const p = params ? params(url) : {}\n return urlGenerator.get({ page, ...p })\n }\n return res\n }, '')\n\n const queryString = this.createCleanQueryString(legacyUrl)\n return `${ngUrl}${queryString.length > 0 ? '?' : ''}${queryString}`\n }\n\n convertUrlNGToLegacy(url) {\n const { storeFriendlyID, id, classicUrl } = themeContext.get()\n const legacyURL = ngToLegacyConversions.reduce((res, { reg, generateURL }) => {\n if (reg.test(url)) {\n return generateURL(storeFriendlyID, id, classicUrl)\n }\n return res\n }, '')\n return legacyURL && legacyURL.length > 0 ? `${classicUrl}/${legacyURL}` : \"\"\n }\n\n createCleanQueryString(url = '') {\n const queryParamsJson = queryOrCookieStrToObj(url.split('?')[1]);\n\n return Object.entries(queryParamsJson)\n .filter(([key, value]) => key !== 'isFrameMode' && key !== 'showThemeAsDraft' && key !== 'currentCurrencyFriendlyID' && key !== 'currentCultureFriendlyID' && key !== 'rand')\n .map(([key, value]) => `${key}=${value}`)\n .join('&')\n }\n\n hideIframe() {\n if (this.iframeElm) {\n this.isIframeVisible = false\n this.setIframeSrc(this.clearContentSrc)\n this.iframeElm.style.display = 'none'\n }\n }\n\n adaptIframeToContainer() {\n if (this.iframeElm && this.iframeContainer) {\n this.iframeElm.style.top = `${this.iframeContainer.offsetTop}px`\n this.iframeElm.height = this.iframeContainer.style.height\n this.iframeElm.width = this.iframeContainer.clientWidth\n this.iframeElm.style.display = 'block'\n this.iframeElm.style.position = 'absolute'\n }\n }\n\n adaptContainerToIframe() {\n if (this.iframeContainer) {\n this.iframeContainer.style.height = this.iframeElm.height\n }\n }\n\n onRedirectRequested(msg, previousPath) {\n if (!msg || !msg.data || !msg.data.url) return\n const url = msg.data.url\n\n if (url.startsWith('http')) {\n window.location.href = url\n }\n else {\n this.router(url, { state: { previousPath } })\n }\n }\n\n onScrollParentRequested(msg) {\n if (!msg) return\n\n if (msg.type === '@SCROLL_PARENT_DISABLE') {\n\n var x = window.scrollX;\n var y = window.scrollY;\n window.onscroll = function () { window.scrollTo(x, y); };\n\n }\n else if (msg.type === '@SCROLL_PARENT_ENABLE') {\n window.onscroll = function () { }\n }\n }\n\n onRequestScrollPosition(msg) {\n if (this.iframeElm && this.iframeContainer) {\n const response = {\n type: '@RESPONSE_UI_INFO',\n data: {\n scroll: document.querySelector('html').scrollTop\n }\n }\n\n this.postMessage(response)\n }\n }\n\n changeRouteOrDimensions(msg, asPath) {\n logger.info('message from iframe', msg, asPath)\n\n const changeRouteResult = {\n isRoutingFromLegacy: false,\n messageHandled: msg.type === '@CHANGE_DIMENSIONS' || msg.type === '@CHANGE_LEGACY_ROUTE'\n }\n if (msg.type === '@CHANGE_LEGACY_ROUTE') {\n // The following code prevents the iframe to be showed with\n // the login page inside. The page will redirect to the\n // original login page\n if (/login\\.aspx/i.test(msg.data) || /showmessage\\.aspx/i.test(msg.data)) {\n this.hideIframe()\n window.location.href = msg.data\n return changeRouteResult\n }\n\n window && window.scrollTo(0, 0)\n const nextUrl = msg.data ? this.convertUrlLegacyToNG(msg.data) : null\n if (nextUrl) {\n if (nextUrl !== asPath) {\n changeRouteResult.isRoutingFromLegacy = true\n this.router(nextUrl, { replace: true })\n this.adaptIframeToContainer()\n }\n }\n } else if (msg.type === '@CHANGE_DIMENSIONS') {\n if (this.iframeContainer && msg.data && msg.data.height && this.isIframeVisible) {\n this.iframeContainer.style.height = `${msg.data.height}px`\n this.adaptIframeToContainer()\n }\n }\n return changeRouteResult\n }\n\n handleClickingIframe = () => {\n this.iframeContainer && this.iframeContainer.click()\n }\n\n handleResize = debounce(300, () => {\n const iframeSrc = this.getIframeSrc()\n\n const urlWithMobileBreak = this.iframeURLWithMobileBreak(iframeSrc)\n if (urlWithMobileBreak !== iframeSrc) {\n this.setIframeSrc(this.appendMessagingParams(urlWithMobileBreak), true)\n }\n this.adaptIframeToContainer()\n })\n\n handleScrolling({ type, data }) {\n if (type === '@SCROLL_ON') {\n this.iframeElm.setAttribute('scrolling', 'yes')\n }\n if (type === '@SCROLL_TO') {\n window.scrollTo(data.x, data.y)\n }\n return type === '@SCROLL_ON'\n }\n}\n\nconst legacyIframeHandler = new LegacyIframeHandler()\nexport default legacyIframeHandler\n","import { UStoreProvider } from '@ustore/core'\nimport legacyIframeHandler from '$ustoreinternal/services/legacyIframeHandler'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\n\nexport const switchCurrency= (selectedCurrency) => {\n UStoreProvider.state.culture.setCurrentCurrency(selectedCurrency)\n themeContext.set('currencyFriendlyID', selectedCurrency.FriendlyID)\n CookiesManager.setCookie({ key: storefrontCookies.currencyID, value: selectedCurrency.FriendlyID, days: 30 })\n CookiesManager.setCookie({ key: storefrontCookies.currencyGUID, value: selectedCurrency.ID, days: 30 })\n legacyIframeHandler.postMessage({\n type: '@CHANGE_CURRENCY',\n data: selectedCurrency.FriendlyID\n })\n\n}\n\nexport const switchCulture = (selectedCulture, params) => {\n CookiesManager.setCookie({ key: storefrontCookies.language, value: selectedCulture.LanguageCode, days: 30 })\n const newURL = urlGenerator.get({\n ...params,\n languageCode: selectedCulture.LanguageCode\n }) + window.location.search + window.location.hash\n window.location.replace(newURL)\n\n}\n\nexport const getMobileMenuItems = (categoriesTree, cultures, currencies, currentCurrency, currentCulture) =>{\n\n const convertCategories = (categories, parent, depth) => {\n return categories.map((category) => {\n const id = `${!depth ? 'T' : ''}CT_${category.Category.FriendlyID}`\n const item = {\n id,\n value: id,\n name: category.Category.Name,\n parent,\n depth,\n hasProducts: category.Category.HasProducts\n }\n item.children = category ? convertCategories(category.SubCategories, item, depth + 1) : []\n return item\n })\n }\n\n const menuTree = []\n if (currencies) {\n menuTree.push({\n id: `TCR_${currentCurrency.ID}`,\n name: currentCurrency.Code,\n value: `TCR_${currentCurrency.ID}`,\n parent: null,\n depth: 0,\n sign: currentCurrency.Symbol,\n children: currencies?.map((model) => {\n const { ID, Symbol, Code } = model\n return ({\n id: `CR_${ID}`, sign: Symbol, name: Code, value: `CR_${ID}`, parent: menuTree, children: [], depth: 1, model\n })\n })\n })\n }\n\n if (cultures) {\n menuTree.push({\n id: `TCL_${currentCulture.ID}`,\n name: currentCulture.Name,\n value: `TCL_${currentCulture.ID}`,\n icon: `${currentCulture.CountryCode}.svg`,\n parent: null,\n depth: 0,\n children: cultures?.map((model) => {\n const { LanguageCode, CountryCode, Name } = model\n return ({\n id: `CL_${LanguageCode}`,\n icon: `${CountryCode}.svg`,\n name: Name,\n value: `CL_${LanguageCode}`,\n parent: menuTree,\n children: [],\n depth: 1,\n model,\n })\n })\n })\n }\n\n if (categoriesTree) {\n menuTree.push(...convertCategories(categoriesTree, menuTree, 0))\n }\n\n return [{\n id: 'menu',\n value: 'menu',\n children: menuTree\n }]\n}\n","import { Switcher } from '$core-components'\nimport Flag from './Flag'\nimport React, { useEffect, useState } from 'react'\nimport { t } from '$themelocalization'\nimport { useParams } from 'react-router-dom'\nimport { switchCulture } from './utils'\n\nexport const CultureSwitcher = ({currentCulture,cultures }) => {\n const params = useParams()\n const [isVisible, setIsVisible] = useState(true)\n\n useEffect(() => {\n const onResize = () => {\n const cultureSwitcher = document.querySelector('.switcher.culture')\n if (cultureSwitcher && window.getComputedStyle(cultureSwitcher).display === 'none') {\n setIsVisible(false)\n } else {\n setIsVisible(true)\n }\n }\n window.addEventListener('resize',onResize)\n onResize()\n return () => {\n window.removeEventListener('resize',onResize)\n }\n }, [])\n\n const culturesViewModel = cultures?.map(({ ID, CountryCode, Name }) => ({\n id: ID, icon: `${CountryCode}.svg`, name: Name, value: Name\n })) || []\n\n const cultureSelected = (selected) => {\n const selectedCulture = cultures.find(i => i.ID === selected)\n switchCulture(selectedCulture, params)\n }\n\n if (!isVisible) {\n return null\n }\n\n return <Switcher\n className=\"culture\"\n items={culturesViewModel}\n selected={currentCulture && culturesViewModel.find((element) => { return currentCulture.ID === element.id })}\n label={t('Header.Language')}\n onSelected={cultureSelected}\n renderSelection={(selected) => <>\n <Flag name={selected.icon} width=\"29\" height=\"19\" className=\"icon\"/>\n <span className=\"switcher-selected\">{selected.value}</span>\n </>}\n renderItem={(item) => <>\n <Flag name={item.icon} width=\"29\" height=\"19\" className=\"icon\"/>\n <span className=\"name\">{item.value}</span>\n </>}\n />\n}\n","import { Switcher } from '$core-components'\nimport React, {useEffect, useState} from 'react'\nimport { t } from '$themelocalization'\nimport { switchCurrency } from './utils'\n\nexport const CurrencySwitcher = ({ currentCurrency, currencies }) => {\n const [isVisible, setIsVisible] = useState(true)\n\n useEffect(() => {\n const onResize = () => {\n const currencySwitcher = document.querySelector('.switcher.currency')\n if (currencySwitcher && window.getComputedStyle(currencySwitcher).display === 'none') {\n setIsVisible(false)\n } else {\n setIsVisible(true)\n }\n }\n window.addEventListener('resize',onResize)\n onResize()\n return () => {\n window.removeEventListener('resize',onResize)\n }\n }, [])\n\n\n const currenciesViewModel = currencies?.map(({ ID, Symbol, Code }) => ({\n id: ID, sign: Symbol, name: Code, value: Code\n })) || []\n\n const currencySelected = (selected) => {\n const selectedCurrency = currencies.find(i => i.ID === selected)\n switchCurrency(selectedCurrency)\n }\n\n if (!isVisible) {\n return null\n }\n\n return <Switcher\n className=\"currency\"\n items={currenciesViewModel}\n selected={currentCurrency && currenciesViewModel.find((element) => { return currentCurrency.ID === element.id })}\n label={t('Header.Currency')}\n onSelected={currencySelected}\n renderSelection={(selected) => <span className=\"sign\">{selected.value}</span>}\n renderItem={(item) => <>\n <span className=\"sign\">{item.sign}</span>\n <span className=\"name\">{item.value}</span>\n </>}\n />\n}\n\n","import { UStoreProvider } from '@ustore/core'\n\nconst ACTIVITY_CHECK_INTERVAL = 2000\nexport const ActivityStatus = {\n Progress: 1,\n Success: 2,\n Failed: 3,\n PartiallyFailed: 4\n}\n\nexport const ActivityType = {\n OrderItemDuplication: 1,\n KitOrderItemDuplication: 2,\n CartListDuplication: 3,\n OrderItemReordering: 4,\n KitOrderItemReordering: 5,\n OrderReordering: 6\n}\n\nclass ActivityMonitor {\n\n constructor () {\n this._activities = {}\n this._subsdcribers = []\n }\n\n setModel (model) {\n this._model = model\n }\n\n subscribe (callback) {\n this._subsdcribers.push(callback)\n }\n\n unsubscribe (callback) {\n this._subsdcribers = this._subsdcribers.filter(subscriber => subscriber !== callback)\n }\n\n async checkActivities () {\n try {\n const activityIds = Object.entries(this._activities)\n .filter(([activityId, activity]) => activity.activity === undefined || activity.Status !== ActivityStatus.Progress)\n .map(([activityId, activity]) => activityId)\n\n if (activityIds.length === 0) {\n return\n }\n\n const activitiesStatus = await UStoreProvider.api.activities.getActivities(activityIds)\n const activities = Array.isArray(activitiesStatus) ? activitiesStatus : [activitiesStatus]\n activities.forEach(activity => this._activities[activity.ActivityID].activity = activity)\n\n this._subsdcribers.forEach(callback => callback(this._activities))\n if (this._model) {\n this._model.setActivities(this._activities)\n }\n\n if (Object.values(this._activities).some(activity => activity.activity?.Status === ActivityStatus.Progress)) {\n setTimeout(() => this.checkActivities(), ACTIVITY_CHECK_INTERVAL)\n }\n } catch (e) {\n console.error(e)\n setTimeout(() => this.checkActivities(), ACTIVITY_CHECK_INTERVAL)\n }\n }\n\n addActivity (activityId, entityId) {\n this._activities[activityId] = { entityId }\n this.checkActivities()\n }\n\n addActivityList(activities) {\n if (Array.isArray(activities)) {\n activities.forEach(activity => {\n if (!this._activities[activity]) {\n this._activities[activity] = { entityId: null }\n }\n })\n this.checkActivities()\n return\n }\n console.error('addActivityList: activities is not an array')\n\n }\n\n clearActivities () {\n this._activities = {}\n }\n\n}\n\nconst activityMonitor = new ActivityMonitor()\nexport default activityMonitor\n","import { UStoreProvider } from '@ustore/core'\n\nconst GET_FETCH_PROOF_INTERVAL = 300\nconst WAIT_AFTER_PROOF_FAILURE = 1000\n\nconst wait = (ms) => new Promise(resolve => setTimeout(resolve, ms))\n\n//\n// this service is used to prevent multiple proof requests in a short time\n// and to only call the last proof for the file names\n// it also prevents proof requests if there is a proof in progress\n//\nclass ProofService {\n\n constructor () {\n this.current = null\n this.next = null\n this.ready = true\n this.onProof = null\n this.onError = null\n }\n\n timeoutCall = (params) => {\n if (this.ready) {\n if (!this.current) {\n this.current = params\n }\n this.proof()\n } else {\n this.timeoutCall(params)\n }\n }\n\n breakCurrentLoop = () => {\n this.current = this.next\n this.next = null\n this.ready = true\n this.timeoutCall(this.current)\n }\n\n async proof () {\n try {\n if (this.current) {\n this.ready = false\n let result = await UStoreProvider.api.products.createProofPreview(...this.current)\n // if proof is still in progress, wait and check again\n while (result && result.Status === 1) {\n await wait(GET_FETCH_PROOF_INTERVAL)\n result = await UStoreProvider.api.products.getProofPreview(this.current[0], result.PreviewID)\n //if we have another proof request, break the loop and start the new one with the new params\n if (this.next) {\n this.breakCurrentLoop()\n return\n }\n }\n\n // if we have another proof request, process it\n this.current = this.next\n this.next = null\n\n this.ready = true\n if (this.current) {\n this.timeoutCall(this.current)\n return\n }\n //notify the caller that the proof is ready\n this.onProof && this.onProof(result)\n }\n } catch (e) {\n if (e.Message?.toLowerCase() === 'too much requests.') {\n await wait(WAIT_AFTER_PROOF_FAILURE)\n this.current = this.next || this.current\n this.next = null\n this.ready = true\n this.timeoutCall(this.current)\n return\n }\n this.current = null\n this.next = null\n this.ready = true\n this.onError && this.onError(e)\n }\n }\n\n push (params) {\n if (!this.ready) {\n this.next = params\n } else {\n this.timeoutCall(params)\n }\n\n }\n\n}\n\nconst proofService = new ProofService()\nexport default proofService\n","import { UStoreProvider } from '@ustore/core'\n\nconst PROOF_STATUS = {\n PROGRESS: 1,\n SUCCESS: 2,\n FAILED: 3\n}\nconst PROOF_CHECK_INTERVAL = 3000\n\nclass ProofThumbnailUpdater {\n\n constructor () {\n this.cartModel = null\n this.timeout = null\n }\n\n init(cartModel) {\n this.cartModel = cartModel\n const items = this.cartModel\n .items.filter(item => item.proof?.Status === PROOF_STATUS.PROGRESS)\n .map(item => item.orderItemId)\n\n if (items.length) {\n this.timeout = setTimeout(() => {\n this.run(items)\n },PROOF_CHECK_INTERVAL)\n }\n\n }\n\n stop() {\n this.timeout && clearTimeout(this.timeout)\n }\n\n async run(items) {\n const statuses = await UStoreProvider.api.products.checkProofStatus(items)\n statuses.forEach(status => {\n const item = this.cartModel?.items?.find(item => item.orderItemId === status.OrderItemID)\n if (item) {\n item.setProofStatus(status)\n }\n })\n const nextOrderIds = statuses.filter(status => status.Status === PROOF_STATUS.PROGRESS).map(status => status.OrderItemID)\n if (nextOrderIds.length) {\n this.timeout = setTimeout(() => {\n this.run(nextOrderIds)\n },PROOF_CHECK_INTERVAL)\n }\n }\n\n\n\n}\n\nconst proofThumbnailUpdater = new ProofThumbnailUpdater()\nexport default proofThumbnailUpdater\n","import moment from 'moment'\nimport features from '$features'\n\nexport const productTypes =\n{\n DYNAMIC: 1,\n STATIC: 2,\n COMPOSITE: 5,\n KIT: 14\n}\n\nexport const getIsNGProduct = (product) => {\n const { Type, Attributes } = product\n\n switch (Type) {\n case productTypes.KIT:\n return true\n case productTypes.STATIC:\n case productTypes.DYNAMIC:\n const NGCompatible = Attributes.find(attribute => attribute.Name === 'NGCompatible')\n return NGCompatible && NGCompatible.Value.toLowerCase() === 'true'\n default:\n return false\n }\n}\n\nexport const CART_MODE = {\n Aspx: 'Aspx',\n WishList: 'WishList',\n Lists: 'Lists',\n SingleList: 'SingleList',\n}\n\nexport const getCartMode = (store) => {\n const { Attributes, StoreType } = store\n const NGCart = Attributes.find(attribute => attribute.Name === 'ForceCartAspx')\n const CartMode = Attributes.find(attribute => attribute.Name === 'CartMode')\n\n if (NGCart?.Value.toLowerCase() === 'true') {\n return CART_MODE.Aspx\n } else {\n if (StoreType === 4 && CartMode?.Value === CART_MODE.Lists) {\n return CART_MODE.Lists\n } else if (StoreType === 4 && CartMode?.Value === CART_MODE.SingleList) {\n return CART_MODE.SingleList\n } else if (CartMode?.Value === CART_MODE.WishList) {\n return CART_MODE.WishList\n }\n }\n}\n\nexport const isDate = function (date) {\n if (typeof date === 'string') {\n const isTime = /\\d{1,2}:\\d{1,2}(:\\d{1,2})?\\s?([AP]M)?/.exec(date) !== null\n const parsedDate = moment(isTime ? `1/1/1970 ${date}` : date).toDate()\n return parsedDate !== 'Invalid Date'\n }\n\n return false\n}\n\nconst convertDatesForState = (value, modes) => {\n const { showDateTime, showTime } = modes\n const date = moment(new Date()).format('YYYY-MM-DD')\n\n const dateFromProps =\n showDateTime && showTime\n ? value\n : showTime\n ? `${date}T${value}`\n : `${value}T00:00:00`\n\n return moment(dateFromProps).toDate()\n}\n\nexport const convertDate = (str) => {\n if (features && features.newTimezoneModel) {\n // v14_1\n const showTime = str.includes(':')\n const showDate = str.includes('/') || str.includes('-')\n const dateAndTime = showTime && showDate\n\n const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone\n\n const re = /[+-]\\d{1,2}:?\\d{1,2}$/\n const date = re.test(str) ? moment(str).format('DD/MM/YYYY HH:mm') : str\n\n const mDate = moment(date, 'DD/MM/YYYY')\n const mTime = moment(date, ['HH:mm', 'HH:mm:ss'], true)\n const mDateTime = moment(date, ['DD/MM/YYYY HH:mm', 'DD/MM/YYYYTHH:mm:ssZ'], true)\n\n const isDate = !showTime && mDate.isValid()\n const isTime = showTime && mTime.isValid()\n const isAndTime = dateAndTime && mDateTime.isValid()\n\n return {\n date: isDate || isAndTime ? mDate.format('YYYY-MM-DD') : '',\n time: isTime ? mTime.format('HH:mm:ss') : isAndTime ? mDateTime.format('HH:mm:ss') : '',\n timeZone\n }\n } else {\n // v14_0\n const showTime = str.includes(':')\n const showDateTime = str.includes('/') || str.includes('-')\n\n const nodes = { showTime, showDateTime }\n const strConverted = convertDatesForState(str, nodes)\n\n const date = moment(strConverted).format('YYYY-MM-DD')\n const time = moment(strConverted).format('HH:mm')\n\n const clientNow = moment().format('YYYY-MM-DDTHH:mm:ss')\n\n return { date, time, clientNow }\n }\n}\n\nexport const convertProductPropertiesFormIntoArray = (currentProductProperties, excelPricingEnabled) => {\n const { formData = {}, JSONSchema: { definitions }, UISchema } = currentProductProperties\n\n return Object.keys(formData).map(propName => {\n const propertyDefinition = definitions[propName]\n const widget = UISchema[propName]['ui:widget']\n const toAPIValue = window.uStoreDucs.find(duc => duc.name === widget).component['toAPIValue']\n return {\n id: propertyDefinition.custom.id,\n value: toAPIValue ? toAPIValue(formData[propName]) : (formData[propName] || '')\n }\n })\n}\n\nfunction isObject (item) {\n return (item && typeof item === 'object' && !Array.isArray(item))\n}\nexport const mergeDeep = (target, ...sources) => {\n if (!sources.length) return target\n const source = sources.shift()\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) Object.assign(target, { [key]: {} })\n mergeDeep(target[key], source[key])\n } else {\n Object.assign(target, { [key]: source[key] })\n }\n }\n }\n\n return mergeDeep(target, ...sources)\n}\n\nexport const PriceNotUpdatedReason = {\n hiddenError: 'hidden error',\n visibleError: 'visible error',\n noUpdates: 'nothing was updated',\n notAffectPriceProperty: 'updated property does not affect price'\n}\nexport const shouldPriceBeUpdatedDespiteErrors = (hiddenErrors = [], visibleErrors = [], excelPricingEnabled = false) => {\n if (visibleErrors && visibleErrors.length > 0 && !!visibleErrors.find((e) => e.affectPrice)) {\n return { result: false, error: PriceNotUpdatedReason.visibleError }\n }\n\n if (excelPricingEnabled) {\n return { result: true }\n }\n\n let hiddenErrorsAffectPrice = false\n if (hiddenErrors && hiddenErrors.length > 0) {\n hiddenErrorsAffectPrice = !!hiddenErrors.find((e) => e.affectPrice)\n }\n\n return !hiddenErrorsAffectPrice ? { result: true } : { result: false, error: PriceNotUpdatedReason.hiddenError }\n}\n\nlet prevDefs = {}\nexport const shouldPriceBeUpdatedByUpdates = (newProps, prevProps, schema) => {\n const updatedProperties = Object.keys(newProps)\n .filter((propertyName) => newProps[propertyName] !== prevProps[propertyName])\n\n if (updatedProperties.length === 0) {\n return { result: false, error: PriceNotUpdatedReason.noUpdates }\n }\n const { definitions } = schema\n\n let shouldUpdatePrice = false\n const filteredDefs = Object.keys(schema.properties)\n .reduce((acc, next) => ({ ...acc, [next]: schema.definitions[next] }), {})\n\n if (Object.keys(prevDefs).length !== Object.keys(filteredDefs).length) {\n shouldUpdatePrice = true\n }\n prevDefs = filteredDefs\n for (const propertyName of updatedProperties) {\n if (definitions[propertyName].custom.affectPrice) {\n shouldUpdatePrice = true\n break\n }\n }\n\n if (!shouldUpdatePrice) {\n return { result: false, error: PriceNotUpdatedReason.notAffectPriceProperty }\n }\n\n return { result: true }\n}\n\nexport const shouldPriceBeUpdated = (newProps, prevProps, schema, hiddenErrors = [], visibleErrors = [], excelPricingEnabled = false) => {\n const shouldPriceBeUpdatedByUpdatesResult = shouldPriceBeUpdatedByUpdates(newProps, prevProps, schema)\n const shouldPriceBeUpdatedDespiteErrorsResult = shouldPriceBeUpdatedDespiteErrors(hiddenErrors, visibleErrors, excelPricingEnabled)\n\n if (!shouldPriceBeUpdatedByUpdatesResult.result) {\n return shouldPriceBeUpdatedByUpdatesResult\n }\n\n return shouldPriceBeUpdatedDespiteErrorsResult\n}\n\nexport const preparingFormDataToSendToServer = (newData, propertiesSchema) => {\n return Object.keys(newData).reduce((updatedProperties, key) => {\n const definition = propertiesSchema.JSONSchema.definitions[key]\n\n const widget = propertiesSchema.UISchema[key]['ui:widget']\n const toAPIValue = window.uStoreDucs.find(duc => duc.name === widget).component['toAPIValue']\n\n const isJsonString = (newData[key] ? newData[key].toString() : '').startsWith('___JSON___:')\n\n let newValue = !!newData[key] || newData[key] === 0\n ? isJsonString\n ? JSON.parse(newData[key].replace('___JSON___:', ''))\n : toAPIValue ? toAPIValue(newData[key]) : newData[key]\n : ''\n\n updatedProperties.push({\n id: definition.custom.id,\n value: newValue\n })\n\n return updatedProperties\n }, [])\n}\n\nexport const convertTimeByTimeZone = (properties) => {\n return Object.keys(properties.formData).reduce((acc, next) => {\n const isDatePicker = properties.formData[next] && properties.UISchema[next]['ui:widget'] === 'dateTimePicker'\n\n if (isDatePicker) {\n const isTime = moment(properties.formData[next], 'HH:mm:ss', true).isValid()\n const dateTime = isTime ? properties.formData[next] : moment(properties.formData[next]).format()\n return { ...acc, [next]: dateTime }\n }\n return { ...acc, [next]: properties.formData[next] }\n }, {})\n}\n\nexport const cleanServerErrors = (serverErrors, uiSchema) => {\n let errorMessage = ''\n const errorsObject = serverErrors ? Object.keys(serverErrors).reduce((acc, next) => {\n if (!Object.keys(uiSchema[next]).includes('ui:errorMessages')) {\n errorMessage = serverErrors[next][0]\n return { ...acc, [next]: serverErrors[next] }\n }\n return acc\n }, {}) : {}\n return { errorsObject, errorMessage }\n}\n\nexport const convertCustomFormat = (string, price = '', tax = '', priceIncludingTax = '') => {\n let convertedString = string;\n\n if (string.includes('{Price}')) {\n convertedString = convertedString.replace(/{Price}/g, price);\n };\n\n if (string.includes('{Tax}')) {\n convertedString = convertedString.replace(/{Tax}/g, tax)\n };\n\n if (string.includes('{PriceIncludingTax}')) {\n convertedString = convertedString.replace(/{PriceIncludingTax}/g, priceIncludingTax);\n }\n\n return convertedString;\n};\n","import './SignIn.scss'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\nimport { useEffect, useRef } from 'react'\n\nconst SignIn = ({ showTitle = true }) => {\n const signInRef = useRef(null)\n\n useEffect(() => {\n setTimeout(() => signInRef.current?.focus())\n },[])\n\n const goToUrl = () => {\n const { storeID, classicUrl, securityToken, storeFriendlyID, languageCode, userID, showThemeAsDraft } = themeContext.get()\n const showRibbon = UStoreProvider.state.customState.get('showCookieRibbon')\n\n const userIDfromStore = UStoreProvider.state.get().currentUser.ID\n\n const tempUserId = (!userID || (userIDfromStore && userIDfromStore !== userID)) ? userIDfromStore : userID\n\n const isDraft = showThemeAsDraft && showThemeAsDraft.toLowerCase() === 'true'\n\n const pageURL = window.location.href\n\n CookiesManager.deleteCookie(storefrontCookies.token)\n window.location.href = `${classicUrl}/logout.aspx?SecurityToken=${securityToken}&StoreGuid=${storeID}&storeid=${storeFriendlyID}&NgLanguageCode=${languageCode}&forceLogin=true&SignIn=true&ShowRibbon=${showRibbon}${isDraft ? '&showThemeAsDraft=true' : ''}&tempUserId=${tempUserId}&returnNGURL=/${encodeURIComponent(pageURL.slice(pageURL.indexOf(languageCode)))}`\n }\n\n const enterHandler = (e) => {\n if (e.key === \"Enter\") goToUrl();\n }\n\n return (\n <div className=\"signin\">\n <div className=\"signin-info\">\n {showTitle && <div className=\"signin-title\">{t('Profile.My_Account')}</div>}\n </div>\n <div className=\"btn-container d-flex align-items-center\">\n <span role=\"button\" tabIndex=\"0\" onKeyDown={enterHandler} onClick={goToUrl} className='button-secondary signin-button' ref={signInRef}>{t('SignIn.SignIn')}</span>\n </div>\n </div>\n )\n}\nexport default SignIn\n","import './SignOut.scss'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport { t } from '$themelocalization'\nimport { UStoreProvider } from '@ustore/core'\nimport { storefrontCookies, CookiesManager } from '$ustoreinternal/services/cookies'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport {useNavigate} from 'react-router-dom'\nimport { useRef } from 'react'\n\nconst getAttribute = (name) => {\n return UStoreProvider.state.get().currentStore.Attributes.find(attr => attr.Name === name)?.Value\n}\n\n/**\n * This component represents the signout icon in the header\n * When clicking - the store redirects to the login page\n *\n * @param {object} currentUser - the current user connected to the store\n */\nconst SignOut = (props) => {\n const navigate = useNavigate()\n const connectEnterpriseLogoutURL = useRef(false)\n\n if (!props.currentUser) {\n return null\n }\n\n const { currentUser: { FirstName } } = props\n\n const { showThemeAsDraft, securityToken, storeID, classicUrl, languageCode, logoutUrl } = themeContext.get()\n const showRibbon = UStoreProvider.state.customState.get('showCookieRibbon')\n const deleteCookies = () => [storefrontCookies.token, storefrontCookies.storeID, storefrontCookies.language].forEach(cn => CookiesManager.deleteCookie(cn))\n const onLogoutClicked = () => {\n if (connectEnterpriseLogoutURL.current) {\n const connectEnterpriseLogoutURL = urlGenerator.get({page:'connect-logged-out'}) + `?message=${t('SignOut.LoggedOut')}`;\n deleteCookies()\n navigate(connectEnterpriseLogoutURL)\n } else {\n deleteCookies()\n }\n }\n\n const isDraft = showThemeAsDraft && showThemeAsDraft.toLowerCase() === 'true'\n\n const storeType = UStoreProvider && UStoreProvider.state && UStoreProvider.state.get().currentStore && UStoreProvider.state.get().currentStore.StoreType\n\n let sLogoutUrl = `${classicUrl}/logout.aspx?SecurityToken=${securityToken}&StoreGuid=${storeID}&NgLanguageCode=${languageCode}&ShowRibbon=${showRibbon}&forceLogin=true${isDraft ? '&showThemeAsDraft=true' : ''}`\n\n // uStore Connect\n if (storeType === 3 && logoutUrl) {\n sLogoutUrl = decodeURIComponent(logoutUrl)\n // uStore Connect Enterprise\n } else if (getAttribute('HomepageToCart') === 'True') {\n // eslint-disable-next-line\n sLogoutUrl = getAttribute('LogoutUrl') ? decodeURIComponent(getAttribute('LogoutUrl')) : 'javascript:void(0)'\n connectEnterpriseLogoutURL.current = true\n }\n\n return (\n <div className=\"signout\">\n <div className=\"info\">\n <div className=\"title\">{t('Profile.My_Account')}</div>\n <div className=\"greeting truncate\">{t('SignOut.Hello_Message', { FirstName })}</div>\n </div>\n <div className=\"btn-container d-flex align-items-center\">\n <a onClick={onLogoutClicked} href={sLogoutUrl} className=\"button-secondary signout-button\">{t('SignOut.SignOut')}</a>\n </div>\n </div>\n )\n}\nexport default SignOut\n","import React, { useEffect, useRef, useState } from 'react'\nimport { useNavigate } from 'react-router-dom'\nimport { Button, Label, ListBox, ListBoxItem, Popover, Select } from 'react-aria-components'\nimport { Icon } from '$core-components'\nimport { useClickOutside } from '$themehooks'\nimport { t } from '$themelocalization'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { redirectToLegacy } from '$ustoreinternal/services/redirect'\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport { CART_MODE, getCartMode } from '$themeservices'\nimport { UStoreProvider } from '@ustore/core'\nimport SignIn from '../SignIn'\nimport SignOut from '../SignOut'\nimport { Slot } from '$core-components'\nimport './ProfileSwitcher.scss'\n\nexport const ProfileSwitcher = ({ currentUser, userOrdersSummary }) => {\n const navigate = useNavigate()\n const [isOpen, setIsOpen] = useState(false)\n const containerRef = useRef(null)\n\n useClickOutside(containerRef, () => setIsOpen(false))\n\n useEffect(() => {\n if (isOpen) {\n containerRef.current.style.position = 'fixed'\n document.documentElement.style.overflow = ''\n document.documentElement.style.paddingRight = ''\n }\n }, [isOpen])\n\n const pendingApprovalOrderCount = (userOrdersSummary) ? userOrdersSummary.PendingApprovalOrderCount : null\n const items = getItemList({ userOrdersSummary, currentUser, pendingApprovalOrderCount })\n\n const onSelectionChange = (key) => {\n const { IsAnonymous, loginPage, pageTitle, additional } = items.find(item => item.id === key)\n if (IsAnonymous) {\n CookiesManager.deleteCookie(storefrontCookies.token)\n redirectToLegacy(createLink(IsAnonymous, loginPage, pageTitle, additional))\n return\n }\n navigate(createLink(IsAnonymous, loginPage, pageTitle, additional))\n }\n\n return (\n <Select className=\"profile-switcher\" onSelectionChange={onSelectionChange} isOpen={isOpen} onOpenChange={setIsOpen}\n onBlur={(e) => e.target.parentNode.parentNode.querySelector('.button-secondary')?.focus()}>\n <Label>{t('ProfileDropDownMenuLabel')}</Label>\n <Button>\n <Icon name=\"user.svg\" width=\"20px\" height=\"20px\" className=\"profile-icon\"/>\n {\n pendingApprovalOrderCount > 0 &&\n <div className=\"pending-approval-notification-icon\">\n <Icon name=\"profile-notification.svg\" width=\"20px\" height=\"20px\" className=\"profile-icon\"/>\n </div>\n }\n </Button>\n <Popover className=\"profile-switcher-popup\" shouldCloseOnInteractOutside={() => false} ref={containerRef}>\n {\n currentUser.IsAnonymous\n ? <SignIn/>\n : <SignOut currentUser={currentUser}/>\n }\n <Slot name=\"user_menu_top\" />\n <ListBox selectionMode=\"single\" items={items}>\n {(item) => <ListBoxItem key={item.id} value={item.value}>\n {item.pageName}\n </ListBoxItem>}\n </ListBox>\n <Slot name=\"user_menu_bottom\" />\n </Popover>\n </Select>\n )\n}\n\nfunction createLink (anonymous, loginURL, pageTitle, additional) {\n const { languageCode } = themeContext.get()\n const pageURL = urlGenerator.get({ page: pageTitle })\n\n if (anonymous) {\n return `${loginURL}&returnNGURL=/${encodeURIComponent(pageURL.slice(pageURL.indexOf(languageCode)))}${additional ? '?' + additional : ''}`\n }\n\n return `${pageURL}${additional ? '?' + additional : ''}`\n}\n\nfunction getItemList ({ userOrdersSummary, currentUser, pendingApprovalOrderCount }) {\n const { userID, storeID, securityToken, storeFriendlyID, languageCode } = themeContext.get()\n const { currentStore } = UStoreProvider.state.get()\n const tempUserId = userID && currentUser.ID === userID ? userID : currentUser.ID\n const isSingleList = getCartMode(currentStore) === CART_MODE.SingleList\n const rejectedOrderCount = userOrdersSummary?.RejectedOrderCount || 0\n const loginPage = `/logout.aspx?tempUserId=${tempUserId}&SecurityToken=${securityToken}&StoreGuid=${storeID}&storeid=${storeFriendlyID}&NgLanguageCode=${languageCode}&forceLogin=true&ShowRibbon=false&SignIn=true`\n const isUStoreConnectEnterprise = currentStore.Attributes.find(attr => attr.Name === 'HomepageToCart')?.Value === 'True'\n\n const baseItem = {\n IsAnonymous: currentUser.IsAnonymous,\n loginPage\n }\n\n return [\n !isSingleList && {\n id: 'my-orders',\n pageName: t('Profile.My_orders'),\n pageTitle: 'order-history',\n additional: 'filter=0',\n ...baseItem,\n },\r\n {\r\n id: 'advanced-order-report',\r\n pageName: t('xmpieAdvancedOrderReport'),\r\n pageTitle: 'advanced-order-report',\r\n ...baseItem,\r\n },\n userOrdersSummary && currentUser.Roles.Shopper && {\n id: 'rejected-orders',\n pageName: t('Profile.Rejected_orders', { rejectedOrderCount }),\n pageTitle: 'order-history',\n additional: 'filter=2',\n ...baseItem,\n },\n userOrdersSummary && currentUser.Roles.Approver && {\n id: 'orders-to-approve',\n pageName: t('Profile.Orders_to_approve', { pendingApprovalOrderCount }),\n pageTitle: 'order-approval-list',\n ...baseItem,\n },\n {\n id: 'draft-orders',\n pageName: t('Profile.Draft_orders'),\n pageTitle: 'drafts',\n ...baseItem,\n },\n {\n id: 'recipient-list',\n pageName: t('Profile.Recipient_lists'),\n pageTitle: 'my-recipient-lists',\n ...baseItem,\n },\n !isUStoreConnectEnterprise && {\n id: 'addresses',\n pageName: t('Profile.Addresses'),\n pageTitle: 'addresses',\n ...baseItem,\n },\n !isUStoreConnectEnterprise && {\n id: 'personal-information',\n pageName: t('Profile.Personal_information'),\n pageTitle: 'personal-information',\n ...baseItem,\n }\n ].filter(Boolean).map(item => ({ ...item, value: item.id }))\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React, { useEffect, useRef, useState } from 'react'\nimport { useNavigate, useParams } from 'react-router-dom'\nimport { ListBox, ListBoxItem, Select } from 'react-aria-components'\nimport { useButton } from 'react-aria'\nimport { Icon } from '$core-components'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { t } from '$themelocalization'\nimport Flag from './Flag'\nimport { switchCurrency, switchCulture } from './utils'\n\nimport './MobileMenuSwitcher.scss'\n\nexport const MobileMenuSwitcher = ({ items, onClose, onTopLevelSelected }) => {\n const [currentItems, setCurrentItems] = useState(items)\n const [selected, setSelected] = useState(null)\n const [isListChanged, setIsListChanged] = useState(false)\n const selectorListRef = useRef()\n const navigate = useNavigate()\n const params = useParams()\n\n useEffect(() => {\n setCurrentItems(items)\n }, [items])\n\n useEffect(() => {\n if (currentItems) {\n setIsListChanged(true)\n }\n }, [currentItems])\n\n useEffect(() => {\n if (isListChanged) {\n document.querySelector('.mobile-menu-switcher [role=\"option\"]')?.focus()\n setIsListChanged(false)\n }\n }, [isListChanged])\n\n const onPress = (e) => {\n if (e.key === 'Escape') {\n if (e.target.getAttribute('role') === 'listbox') {\n onClose && onClose()\n return\n }\n onBack(e.target.getAttribute('data-key'))\n }\n }\n\n const onSelectionChanged = (key) => {\n const selectedItem = currentItems.find(i => i.value === key)\n if (selectedItem?.children.length) {\n onTopLevelSelected && onTopLevelSelected(false)\n setSelected(selectedItem)\n if (selectedItem?.hasProducts){\n const featuredProducts = {\n id: `FP_${selectedItem.id.slice(4)}`,\n value: `FP_${selectedItem.id.slice(4)}`,\n name: t('General.FeaturedProducts'),\n children: []\n }\n setCurrentItems([featuredProducts, ...selectedItem.children])\n } else {\n setCurrentItems(selectedItem.children)\n }\n return\n }\n\n if (selectedItem?.value.startsWith('TCT') || selectedItem?.value.startsWith('CT') || selectedItem?.value.startsWith('FP')) {\n setSelected(null)\n setCurrentItems(items)\n onTopLevelSelected && onTopLevelSelected(true)\n onClose && onClose()\n navigate(urlGenerator.get({ page: 'category', id: selectedItem.value.slice(selectedItem?.value.startsWith('TCT') ? 4 : 3) }))\n return\n }\n\n if (selectedItem?.value.startsWith('CL')) {\n switchCulture(selectedItem.model, params)\n return\n }\n\n if (selectedItem?.value.startsWith('CR')) {\n switchCurrency(selectedItem.model)\n setSelected(null)\n setCurrentItems(items)\n onClose && onClose()\n onTopLevelSelected && onTopLevelSelected(true)\n }\n }\n\n const onBack = (currentSelected) => {\n if (/^TC[TRL]_/.test(currentSelected)) {\n onClose && onClose()\n }\n const current = currentItems.find(i => i.value === currentSelected)\n if (current?.parent?.value?.startsWith('C')) {\n setCurrentItems(current?.parent?.children)\n setSelected(current?.parent)\n return\n }\n onTopLevelSelected && onTopLevelSelected(true)\n setCurrentItems(items)\n setSelected(null)\n }\n\n if (!items) {\n return <div/>\n }\n\n return (\n <Select className=\"mobile-menu-switcher\" onSelectionChange={onSelectionChanged} isOpen={true}>\n <div className=\"mobile-menu-switcher-list\" ref={selectorListRef} onKeyUp={onPress}>\n {selected && <BackButton onPress={() => onBack()} label={selected.name}/>}\n <ListBox items={currentItems} selectionMode=\"single\">\n {(item) => {\n return <ListBoxItem key={item.id} value={item.value}\n className={({ isFocused, isSelected }) => isFocused || isSelected ? 'selected' : ''}>\n <CategoryItem item={item}/>\n <CurrencyItem item={item}/>\n <CultureItem item={item}/>\n </ListBoxItem>\n }}\n </ListBox>\n </div>\n </Select>\n )\n}\n\nfunction BackButton (props) {\n const ref = useRef()\n const { buttonProps } = useButton(props, ref)\n\n return (\n <button {...{ ...buttonProps, className: 'mobile-menu-switcher-back' }} ref={ref}>\n <Icon name=\"back.svg\" height=\"19px\" width=\"9px\"/>\n <div className=\"mobile-submenu-title\">{props.label}</div>\n </button>\n )\n}\n\nfunction CategoryItem ({ item }) {\n return /^T?CT|FP/.test(item.id) && <div>{item.name}</div>\n}\n\nfunction CurrencyItem ({ item }) {\n return /^T?CR/.test(item.id) && <div>\n {item.depth > 0 && <span className=\"currency-sign\">{item.sign}</span>}\n <span className=\"currency-name\">{item.name}</span>\n {item.depth === 0 && <span>{t('Header.Currency')}</span>}\n </div>\n}\n\nfunction CultureItem ({ item }) {\n return /^T?CL/.test(item.id) && <div>\n <Flag name={item.icon} width=\"29\" height=\"19\" className=\"icon\"/>\n <span className=\"culture-name\">{item.name}</span>\n </div>\n}\n","import { useEffect, useState } from 'react'\nimport { Link } from 'react-aria-components'\nimport { UStoreProvider } from '@ustore/core'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { getCartMode, CART_MODE } from '$themeservices'\nimport { Icon } from '$core-components'\n\nimport './Cart.scss'\n\nconst Cart = ({ connectCartUrl = '' }) => {\n const storeItemsCount = UStoreProvider.state.get().cartItemsCount?.ItemsCount\n const [cartItemsCount, setCartItemsCount] = useState(storeItemsCount)\n const isCartLists = getCartMode(UStoreProvider.state.get().currentStore) === CART_MODE.Lists\n\n useEffect(() => {\n setCartItemsCount(UStoreProvider.state.get().cartItemsCount?.ItemsCount)\n }, [storeItemsCount])\n\n const getBadge = () => {\n if (isCartLists && cartItemsCount) {\n return <div className=\"cart-badge\"/>\n }\n if (cartItemsCount) {\n return <div className=\"cart-badge\">{cartItemsCount >= 100 ? '∞' : cartItemsCount}</div>\n }\n return null\n }\n\n const cartUrl = connectCartUrl ? decodeURIComponent(connectCartUrl) : urlGenerator.get({ page: 'cart' })\n\n return (\n <div className=\"cart\">\n <Link href={cartUrl} className=\"cart-icon-container\">\n <Icon name=\"cart.svg\" width=\"23px\" height=\"21px\" className=\"cart-icon\"/>\n {getBadge()}\n </Link>\n </div>\n )\n}\n\nexport default Cart\n","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","export default {\n disabled: false\n};","import React from 'react';\nexport default React.createContext(null);","export var forceReflow = function forceReflow(node) {\n return node.scrollTop;\n};","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport config from './config';\nimport { timeoutsShape } from './utils/PropTypes';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { forceReflow } from './utils/reflow';\nexport var UNMOUNTED = 'unmounted';\nexport var EXITED = 'exited';\nexport var ENTERING = 'entering';\nexport var ENTERED = 'entered';\nexport var EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: `opacity ${duration}ms ease-in-out`,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 1 },\n * entered: { opacity: 1 },\n * exiting: { opacity: 0 },\n * exited: { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * <Transition in={inProp} timeout={duration}>\n * {state => (\n * <div style={{\n * ...defaultStyle,\n * ...transitionStyles[state]\n * }}>\n * I'm a fade Transition!\n * </div>\n * )}\n * </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n * - `'entering'`\n * - `'entered'`\n * - `'exiting'`\n * - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n * <div>\n * <Transition in={inProp} timeout={500}>\n * {state => (\n * // ...\n * )}\n * </Transition>\n * <button onClick={() => setInProp(true)}>\n * Click to Enter\n * </button>\n * </div>\n * );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Transition, _React$Component);\n\n function Transition(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n var initialStatus;\n _this.appearStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.appearStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = {\n status: initialStatus\n };\n _this.nextCallback = null;\n return _this;\n }\n\n Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var nextIn = _ref.in;\n\n if (nextIn && prevState.status === UNMOUNTED) {\n return {\n status: EXITED\n };\n }\n\n return null;\n } // getSnapshotBeforeUpdate(prevProps) {\n // let nextStatus = null\n // if (prevProps !== this.props) {\n // const { status } = this.state\n // if (this.props.in) {\n // if (status !== ENTERING && status !== ENTERED) {\n // nextStatus = ENTERING\n // }\n // } else {\n // if (status === ENTERING || status === ENTERED) {\n // nextStatus = EXITING\n // }\n // }\n // }\n // return { nextStatus }\n // }\n ;\n\n var _proto = Transition.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.updateStatus(true, this.appearStatus);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var nextStatus = null;\n\n if (prevProps !== this.props) {\n var status = this.state.status;\n\n if (this.props.in) {\n if (status !== ENTERING && status !== ENTERED) {\n nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n nextStatus = EXITING;\n }\n }\n }\n\n this.updateStatus(false, nextStatus);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n _proto.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n var exit, enter, appear;\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter; // TODO: remove fallback for next major\n\n appear = timeout.appear !== undefined ? timeout.appear : enter;\n }\n\n return {\n exit: exit,\n enter: enter,\n appear: appear\n };\n };\n\n _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n if (mounting === void 0) {\n mounting = false;\n }\n\n if (nextStatus !== null) {\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n if (nextStatus === ENTERING) {\n if (this.props.unmountOnExit || this.props.mountOnEnter) {\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749\n // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.\n // To make the animation happen, we have to separate each rendering and avoid being processed as batched.\n\n if (node) forceReflow(node);\n }\n\n this.performEnter(mounting);\n } else {\n this.performExit();\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({\n status: UNMOUNTED\n });\n }\n };\n\n _proto.performEnter = function performEnter(mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context ? this.context.isMounting : mounting;\n\n var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],\n maybeNode = _ref2[0],\n maybeAppearing = _ref2[1];\n\n var timeouts = this.getTimeouts();\n var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter || config.disabled) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode);\n });\n return;\n }\n\n this.props.onEnter(maybeNode, maybeAppearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(maybeNode, maybeAppearing);\n\n _this2.onTransitionEnd(enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode, maybeAppearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit() {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts();\n var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED\n\n if (!exit || config.disabled) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n return;\n }\n\n this.props.onExit(maybeNode);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(maybeNode);\n\n _this3.onTransitionEnd(timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n });\n });\n };\n\n _proto.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, callback);\n };\n\n _proto.setNextCallback = function setNextCallback(callback) {\n var _this4 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this4.nextCallback = null;\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n this.setNextCallback(handler);\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);\n var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n\n if (this.props.addEndListener) {\n var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n maybeNode = _ref3[0],\n maybeNextCallback = _ref3[1];\n\n this.props.addEndListener(maybeNode, maybeNextCallback);\n }\n\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n };\n\n _proto.render = function render() {\n var status = this.state.status;\n\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _this$props = this.props,\n children = _this$props.children,\n _in = _this$props.in,\n _mountOnEnter = _this$props.mountOnEnter,\n _unmountOnExit = _this$props.unmountOnExit,\n _appear = _this$props.appear,\n _enter = _this$props.enter,\n _exit = _this$props.exit,\n _timeout = _this$props.timeout,\n _addEndListener = _this$props.addEndListener,\n _onEnter = _this$props.onEnter,\n _onEntering = _this$props.onEntering,\n _onEntered = _this$props.onEntered,\n _onExit = _this$props.onExit,\n _onExiting = _this$props.onExiting,\n _onExited = _this$props.onExited,\n _nodeRef = _this$props.nodeRef,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n return (\n /*#__PURE__*/\n // allows for nested Transitions\n React.createElement(TransitionGroupContext.Provider, {\n value: null\n }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))\n );\n };\n\n return Transition;\n}(React.Component);\n\nTransition.contextType = TransitionGroupContext;\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A React reference to DOM element that need to transition:\n * https://stackoverflow.com/a/51127130/4671932\n *\n * - When `nodeRef` prop is used, `node` is not passed to callback functions\n * (e.g. `onEnter`) because user already has direct access to the node.\n * - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n * `nodeRef` need to be provided to `Transition` with changed `key` prop\n * (see\n * [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n */\n nodeRef: PropTypes.shape({\n current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {\n var value = propValue[key];\n return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);\n }\n }),\n\n /**\n * A `function` child can be used instead of a React element. This function is\n * called with the current transition status (`'entering'`, `'entered'`,\n * `'exiting'`, `'exited'`), which can be used to apply context\n * specific props to a component.\n *\n * ```jsx\n * <Transition in={this.state.in} timeout={150}>\n * {state => (\n * <MyComponent className={`fade fade-${state}`} />\n * )}\n * </Transition>\n * ```\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `'exited'` state.\n * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * By default the child component does not perform the enter transition when\n * it first mounts, regardless of the value of `in`. If you want this\n * behavior, set both `appear` and `in` to `true`.\n *\n * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n * > only adds an additional enter transition. However, in the\n * > `<CSSTransition>` component that first enter transition does result in\n * > additional `.appear-*` classes, that way you can choose to style it\n * > differently.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless `addEndListener` is provided.\n *\n * You may specify a single timeout for all transitions:\n *\n * ```jsx\n * timeout={500}\n * ```\n *\n * or individually:\n *\n * ```jsx\n * timeout={{\n * appear: 500,\n * enter: 300,\n * exit: 500,\n * }}\n * ```\n *\n * - `appear` defaults to the value of `enter`\n * - `enter` defaults to `0`\n * - `exit` defaults to `0`\n *\n * @type {number | { enter?: number, exit?: number, appear?: number }}\n */\n timeout: function timeout(props) {\n var pt = timeoutsShape;\n if (!props.addEndListener) pt = pt.isRequired;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return pt.apply(void 0, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a `done` callback. Allows for more fine grained transition end\n * logic. Timeouts are still used as a fallback if provided.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * ```jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * ```\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func\n} : {}; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\nexport default Transition;","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}","var _excluded = [\"tag\", \"baseClass\", \"baseClassActive\", \"className\", \"cssModule\", \"children\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nimport React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Transition } from 'react-transition-group';\nimport { mapToCssModules, omit, pick, TransitionPropTypeKeys, TransitionTimeouts, tagPropType } from './utils';\nvar propTypes = _objectSpread(_objectSpread({}, Transition.propTypes), {}, {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n tag: tagPropType,\n baseClass: PropTypes.string,\n baseClassActive: PropTypes.string,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func])\n});\nvar defaultProps = _objectSpread(_objectSpread({}, Transition.defaultProps), {}, {\n timeout: TransitionTimeouts.Fade,\n appear: true,\n enter: true,\n exit: true,\n \"in\": true\n});\nfunction Fade(props) {\n var ref = useRef(null);\n var _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n _props$baseClass = props.baseClass,\n baseClass = _props$baseClass === void 0 ? 'fade' : _props$baseClass,\n _props$baseClassActiv = props.baseClassActive,\n baseClassActive = _props$baseClassActiv === void 0 ? 'show' : _props$baseClassActiv,\n className = props.className,\n cssModule = props.cssModule,\n children = props.children,\n _props$innerRef = props.innerRef,\n innerRef = _props$innerRef === void 0 ? ref : _props$innerRef,\n otherProps = _objectWithoutProperties(props, _excluded);\n var transitionProps = pick(_objectSpread({\n defaultProps: defaultProps\n }, otherProps), TransitionPropTypeKeys);\n var childProps = omit(otherProps, TransitionPropTypeKeys);\n return /*#__PURE__*/React.createElement(Transition, _extends({\n nodeRef: innerRef\n }, transitionProps), function (status) {\n var isActive = status === 'entered';\n var classes = mapToCssModules(classNames(className, baseClass, isActive && baseClassActive), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({\n className: classes\n }, childProps, {\n ref: innerRef\n }), children);\n });\n}\nFade.propTypes = propTypes;\nFade.defaultProps = defaultProps;\nexport default Fade;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"cssModule\", \"children\", \"isOpen\", \"flip\", \"target\", \"offset\", \"fallbackPlacements\", \"placementPrefix\", \"arrowClassName\", \"hideArrow\", \"popperClassName\", \"tag\", \"container\", \"modifiers\", \"strategy\", \"boundariesElement\", \"onClosed\", \"fade\", \"transition\", \"placement\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport { Popper as ReactPopper } from 'react-popper';\nimport { getTarget, targetPropType, mapToCssModules, DOMElement, tagPropType } from './utils';\nimport Fade from './Fade';\nfunction noop() {}\nvar propTypes = {\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]).isRequired,\n popperClassName: PropTypes.string,\n placement: PropTypes.string,\n placementPrefix: PropTypes.string,\n arrowClassName: PropTypes.string,\n hideArrow: PropTypes.bool,\n tag: tagPropType,\n isOpen: PropTypes.bool,\n cssModule: PropTypes.object,\n offset: PropTypes.arrayOf(PropTypes.number),\n fallbackPlacements: PropTypes.array,\n flip: PropTypes.bool,\n container: targetPropType,\n target: targetPropType.isRequired,\n modifiers: PropTypes.array,\n strategy: PropTypes.string,\n boundariesElement: PropTypes.oneOfType([PropTypes.string, DOMElement]),\n onClosed: PropTypes.func,\n fade: PropTypes.bool,\n transition: PropTypes.shape(Fade.propTypes)\n};\nvar defaultProps = {\n boundariesElement: 'scrollParent',\n placement: 'auto',\n hideArrow: false,\n isOpen: false,\n offset: [0, 0],\n flip: true,\n container: 'body',\n modifiers: [],\n onClosed: noop,\n fade: true,\n transition: _objectSpread({}, Fade.defaultProps)\n};\nvar PopperContent = /*#__PURE__*/function (_React$Component) {\n _inherits(PopperContent, _React$Component);\n var _super = _createSuper(PopperContent);\n function PopperContent(props) {\n var _this;\n _classCallCheck(this, PopperContent);\n _this = _super.call(this, props);\n _this.setTargetNode = _this.setTargetNode.bind(_assertThisInitialized(_this));\n _this.getTargetNode = _this.getTargetNode.bind(_assertThisInitialized(_this));\n _this.getRef = _this.getRef.bind(_assertThisInitialized(_this));\n _this.onClosed = _this.onClosed.bind(_assertThisInitialized(_this));\n _this.state = {\n isOpen: props.isOpen\n };\n return _this;\n }\n _createClass(PopperContent, [{\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n if (this._element && this._element.childNodes && this._element.childNodes[0] && this._element.childNodes[0].focus) {\n this._element.childNodes[0].focus();\n }\n }\n }, {\n key: \"onClosed\",\n value: function onClosed() {\n this.props.onClosed();\n this.setState({\n isOpen: false\n });\n }\n }, {\n key: \"getTargetNode\",\n value: function getTargetNode() {\n return this.targetNode;\n }\n }, {\n key: \"getContainerNode\",\n value: function getContainerNode() {\n return getTarget(this.props.container);\n }\n }, {\n key: \"getRef\",\n value: function getRef(ref) {\n this._element = ref;\n }\n }, {\n key: \"setTargetNode\",\n value: function setTargetNode(node) {\n this.targetNode = typeof node === 'string' ? getTarget(node) : node;\n }\n }, {\n key: \"renderChildren\",\n value: function renderChildren() {\n var _this$props = this.props,\n cssModule = _this$props.cssModule,\n children = _this$props.children,\n isOpen = _this$props.isOpen,\n flip = _this$props.flip,\n target = _this$props.target,\n offset = _this$props.offset,\n fallbackPlacements = _this$props.fallbackPlacements,\n placementPrefix = _this$props.placementPrefix,\n _arrowClassName = _this$props.arrowClassName,\n hideArrow = _this$props.hideArrow,\n _popperClassName = _this$props.popperClassName,\n tag = _this$props.tag,\n container = _this$props.container,\n modifiers = _this$props.modifiers,\n strategy = _this$props.strategy,\n boundariesElement = _this$props.boundariesElement,\n onClosed = _this$props.onClosed,\n fade = _this$props.fade,\n transition = _this$props.transition,\n placement = _this$props.placement,\n attrs = _objectWithoutProperties(_this$props, _excluded);\n var arrowClassName = mapToCssModules(classNames('arrow', _arrowClassName), cssModule);\n var popperClassName = mapToCssModules(classNames(_popperClassName, placementPrefix ? \"\".concat(placementPrefix, \"-auto\") : ''), this.props.cssModule);\n var modifierNames = modifiers.map(function (m) {\n return m.name;\n });\n var baseModifiers = [{\n name: 'offset',\n options: {\n offset: offset\n }\n }, {\n name: 'flip',\n enabled: flip,\n options: {\n fallbackPlacements: fallbackPlacements\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: boundariesElement\n }\n }].filter(function (m) {\n return !modifierNames.includes(m.name);\n });\n var extendedModifiers = [].concat(_toConsumableArray(baseModifiers), _toConsumableArray(modifiers));\n var popperTransition = _objectSpread(_objectSpread(_objectSpread({}, Fade.defaultProps), transition), {}, {\n baseClass: fade ? transition.baseClass : '',\n timeout: fade ? transition.timeout : 0\n });\n return /*#__PURE__*/React.createElement(Fade, _extends({}, popperTransition, attrs, {\n \"in\": isOpen,\n onExited: this.onClosed,\n tag: tag\n }), /*#__PURE__*/React.createElement(ReactPopper, {\n referenceElement: this.targetNode,\n modifiers: extendedModifiers,\n placement: placement,\n strategy: strategy\n }, function (_ref) {\n var ref = _ref.ref,\n style = _ref.style,\n popperPlacement = _ref.placement,\n isReferenceHidden = _ref.isReferenceHidden,\n arrowProps = _ref.arrowProps,\n update = _ref.update;\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: ref,\n style: style,\n className: popperClassName,\n \"data-popper-placement\": popperPlacement,\n \"data-popper-reference-hidden\": isReferenceHidden ? 'true' : undefined\n }, typeof children === 'function' ? children({\n update: update\n }) : children, !hideArrow && /*#__PURE__*/React.createElement(\"span\", {\n ref: arrowProps.ref,\n className: arrowClassName,\n style: arrowProps.style\n }));\n }));\n }\n }, {\n key: \"render\",\n value: function render() {\n this.setTargetNode(this.props.target);\n if (this.state.isOpen) {\n return this.props.container === 'inline' ? this.renderChildren() : /*#__PURE__*/ReactDOM.createPortal( /*#__PURE__*/React.createElement(\"div\", {\n ref: this.getRef\n }, this.renderChildren()), this.getContainerNode());\n }\n return null;\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(props, state) {\n if (props.isOpen && !state.isOpen) {\n return {\n isOpen: props.isOpen\n };\n }\n return null;\n }\n }]);\n return PopperContent;\n}(React.Component);\nPopperContent.propTypes = propTypes;\nPopperContent.defaultProps = defaultProps;\nexport default PopperContent;","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport PopperContent from './PopperContent';\nimport { getTarget, targetPropType, omit, PopperPlacements, mapToCssModules, DOMElement } from './utils';\nexport var propTypes = {\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n placement: PropTypes.oneOf(PopperPlacements),\n target: targetPropType.isRequired,\n container: targetPropType,\n isOpen: PropTypes.bool,\n disabled: PropTypes.bool,\n hideArrow: PropTypes.bool,\n boundariesElement: PropTypes.oneOfType([PropTypes.string, DOMElement]),\n className: PropTypes.string,\n innerClassName: PropTypes.string,\n arrowClassName: PropTypes.string,\n popperClassName: PropTypes.string,\n cssModule: PropTypes.object,\n toggle: PropTypes.func,\n autohide: PropTypes.bool,\n placementPrefix: PropTypes.string,\n delay: PropTypes.oneOfType([PropTypes.shape({\n show: PropTypes.number,\n hide: PropTypes.number\n }), PropTypes.number]),\n modifiers: PropTypes.array,\n strategy: PropTypes.string,\n offset: PropTypes.arrayOf(PropTypes.number),\n innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.object]),\n trigger: PropTypes.string,\n fade: PropTypes.bool,\n flip: PropTypes.bool\n};\nvar DEFAULT_DELAYS = {\n show: 0,\n hide: 50\n};\nvar defaultProps = {\n isOpen: false,\n hideArrow: false,\n autohide: false,\n delay: DEFAULT_DELAYS,\n toggle: function toggle() {},\n trigger: 'click',\n fade: true\n};\nfunction isInDOMSubtree(element, subtreeRoot) {\n return subtreeRoot && (element === subtreeRoot || subtreeRoot.contains(element));\n}\nfunction isInDOMSubtrees(element) {\n var subtreeRoots = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return subtreeRoots && subtreeRoots.length && subtreeRoots.filter(function (subTreeRoot) {\n return isInDOMSubtree(element, subTreeRoot);\n })[0];\n}\nvar TooltipPopoverWrapper = /*#__PURE__*/function (_React$Component) {\n _inherits(TooltipPopoverWrapper, _React$Component);\n var _super = _createSuper(TooltipPopoverWrapper);\n function TooltipPopoverWrapper(props) {\n var _this;\n _classCallCheck(this, TooltipPopoverWrapper);\n _this = _super.call(this, props);\n _this._targets = [];\n _this.currentTargetElement = null;\n _this.addTargetEvents = _this.addTargetEvents.bind(_assertThisInitialized(_this));\n _this.handleDocumentClick = _this.handleDocumentClick.bind(_assertThisInitialized(_this));\n _this.removeTargetEvents = _this.removeTargetEvents.bind(_assertThisInitialized(_this));\n _this.toggle = _this.toggle.bind(_assertThisInitialized(_this));\n _this.showWithDelay = _this.showWithDelay.bind(_assertThisInitialized(_this));\n _this.hideWithDelay = _this.hideWithDelay.bind(_assertThisInitialized(_this));\n _this.onMouseOverTooltipContent = _this.onMouseOverTooltipContent.bind(_assertThisInitialized(_this));\n _this.onMouseLeaveTooltipContent = _this.onMouseLeaveTooltipContent.bind(_assertThisInitialized(_this));\n _this.show = _this.show.bind(_assertThisInitialized(_this));\n _this.hide = _this.hide.bind(_assertThisInitialized(_this));\n _this.onEscKeyDown = _this.onEscKeyDown.bind(_assertThisInitialized(_this));\n _this.getRef = _this.getRef.bind(_assertThisInitialized(_this));\n _this.state = {\n isOpen: props.isOpen\n };\n _this._isMounted = false;\n return _this;\n }\n _createClass(TooltipPopoverWrapper, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this._isMounted = true;\n this.updateTarget();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this._isMounted = false;\n this.removeTargetEvents();\n this._targets = null;\n this.clearShowTimeout();\n this.clearHideTimeout();\n }\n }, {\n key: \"handleDocumentClick\",\n value: function handleDocumentClick(e) {\n var triggers = this.props.trigger.split(' ');\n if (triggers.indexOf('legacy') > -1 && (this.props.isOpen || isInDOMSubtrees(e.target, this._targets))) {\n if (this._hideTimeout) {\n this.clearHideTimeout();\n }\n if (this.props.isOpen && !isInDOMSubtree(e.target, this._popover)) {\n this.hideWithDelay(e);\n } else if (!this.props.isOpen) {\n this.showWithDelay(e);\n }\n } else if (triggers.indexOf('click') > -1 && isInDOMSubtrees(e.target, this._targets)) {\n if (this._hideTimeout) {\n this.clearHideTimeout();\n }\n if (!this.props.isOpen) {\n this.showWithDelay(e);\n } else {\n this.hideWithDelay(e);\n }\n }\n }\n }, {\n key: \"onMouseOverTooltipContent\",\n value: function onMouseOverTooltipContent() {\n if (this.props.trigger.indexOf('hover') > -1 && !this.props.autohide) {\n if (this._hideTimeout) {\n this.clearHideTimeout();\n }\n if (this.state.isOpen && !this.props.isOpen) {\n this.toggle();\n }\n }\n }\n }, {\n key: \"onMouseLeaveTooltipContent\",\n value: function onMouseLeaveTooltipContent(e) {\n if (this.props.trigger.indexOf('hover') > -1 && !this.props.autohide) {\n if (this._showTimeout) {\n this.clearShowTimeout();\n }\n e.persist();\n this._hideTimeout = setTimeout(this.hide.bind(this, e), this.getDelay('hide'));\n }\n }\n }, {\n key: \"onEscKeyDown\",\n value: function onEscKeyDown(e) {\n if (e.key === 'Escape') {\n this.hide(e);\n }\n }\n }, {\n key: \"getRef\",\n value: function getRef(ref) {\n var innerRef = this.props.innerRef;\n if (innerRef) {\n if (typeof innerRef === 'function') {\n innerRef(ref);\n } else if (_typeof(innerRef) === 'object') {\n innerRef.current = ref;\n }\n }\n this._popover = ref;\n }\n }, {\n key: \"getDelay\",\n value: function getDelay(key) {\n var delay = this.props.delay;\n if (_typeof(delay) === 'object') {\n return isNaN(delay[key]) ? DEFAULT_DELAYS[key] : delay[key];\n }\n return delay;\n }\n }, {\n key: \"getCurrentTarget\",\n value: function getCurrentTarget(target) {\n if (!target) return null;\n var index = this._targets.indexOf(target);\n if (index >= 0) return this._targets[index];\n return this.getCurrentTarget(target.parentElement);\n }\n }, {\n key: \"show\",\n value: function show(e) {\n if (!this.props.isOpen) {\n this.clearShowTimeout();\n this.currentTargetElement = e ? e.currentTarget || this.getCurrentTarget(e.target) : null;\n if (e && e.composedPath && typeof e.composedPath === 'function') {\n var path = e.composedPath();\n this.currentTargetElement = path && path[0] || this.currentTargetElement;\n }\n this.toggle(e);\n }\n }\n }, {\n key: \"showWithDelay\",\n value: function showWithDelay(e) {\n if (this._hideTimeout) {\n this.clearHideTimeout();\n }\n this._showTimeout = setTimeout(this.show.bind(this, e), this.getDelay('show'));\n }\n }, {\n key: \"hide\",\n value: function hide(e) {\n if (this.props.isOpen) {\n this.clearHideTimeout();\n this.currentTargetElement = null;\n this.toggle(e);\n }\n }\n }, {\n key: \"hideWithDelay\",\n value: function hideWithDelay(e) {\n if (this._showTimeout) {\n this.clearShowTimeout();\n }\n this._hideTimeout = setTimeout(this.hide.bind(this, e), this.getDelay('hide'));\n }\n }, {\n key: \"clearShowTimeout\",\n value: function clearShowTimeout() {\n clearTimeout(this._showTimeout);\n this._showTimeout = undefined;\n }\n }, {\n key: \"clearHideTimeout\",\n value: function clearHideTimeout() {\n clearTimeout(this._hideTimeout);\n this._hideTimeout = undefined;\n }\n }, {\n key: \"addEventOnTargets\",\n value: function addEventOnTargets(type, handler, isBubble) {\n this._targets.forEach(function (target) {\n target.addEventListener(type, handler, isBubble);\n });\n }\n }, {\n key: \"removeEventOnTargets\",\n value: function removeEventOnTargets(type, handler, isBubble) {\n this._targets.forEach(function (target) {\n target.removeEventListener(type, handler, isBubble);\n });\n }\n }, {\n key: \"addTargetEvents\",\n value: function addTargetEvents() {\n if (this.props.trigger) {\n var triggers = this.props.trigger.split(' ');\n if (triggers.indexOf('manual') === -1) {\n if (triggers.indexOf('click') > -1 || triggers.indexOf('legacy') > -1) {\n document.addEventListener('click', this.handleDocumentClick, true);\n }\n if (this._targets && this._targets.length) {\n if (triggers.indexOf('hover') > -1) {\n this.addEventOnTargets('mouseover', this.showWithDelay, true);\n this.addEventOnTargets('mouseout', this.hideWithDelay, true);\n }\n if (triggers.indexOf('focus') > -1) {\n this.addEventOnTargets('focusin', this.show, true);\n this.addEventOnTargets('focusout', this.hide, true);\n }\n this.addEventOnTargets('keydown', this.onEscKeyDown, true);\n }\n }\n }\n }\n }, {\n key: \"removeTargetEvents\",\n value: function removeTargetEvents() {\n if (this._targets) {\n this.removeEventOnTargets('mouseover', this.showWithDelay, true);\n this.removeEventOnTargets('mouseout', this.hideWithDelay, true);\n this.removeEventOnTargets('keydown', this.onEscKeyDown, true);\n this.removeEventOnTargets('focusin', this.show, true);\n this.removeEventOnTargets('focusout', this.hide, true);\n }\n document.removeEventListener('click', this.handleDocumentClick, true);\n }\n }, {\n key: \"updateTarget\",\n value: function updateTarget() {\n var newTarget = getTarget(this.props.target, true);\n if (newTarget !== this._targets) {\n this.removeTargetEvents();\n this._targets = newTarget ? Array.from(newTarget) : [];\n this.currentTargetElement = this.currentTargetElement || this._targets[0];\n this.addTargetEvents();\n }\n }\n }, {\n key: \"toggle\",\n value: function toggle(e) {\n if (this.props.disabled || !this._isMounted) {\n return e && e.preventDefault();\n }\n return this.props.toggle(e);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n if (this.props.isOpen) {\n this.updateTarget();\n }\n var target = this.currentTargetElement || this._targets[0];\n if (!target) {\n return null;\n }\n var _this$props = this.props,\n className = _this$props.className,\n cssModule = _this$props.cssModule,\n innerClassName = _this$props.innerClassName,\n isOpen = _this$props.isOpen,\n hideArrow = _this$props.hideArrow,\n boundariesElement = _this$props.boundariesElement,\n placement = _this$props.placement,\n placementPrefix = _this$props.placementPrefix,\n arrowClassName = _this$props.arrowClassName,\n popperClassName = _this$props.popperClassName,\n container = _this$props.container,\n modifiers = _this$props.modifiers,\n strategy = _this$props.strategy,\n offset = _this$props.offset,\n fade = _this$props.fade,\n flip = _this$props.flip,\n children = _this$props.children;\n var attributes = omit(this.props, Object.keys(propTypes));\n var popperClasses = mapToCssModules(popperClassName, cssModule);\n var classes = mapToCssModules(innerClassName, cssModule);\n return /*#__PURE__*/React.createElement(PopperContent, {\n className: className,\n target: target,\n isOpen: isOpen,\n hideArrow: hideArrow,\n boundariesElement: boundariesElement,\n placement: placement,\n placementPrefix: placementPrefix,\n arrowClassName: arrowClassName,\n popperClassName: popperClasses,\n container: container,\n modifiers: modifiers,\n strategy: strategy,\n offset: offset,\n cssModule: cssModule,\n fade: fade,\n flip: flip\n }, function (_ref) {\n var update = _ref.update;\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, attributes, {\n ref: _this2.getRef,\n className: classes,\n role: \"tooltip\",\n onMouseOver: _this2.onMouseOverTooltipContent,\n onMouseLeave: _this2.onMouseLeaveTooltipContent,\n onKeyDown: _this2.onEscKeyDown\n }), typeof children === 'function' ? children({\n update: update\n }) : children);\n });\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(props, state) {\n if (props.isOpen && !state.isOpen) {\n return {\n isOpen: props.isOpen\n };\n }\n return null;\n }\n }]);\n return TooltipPopoverWrapper;\n}(React.Component);\nTooltipPopoverWrapper.propTypes = propTypes;\nTooltipPopoverWrapper.defaultProps = defaultProps;\nexport default TooltipPopoverWrapper;","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from 'react';\nimport classNames from 'classnames';\nimport TooltipPopoverWrapper, { propTypes } from './TooltipPopoverWrapper';\nvar defaultProps = {\n placement: 'right',\n placementPrefix: 'bs-popover',\n trigger: 'click',\n offset: [0, 8]\n};\nfunction Popover(props) {\n var arrowClasses = classNames('popover-arrow', props.arrowClassName);\n var popperClasses = classNames('popover', 'show', props.popperClassName);\n var classes = classNames('popover-inner', props.innerClassName);\n return /*#__PURE__*/React.createElement(TooltipPopoverWrapper, _extends({}, props, {\n arrowClassName: arrowClasses,\n popperClassName: popperClasses,\n innerClassName: classes\n }));\n}\nPopover.propTypes = propTypes;\nPopover.defaultProps = defaultProps;\nexport default Popover;","var _excluded = [\"className\", \"cssModule\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nfunction PopoverBody(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'popover-body'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nPopoverBody.propTypes = propTypes;\nexport default PopoverBody;","/**\n * A menu popover allowing navigation of categories in the system according to the given categories tree\n *\n * @param {object} categoriesTree - a list of CategoryTreeNodeModel, each element denotes a tree node in the categories tree structure.\n * @param {object} [selectedCategory] - the selected category to show in right panel (in all categories view this will be null and first category will show)\n * @param {boolean} [viewShowAll] - true if the menu should show the all categories view, false if the single category view\n */\n\nimport React, { Component } from 'react'\nimport './NavigationMenu.scss'\nimport { Link } from 'react-router-dom'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { t } from '$themelocalization'\nimport { Scrollbars } from 'react-custom-scrollbars-2'\nimport { decodeStringForURL } from '$ustoreinternal/services/utils'\n\nconst DIV_VIEW_COLUMNS_HEIGHT = 270\nconst DIV_CATEGORY_ROW_HEIGHT = 27\nconst NUMBER_OF_COLUMNS = 3\n\nclass NavigationMenu extends Component {\n constructor (props) {\n super(props)\n\n const { categoriesTree, selectedCategory } = props\n\n if (categoriesTree && categoriesTree.length) {\n const selected = selectedCategory && categoriesTree.find(node => node.Category.ID === selectedCategory.ID) ? selectedCategory : categoriesTree[0].Category\n this.state = {\n selectedCategory: selected\n }\n }\n }\n\n getSubCategoriesMapped (categoryTreeNode, countInColumn) {\n const { Category: category, SubCategories: subCategories } = categoryTreeNode\n let subCategoriesMapped = []\n\n if (category.HasSubCategories && subCategories) {\n let count = 0\n let countAll = 0\n\n subCategoriesMapped = subCategories.map((categoryTreeNodeL2) => {\n const { Category: categoryL2, SubCategories: subCategoriesL2 } = categoryTreeNodeL2\n\n // save the size of the entire group - category L2 and all its L3 categories plus featured products link if exist\n const groupSize = subCategoriesL2.length + ((categoryL2.HasProducts && categoryL2.HasSubCategories) ? 2 : 1)\n let countBlankSpaces = 0\n if (categoryL2.HasSubCategories && subCategoriesL2) {\n const indexInColumn = count\n count += groupSize\n if (count > countInColumn) {\n countBlankSpaces = groupSize - (count - countInColumn) // count the blank spaces to fill in this column\n count = groupSize % countInColumn // set count as the number of items from this group in the next column\n\n // handle the a case when a large group is the first group in the column - its already starting a new column no need to move\n if (indexInColumn === 0) {\n countBlankSpaces = 0 // no need for blank spaces\n count = (groupSize % countInColumn) // set count as the number of items from this group in the next column\n }\n }\n } else {\n count++\n if (count > countInColumn) {\n count = 1 // set count as the number of items from this group in the next column (which is 1)\n }\n }\n\n countAll += groupSize + countBlankSpaces\n\n return {\n ...categoryL2,\n showFeaturedProducts: categoryL2.HasProducts && categoryL2.HasSubCategories,\n subCategories: subCategoriesL2.map(categoryL3Node => categoryL3Node.Category),\n countBlankSpaces,\n countAll\n }\n })\n }\n\n return subCategoriesMapped\n }\n\n componentDidUpdate (prevProps, prevState, snapshot) {\n const { categoriesTree, selectedCategory } = this.props\n\n if (selectedCategory?.FriendlyID === 0) {\n return\n }\n if (categoriesTree && categoriesTree.length && selectedCategory && selectedCategory.ID !== this.state.selectedCategory.ID) {\n const selected = categoriesTree.find(node => node.Category.ID === selectedCategory.ID) ? selectedCategory : categoriesTree[0].Category\n this.setState({ selectedCategory: selected })\n }\n }\n\n render () {\n const { categoriesTree, viewShowAll } = this.props\n\n if (!(categoriesTree && categoriesTree.length)) {\n return null\n }\n\n const selectedCategory = this.state.selectedCategory\n const viewShowOnlyAllPanel = !selectedCategory.HasSubCategories\n const subCategoriesTreeNode = categoriesTree.filter(node => node.Category.ID === selectedCategory.ID)[0]\n\n const countInColumn = Math.floor(DIV_VIEW_COLUMNS_HEIGHT / DIV_CATEGORY_ROW_HEIGHT)\n\n const subCategoriesMapped = !viewShowOnlyAllPanel && this.getSubCategoriesMapped(subCategoriesTreeNode, countInColumn)\n const countAll = subCategoriesMapped && subCategoriesMapped.length && subCategoriesMapped[subCategoriesMapped.length - 1].countAll\n\n return (\n <div className={`navigation-menu ${(viewShowAll ? 'view-show-all' : '')} ${(viewShowOnlyAllPanel ? 'hide-category-panel' : '')}`}>\n {\n viewShowAll &&\n <div className=\"show-all-panel\">\n {\n <Scrollbars className=\"scrollbar\" universal hideTracksWhenNotNeeded autoHeight autoHeightMax=\"350\"\n renderThumbVertical={props => <div {...props} className=\"thumb-vertical\" />}>\n <div className=\"content\">\n {\n categoriesTree.map(({ Category }, i) => {\n const { ID, FriendlyID, Name } = Category\n return <div key={i} className={`category-l1-menu ${(selectedCategory.ID === ID ? 'selected' : '')}`}\n onMouseOver={() => this.setState({ selectedCategory: Category })}>\n <Link className=\"category-name truncate\" dangerouslySetInnerHTML={{ __html: Name }} key={i} to={urlGenerator.get({ page: 'category', id: FriendlyID, name: decodeStringForURL(Name) })} />\n </div>\n })\n }\n </div>\n </Scrollbars>\n }\n </div>\n }\n <div className=\"category-panel\">\n <div className=\"category-l1-title\">\n <span className=\"category-l1\">\n <Link dangerouslySetInnerHTML={{ __html: selectedCategory.Name }} to={urlGenerator.get({ page: 'category', id: selectedCategory.FriendlyID, name: decodeStringForURL(selectedCategory.Name) })} />\n </span>\n {\n selectedCategory.HasProducts &&\n <span className=\"featured-products\">\n <Link className=\"featured-products-link\" to={urlGenerator.get({ page: 'category', id: selectedCategory.FriendlyID, name: decodeStringForURL(selectedCategory.Name) })}>\n {t('NavigationMenu.See_featured_products')}\n </Link>\n </span>\n }\n </div>\n <div className=\"view-columns\">\n {\n subCategoriesMapped && subCategoriesMapped.map((categoryL2, i) => {\n const { FriendlyID, Name, showFeaturedProducts, subCategories, countBlankSpaces } = categoryL2\n return <React.Fragment key={i}>\n {\n // if this categoryL2 and its sub rows will span more than the place in this column it should move to next column - fill with blank rows\n countBlankSpaces > 0 &&\n [...Array(countBlankSpaces)].map((x, i) => <div key={i} className=\"column category\"></div>)\n }\n <div key={i} className=\"column category\">\n <Link className=\"category-l2 truncate\" dangerouslySetInnerHTML={{ __html: Name }} key={i} to={urlGenerator.get({ page: 'category', id: FriendlyID, name: decodeStringForURL(Name) })} />\n </div>\n {\n showFeaturedProducts &&\n <div key=\"featured-products\" className=\"column category featured-products-category-item\">\n <Link className=\"category-l3 truncate\" key=\"key-featured-products\" to={urlGenerator.get({ page: 'category', id: FriendlyID, name: decodeStringForURL(Name) })}>\n {t('General.FeaturedProducts')}\n </Link>\n </div>\n }\n {\n subCategories && subCategories.map((categoryL3, i) => {\n const { FriendlyID, Name } = categoryL3\n\n return <div key={i} className=\"column category\">\n <Link className=\"category-l3 truncate\" dangerouslySetInnerHTML={{ __html: Name }} key={i} to={urlGenerator.get({ page: 'category', id: FriendlyID, name: decodeStringForURL(Name) })} />\n </div>\n })\n }\n </React.Fragment>\n })\n }\n {\n // if there are categories only in first column, fill up another column of blank rows for pushing the category image to the right\n (countAll <= countInColumn)\n ? [...Array(countInColumn)].map((x, i) => <div key={i} className=\"column category\" />) : ''\n }\n {\n selectedCategory.ImageUrl &&\n <div className=\"column category-image-column\">\n <div className=\"category-image-wrapper\"><img src={selectedCategory.ImageUrl} className=\"category-image\" alt={`${selectedCategory.Name} Category`} /></div>\n </div>\n }\n </div>\n {\n // if the total count of the rows (categories, subcategories, etc) are more than the span of the designated columns - show a link to see more\n (countAll > countInColumn * NUMBER_OF_COLUMNS)\n ? <div className=\"see-more\">\n <Link className=\"see-more-link\" to={urlGenerator.get({ page: 'category', id: selectedCategory.FriendlyID, name: decodeStringForURL(selectedCategory.Name) })}>{t('NavigationMenu.See_More')}</Link>\n </div> : null\n }\n </div>\n </div>\n )\n }\n}\n\nexport default NavigationMenu\n","import React, { useState } from 'react'\nimport { Link } from 'react-router-dom'\nimport { Popover, PopoverBody } from 'reactstrap'\nimport NavigationMenu from './NavigationMenu'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { decodeStringForURL } from '$ustoreinternal/services/utils'\nimport { t } from '$themelocalization'\nimport './CategoriesNavbar.scss'\n\nconst CategoriesNavbar = ({ categoriesTree }) => {\n const [hoveredItem, setHoveredItem] = useState(null)\n const [selectedCategory, setSelectedCategory] = useState(null)\n\n if (!(categoriesTree && categoriesTree.length > 0)) {\n return null\n }\n\n const onMouseEnter = (category, target) => {\n queueMicrotask(() => {\n setSelectedCategory(category)\n setHoveredItem(document.getElementById(`id-${category}`))\n })\n }\n\n const onMouseLeave = () => {\n setSelectedCategory(null)\n setHoveredItem(null)\n }\n\n return (<div className=\"categories-navbar\">\n <div className=\"category-title-wrapper view-show-all\" onMouseEnter={(e) => onMouseEnter(0, e.target)} onMouseLeave={onMouseLeave}>\n <span className={`category-title ${selectedCategory === 0 ? 'highlight' : ''}`} id=\"id-0\">\n {t('Header.All_Categories')}\n </span>\n <span className=\"category-spacer\"></span>\n {\n hoveredItem && selectedCategory === 0 &&\n <Popover className=\"\" fade={false} isOpen={true} placement=\"bottom-start\"\n target={hoveredItem} container={hoveredItem} popperClassName=\"categories-navbar-popper\">\n <PopoverBody>\n <NavigationMenu categoriesTree={categoriesTree} viewShowAll={true} selectedCategory={null}/>\n </PopoverBody>\n </Popover>\n }\n </div>\n {\n categoriesTree.map(({ Category, SubCategories }, i) => {\n const { FriendlyID, Name } = Category\n return <Link className=\"category-title-wrapper\"\n onMouseEnter={(e) => onMouseEnter(FriendlyID)}\n onMouseLeave={onMouseLeave}\n key={i}\n to={urlGenerator.get({ page: 'category', id: FriendlyID, name: decodeStringForURL(Name) })}>\n <span className={`category-title ${selectedCategory === FriendlyID ? 'highlight' : ''}`}\n key={i} id={`id-${FriendlyID}`}>\n <span className=\"link\" key={i} dangerouslySetInnerHTML={{ __html: Name }}/>\n </span>\n {\n hoveredItem && selectedCategory === FriendlyID && SubCategories?.length > 0 &&\n <Popover fade={false} isOpen={true} placement=\"bottom-start\"\n target={hoveredItem} container={document.body} popperClassName=\"categories-navbar-popper\">\n <PopoverBody>\n <NavigationMenu categoriesTree={categoriesTree} viewShowAll={false} selectedCategory={Category}/>\n </PopoverBody>\n </Popover>\n }\n </Link>\n })\n }\n </div>)\n}\n\nexport default CategoriesNavbar\n","import React, { useEffect, useRef, useState } from 'react'\nimport { Button, MenuTrigger } from 'react-aria-components'\nimport { Icon } from '$core-components'\nimport { MobileMenuSwitcher, getMobileMenuItems } from './switchers'\nimport './MobileMenu.scss'\n\nexport const MobileMenu = ({\n currentCulture,\n currentCurrency,\n currentUser,\n categoriesTree,\n cultures,\n currencies,\n}) => {\n const drawerRef = useRef()\n const [isOpen, setIsOpen] = useState(false)\n const [slideOut, setSlideOut] = useState(false)\n const [menuItems, setMenuItems] = useState(getMobileMenuItems(categoriesTree, cultures, currencies, currentCurrency, currentCulture))\n\n useEffect(() => {\n const onKeyUp = (e) => {\n if (e.key === 'Escape' && e.target.tagName === 'BODY') {\n closeDrawer()\n }\n }\n\n window.addEventListener('keyup', onKeyUp)\n return () => {\n window.removeEventListener('keyup', onKeyUp)\n }\n }, [])\n\n useEffect(() => {\n setMenuItems(getMobileMenuItems(categoriesTree, cultures, currencies, currentCurrency, currentCulture))\n }, [categoriesTree, cultures, currencies, currentCurrency, currentCulture])\n\n useEffect(() => {\n if (drawerRef.current) {\n let options = { threshold: [0, 0.25, 0.5, 0.75, 1] }\n const callback = (entries) => {\n if (!entries[0].isIntersecting) {\n setIsOpen(false)\n setSlideOut(false)\n observer.disconnect()\n }\n }\n let observer = new IntersectionObserver(callback, options)\n observer.observe(drawerRef.current)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [drawerRef.current])\n\n const openDrawer = () => setIsOpen(true)\n const closeDrawer = () => setSlideOut(true)\n const closeFromSignInAndOut = (e) => {\n if (e.key === 'Escape' &&\n (e.target.classList.contains('signin-button') || e.target.classList.contains('signout-button'))) {\n closeDrawer()\n }\n }\n\n const onAnimationEnd = (e) => e.target.querySelector('[role=\"option\"]').focus()\n\n return <>\n <MenuTrigger onOpenChange={(isOpen) => isOpen && openDrawer()} isOpen={isOpen}>\n <Button aria-label=\"Menu\" className=\"menu-button\">\n <Icon name=\"menu.svg\" width=\"23px\" height=\"20px\" className=\"menu-icon\"\n wrapperClassName=\"menu-icon-container\"/>\n </Button>\n </MenuTrigger>\n {isOpen && <div className=\"mobile-menu\" onKeyUp={(e) => {\n if (e.key === 'Escape' && e.target.classList.contains('react-aria-Button')) {\n closeDrawer()\n }\n }}>\n <div className=\"drawer-overlay\" onMouseDown={closeDrawer}/>\n <div onAnimationEnd={onAnimationEnd} className={`drawer-wrapper ${slideOut ? 'slide-out' : ''}`} ref={drawerRef} onKeyUp={closeFromSignInAndOut}\n onBlur={(e) => {\n if (!drawerRef.current.contains(e.relatedTarget)) {\n e.target.focus()\n }\n }}\n >\n <MobileMenuSwitcher items={menuItems[0].children} onClose={closeDrawer}/>\n </div>\n </div>}\n </>\n}\n","import {UStoreProvider} from '@ustore/core';\n\nexport const useUStoreState = () => {\n return UStoreProvider ? UStoreProvider.state.get() : {}\n}","import React, { useEffect, useState, useRef } from 'react';\nimport { useNavigate, useLocation, useParams } from 'react-router-dom'\n// import { InputGroup } from 'reactstrap'\nimport { Button, Input } from 'react-aria-components'\nimport { Icon } from '$core-components'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { useUStoreState } from '$ustoreinternal/services/hooks';\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\nimport './Search.scss'\n\nconst escapeValue = (value) => value ? value.replace(/[&:<>'\"+*?\\\\/.%#|]/g, \" \").trim() : ''\n\nconst Search = ({className, onClose}) => {\n const containerRef = useRef()\n const params = useParams()\n const { customState } = useUStoreState()\n const [searchValue, setSearchValue] = useState(params.page === 'search' ? params.id : '')\n const navigate = useNavigate()\n const location = useLocation()\n\n useEffect(() => {\n if (window.ga) {\n window.ga('send', 'pageview', location.pathname);\n }\n }, [location])\n\n useEffect(() => {\n if (className.endsWith('search-visible')) {\n containerRef?.current?.querySelector('input').focus()\n }\n },[className])\n\n const onSearchClicked = () => {\n let value = escapeValue(searchValue)\n if (value.length > 0) {\n UStoreProvider.state.customState.set('searchValue', value)\n navigate(urlGenerator.get({page: 'search', id: decodeURIComponent(value)}))\n }\n }\n\n const onKeyPress = (event) => {\n if (event.key === 'Enter') {\n onSearchClicked()\n event.preventDefault();\n }\n if (event.key === 'Escape') {\n UStoreProvider.state.customState.delete('searchValue')\n onClose && onClose()\n }\n }\n\n const onChange = (e) => {\n UStoreProvider.state.customState.delete('searchValue')\n setSearchValue(e.target.value)\n }\n\n return customState && <div className={`search ${className || ''}`} ref={containerRef}>\n <Input type=\"text\" className=\"search-input form-control\"\n value={searchValue}\n placeholder={t('Search.Search_Products')}\n onChange={onChange}\n onKeyUp={onKeyPress}\n />\n <Button className=\"search-button\" onPress={onSearchClicked}>\n <div className=\"search-icon-container\">\n <Icon name=\"search.svg\" width=\"21px\" height=\"21px\" className=\"search-icon\"/>\n </div>\n </Button>\n </div>\n\n}\n\nexport default Search\n","import React, { useEffect, useState, useRef } from 'react'\nimport { Link } from 'react-router-dom'\nimport { Button } from 'react-aria-components'\nimport { Icon } from '$core-components'\nimport { getVariableValue } from '$ustoreinternal/services/cssVariables'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { Slot } from '$core-components'\nimport { CultureSwitcher, CurrencySwitcher, ProfileSwitcher } from './switchers'\nimport Cart from './Cart'\nimport CategoriesNavbar from './CategoriesNavbar'\nimport { MobileMenu } from './MobileMenu'\nimport Search from './Search'\nimport theme from '$styles/_theme.scss'\nimport './Header.scss'\n\nconst getCartUrl = (currentStore) => {\n const { cartUrl } = themeContext.get()\n return (currentStore && currentStore.StoreType === 3 && cartUrl) ? cartUrl : ''\n}\n\nconst Header = ({ customState, currencies, cultures, currentCulture, currentUser, currentCurrency, currentStore }) => {\n const [mobileSearchVisible, setMobileSearchVisible] = useState(false)\n const [connectCartUrl, setConnectCartUrl] = useState(getCartUrl(currentStore))\n const searchButtonRef = useRef()\n\n useEffect(() => {\n setConnectCartUrl(getCartUrl(currentStore))\n }, [currentStore])\n\n if (!customState || !currentCulture || !currentCurrency) {\n return null\n }\n\n const { categoriesTree, userOrdersSummary } = customState\n\n const variableForLogoImg = window.matchMedia(`(min-width: ${theme.lg})`).matches ? '--logo-image' : '--logo-image-mobile'\n const currentLogo = getVariableValue(variableForLogoImg, require(`$assets/images/logo.png`), true)\n\n return (<div className=\"header\">\n <Slot name=\"header_above\"/>\n <div className=\"header-stripe\">\n <div className=\"logo-wrapper\">\n <MobileMenu {...{\n currentCulture,\n currentCurrency,\n currentUser,\n categoriesTree,\n userOrdersSummary,\n cultures,\n currencies,\n }}/>\n <Link to={urlGenerator.get({ page: 'home' })} reloadDocument={false}>{currentLogo &&\n <img className=\"logo\" src={currentLogo} alt=\"logo\"/>}</Link>\n </div>\n {categoriesTree?.length > 0 && <CategoriesNavbar categoriesTree={categoriesTree}/>}\n <Search className={mobileSearchVisible ? 'search-visible' : 'search-hidden'} onClose={() => {\n setMobileSearchVisible(false)\n searchButtonRef.current?.focus()\n }}/>\n <div className=\"right-icons\">\n <Button className=\"header-mobile-search-button\"\n onPress={() => setMobileSearchVisible(!mobileSearchVisible)}\n ref={searchButtonRef}\n >\n <Icon name=\"search.svg\" width=\"20px\" height=\"20px\"/>\n </Button>\n <CultureSwitcher {...{ currentCulture, cultures }}/>\n <CurrencySwitcher {...{ currentCurrency, currencies }}/>\n {currentUser && <ProfileSwitcher {...{ currentUser, userOrdersSummary }}/>}\n <Cart connectCartUrl={connectCartUrl}/>\n </div>\n </div>\n <Slot name=\"header_below\"/>\n </div>\n )\n}\n\nexport default Header\n","import React from 'react'\nimport './Footer.scss'\nimport { Slot } from '$core-components'\n\n/**\n * This component represents the footer in the store\n */\nconst Footer = () => {\n return (\n <div className=\"footer\">\n <Slot name=\"footer\" />\n </div>\n )\n}\n\nexport default Footer\n","import React from 'react'\nimport Icon from '$core-components/Icon'\n\nimport './CrossCloseButton.scss'\n\nconst CrossCloseButton = ({ onPress, className }) => {\n return (\n <div onClick={onPress} onKeyDown={(e) => e.key === 'Enter' && onPress(e)} tabIndex=\"0\" role=\"button\" aria-label=\"Close\"\n className={`cross-close-button-container ${className || ''}`}>\n <Icon name=\"close_black.svg\" width=\"15px\" height=\"15px\" className=\"cross-close-button\" role=\"presentation\"/>\n </div>\n )\n}\n\nexport default CrossCloseButton\n","import React from 'react'\n\nimport { t } from '$themelocalization'\nimport CrossCloseButton from './CrossCloseButton'\nimport './CookiesConsent.scss'\n\nconst CookiesConsent = ({ onCookiesPolicyClicked, onCloseCookiesConsentClicked }) => {\n const localizeCookiesConsent = () => {\n const localizationString = t('GdprRibbon.Cookies_consent')\n const stringArray = localizationString.split('%{0}')\n stringArray.splice(1, 0, <span onClick={onCookiesPolicyClicked} onKeyDown={(e)=> e.key === 'Enter' && onCookiesPolicyClicked(e)} key=\"content-policy\" tabIndex=\"0\">{t('GdprRibbon.Cookie_policy')}</span>)\n return stringArray\n }\n\n return (\n <>\n <div role=\"dialog\" className=\"cookies-consent-container\">\n <div className=\"cookies-consent-title\">{t('GdprRibbon.This_website_uses_cookies')}<span style={{opacity:'0'}}>.</span></div>\n <div className=\"cookies-consent-description\">\n {localizeCookiesConsent()}\n </div>\n <CrossCloseButton className=\"consent\" onPress={onCloseCookiesConsentClicked}/>\n </div>\n\n </>\n )\n}\n\nexport default CookiesConsent\n","import React from 'react'\n\nimport { t } from '$themelocalization'\nimport CrossCloseButton from './CrossCloseButton'\nimport { getCookiesForRibbon } from '$ustoreinternal/services/cookies'\nimport './CookiesPolicy.scss'\n\nconst CookiesPolicy = ({ onCloseCookiesPolicyClicked }) => {\n return (\n <div className=\"cookies-policy-container\">\n <CrossCloseButton className=\"policy\"\n onPress={onCloseCookiesPolicyClicked}/>\n <div className=\"cookies-policy-title\">{t('GdprRibbon.Cookie_policy')}</div>\n <div className=\"cookies-policy-description\">\n <div className=\"cookies-explanation-title\">\n {t('GdprRibbon.CookieExplanationHeader1')}\n </div>\n <div className=\"cookies-explanation-description\">\n {t('GdprRibbon.CookieExplanationParagraph1_1')}\n <br/>\n {t('GdprRibbon.CookieExplanationParagraph1_2')}\n </div>\n <div className=\"cookies-necessary-title\">\n {t('GdprRibbon.CookieExplanationHeader2')}\n </div>\n <div className=\"cookies-necessary-description\">\n {t('GdprRibbon.CookieExplanationParagraph2_1')}\n </div>\n <div className=\"cookies-table-title\">\n {t('GdprRibbon.Table_title')}\n </div>\n <div className=\"cookies-table\">\n <table>\n <thead className=\"table-head\">\n <tr className=\"cookie-row\">\n <td><div>{t('lblName')}</div></td>\n <td><div>{t('lblDomain')}</div></td>\n <td><div>{t('lblExpiration')}</div></td>\n <td><div>{t('lblDescription')}</div></td>\n </tr>\n </thead>\n <tbody>\n {getCookiesForRibbon().map((cookie) => {\n const { name, expiration: { amount, units }, description } = cookie\n return (\n <tr key={name} className=\"cookie-row\">\n <td><div>{name}</div></td>\n <td><div>{window.location.hostname}</div></td>\n <td><div>{amount && `${amount}`}{t(units)}</div></td>\n <td><div>{t(description)}</div></td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n </div>\n </div>\n )\n}\n\nexport default CookiesPolicy\n","import React from 'react'\nimport { UStoreProvider } from '@ustore/core'\n\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport CookiesConsent from \"./CookiesConsent\";\nimport CookiesPolicy from \"./CookiesPolicy\";\nimport './CookiesRibbon.scss'\n\nconst CookieRibbon = ({ showRibbon }) => {\n const [showCookiesPolicy, setShowCookiesPolicy] = React.useState(false)\n\n if (!showRibbon) {\n return null\n }\n\n const closeCookiesRibbon = () => {\n UStoreProvider.state.customState.set('showCookieRibbon', false)\n CookiesManager.setCookie({ key: storefrontCookies.cookieRibbonNotShownYet, value: 'false' })\n }\n const openCookiesPolicy = () => setShowCookiesPolicy(true)\n const closeCookiesPolicy = () => setShowCookiesPolicy(false)\n\n return (\n <div className=\"cookies-ribbon\">\n {showCookiesPolicy\n ? <CookiesPolicy onCloseCookiesPolicyClicked={closeCookiesPolicy}/>\n : <CookiesConsent onCloseCookiesConsentClicked={closeCookiesRibbon}\n onCookiesPolicyClicked={openCookiesPolicy}/>}\n </div>\n )\n}\n\nexport default CookieRibbon\n","/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n if (typeof Map !== 'undefined') {\r\n return Map;\r\n }\r\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array<Array>} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\r\n function getIndex(arr, key) {\r\n var result = -1;\r\n arr.some(function (entry, index) {\r\n if (entry[0] === key) {\r\n result = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return result;\r\n }\r\n return /** @class */ (function () {\r\n function class_1() {\r\n this.__entries__ = [];\r\n }\r\n Object.defineProperty(class_1.prototype, \"size\", {\r\n /**\r\n * @returns {boolean}\r\n */\r\n get: function () {\r\n return this.__entries__.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\r\n class_1.prototype.get = function (key) {\r\n var index = getIndex(this.__entries__, key);\r\n var entry = this.__entries__[index];\r\n return entry && entry[1];\r\n };\r\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n class_1.prototype.set = function (key, value) {\r\n var index = getIndex(this.__entries__, key);\r\n if (~index) {\r\n this.__entries__[index][1] = value;\r\n }\r\n else {\r\n this.__entries__.push([key, value]);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.delete = function (key) {\r\n var entries = this.__entries__;\r\n var index = getIndex(entries, key);\r\n if (~index) {\r\n entries.splice(index, 1);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.has = function (key) {\r\n return !!~getIndex(this.__entries__, key);\r\n };\r\n /**\r\n * @returns {void}\r\n */\r\n class_1.prototype.clear = function () {\r\n this.__entries__.splice(0);\r\n };\r\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\r\n class_1.prototype.forEach = function (callback, ctx) {\r\n if (ctx === void 0) { ctx = null; }\r\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n callback.call(ctx, entry[1], entry[0]);\r\n }\r\n };\r\n return class_1;\r\n }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n if (typeof global !== 'undefined' && global.Math === Math) {\r\n return global;\r\n }\r\n if (typeof self !== 'undefined' && self.Math === Math) {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined' && window.Math === Math) {\r\n return window;\r\n }\r\n // eslint-disable-next-line no-new-func\r\n return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n if (typeof requestAnimationFrame === 'function') {\r\n // It's required to use a bounded function because IE sometimes throws\r\n // an \"Invalid calling object\" error if rAF is invoked without the global\r\n // object on the left hand side.\r\n return requestAnimationFrame.bind(global$1);\r\n }\r\n return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\r\n function resolvePending() {\r\n if (leadingCall) {\r\n leadingCall = false;\r\n callback();\r\n }\r\n if (trailingCall) {\r\n proxy();\r\n }\r\n }\r\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\r\n function timeoutCallback() {\r\n requestAnimationFrame$1(resolvePending);\r\n }\r\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\r\n function proxy() {\r\n var timeStamp = Date.now();\r\n if (leadingCall) {\r\n // Reject immediately following calls.\r\n if (timeStamp - lastCallTime < trailingTimeout) {\r\n return;\r\n }\r\n // Schedule new call to be in invoked when the pending one is resolved.\r\n // This is important for \"transitions\" which never actually start\r\n // immediately so there is a chance that we might miss one if change\r\n // happens amids the pending invocation.\r\n trailingCall = true;\r\n }\r\n else {\r\n leadingCall = true;\r\n trailingCall = false;\r\n setTimeout(timeoutCallback, delay);\r\n }\r\n lastCallTime = timeStamp;\r\n }\r\n return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\r\n function ResizeObserverController() {\r\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\r\n this.connected_ = false;\r\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\r\n this.mutationEventsAdded_ = false;\r\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\r\n this.mutationsObserver_ = null;\r\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array<ResizeObserverSPI>}\r\n */\r\n this.observers_ = [];\r\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n }\r\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.addObserver = function (observer) {\r\n if (!~this.observers_.indexOf(observer)) {\r\n this.observers_.push(observer);\r\n }\r\n // Add listeners if they haven't been added yet.\r\n if (!this.connected_) {\r\n this.connect_();\r\n }\r\n };\r\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.removeObserver = function (observer) {\r\n var observers = this.observers_;\r\n var index = observers.indexOf(observer);\r\n // Remove observer if it's present in registry.\r\n if (~index) {\r\n observers.splice(index, 1);\r\n }\r\n // Remove listeners if controller has no connected observers.\r\n if (!observers.length && this.connected_) {\r\n this.disconnect_();\r\n }\r\n };\r\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.refresh = function () {\r\n var changesDetected = this.updateObservers_();\r\n // Continue running updates if changes have been detected as there might\r\n // be future ones caused by CSS transitions.\r\n if (changesDetected) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\r\n ResizeObserverController.prototype.updateObservers_ = function () {\r\n // Collect observers that have active observations.\r\n var activeObservers = this.observers_.filter(function (observer) {\r\n return observer.gatherActive(), observer.hasActive();\r\n });\r\n // Deliver notifications in a separate cycle in order to avoid any\r\n // collisions between observers, e.g. when multiple instances of\r\n // ResizeObserver are tracking the same element and the callback of one\r\n // of them changes content dimensions of the observed target. Sometimes\r\n // this may result in notifications being blocked for the rest of observers.\r\n activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n return activeObservers.length > 0;\r\n };\r\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.connect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already added.\r\n if (!isBrowser || this.connected_) {\r\n return;\r\n }\r\n // Subscription to the \"Transitionend\" event is used as a workaround for\r\n // delayed transitions. This way it's possible to capture at least the\r\n // final state of an element.\r\n document.addEventListener('transitionend', this.onTransitionEnd_);\r\n window.addEventListener('resize', this.refresh);\r\n if (mutationObserverSupported) {\r\n this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n this.mutationsObserver_.observe(document, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n }\r\n else {\r\n document.addEventListener('DOMSubtreeModified', this.refresh);\r\n this.mutationEventsAdded_ = true;\r\n }\r\n this.connected_ = true;\r\n };\r\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.disconnect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already removed.\r\n if (!isBrowser || !this.connected_) {\r\n return;\r\n }\r\n document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n window.removeEventListener('resize', this.refresh);\r\n if (this.mutationsObserver_) {\r\n this.mutationsObserver_.disconnect();\r\n }\r\n if (this.mutationEventsAdded_) {\r\n document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n }\r\n this.mutationsObserver_ = null;\r\n this.mutationEventsAdded_ = false;\r\n this.connected_ = false;\r\n };\r\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n // Detect whether transition may affect dimensions of an element.\r\n var isReflowProperty = transitionKeys.some(function (key) {\r\n return !!~propertyName.indexOf(key);\r\n });\r\n if (isReflowProperty) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\r\n ResizeObserverController.getInstance = function () {\r\n if (!this.instance_) {\r\n this.instance_ = new ResizeObserverController();\r\n }\r\n return this.instance_;\r\n };\r\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\r\n ResizeObserverController.instance_ = null;\r\n return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n Object.defineProperty(target, key, {\r\n value: props[key],\r\n enumerable: false,\r\n writable: false,\r\n configurable: true\r\n });\r\n }\r\n return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n // Assume that the element is an instance of Node, which means that it\r\n // has the \"ownerDocument\" property from which we can retrieve a\r\n // corresponding global object.\r\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n // Return the local global object if it's not possible extract one from\r\n // provided element.\r\n return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n var positions = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n positions[_i - 1] = arguments[_i];\r\n }\r\n return positions.reduce(function (size, position) {\r\n var value = styles['border-' + position + '-width'];\r\n return size + toFloat(value);\r\n }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n var positions = ['top', 'right', 'bottom', 'left'];\r\n var paddings = {};\r\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n var position = positions_1[_i];\r\n var value = styles['padding-' + position];\r\n paddings[position] = toFloat(value);\r\n }\r\n return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n var bbox = target.getBBox();\r\n return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n // Client width & height properties can't be\r\n // used exclusively as they provide rounded values.\r\n var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n // By this condition we can catch all non-replaced inline, hidden and\r\n // detached elements. Though elements with width & height properties less\r\n // than 0.5 will be discarded as well.\r\n //\r\n // Without it we would need to implement separate methods for each of\r\n // those cases and it's not possible to perform a precise and performance\r\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n // gives wrong results for elements with width & height less than 0.5.\r\n if (!clientWidth && !clientHeight) {\r\n return emptyRect;\r\n }\r\n var styles = getWindowOf(target).getComputedStyle(target);\r\n var paddings = getPaddings(styles);\r\n var horizPad = paddings.left + paddings.right;\r\n var vertPad = paddings.top + paddings.bottom;\r\n // Computed styles of width & height are being used because they are the\r\n // only dimensions available to JS that contain non-rounded values. It could\r\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n var width = toFloat(styles.width), height = toFloat(styles.height);\r\n // Width & height include paddings and borders when the 'border-box' box\r\n // model is applied (except for IE).\r\n if (styles.boxSizing === 'border-box') {\r\n // Following conditions are required to handle Internet Explorer which\r\n // doesn't include paddings and borders to computed CSS dimensions.\r\n //\r\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n // properties then it's either IE, and thus we don't need to subtract\r\n // anything, or an element merely doesn't have paddings/borders styles.\r\n if (Math.round(width + horizPad) !== clientWidth) {\r\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n }\r\n if (Math.round(height + vertPad) !== clientHeight) {\r\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n }\r\n }\r\n // Following steps can't be applied to the document's root element as its\r\n // client[Width/Height] properties represent viewport area of the window.\r\n // Besides, it's as well not necessary as the <html> itself neither has\r\n // rendered scroll bars nor it can be clipped.\r\n if (!isDocumentElement(target)) {\r\n // In some browsers (only in Firefox, actually) CSS width & height\r\n // include scroll bars size which can be removed at this step as scroll\r\n // bars are the only difference between rounded dimensions + paddings\r\n // and \"client\" properties, though that is not always true in Chrome.\r\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n // Chrome has a rather weird rounding of \"client\" properties.\r\n // E.g. for an element with content width of 314.2px it sometimes gives\r\n // the client width of 315px and for the width of 314.7px it may give\r\n // 314px. And it doesn't happen all the time. So just ignore this delta\r\n // as a non-relevant.\r\n if (Math.abs(vertScrollbar) !== 1) {\r\n width -= vertScrollbar;\r\n }\r\n if (Math.abs(horizScrollbar) !== 1) {\r\n height -= horizScrollbar;\r\n }\r\n }\r\n return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n // interface.\r\n if (typeof SVGGraphicsElement !== 'undefined') {\r\n return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n }\r\n // If it's so, then check that element is at least an instance of the\r\n // SVGElement and that it has the \"getBBox\" method.\r\n // eslint-disable-next-line no-extra-parens\r\n return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element (<html>).\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n if (!isBrowser) {\r\n return emptyRect;\r\n }\r\n if (isSVGGraphicsElement(target)) {\r\n return getSVGContentRect(target);\r\n }\r\n return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n var rect = Object.create(Constr.prototype);\r\n // Rectangle's properties are not writable and non-enumerable.\r\n defineConfigurable(rect, {\r\n x: x, y: y, width: width, height: height,\r\n top: y,\r\n right: x + width,\r\n bottom: height + y,\r\n left: x\r\n });\r\n return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\r\n function ResizeObservation(target) {\r\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastWidth = 0;\r\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastHeight = 0;\r\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\r\n this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n this.target = target;\r\n }\r\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObservation.prototype.isActive = function () {\r\n var rect = getContentRect(this.target);\r\n this.contentRect_ = rect;\r\n return (rect.width !== this.broadcastWidth ||\r\n rect.height !== this.broadcastHeight);\r\n };\r\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\r\n ResizeObservation.prototype.broadcastRect = function () {\r\n var rect = this.contentRect_;\r\n this.broadcastWidth = rect.width;\r\n this.broadcastHeight = rect.height;\r\n return rect;\r\n };\r\n return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\r\n function ResizeObserverEntry(target, rectInit) {\r\n var contentRect = createReadOnlyRect(rectInit);\r\n // According to the specification following properties are not writable\r\n // and are also not enumerable in the native implementation.\r\n //\r\n // Property accessors are not being used as they'd require to define a\r\n // private WeakMap storage which may cause memory leaks in browsers that\r\n // don't support this type of collections.\r\n defineConfigurable(this, { target: target, contentRect: contentRect });\r\n }\r\n return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\r\n function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array<ResizeObservation>}\r\n */\r\n this.activeObservations_ = [];\r\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map<Element, ResizeObservation>}\r\n */\r\n this.observations_ = new MapShim();\r\n if (typeof callback !== 'function') {\r\n throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n }\r\n this.callback_ = callback;\r\n this.controller_ = controller;\r\n this.callbackCtx_ = callbackCtx;\r\n }\r\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.observe = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is already being observed.\r\n if (observations.has(target)) {\r\n return;\r\n }\r\n observations.set(target, new ResizeObservation(target));\r\n this.controller_.addObserver(this);\r\n // Force the update of observations.\r\n this.controller_.refresh();\r\n };\r\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.unobserve = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is not being observed.\r\n if (!observations.has(target)) {\r\n return;\r\n }\r\n observations.delete(target);\r\n if (!observations.size) {\r\n this.controller_.removeObserver(this);\r\n }\r\n };\r\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.disconnect = function () {\r\n this.clearActive();\r\n this.observations_.clear();\r\n this.controller_.removeObserver(this);\r\n };\r\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.gatherActive = function () {\r\n var _this = this;\r\n this.clearActive();\r\n this.observations_.forEach(function (observation) {\r\n if (observation.isActive()) {\r\n _this.activeObservations_.push(observation);\r\n }\r\n });\r\n };\r\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.broadcastActive = function () {\r\n // Do nothing if observer doesn't have active observations.\r\n if (!this.hasActive()) {\r\n return;\r\n }\r\n var ctx = this.callbackCtx_;\r\n // Create ResizeObserverEntry instance for every active observation.\r\n var entries = this.activeObservations_.map(function (observation) {\r\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n });\r\n this.callback_.call(ctx, entries, ctx);\r\n this.clearActive();\r\n };\r\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.clearActive = function () {\r\n this.activeObservations_.splice(0);\r\n };\r\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObserverSPI.prototype.hasActive = function () {\r\n return this.activeObservations_.length > 0;\r\n };\r\n return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\r\n function ResizeObserver(callback) {\r\n if (!(this instanceof ResizeObserver)) {\r\n throw new TypeError('Cannot call a class as a function.');\r\n }\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n var controller = ResizeObserverController.getInstance();\r\n var observer = new ResizeObserverSPI(callback, controller, this);\r\n observers.set(this, observer);\r\n }\r\n return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n 'observe',\r\n 'unobserve',\r\n 'disconnect'\r\n].forEach(function (method) {\r\n ResizeObserver.prototype[method] = function () {\r\n var _a;\r\n return (_a = observers.get(this))[method].apply(_a, arguments);\r\n };\r\n});\n\nvar index = (function () {\r\n // Export existing implementation if available.\r\n if (typeof global$1.ResizeObserver !== 'undefined') {\r\n return global$1.ResizeObserver;\r\n }\r\n return ResizeObserver;\r\n})();\n\nexport default index;\n","/**\n * Guard function that checks if provided `input` is an Element.\n */\nexport function isElement(input: unknown): input is Element {\n return (\n typeof input === \"object\" &&\n input !== null &&\n (input as Element).nodeType === Node.ELEMENT_NODE\n );\n}\n","declare const opaqueId: unique symbol;\n\ndeclare type Tagged<Token> = {\n readonly [opaqueId]: Token;\n};\n\nexport type Opaque<Type, Token = unknown> = Type & Tagged<Token>;\n\nexport type ObjectValues<T> = T[keyof T];\n\n// TODO rename to \"CssSelector\"\nexport type CssSelectorGenerated = Opaque<string, \"CssSelector\">;\n\nexport const OPERATOR = {\n NONE: \"\",\n DESCENDANT: \" \",\n CHILD: \" > \",\n} as const;\n\nexport type OperatorValue = ObjectValues<typeof OPERATOR>;\n\nexport interface ElementSelectorData {\n value: CssSelectorGenerated;\n include: boolean;\n}\n\nexport interface ElementData {\n element: Element;\n operator: OperatorValue;\n selectors: Partial<Record<CssSelectorType, ElementSelectorData[]>>;\n}\n\nexport type CssSelector = string;\nexport type CssSelectors = Array<CssSelector>;\n\ntype CssSelectorMatchFn = (input: string) => boolean;\nexport type CssSelectorMatch = RegExp | string | CssSelectorMatchFn;\n\nexport const CSS_SELECTOR_TYPE = {\n id: \"id\",\n class: \"class\",\n tag: \"tag\",\n attribute: \"attribute\",\n nthchild: \"nthchild\",\n nthoftype: \"nthoftype\",\n} as const;\n\nexport type CssSelectorType = ObjectValues<typeof CSS_SELECTOR_TYPE>;\n\n// export enum CssSelectorType {\n// id = \"id\",\n// class = \"class\",\n// tag = \"tag\",\n// attribute = \"attribute\",\n// nthchild = \"nthchild\",\n// nthoftype = \"nthoftype\",\n// }\n\nexport type CssSelectorTypes = Array<CssSelectorType>;\n\nexport type CssSelectorsByType = Partial<Record<CssSelectorType, CssSelectors>>;\n\nexport type CssSelectorData = {\n [key in CssSelectorType]?: Array<string> | Array<Array<string>>;\n};\n\nexport type CssSelectorGeneratorOptionsInput = Partial<{\n // List of selector types to use. They will be prioritised by their order.\n selectors: CssSelectorType[];\n // List of selectors that should be prioritised.\n whitelist: Array<CssSelectorMatch>;\n // List of selectors that should be ignored.\n blacklist: Array<CssSelectorMatch>;\n // Root element inside which the selector will be generated. If not set, the document root will be used.\n root: ParentNode | null;\n // If set to `true`, the generator will test combinations of selectors of single type (e.g. multiple class selectors).\n combineWithinSelector: boolean;\n // If set to `true`, the generator will try to test combinations of selectors of different types (e.g. tag + class name).\n combineBetweenSelectors: boolean;\n // If set to `true`, all generated selectors will include the TAG part. Even if tag selector type is not included in `selectors` option.\n includeTag: boolean;\n // Maximum number of combinations of a selector type. This is handy for performance reasons, e.g. when elements have too many classnames.\n maxCombinations: number;\n // Maximum number of selector candidates to be tested for each element. This is handy for performance reasons, e.g. when elements can produce large number of combinations of various types of selectors.\n maxCandidates: number;\n}>;\n\nexport type CssSelectorGeneratorOptions = Required<\n Omit<CssSelectorGeneratorOptionsInput, \"selectors\"> & {\n selectors: CssSelectorTypes;\n }\n>;\n\nexport type IdentifiableParent = null | {\n foundElements: Element[];\n selector: CssSelector;\n};\n\nexport type PatternMatcher = (input: string) => boolean;\n","const libraryName = \"CssSelectorGenerator\";\n\n/**\n * Convenient wrapper for `console.warn` using consistent formatting.\n */\nexport function showWarning(id = \"unknown problem\", ...args: unknown[]): void {\n // eslint-disable-next-line no-console\n console.warn(`${libraryName}: ${id}`, ...args);\n}\n","import {\n CSS_SELECTOR_TYPE,\n CssSelectorGeneratorOptions,\n CssSelectorMatch,\n CssSelectorTypes,\n} from \"./types.js\";\nimport { isEnumValue } from \"./utilities-typescript.js\";\nimport { showWarning } from \"./utilities-messages.js\";\n\nexport const DEFAULT_OPTIONS = {\n selectors: [\n CSS_SELECTOR_TYPE.id,\n CSS_SELECTOR_TYPE.class,\n CSS_SELECTOR_TYPE.tag,\n CSS_SELECTOR_TYPE.attribute,\n ] as CssSelectorTypes,\n // if set to true, always include tag name\n includeTag: false,\n whitelist: [] as Array<CssSelectorMatch>,\n blacklist: [] as Array<CssSelectorMatch>,\n combineWithinSelector: true,\n combineBetweenSelectors: true,\n root: null,\n maxCombinations: Number.POSITIVE_INFINITY,\n maxCandidates: Number.POSITIVE_INFINITY,\n} as CssSelectorGeneratorOptions;\n\n/**\n * Makes sure returned value is a list containing only valid selector types.\n * @param input\n */\nexport function sanitizeSelectorTypes(input: unknown): CssSelectorTypes {\n if (!Array.isArray(input)) {\n return [];\n }\n return input.filter((item) => isEnumValue(CSS_SELECTOR_TYPE, item));\n}\n\n/**\n * Checks whether provided value is of type RegExp.\n */\nexport function isRegExp(input: unknown): input is RegExp {\n return input instanceof RegExp;\n}\n\n/**\n * Checks whether provided value is usable in whitelist or blacklist.\n * @param input\n */\nexport function isCssSelectorMatch(input: unknown): input is CssSelectorMatch {\n return [\"string\", \"function\"].includes(typeof input) || isRegExp(input);\n}\n\n/**\n * Converts input to a list of valid values for whitelist or blacklist.\n */\nexport function sanitizeCssSelectorMatchList(\n input: unknown,\n): Array<CssSelectorMatch> {\n if (!Array.isArray(input)) {\n return [];\n }\n return input.filter(isCssSelectorMatch);\n}\n\n/**\n * Checks whether provided value is valid Node.\n */\nexport function isNode(input: unknown): input is Node {\n return input instanceof Node;\n}\n\n/**\n * Checks whether provided value is valid ParentNode.\n */\nexport function isParentNode(input: unknown): input is ParentNode {\n const validParentNodeTypes: number[] = [\n Node.DOCUMENT_NODE,\n Node.DOCUMENT_FRAGMENT_NODE, // this includes Shadow DOM root\n Node.ELEMENT_NODE,\n ];\n\n return isNode(input) && validParentNodeTypes.includes(input.nodeType);\n}\n\n/**\n * Makes sure that the root node in options is valid.\n */\nexport function sanitizeRoot(input: unknown, element: Element): ParentNode {\n if (isParentNode(input)) {\n if (!input.contains(element)) {\n // eslint-disable-next-line max-len\n showWarning(\n \"element root mismatch\",\n \"Provided root does not contain the element. This will most likely result in producing a fallback selector using element's real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended.\",\n );\n }\n return input;\n }\n\n const rootNode = element.getRootNode({ composed: false });\n if (isParentNode(rootNode)) {\n if (rootNode !== document) {\n // eslint-disable-next-line max-len\n showWarning(\n \"shadow root inferred\",\n \"You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended.\",\n );\n }\n return rootNode;\n }\n\n return element.ownerDocument.querySelector(\":root\");\n}\n\n/**\n * Makes sure that the output is a number, usable as `maxResults` option in\n * powerset generator.\n */\nexport function sanitizeMaxNumber(input?: unknown): number {\n return typeof input === \"number\" ? input : Number.POSITIVE_INFINITY;\n}\n\n/**\n * Makes sure the options object contains all required keys.\n */\nexport function sanitizeOptions(\n element: Element,\n custom_options = {},\n): CssSelectorGeneratorOptions {\n const options = {\n ...DEFAULT_OPTIONS,\n ...custom_options,\n };\n\n return {\n selectors: sanitizeSelectorTypes(options.selectors),\n whitelist: sanitizeCssSelectorMatchList(options.whitelist),\n blacklist: sanitizeCssSelectorMatchList(options.blacklist),\n root: sanitizeRoot(options.root, element),\n combineWithinSelector: !!options.combineWithinSelector,\n combineBetweenSelectors: !!options.combineBetweenSelectors,\n includeTag: !!options.includeTag,\n maxCombinations: sanitizeMaxNumber(options.maxCombinations),\n maxCandidates: sanitizeMaxNumber(options.maxCandidates),\n };\n}\n","/**\n * Checks whether value is one of the enum's values.\n */\nexport function isEnumValue<T>(\n haystack: T,\n needle: unknown,\n): needle is T[keyof T] {\n return Object.values(haystack).includes(needle);\n}\n","import { CssSelectorMatch, PatternMatcher } from \"./types.js\";\nimport { isRegExp } from \"./utilities-options.js\";\nimport { showWarning } from \"./utilities-messages.js\";\n\n/**\n * Creates array containing only items included in all input arrays.\n */\nexport function getIntersection<T>(items: Array<Array<T>> = []): Array<T> {\n const [firstItem = [], ...otherItems] = items;\n if (otherItems.length === 0) {\n return firstItem;\n }\n return otherItems.reduce((accumulator, currentValue) => {\n return accumulator.filter((item) => currentValue.includes(item));\n }, firstItem);\n}\n\n/**\n * Converts array of arrays into a flat array.\n */\nexport function flattenArray<T>(input: Array<Array<T>>): Array<T> {\n return ([] as Array<T>).concat(...input);\n}\n\n/**\n * Convert string that can contain wildcards (asterisks) to RegExp source.\n */\nexport function wildcardToRegExp(input: string): string {\n return (\n input\n // convert all special characters used by RegExp, except an asterisk\n .replace(/[|\\\\{}()[\\]^$+?.]/g, \"\\\\$&\")\n // convert asterisk to pattern that matches anything\n .replace(/\\*/g, \".+\")\n );\n}\n\n/**\n * Creates function that will test list of provided matchers against input.\n * Used for white/blacklist functionality.\n */\nexport function createPatternMatcher(list: CssSelectorMatch[]): PatternMatcher {\n const matchFunctions = list.map((item) => {\n if (isRegExp(item)) {\n return (input: string) => item.test(input);\n }\n\n if (typeof item === \"function\") {\n return (input: string) => {\n const result = item(input);\n if (typeof result !== \"boolean\") {\n // eslint-disable-next-line max-len\n showWarning(\n \"pattern matcher function invalid\",\n \"Provided pattern matching function does not return boolean. It's result will be ignored.\",\n item,\n );\n return false;\n }\n return result;\n };\n }\n\n if (typeof item === \"string\") {\n const re = new RegExp(\"^\" + wildcardToRegExp(item) + \"$\");\n return (input: string) => re.test(input);\n }\n\n // eslint-disable-next-line max-len\n showWarning(\n \"pattern matcher invalid\",\n \"Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.\",\n item,\n );\n return () => false;\n });\n\n return (input: string) =>\n matchFunctions.some((matchFunction) => matchFunction(input));\n}\n","import { isElement } from \"./utilities-iselement.js\";\nimport { CssSelector } from \"./types.js\";\nimport { getIntersection } from \"./utilities-data.js\";\nimport { sanitizeRoot } from \"./utilities-options.js\";\n\n/**\n * Check whether element is matched uniquely by selector.\n */\nexport function testSelector(\n elements: Element[],\n selector: CssSelector,\n root?: Node,\n): boolean {\n const result = Array.from(\n sanitizeRoot(root, elements[0]).querySelectorAll(selector),\n );\n return (\n result.length === elements.length &&\n elements.every((element) => result.includes(element))\n );\n}\n\n/**\n * Test whether selector targets element. It does not have to be a unique match.\n */\nexport function testMultiSelector(\n element: Element,\n selector: CssSelector,\n root: ParentNode,\n): boolean {\n const result = Array.from(\n sanitizeRoot(root, element).querySelectorAll(selector),\n );\n return result.includes(element);\n}\n\n/**\n * Find all parents of a single element.\n */\nexport function getElementParents(\n element: Element,\n root?: ParentNode,\n): Element[] {\n root = root ?? getRootNode(element);\n const result = [];\n let parent = element;\n while (isElement(parent) && parent !== root) {\n result.push(parent);\n parent = parent.parentElement;\n }\n return result;\n}\n\n/**\n * Find all common parents of elements.\n */\nexport function getParents(elements: Element[], root?: ParentNode): Element[] {\n return getIntersection(\n elements.map((element) => getElementParents(element, root)),\n );\n}\n\n/**\n * Returns root node for given element. This needs to be used because of document-less environments, e.g. jsdom.\n */\nexport function getRootNode(element: Element): ParentNode {\n return element.ownerDocument.querySelector(\":root\");\n}\n","import { CSS_SELECTOR_TYPE, CssSelectorType } from \"./types.js\";\n\nexport const SELECTOR_SEPARATOR = \", \";\n\n// RegExp that will match invalid patterns that can be used in ID attribute.\nexport const INVALID_ID_RE = new RegExp(\n [\n \"^$\", // empty or not set\n \"\\\\s\", // contains whitespace\n ].join(\"|\"),\n);\n\n// RegExp that will match invalid patterns that can be used in class attribute.\nexport const INVALID_CLASS_RE = new RegExp(\n [\n \"^$\", // empty or not set\n ].join(\"|\"),\n);\n\n// Order in which a combined selector is constructed.\nexport const SELECTOR_PATTERN = [\n CSS_SELECTOR_TYPE.nthoftype,\n CSS_SELECTOR_TYPE.tag,\n CSS_SELECTOR_TYPE.id,\n CSS_SELECTOR_TYPE.class,\n CSS_SELECTOR_TYPE.attribute,\n CSS_SELECTOR_TYPE.nthchild,\n];\n","import { sanitizeSelectorItem } from \"./utilities-selectors.js\";\nimport { createPatternMatcher, getIntersection } from \"./utilities-data.js\";\nimport { CssSelectorGenerated } from \"./types.js\";\n\ntype AttributeData = {\n name: string;\n value: string;\n};\n\n// List of attributes to be ignored. These are handled by different selector types.\nexport const attributeBlacklistMatch = createPatternMatcher([\n \"class\",\n \"id\",\n // Angular attributes\n \"ng-*\",\n]);\n\n/**\n * Get simplified attribute selector for an element.\n */\nexport function attributeNodeToSimplifiedSelector({\n name,\n}: AttributeData): CssSelectorGenerated {\n return `[${name}]` as CssSelectorGenerated;\n}\n\n/**\n * Get attribute selector for an element.\n */\nexport function attributeNodeToSelector({\n name,\n value,\n}: AttributeData): CssSelectorGenerated {\n return `[${name}='${value}']` as CssSelectorGenerated;\n}\n\n/**\n * Checks whether attribute should be used as a selector.\n */\nexport function isValidAttributeNode(\n { nodeName }: Node,\n element: Element,\n): boolean {\n // form input value should not be used as a selector\n const tagName = element.tagName.toLowerCase();\n if ([\"input\", \"option\"].includes(tagName) && nodeName === \"value\") {\n return false;\n }\n\n return !attributeBlacklistMatch(nodeName);\n}\n\n/**\n * Sanitize all attribute data. We want to do it once, before we start to generate simplified/full selectors from the same data.\n */\nfunction sanitizeAttributeData({ nodeName, nodeValue }: Node): AttributeData {\n return {\n name: sanitizeSelectorItem(nodeName),\n value: sanitizeSelectorItem(nodeValue),\n };\n}\n\n/**\n * Get attribute selectors for an element.\n */\nexport function getElementAttributeSelectors(\n element: Element,\n): CssSelectorGenerated[] {\n const validAttributes = Array.from(element.attributes)\n .filter((attributeNode) => isValidAttributeNode(attributeNode, element))\n .map(sanitizeAttributeData);\n return [\n ...validAttributes.map(attributeNodeToSimplifiedSelector),\n ...validAttributes.map(attributeNodeToSelector),\n ];\n}\n\n/**\n * Get attribute selectors matching all elements.\n */\nexport function getAttributeSelectors(\n elements: Element[],\n): CssSelectorGenerated[] {\n const elementSelectors = elements.map(getElementAttributeSelectors);\n return getIntersection(elementSelectors);\n}\n","import { sanitizeSelectorItem } from \"./utilities-selectors.js\";\nimport { INVALID_CLASS_RE } from \"./constants.js\";\nimport { CssSelectorGenerated } from \"./types.js\";\nimport { getIntersection } from \"./utilities-data.js\";\n\n/**\n * Get class selectors for an element.\n */\nexport function getElementClassSelectors(\n element: Element,\n): CssSelectorGenerated[] {\n return (element.getAttribute(\"class\") || \"\")\n .trim()\n .split(/\\s+/)\n .filter((item) => !INVALID_CLASS_RE.test(item))\n .map((item) => `.${sanitizeSelectorItem(item)}` as CssSelectorGenerated);\n}\n\n/**\n * Get class selectors matching all elements.\n */\nexport function getClassSelectors(elements: Element[]): CssSelectorGenerated[] {\n const elementSelectors = elements.map(getElementClassSelectors);\n return getIntersection(elementSelectors);\n}\n","import { sanitizeSelectorItem } from \"./utilities-selectors.js\";\nimport { INVALID_ID_RE } from \"./constants.js\";\nimport { testSelector } from \"./utilities-dom.js\";\nimport { CssSelectorGenerated } from \"./types.js\";\n\n/**\n * Get ID selector for an element.\n * */\nexport function getElementIdSelectors(\n element: Element,\n): CssSelectorGenerated[] {\n const id = element.getAttribute(\"id\") || \"\";\n const selector = `#${sanitizeSelectorItem(id)}` as CssSelectorGenerated;\n const rootNode = element.getRootNode({ composed: false });\n return !INVALID_ID_RE.test(id) && testSelector([element], selector, rootNode)\n ? [selector]\n : [];\n}\n\n/**\n * Get ID selector for an element.\n */\nexport function getIdSelector(elements: Element[]): CssSelectorGenerated[] {\n return elements.length === 0 || elements.length > 1\n ? []\n : getElementIdSelectors(elements[0]);\n}\n","import { isElement } from \"./utilities-iselement.js\";\nimport { CssSelectorGenerated } from \"./types.js\";\nimport { getIntersection } from \"./utilities-data.js\";\n\n/**\n * Get nth-child selector for an element.\n */\nexport function getElementNthChildSelector(\n element: Element,\n): CssSelectorGenerated[] {\n const parent = element.parentNode;\n\n if (parent) {\n const siblings = Array.from(parent.childNodes).filter(isElement);\n const elementIndex = siblings.indexOf(element);\n if (elementIndex > -1) {\n return [`:nth-child(${elementIndex + 1})` as CssSelectorGenerated];\n }\n }\n\n return [];\n}\n\n/**\n * Get nth-child selector matching all elements.\n */\nexport function getNthChildSelector(\n elements: Element[],\n): CssSelectorGenerated[] {\n return getIntersection(elements.map(getElementNthChildSelector));\n}\n","import { sanitizeSelectorItem } from \"./utilities-selectors.js\";\nimport { CssSelector, CssSelectorGenerated } from \"./types.js\";\nimport { flattenArray } from \"./utilities-data.js\";\n\n/**\n * Get tag selector for an element.\n */\nexport function getElementTagSelectors(\n element: Element,\n): CssSelectorGenerated[] {\n return [\n sanitizeSelectorItem(element.tagName.toLowerCase()) as CssSelectorGenerated,\n ];\n}\n\n/**\n * Get tag selector for list of elements.\n */\nexport function getTagSelector(elements: Element[]): Array<CssSelector> {\n const selectors = [\n ...new Set(flattenArray(elements.map(getElementTagSelectors))),\n ];\n return selectors.length === 0 || selectors.length > 1 ? [] : [selectors[0]];\n}\n","import { getTagSelector } from \"./selector-tag.js\";\nimport { CssSelectorGenerated } from \"./types.js\";\nimport { getIntersection } from \"./utilities-data.js\";\n\n/**\n * Get nth-of-type selector for an element.\n */\nexport function getElementNthOfTypeSelector(\n element: Element,\n): CssSelectorGenerated[] {\n const tag = getTagSelector([element])[0];\n const parentElement = element.parentElement;\n\n if (parentElement) {\n const siblings = Array.from(parentElement.children).filter(\n (element) => element.tagName.toLowerCase() === tag,\n );\n const elementIndex = siblings.indexOf(element);\n if (elementIndex > -1) {\n return [\n `${tag}:nth-of-type(${elementIndex + 1})` as CssSelectorGenerated,\n ];\n }\n }\n\n return [];\n}\n\n/**\n * Get Nth-of-type selector matching all elements.\n */\nexport function getNthOfTypeSelector(\n elements: Element[],\n): CssSelectorGenerated[] {\n return getIntersection(elements.map(getElementNthOfTypeSelector));\n}\n","type powerSetGeneratorOptions = {\n maxResults?: number;\n};\n\nexport function* powerSetGenerator<T>(\n input: Array<T> = [],\n { maxResults = Number.POSITIVE_INFINITY }: powerSetGeneratorOptions = {},\n): IterableIterator<Array<T>> {\n let resultCounter = 0;\n let offsets = generateOffsets(1);\n\n while (offsets.length <= input.length && resultCounter < maxResults) {\n resultCounter += 1;\n const result = offsets.map((offset) => input[offset]);\n yield result;\n offsets = bumpOffsets(offsets, input.length - 1);\n }\n}\n\n/**\n * Generates power set of input items.\n */\nexport function getPowerSet<T>(\n input: Array<T> = [],\n { maxResults = Number.POSITIVE_INFINITY }: powerSetGeneratorOptions = {},\n): Array<Array<T>> {\n return Array.from(powerSetGenerator(input, { maxResults }));\n}\n\n/**\n * Helper function used by `getPowerSet`. Updates internal pointers.\n */\nfunction bumpOffsets(offsets: number[] = [], maxValue = 0): number[] {\n const size = offsets.length;\n if (size === 0) {\n return [];\n }\n const result = [...offsets];\n result[size - 1] += 1;\n for (let index = size - 1; index >= 0; index--) {\n if (result[index] > maxValue) {\n if (index === 0) {\n return generateOffsets(size + 1);\n } else {\n result[index - 1]++;\n result[index] = result[index - 1] + 1;\n }\n }\n }\n\n if (result[size - 1] > maxValue) {\n return generateOffsets(size + 1);\n }\n\n return result;\n}\n\n/**\n * Generates array of size N, filled with numbers sequence starting from 0.\n */\nfunction generateOffsets(size = 1): Array<number> {\n return Array.from(Array(size).keys());\n}\n","import { SELECTOR_PATTERN } from \"./constants.js\";\nimport {\n getAttributeSelectors,\n getElementAttributeSelectors,\n} from \"./selector-attribute.js\";\nimport {\n getClassSelectors,\n getElementClassSelectors,\n} from \"./selector-class.js\";\nimport { getElementIdSelectors, getIdSelector } from \"./selector-id.js\";\nimport {\n getElementNthChildSelector,\n getNthChildSelector,\n} from \"./selector-nth-child.js\";\nimport {\n getElementNthOfTypeSelector,\n getNthOfTypeSelector,\n} from \"./selector-nth-of-type.js\";\nimport { getElementTagSelectors, getTagSelector } from \"./selector-tag.js\";\nimport { createPatternMatcher, flattenArray } from \"./utilities-data.js\";\nimport { getParents, testSelector } from \"./utilities-dom.js\";\nimport {\n CSS_SELECTOR_TYPE,\n CssSelector,\n CssSelectorData,\n CssSelectorGenerated,\n CssSelectorGeneratorOptions,\n CssSelectorType,\n CssSelectorTypes,\n IdentifiableParent,\n OPERATOR,\n PatternMatcher,\n} from \"./types.js\";\nimport { isElement } from \"./utilities-iselement.js\";\nimport { getPowerSet } from \"./utilities-powerset.js\";\nimport { getCartesianProduct } from \"./utilities-cartesian.js\";\n\nexport const ESCAPED_COLON = \":\".charCodeAt(0).toString(16).toUpperCase();\n\n// Square brackets need to be escaped, but eslint has a problem with that.\n/* eslint-disable-next-line no-useless-escape */\nexport const SPECIAL_CHARACTERS_RE = /[ !\"#$%&'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;\n\n/**\n * Escapes special characters used by CSS selector items.\n */\nexport function sanitizeSelectorItem(input = \"\"): string {\n return CSS?.escape?.(input) ?? legacySanitizeSelectorItem(input);\n}\n\n/**\n * Legacy version of escaping utility, originally used for IE11-. Should\n * probably be replaced by a polyfill:\n * https://github.com/mathiasbynens/CSS.escape\n */\nexport function legacySanitizeSelectorItem(input = \"\"): string {\n return input\n .split(\"\")\n .map((character) => {\n if (character === \":\") {\n return `\\\\${ESCAPED_COLON} `;\n }\n if (SPECIAL_CHARACTERS_RE.test(character)) {\n return `\\\\${character}`;\n }\n return escape(character).replace(/%/g, \"\\\\\");\n })\n .join(\"\");\n}\n\nexport const SELECTOR_TYPE_GETTERS = {\n tag: getTagSelector,\n id: getIdSelector,\n class: getClassSelectors,\n attribute: getAttributeSelectors,\n nthchild: getNthChildSelector,\n nthoftype: getNthOfTypeSelector,\n};\n\nexport const ELEMENT_SELECTOR_TYPE_GETTERS = {\n tag: getElementTagSelectors,\n id: getElementIdSelectors,\n class: getElementClassSelectors,\n attribute: getElementAttributeSelectors,\n nthchild: getElementNthChildSelector,\n nthoftype: getElementNthOfTypeSelector,\n};\n\n/**\n * Creates selector of given type for single element.\n */\nexport function getElementSelectorsByType(\n element: Element,\n selectorType: CssSelectorType,\n): CssSelectorGenerated[] {\n return ELEMENT_SELECTOR_TYPE_GETTERS[selectorType](element);\n}\n\n/**\n * Returns list of selectors of given type for the element.\n */\nexport function getSelectorsByType(\n elements: Element[],\n selector_type: CssSelectorType,\n): Array<CssSelector> {\n const getter =\n SELECTOR_TYPE_GETTERS[selector_type] ?? ((): Array<CssSelector> => []);\n return getter(elements);\n}\n\n/**\n * Remove blacklisted selectors from list.\n */\nexport function filterSelectors(\n list: Array<CssSelector> = [],\n matchBlacklist: PatternMatcher,\n matchWhitelist: PatternMatcher,\n): Array<CssSelector> {\n return list.filter((item) => matchWhitelist(item) || !matchBlacklist(item));\n}\n\n/**\n * Prioritise whitelisted selectors in list.\n */\nexport function orderSelectors(\n list: Array<CssSelector> = [],\n matchWhitelist: PatternMatcher,\n): Array<CssSelector> {\n return list.sort((a, b) => {\n const a_is_whitelisted = matchWhitelist(a);\n const b_is_whitelisted = matchWhitelist(b);\n if (a_is_whitelisted && !b_is_whitelisted) {\n return -1;\n }\n if (!a_is_whitelisted && b_is_whitelisted) {\n return 1;\n }\n return 0;\n });\n}\n\n/**\n * Returns list of unique selectors applicable to given element.\n */\nexport function getAllSelectors(\n elements: Element[],\n root: ParentNode,\n options: CssSelectorGeneratorOptions,\n): Array<CssSelector> {\n const selectors_list = getSelectorsList(elements, options);\n const type_combinations = getTypeCombinations(selectors_list, options);\n const all_selectors = flattenArray(type_combinations);\n return [...new Set(all_selectors)];\n}\n\n/**\n * Creates object containing all selector types and their potential values.\n */\nexport function getSelectorsList(\n elements: Element[],\n options: CssSelectorGeneratorOptions,\n): CssSelectorData {\n const { blacklist, whitelist, combineWithinSelector, maxCombinations } =\n options;\n\n const matchBlacklist = createPatternMatcher(blacklist);\n const matchWhitelist = createPatternMatcher(whitelist);\n\n const reducer = (data: CssSelectorData, selector_type: CssSelectorType) => {\n const selectors_by_type = getSelectorsByType(elements, selector_type);\n const filtered_selectors = filterSelectors(\n selectors_by_type,\n matchBlacklist,\n matchWhitelist,\n );\n const found_selectors = orderSelectors(filtered_selectors, matchWhitelist);\n\n data[selector_type] = combineWithinSelector\n ? getPowerSet(found_selectors, { maxResults: maxCombinations })\n : found_selectors.map((item) => [item]);\n\n return data;\n };\n\n return getSelectorsToGet(options).reduce(reducer, {});\n}\n\n/**\n * Creates list of selector types that we will need to generate the selector.\n */\nexport function getSelectorsToGet(\n options: CssSelectorGeneratorOptions,\n): CssSelectorTypes {\n const { selectors, includeTag } = options;\n\n const selectors_to_get = [].concat(selectors);\n if (includeTag && !selectors_to_get.includes(\"tag\")) {\n selectors_to_get.push(\"tag\");\n }\n return selectors_to_get;\n}\n\n/**\n * Adds \"tag\" to a list, if it does not contain it. Used to modify selectors\n * list when includeTag option is enabled to make sure all results contain the\n * TAG part.\n */\nfunction addTagTypeIfNeeded(list: CssSelectorTypes): CssSelectorTypes {\n return list.includes(CSS_SELECTOR_TYPE.tag) ||\n list.includes(CSS_SELECTOR_TYPE.nthoftype)\n ? [...list]\n : [...list, CSS_SELECTOR_TYPE.tag];\n}\n\n/**\n * Generates list of possible selector type combinations.\n */\nexport function combineSelectorTypes(\n options: CssSelectorGeneratorOptions,\n): Array<CssSelectorTypes> {\n const { selectors, combineBetweenSelectors, includeTag, maxCandidates } =\n options;\n\n const combinations = combineBetweenSelectors\n ? getPowerSet(selectors, { maxResults: maxCandidates })\n : selectors.map((item) => [item]);\n\n return includeTag ? combinations.map(addTagTypeIfNeeded) : combinations;\n}\n\n/**\n * Generates list of combined CSS selectors.\n */\nexport function getTypeCombinations(\n selectors_list: CssSelectorData,\n options: CssSelectorGeneratorOptions,\n): Array<Array<CssSelector>> {\n return combineSelectorTypes(options)\n .map((item) => {\n return constructSelectors(item, selectors_list);\n })\n .filter((item) => item.length > 0);\n}\n\n/**\n * Generates all variations of possible selectors from provided data.\n */\nexport function constructSelectors(\n selector_types: CssSelectorTypes,\n selectors_by_type: CssSelectorData,\n): Array<CssSelector> {\n const data: CssSelectorData = {};\n selector_types.forEach((selector_type) => {\n const selector_variants = selectors_by_type[selector_type];\n if (selector_variants.length > 0) {\n data[selector_type] = selector_variants;\n }\n });\n\n const combinations = getCartesianProduct<string | string[]>(data);\n return combinations.map(constructSelector);\n}\n\n/**\n * Creates selector for given selector type. Combines several parts if needed.\n */\nexport function constructSelectorType(\n selector_type: CssSelectorType,\n selectors_data: CssSelectorData,\n): CssSelector {\n return selectors_data[selector_type]\n ? selectors_data[selector_type].join(\"\")\n : \"\";\n}\n\n/**\n * Converts selector data object to a selector.\n */\nexport function constructSelector(\n selectorData: CssSelectorData = {},\n): CssSelector {\n const pattern = [...SELECTOR_PATTERN];\n // selector \"nthoftype\" already contains \"tag\"\n if (\n selectorData[CSS_SELECTOR_TYPE.tag] &&\n selectorData[CSS_SELECTOR_TYPE.nthoftype]\n ) {\n pattern.splice(pattern.indexOf(CSS_SELECTOR_TYPE.tag), 1);\n }\n\n return pattern\n .map((type) => constructSelectorType(type, selectorData))\n .join(\"\");\n}\n\n/**\n * Generates combinations of child and descendant selectors within root\n * selector.\n */\nfunction generateCandidateCombinations(\n selectors: CssSelector[],\n rootSelector: CssSelector,\n): CssSelector[] {\n return [\n ...selectors.map(\n (selector) => rootSelector + OPERATOR.DESCENDANT + selector,\n ),\n ...selectors.map((selector) => rootSelector + OPERATOR.CHILD + selector),\n ];\n}\n\n/**\n * Generates a list of selector candidates that can potentially match target\n * element.\n */\nfunction generateCandidates(\n selectors: CssSelector[],\n rootSelector: CssSelector,\n): CssSelector[] {\n return rootSelector === \"\"\n ? selectors\n : generateCandidateCombinations(selectors, rootSelector);\n}\n\n/**\n * Tries to find an unique CSS selector for element within given parent.\n */\nexport function getSelectorWithinRoot(\n elements: Element[],\n root: ParentNode,\n rootSelector: CssSelector = \"\",\n options: CssSelectorGeneratorOptions,\n): null | CssSelector {\n const elementSelectors = getAllSelectors(elements, options.root, options);\n const selectorCandidates = generateCandidates(elementSelectors, rootSelector);\n for (const candidateSelector of selectorCandidates) {\n if (testSelector(elements, candidateSelector, options.root)) {\n return candidateSelector;\n }\n }\n return null;\n}\n\n/**\n * Climbs through parents of the element and tries to find the one that is\n * identifiable by unique CSS selector.\n */\nexport function getClosestIdentifiableParent(\n elements: Element[],\n root: ParentNode,\n rootSelector: CssSelector = \"\",\n options: CssSelectorGeneratorOptions,\n): IdentifiableParent {\n if (elements.length === 0) {\n return null;\n }\n\n const candidatesList = [\n elements.length > 1 ? elements : [],\n ...getParents(elements, root).map((element) => [element]),\n ];\n\n for (const currentElements of candidatesList) {\n const result = getSelectorWithinRoot(\n currentElements,\n root,\n rootSelector,\n options,\n );\n if (result) {\n return {\n foundElements: currentElements,\n selector: result,\n };\n }\n }\n\n return null;\n}\n\n/**\n * Converts input into list of elements, removing duplicates and non-elements.\n */\nexport function sanitizeSelectorNeedle(needle: unknown): Element[] {\n if (needle instanceof NodeList || needle instanceof HTMLCollection) {\n needle = Array.from(needle);\n }\n const elements = (Array.isArray(needle) ? needle : [needle]).filter(\n isElement,\n );\n return [...new Set(elements)];\n}\n","/**\n * Generates cartesian product out of input object.\n */\nexport function getCartesianProduct<T>(\n input: Record<string, T[]> = {},\n): Record<string, T>[] {\n let result: Record<string, T>[] = [];\n Object.entries(input).forEach(([key, values]) => {\n result = values.flatMap((value) => {\n if (result.length === 0) {\n return [{ [key]: value }];\n } else {\n return result.map((memo) => ({\n ...memo,\n [key]: value,\n }));\n }\n });\n });\n return result;\n}\n","import {\n CSS_SELECTOR_TYPE,\n CssSelectorGenerated,\n CssSelectorType,\n CssSelectorTypes,\n ElementData,\n ElementSelectorData,\n OPERATOR,\n OperatorValue,\n} from \"./types.js\";\nimport { SELECTOR_PATTERN } from \"./constants.js\";\nimport { getElementSelectorsByType } from \"./utilities-selectors.js\";\n\n/**\n * Creates data describing a specific selector.\n */\nexport function createElementSelectorData(\n selector: CssSelectorGenerated,\n): ElementSelectorData {\n return {\n value: selector,\n include: false,\n };\n}\n\n/**\n * Creates data describing an element within CssSelector chain.\n */\nexport function createElementData(\n element: Element,\n selectorTypes: CssSelectorTypes,\n operator: OperatorValue = OPERATOR.NONE,\n): ElementData {\n const selectors = {};\n selectorTypes.forEach((selectorType) => {\n Reflect.set(\n selectors,\n selectorType,\n getElementSelectorsByType(element, selectorType).map(\n createElementSelectorData,\n ),\n );\n });\n return {\n element,\n operator,\n selectors,\n };\n}\n\n/**\n * Constructs selector from element data.\n */\nexport function constructElementSelector({\n selectors,\n operator,\n}: ElementData): CssSelectorGenerated {\n let pattern = [...SELECTOR_PATTERN];\n // `nthoftype` already contains tag\n if (\n selectors[CSS_SELECTOR_TYPE.tag] &&\n selectors[CSS_SELECTOR_TYPE.nthoftype]\n ) {\n pattern = pattern.filter((item) => item !== CSS_SELECTOR_TYPE.tag);\n }\n\n let selector = \"\";\n pattern.forEach((selectorType) => {\n const selectorsOfType = selectors[selectorType] || [];\n selectorsOfType.forEach(({ value, include }) => {\n if (include) {\n selector += value;\n }\n });\n });\n\n return (operator + selector) as CssSelectorGenerated;\n}\n","import { getElementParents } from \"./utilities-dom.js\";\nimport { SELECTOR_SEPARATOR } from \"./constants.js\";\nimport {\n CSS_SELECTOR_TYPE,\n CssSelector,\n CssSelectorType,\n OPERATOR,\n} from \"./types.js\";\nimport {\n constructElementSelector,\n createElementData,\n} from \"./utilities-element-data.js\";\n\n/**\n * Creates fallback selector for single element.\n */\nexport function getElementFallbackSelector(element: Element): CssSelector {\n const parentElements = getElementParents(element).reverse();\n const elementsData = parentElements.map((element) => {\n const elementData = createElementData(\n element,\n [CSS_SELECTOR_TYPE.nthchild],\n OPERATOR.CHILD,\n );\n elementData.selectors.nthchild.forEach((selectorData) => {\n selectorData.include = true;\n });\n return elementData;\n });\n\n return [\":root\", ...elementsData.map(constructElementSelector)].join(\"\");\n}\n\n/**\n * Creates chain of :nth-child selectors from root to the elements.\n */\nexport function getFallbackSelector(elements: Element[]): CssSelector {\n return elements.map(getElementFallbackSelector).join(SELECTOR_SEPARATOR);\n}\n","import { getFallbackSelector } from \"./selector-fallback.js\";\nimport { sanitizeOptions } from \"./utilities-options.js\";\nimport {\n getClosestIdentifiableParent,\n sanitizeSelectorNeedle,\n} from \"./utilities-selectors.js\";\nimport { CssSelector, CssSelectorGeneratorOptionsInput } from \"./types.js\";\nimport { testSelector } from \"./utilities-dom.js\";\nimport { SELECTOR_SEPARATOR } from \"./constants.js\";\n\n/**\n * Generates unique CSS selector for an element.\n */\nexport function getCssSelector(\n needle: unknown,\n custom_options: CssSelectorGeneratorOptionsInput = {},\n): CssSelector {\n const elements = sanitizeSelectorNeedle(needle);\n const options = sanitizeOptions(elements[0], custom_options);\n let partialSelector = \"\";\n let currentRoot = options.root;\n\n /**\n * Utility function to make subsequent calls shorter.\n */\n function updateIdentifiableParent() {\n return getClosestIdentifiableParent(\n elements,\n currentRoot,\n partialSelector,\n options,\n );\n }\n\n let closestIdentifiableParent = updateIdentifiableParent();\n while (closestIdentifiableParent) {\n const { foundElements, selector } = closestIdentifiableParent;\n if (testSelector(elements, selector, options.root)) {\n return selector;\n }\n currentRoot = foundElements[0];\n partialSelector = selector;\n closestIdentifiableParent = updateIdentifiableParent();\n }\n\n // if failed to find single selector matching all elements, try to find\n // selector for each standalone element and join them together\n if (elements.length > 1) {\n return elements\n .map((element) => getCssSelector(element, options))\n .join(SELECTOR_SEPARATOR);\n }\n\n return getFallbackSelector(elements);\n}\n\nexport default getCssSelector;\n","import { useEffect } from 'react'\nimport { useLocation } from 'react-router-dom'\nimport { getCssSelector } from 'css-selector-generator'\nimport legacyIframeHandler from '$ustoreinternal/services/legacyIframeHandler'\n\nlet lastSelectedNode\n\nfunction RouteChangeListener () {\n const location = useLocation()\n\n useEffect(() => {\n document.body.addEventListener('focusin', (e) => {\n lastSelectedNode = getCssSelector(e.target)\n })\n }, [])\n\n useEffect(() => {\n // This callback will be invoked every time the location (route) changes\n legacyIframeHandler.handleRoute(location.pathname + location.search)\n\n if (lastSelectedNode) {\n document.querySelector(lastSelectedNode)?.focus()\n }\n }, [location]) // The effect will re-run when the location changes\n\n return null // This component doesn't render anything\n}\n\nexport default RouteChangeListener\n","import React, { Component, createRef } from 'react'\nimport HeadSEO from './HeadSEO'\nimport Header from './Header'\nimport Footer from './Footer'\nimport './Layout.scss'\nimport CookiesRibbon from \"./CookiesRibbon\";\nimport ResizeObserver from \"resize-observer-polyfill\"\nimport RouteChangeListener from './RouteChangeListener'\n/**\n * The main page wrapper - contains the Header and Footer and gets children as the main content\n *\n * @param {object} state - state of store\n * @param {component} children - React components to be presented between header and footer\n * @param {string} [className] - class name to append to the container div\n */\n\nclass Layout extends Component {\n constructor() {\n super();\n\n this.isConnectStore = false\n this.resizeObserver = null;\n this.resizeElement = createRef()\n }\n\n static currentHeight = 0\n\n _debounce = function (ms, fn) {\n var timer;\n return function () {\n clearTimeout(timer)\n var args = Array.prototype.slice.call(arguments)\n args.unshift(this)\n timer = setTimeout(fn.bind.apply(fn, args), ms)\n };\n };\n\n componentWillUnmount() {\n if (this.resizeObserver) this.resizeObserver.disconnect();\n }\n\n render() {\n const { state, children, className } = this.props\n\n const storeType = (state && state.currentStore) ? state.currentStore.StoreType : null\n if (storeType === 3) {\n // connect store - hide header and footer.\n this.isConnectStore = true\n }\n\n if (this.isConnectStore) {\n if (this.resizeObserver) this.resizeObserver.disconnect();\n\n this.resizeObserver = new ResizeObserver(this._debounce(300, function (entries) {\n entries.forEach(entry => {\n if (Layout.currentHeight !== entry.contentRect.height) {\n Layout.currentHeight = entry.contentRect.height\n console.log('USTORE_CONNECT_RESIZE height: ' + entry.contentRect.height)\n window.parent.postMessage({\n type: '@USTORE_CONNECT_RESIZE',\n data: {\n height: entry.contentRect.height,\n width: entry.contentRect.width\n }\n }, '*')\n }\n })\n }))\n\n if (this.resizeElement.current) this.resizeObserver.observe(this.resizeElement.current);\n }\n\n let isPreviewMode = false\n let url = ''\n try {\n // wrapping in try catch so that in cross-domain (connect store) it will be ignored.\n url = window.top.location.href\n } catch (error) { }\n\n if (url && (url.includes('MobilePreview.aspx') || url.includes('ThemeCustomization.aspx')))\n isPreviewMode = true\n\n const showHeaderFooter = storeType === 4 ?\n state.currentStore.Attributes.find(attr => attr.Name === 'ShowHeaderAndFooter' && attr.Value === 'True') :\n (!this.isConnectStore || isPreviewMode)\n\n return (\n <div>\n <HeadSEO {...state} />\n <div className={`layout ${className ? className : ''} ${isPreviewMode ? 'preview' : ''} ${!showHeaderFooter ? 'connect' : ''}`}>\n {showHeaderFooter && <Header {...state} />}\n <div className=\"main-content\" ref={this.resizeElement}>\n {children}\n </div>\n {showHeaderFooter && <Footer />}\n {state.customState && state.currentStore && <CookiesRibbon showRibbon={state.customState.showCookieRibbon} />}\n </div>\n <RouteChangeListener/>\n </div>\n )\n }\n}\n\nexport default Layout\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport HTMLLinesEllipsis from 'react-lines-ellipsis/lib/html'\nimport './CategoryItem.scss'\n\n/**\n * This component represents the category in the store\n * It contains the category image and details\n *\n * @param {object} model - the category\n * @param {string} url - the url to redirects when clicking the category\n * @param {string} [className] - the css class to add to main div\n */\n\nconst CategoryItem = ({ model, url, className }) => {\n if (!model) {\n return <div className=\"category-item\" />\n }\n const imageUrl = model.ImageUrl ? model.ImageUrl : require(`$assets/images/default.png`)\n\n return (\n <Link to={url} className={`category-item ${className || ''}`} data-qaautomationinfo={model.FriendlyID}>\n <div className=\"image-wrapper\">\n <img alt='' src={imageUrl} />\n </div>\n <div className=\"category-name\">\n <HTMLLinesEllipsis style={{ whiteSpace: 'pre-wrap' }} unsafeHTML={model.Name} maxLine={2} basedOn='words' />\n </div>\n </Link>\n )\n}\n\nexport default CategoryItem\n","/**\n * A component to display inventory information of a product\n *\n * @param {object} model - ProductInventoryModel containing data regarding inventory of the product\n * @param {number} minQuantity - the minimum quantity of units that can be ordered from the product\n * @param {boolean} hideInStock (false) - Hide the 'In Stock #####' label if is in stock.\n * @param {string} pluralName - the plural name of the item type.\n */\nimport React from 'react'\nimport { t } from '$themelocalization'\nimport './Inventory.scss'\n\nexport const isOutOfStock = (quantity, minQuantity, AllowOutOfStockPurchase) => {\n return (quantity < minQuantity && !AllowOutOfStockPurchase)\n}\n\nconst Inventory = (props) => {\n const { model, minQuantity, hideInStock = true, pluralName, singleName } = props\n\n return (\n <span className=\"inventory\">\n {\n (model && model.Quantity < minQuantity)\n ? (\n model.AllowOutOfStockPurchase\n ? <div className='warning'>{t('Inventory.Out_of_stock_Delivery_delayed')}</div>\n : <div className='error'>{t('Inventory.Out_of_stock')}</div>\n ) : null\n }\n {model && model.Quantity >= minQuantity\n ? <div className='inStock'>\n {/* {t('Inventory.In_Stock', model.Quantity)} */}\n {`${t('Inventory.In_stock')} ${model.Quantity} ${model.Quantity === 1 ? singleName || 'Item' : pluralName || 'Items'}`}\n </div>\n : null\n }\n </span>\n )\n}\n\nexport default Inventory\n","import React, { Component } from 'react'\nimport { UStoreProvider } from '@ustore/core'\nimport deepcopy from 'deepcopy'\n\nexport const withState = (WrappedComponent) => {\n class ConnectedComponent extends Component {\n render () {\n const preRender = WrappedComponent.preRender\n const state = UStoreProvider ? UStoreProvider.state.get() : {}\n const preRenderedState = preRender ? preRender(deepcopy(state)) : state\n return <WrappedComponent { ...this.props} state={preRenderedState} customState={preRenderedState.customState}/>\n }\n }\n\n return ConnectedComponent\n}\n","/**\n * A component to display price information of a product, formatted according to currency and culture definitions\n *\n * @param {object} model - ProductPriceModel containing data regarding the price of the product\n * @param {bool} isMinimumPrice - if true this price is the minimum price of the product (adding From before price string)\n * @param {object} state - current state of the store\n */\n\nimport { withState } from '$ustoreinternal/services/withState'\nimport { UStoreProvider } from '@ustore/core'\nimport { formatNumByLocale } from '$ustoreinternal/services/utils'\nimport { t } from '$themelocalization'\n\nexport const Price = ({ model, isMinimumPrice, state, showCurrency = true, overridePriceFormat = '' }) => {\n const { currentStore, currentCurrency, currentCulture } = state\n\n if (!currentStore || !currentCurrency || !currentCulture || !model || Number.isNaN(model.Price) || Number.isNaN(model.Tax)) { return '' }\n\n let formatParams = {\n taxFormat: overridePriceFormat || currentStore.TaxFormat,\n symbol: currentCurrency.Symbol,\n code: currentCurrency.Code,\n currencyFormat: currentCulture.CurrencyFormat,\n decimalSeparator: currentCulture.DecimalSeparator,\n decimalPlaces: currentCulture.DecimalPlaces,\n languageCode: currentCulture.LanguageCode\n }\n\n const { price, tax, priceIncludingTax } = UStoreProvider.state.culture.getConvertedPrices(model)\n // format the given price and tax amount to a string according to the tax, culture and currency definitions of models in state\n const priceDisplayString = formatParams.taxFormat\n .replace(/{Price}/g, formatForCurrencyAndCulture(price, formatParams))\n .replace(/{Tax}/g, formatForCurrencyAndCulture(tax, formatParams))\n .replace(/{PriceIncludingTax}/g, formatForCurrencyAndCulture(priceIncludingTax, formatParams))\n\n // if Price === -1 then it means that Excel is invalid or cannot perform the calculation - show NA instead.\n const isPriceValid = (price !== -1)\n\n // new Intl.NumberFormat(currentCulture.LanguageCode).format(priceDisplayString)\n return (\n <span className=\"price-display\">\n {\n isPriceValid && isMinimumPrice &&\n <span className=\"minimum-price-notation\">{t('ProductItem.From_Price')}<span> </span></span>\n }\n <span className=\"price\">{isPriceValid ? priceDisplayString : 'N/A'} {showCurrency && <span className='price-currency'>{formatParams.code}</span>}</span>\n </span>\n )\n}\n\n// format the given amount to a string according to the passed definitions of currency an culture\nconst formatForCurrencyAndCulture = (amount, formatParams) => {\n const { currencyFormat, symbol, decimalPlaces, decimalSeparator } = formatParams\n // split the amount to Integer and floating, apply toFixed(decimalPlaces) to get correct amount of digits.\n const [intAmount, floating] = amount.toFixed(decimalPlaces).toString().split('.') // in case of decimalPlaces == 0, the 'floating' const will be undefined.\n\n return currencyFormat\n .replace(/{Symbol}/g, symbol)\n // format the given amount to a string according to passed culture definitions\n // apply the formatNumByLocale function only on the Integer part of the amount, and add the floating part only if exist.\n // only show decimalSeparator if floating exist (in case of decimalPlaces == 0, the 'floating' const will be undefined)\n .replace(/{Amount}/g, formatNumByLocale(intAmount, formatParams.languageCode) + (floating ? decimalSeparator + floating : ''))\n}\n\nexport default withState(Price)\n","/**\n * A component to display quantity control of a product\n *\n * @param {object} quantityConfig - ProductQuantityModel containing data regarding the quantities of the product\n * @param {string} additionalClassName - a className that is added to the component (can be used to set invalid class).\n * @param {function} onChange - the callback function that fires when value was changed.\n * @param {string} id - a unique ID for the component.\n * @param {number} quantity - the current quantity.\n * @param {boolean} showMinimalDisplay - flag to show the quantity control in a minimal display (currently in ProductItem component)\n */\n\n\nimport { debounce } from 'throttle-debounce'\nimport React, { Component } from 'react'\nimport { t } from '$themelocalization'\nimport './BaseQuantity.scss'\n\nconst MAX_VALUE = 2147483646\n\nclass BaseQuantity extends Component {\n constructor(props) {\n super(props)\n\n this.onValueChange = this.onValueChange.bind(this)\n this.updatedQuantity = props.quantity\n }\n\n getValueFromRange = (options, value) => {\n if (options.length === 0) {\n return null\n }\n // if not in any range, use the minimum value.\n let selected = options.find((item) => { return value === item.Value })\n if (selected === undefined) {\n selected = options[0]\n }\n\n return selected\n }\n\n onValueChange(e) {\n e.persist();\n this.updatedQuantity = parseInt(e.target.value)\n this.debounced(e);\n }\n\n onKeyDown = (e) => {\n if (e.key === '.' || e.key === '-' || e.key === '+' || e.key === '=') {\n e.preventDefault()\n return false\n }\n }\n\n onClickPlusMinus(reduceOrAdd, id) {\n const value = parseInt(this.updatedQuantity + reduceOrAdd)\n if (value > 0) {\n const el = document.querySelector(`#${id}`)\n if (el) {\n el.value = value\n }\n this.updatedQuantity = value\n this.debounced({ target: { value, id } });\n }\n }\n\n debounced = debounce(300, (e) => {\n if (e.target.value > MAX_VALUE) {\n e.target.value = MAX_VALUE\n }\n e.target.value = parseInt(e.target.value)\n this.props.onChange(e)\n });\n\n render() {\n const { quantityConfig, quantity, additionalClassName, onChange, id, showMinimalDisplay } = this.props\n\n if (!quantityConfig) {\n return null\n }\n\n const selectedDropDownItem = quantityConfig.Options && this.getValueFromRange(quantityConfig.Options, quantity)\n\n return (<div className='product-quantity'>\n {!quantityConfig.Changeable && !showMinimalDisplay && // READ ONLY LABEL\n <div className='ro-quantity-wrapper'>\n <span className={'quantity-control quantity-label ' + additionalClassName} id={'quantity_' + id}>{quantity}</span>\n </div>\n }\n {!quantityConfig.Changeable && showMinimalDisplay && // READ ONLY LABEL with Quantity before\n <div className='ro-quantity-wrapper-show-quantity'>\n <span className='quantity-label'>{t('product.quantity')}:</span>\n <span className={'quantity-control quantity-label ' + additionalClassName} id={'quantity_' + id}>{quantity}</span>\n </div>\n }\n {quantityConfig.Changeable && quantityConfig.Options === null && !showMinimalDisplay && // TEXT BOX\n <div className='txt-quantity-wrapper'>\n <input id={'quantity_' + id} type={'number'} className={'quantity-control quantity-input ' + additionalClassName}\n onChange={this.onValueChange} defaultValue={!isNaN(quantity) ? parseInt(quantity) : null}\n onKeyDown={this.onKeyDown}\n onWheel={(e) => { return false }} />\n </div>\n }\n {quantityConfig.Changeable && quantityConfig.Options === null && showMinimalDisplay && // TEXT BOX WITH +/-\n <div className='txt-quantity-wrapper-show-indicators'>\n <span className={`indicator minus ${this.updatedQuantity <= 1 ? 'disabled' : ''}`}\n onClick={() => { this.onClickPlusMinus(-1, 'quantity_' + id) }}>-</span>\n <input id={'quantity_' + id} type={'number'} className={'quantity-control quantity-input ' + additionalClassName}\n onChange={this.onValueChange} defaultValue={!isNaN(quantity) ? parseInt(quantity) : null}\n onKeyDown={this.onKeyDown}\n onWheel={(e) => { return false }} />\n <span className='indicator plus' onClick={() => { this.onClickPlusMinus(1, 'quantity_' + id) }}>+</span>\n\n </div>\n }\n {quantityConfig.Changeable && quantityConfig.Options != null && quantityConfig.Options.length && !showMinimalDisplay &&// DROPDOWN\n <div className='dd-quantity-wrapper'>\n <select id={'quantity_' + id} onChange={onChange} className={'quantity-control quantity-dropdown ' + additionalClassName} defaultValue={selectedDropDownItem.Value} title={selectedDropDownItem.Name}>\n {quantityConfig.Options.map((item) => {\n return <option key={item.Value} value={item.Value} >{item.Name}</option>\n })}\n </select>\n </div>\n }\n {quantityConfig.Changeable && quantityConfig.Options != null && quantityConfig.Options.length && showMinimalDisplay &&// DROPDOWN with custom carret\n <div className='dd-quantity-wrapper-custom-caret'>\n <select id={'quantity_' + id} onChange={onChange} className={'quantity-control quantity-dropdown custom-caret ' + additionalClassName} defaultValue={selectedDropDownItem.Value} title={selectedDropDownItem.Name}>\n {quantityConfig.Options.map((item) => {\n return <option key={item.Value} value={item.Value} >{item.Name}</option>\n })}\n </select>\n </div>\n }\n </div>)\n }\n}\nexport default BaseQuantity\n","/**\n * A component to display quantity input based on quantity data model\n *\n * @param {function} onQuantityChange(value, isValid) - a callback fired when quantity was changed.\n * @param {object} productModel\n * @param {object} orderModel\n * @param {supportsInventory} boolean\n */\n\nimport React, { Component } from 'react'\nimport './ProductItemQuantity.scss'\nimport BaseQuantity from './BaseQuantity'\nimport { t } from '$themelocalization'\nimport { Tooltip } from 'reactstrap'\n\nclass ProductItemQuantity extends Component {\n constructor (props) {\n super(props)\n\n this.state = {\n errorMessage: '',\n showErrorTooltip: false,\n errorTooltipTarget: ''\n }\n\n this.onChange = this.onChange.bind(this)\n this.getValidationErrorMessage = this.getValidationErrorMessage.bind(this)\n }\n\n getValidationErrorMessage (value) {\n const { productModel: { Configuration: { Quantity: { Minimum, Maximum } } }, productModel: { Inventory }, supportsInventory } = this.props\n\n const inventory = supportsInventory && Inventory ? Inventory.Quantity : null\n\n if (value === null || value === undefined || isNaN(value)) {\n return <span className='validation-required'>{t('KitQuantity.Validation_required')}</span>\n }\n\n if (Minimum && Number(value) < Minimum) {\n return <span className='validation-minimum'>{t('KitQuantity.Validation_minimum', { MinimumQuantity: Minimum })}</span>\n }\n\n if (Maximum && Number(value) > Maximum) {\n return <span className='validation-maximum'>{t('KitQuantity.Validation_maximum', { MaximumQuantity: Maximum })}</span>\n }\n\n if (inventory && Number(value) > inventory && !Inventory.AllowOutOfStockPurchase) {\n return <span className='validation-inventory'>{t('KitQuantity.Validation_inventory', { InventoryQuantity: inventory })}</span>\n }\n\n return null\n }\n\n onChange (e) {\n const { onQuantityChange } = this.props\n\n const value = parseInt(e.target.value)\n const errorMessage = this.getValidationErrorMessage(value)\n this.setState({ errorMessage, showErrorTooltip: !!errorMessage, errorTooltipTarget: e.target.id })\n\n // send new value and isValid to parent.\n onQuantityChange(value, !errorMessage)\n }\n\n render () {\n const { productModel: { Configuration: { Quantity }, ID }, orderModel } = this.props\n\n // if no Configuration dont show anything\n if (!Quantity) {\n return null\n }\n const additionalClassName = this.state.errorMessage ? 'not-valid' : ''\n const targetExist = document.getElementById(`${this.state.errorTooltipTarget}`)\n\n return (<div className=\"product-item-quantity\">\n <BaseQuantity\n quantityConfig={Quantity}\n additionalClassName={additionalClassName}\n quantity={orderModel.Quantity}\n id={ID}\n onChange={this.onChange}\n showMinimalDisplay={true}\n />\n {\n this.state.showErrorTooltip && targetExist &&\n <Tooltip placement='bottom' isOpen={true} target={this.state.errorTooltipTarget}\n className=\"quantity-error-tooltip bs-tooltip-bottom\">\n {this.state.errorMessage}\n </Tooltip>\n }\n </div>)\n }\n}\n\nexport default ProductItemQuantity\n","/**\n * A component to display units of measure information of a product\n *\n * @param {object} model - ProductUnitModel containing data regarding the units of the product\n * @param {number} minQuantity - the minimum quantity of units that can be ordered from the product\n * @param {isMinimumPrice} boolean - a flag to denote if the component should show display regarding minimum price or not\n *\n */\n\nimport { t } from '$themelocalization'\nimport './UnitsOfMeasure.scss'\n\nconst UnitsOfMeasure = (props) => {\n const { model, minQuantity, isMinimumPrice } = props\n\n if (!model) {\n return null\n }\n\n const pricePerItem = model && model.PackType === null\n const { ItemType, PackType, ItemQuantity } = model\n return (\n <span className=\"units-of-measure\">\n {\n pricePerItem\n ? (minQuantity > 1 && isMinimumPrice) ? t('UnitsOfMeasure.Per_Quantity_Item_Type', {\n MinimumQuantity: minQuantity,\n ItemTypePluralName: ItemType.PluralName\n }) : '' // e.g. Per 100 items\n : (minQuantity === 1 || !isMinimumPrice) // e.g. Sold in Packs (100 Items/Pack)\n ? t('UnitsOfMeasure.Sold_in_Pack_Type', {\n PackTypePluralName: PackType.PluralName,\n ItemQuantity,\n PackTypeName: PackType.Name,\n ItemTypePluralName: ItemType.PluralName\n })\n : // e.g. Per 2 packs (100 items/pack)\n t('UnitsOfMeasure.Per_Quantity_Pack_Type',\n {\n MinimumQuantity: minQuantity,\n PackTypePluralName: PackType.PluralName,\n ItemQuantity,\n PackTypeName: PackType.Name,\n ItemTypePluralName: ItemType.PluralName\n })\n }\n </span>\n )\n}\n\nexport default UnitsOfMeasure\n","import { useEffect, useState} from 'react'\nimport { useNavigate} from 'react-router-dom'\nimport Inventory from './Inventory'\nimport Price from './Price'\nimport ProductItemQuantity from './ProductItemQuantity'\nimport UnitsOfMeasure from './UnitsOfMeasure'\nimport { Button, Tooltip, Icon, ImageLoader, LoadingDots} from '$core-components'\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\nimport './ProductItem.scss'\n\nconst ProductItem = (props) => {\n const navigate = useNavigate()\n const [currentOrderItem, setCurrentOrderItem] = useState(null)\n const [isPriceCalculating, setIsPriceCalculating] = useState(false)\n const [calculatedPriceModel, setCalculatedPriceModel] = useState(null)\n const [addToCartShowSuccess, setAddToCartShowSuccess] = useState(false)\n const [quantity, setQuantity] = useState(null)\n const [isQuantityValid, setIsQuantityValid] = useState(true)\n const [addToCartShowSuccessTimer, setAddToCartShowSuccessTimer] = useState(null)\n let {descriptionLines, productNameLines, model, url, detailed, className} = props\n\n const onQuantityChange = async (newQuantity, isValid) => {\n const { model } = props\n\n if (isValid) {\n setQuantity(newQuantity)\n if (model.HasPricing) {\n setIsPriceCalculating(true)\n const calculatedPriceModel = await onCalculatePrice(newQuantity)\n setIsPriceCalculating(false)\n setIsQuantityValid(true)\n setCalculatedPriceModel(calculatedPriceModel)\n } else {\n setIsQuantityValid(true)\n }\n } else {\n setIsQuantityValid(false)\n }\n }\n\n const onCalculatePrice = async (newQuantity) => {\n const { model } = props\n if (model.MinimumPrice === null) return\n const orderItemForApi = currentOrderItem || await UStoreProvider.api.orders.addOrderItem(model.ID)\n\n const priceModel = await UStoreProvider.api.orders.getPriceOrderItem(orderItemForApi.ID, { ...orderItemForApi, Quantity: newQuantity })\n setCalculatedPriceModel(priceModel.Price)\n setCurrentOrderItem(orderItemForApi)\n return priceModel.Price\n }\n\n const addToCart = async () => {\n if (isQuantityValid) {\n const { model } = props\n const orderItemForApi = currentOrderItem || await UStoreProvider.api.orders.addOrderItem(model.ID)\n // call the update order api if quantity is updated\n if (quantity) {\n const updated = {\n ...orderItemForApi,\n Quantity: quantity\n }\n\n await UStoreProvider.api.orders.updateOrderItem(orderItemForApi.ID, updated)\n }\n await UStoreProvider.api.orders.addToCart(orderItemForApi.ID)\n\n if (UStoreProvider.state.get()['currentStore']?.Attributes?.find((attr) => attr.Name === 'ForceCartAspx' && attr.Value === 'False')) {\n await UStoreProvider.state.store.loadCartItemsCount()\n }\n\n return true\n }\n\n return false\n }\n\n const onAddToCartClick = async () => {\n const success = await addToCart()\n\n if (success) {\n setAddToCartShowSuccess(true)\n setCurrentOrderItem(null)\n setQuantity(null)\n setAddToCartShowSuccessTimer(setTimeout(() => {\n setAddToCartShowSuccess(false)\n setCalculatedPriceModel(null)\n }, 3000))\n }\n }\n\n const onClick = (url) => {\n if (typeof url === \"string\") {\n navigate(url)\n }\n }\n\n useEffect(() => {\n return () => {\n clearTimeout(addToCartShowSuccessTimer)\n }\n }, [addToCartShowSuccessTimer])\n\n if (!model) {\n return null\n }\n\n productNameLines = productNameLines ? productNameLines : 2\n descriptionLines = descriptionLines ? descriptionLines : 4\n\n const imageUrl = (model && model.ImageUrl) ? model.ImageUrl : require(`$assets/images/default.png`)\n const productNameAndCatalog = model.CatalogNumber && model.CatalogNumber.trim().length > 0 ? `${model.Name} / ${model.CatalogNumber}` : model.Name\n const showQuickAddToCart = model.Configuration && model.Configuration.AllowQuickAddToCart\n const priceModelToDisplay = calculatedPriceModel || model.MinimumPrice\n const isMinimumPrice = !calculatedPriceModel && !showQuickAddToCart\n const quantityToShow = quantity || model.MinimumQuantity\n\n return (\n <div className={`product-item ${className ? className : ''}`} data-qaautomationinfo={model.FriendlyID}>\n <div className=\"image-wrapper\" onClick={() => onClick(url)}>\n <ImageLoader className=\"image\" src={imageUrl}/>\n </div>\n <div className=\"product-name\" style={{maxHeight: `${productNameLines * 1.5}em`}} onClick={() => onClick(url)}>\n <Tooltip placement=\"top\" text={productNameAndCatalog} maxLine={productNameLines}/>\n </div>\n <Inventory model={model.Inventory} minQuantity={model.MinimumQuantity}/>\n {detailed && <div className=\"product-description\" style={{maxHeight: `${descriptionLines * 1.5}em`}}>\n <Tooltip placement=\"bottom\" text={model.ShortDescription} maxLine={descriptionLines}/>\n </div>}\n \n {model.HasPricing && priceModelToDisplay && <div>\n <div className=\"product-units\">\n <UnitsOfMeasure minQuantity={model.MinimumQuantity} model={model.Unit} isMinimumPrice={isMinimumPrice}/>\n </div>\n <div className=\"product-price\">\n {isPriceCalculating ?\n <LoadingDots/> : <Price model={priceModelToDisplay} isMinimumPrice={isMinimumPrice}/>\n }\n </div>\n </div>}\n <div className=\"anchor-flex-end\"/>\n {/* {showQuickAddToCart && <div className='add-to-cart'>\n {!addToCartShowSuccess && <div className='add-to-cart-controls'>\n <div className='add-to-cart-product-quantity'>\n <ProductItemQuantity\n supportsInventory={true}\n onQuantityChange={onQuantityChange}\n productModel={model}\n orderModel={{Quantity: quantityToShow}}\n />\n </div>\n <div className='add-to-cart-button-wrapper'>\n <Button className='button-secondary add-to-cart-button' text={t('ProductItem.Add_to_cart_button_text')}\n onClick={() => onAddToCartClick()}/>\n <Button className='button-secondary add-button' text={t('ProductItem.Add_button_text')}\n onClick={() => onAddToCartClick()}/>\n </div>\n </div>\n }\n {addToCartShowSuccess &&\n <div className='add-to-cart-success'>\n <div>{t('ProductItem.Added_successfully_message')}\n <span className='success-checkmark-icon-wrapper'>\n <Icon name=\"checkmark.svg\" width=\"20px\" height=\"20px\" className=\"success-checkmark-icon\"/>\n </span>\n </div>\n </div>\n }\n </div>\n } */}\n </div>\n )\n}\n\n\nexport default ProductItem\n","import { useEffect, useRef } from 'react'\nimport { useNavigate} from 'react-router-dom'\nimport { throttle } from 'throttle-debounce'\nimport theme from '$styles/_theme.scss'\nimport './PromotionItem.scss'\n\nconst PromotionItem = ({ imageUrl, title, subTitle, buttonText, url, className }) => {\n const promotionItem = useRef()\n const navigate = useNavigate()\n\n const goTo = (url) => {\n if(!url){\n return\n }\n if (url.startsWith('http')) {\n window.location.href = url\n }\n else {\n navigate(url)\n }\n }\n\n useEffect(() => {\n const setButtonSize = () => {\n if(!promotionItem) {\n return\n }\n \n const button = promotionItem.current.querySelector('.button')\n const width = document.body.clientWidth\n \n if (window.matchMedia(`(max-width: ${theme.md})`).matches) {\n button.style['max-width'] = `${width - (2 * 20)}px`\n } else {\n button.style['max-width'] = ''\n }\n }\n\n window.addEventListener('resize', setButtonSize)\n throttle(250, setButtonSize)\n setButtonSize()\n\n return () => window.removeEventListener('resize', setButtonSize)\n }, [])\n\n return (\n <div className={`promotion-item ${className || ''}`} ref={promotionItem}>\n {\n imageUrl && <img className=\"promotion-image\" src={`${imageUrl}`} alt=\"\"/>\n }\n <div className=\"main\">\n <div className=\"title-area\">\n <div className=\"title text\">{title}</div>\n <div className=\"subtitle text\">{subTitle}</div>\n <div className=\"button button-primary truncate\" onClick={() => goTo(url)}>{buttonText}</div>\n </div>\n </div>\n </div>\n )\n}\n\nexport default PromotionItem\n","import React, { useEffect, useState } from 'react'\nimport { throttle } from 'throttle-debounce'\n\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\n\nimport { Slot } from '$core-components'\nimport Layout from '../components/layout'\nimport CategoryItem from '../components/category/CategoryItem'\nimport ProductItem from '../components/products/ProductItem'\nimport PromotionItem from '../components/products/PromotionItem'\nimport { Slider, Gallery } from '$core-components'\n\nimport { getIsNGProduct } from '$themeservices/utils'\nimport { decodeStringForURL } from '$ustoreinternal/services/utils'\nimport { getVariableValue } from '$ustoreinternal/services/cssVariables'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport theme from '$styles/_theme.scss'\nimport './Home.scss'\n\nconst Home = (props) => {\n const { customState: { categories } } = props\n\n const [isMobile, setIsMobile] = useState(false)\n const [promotionItemButtonUrl, setPromotionItemButtonUrl] = useState('')\n const [homeFeaturedProducts, setHomeFeaturedProducts] = useState(null)\n const [homeFeaturedCategory, setHomeFeaturedCategory] = useState(null)\n\n const promotionItemImageUrl = getVariableValue('--homepage-carousel-slide-1-image', require(`$assets/images/banner_image.png`), true)\n const promotionItemTitle = getVariableValue('--homepage-carousel-slide-1-main-text', t('PromotionItem.Title'))\n const promotionItemSubtitle = getVariableValue('--homepage-carousel-slide-1-sub-text', t('PromotionItem.Subtitle'))\n const promotionItemButtonText = getVariableValue('--homepage-carousel-slide-1-button-text', t('PromotionItem.Button_Text'))\n const onResize = () => setIsMobile(document.body.clientWidth < parseInt(theme.md.replace('px', '')))\n\n useEffect(() => {\n window.addEventListener('resize', onResize.bind(this))\n throttle(250, onResize);// Call this function once in 250ms only\n\n (async () => {\n const maxInPage = 200\n let { Count, Categories } = await UStoreProvider.api.categories.getTopCategories(1, maxInPage)\n if (Count === 0) {\n return\n }\n\n const page = Math.ceil(Count / maxInPage)\n if (page > 1) {\n const { Categories: lastPageCategories } = await UStoreProvider.api.categories.getTopCategories(page, maxInPage)\n if (lastPageCategories.length > 0) {\n Categories = lastPageCategories\n }\n }\n\n const homeFeaturedCategory = Categories[Categories.length - 1]\n const { Products } = await UStoreProvider.api.products.getProducts(homeFeaturedCategory.ID, 1)\n setHomeFeaturedProducts(Products)\n setHomeFeaturedCategory(homeFeaturedCategory)\n })()\n\n onResize()\n return () => {\n window.removeEventListener('resize', onResize)\n clearCustomState()\n }\n }, [])\n\n useEffect(() => {\n if (categories && categories.length && !promotionItemButtonUrl) {\n const { FriendlyID, Name } = categories[0]\n const defaultURL = urlGenerator.get({ page: 'category', id: FriendlyID, name: decodeStringForURL(Name) })\n setPromotionItemButtonUrl(getVariableValue('--homepage-carousel-slide-1-button-url', defaultURL, false, true))\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.customState, categories])\n\n if (!props.state) {\n return null\n }\n\n return (\n <Layout {...props} className=\"home\">\n <Slot name=\"homepage_top\"/>\n <div className=\"promotion-wrapper\">\n <Slider>\n <PromotionItem\n imageUrl={promotionItemImageUrl}\n title={promotionItemTitle}\n subTitle={promotionItemSubtitle}\n buttonText={promotionItemButtonText}\n url={promotionItemButtonUrl}\n />\n </Slider>\n\n {/* BEGIN - Abwesenheits-Info*/}\n {/* <div style={{width: '100%', height: 'auto', backgroundColor: '#ffffff', marginTop: '1rem', textAlign: 'center'}}>\n <p style={{marginLeft: '10px'}}>\n Unsere Türen bleiben vom <span style={{fontSize: '24px'}}>24. Dezember bis zum 6. Januar</span> geschlossen.<br />\n Wir danken für Ihr Verständnis und wünschen Ihnen eine frohe und erholsame Weihnachtszeit!\n <br />\n <br />\n Nos portes seront fermées du <span style={{fontSize: '24px'}}>24 décembre au 6 janvier.</span><br />\n Merci de votre compréhension et nous vous souhaitons de joyeuses fêtes de fin d’année!\n </p>\n </div> */}\n {/* END - Abwesenheits-Info*/}\n </div>\n\n <div className=\"middle-section\">\n {categories && categories.length > 0 &&\n <div className=\"categories-wrapper\">\n {/* <Slider multi> */}\n {\n categories.map((model) => {\n return <CategoryItem key={model.ID} model={model}\n url={urlGenerator.get({\n page: 'category',\n id: model.FriendlyID,\n name: decodeStringForURL(model.Name)\n })}/>\n }\n )\n }\n {/* </Slider> */}\n </div>\n }\n\n {/* <div className=\"divider\"/>\n {homeFeaturedCategory && homeFeaturedProducts?.length > 0 &&\n <div className=\"featured-products-wrapper\">\n <Gallery title={homeFeaturedCategory.Name}\n seeAllUrl={urlGenerator.get({\n page: 'category',\n id: homeFeaturedCategory.FriendlyID,\n name: decodeStringForURL(homeFeaturedCategory.Name)\n })}\n gridRows=\"2\">\n {\n homeFeaturedProducts.map((model) => {\n const hideProduct =\n isMobile &&\n model.Attributes &&\n model.Attributes.find(attr => attr.Name === 'UEditEnabled' && attr.Value === 'true') !== undefined\n\n return !hideProduct &&\n <ProductItem\n key={model.ID}\n model={model}\n productNameLines=\"2\"\n descriptionLines=\"4\"\n url={getIsNGProduct(model)\n ? urlGenerator.get({\n page: 'products',\n id: model.FriendlyID,\n name: decodeStringForURL(model.Name)\n })\n : urlGenerator.get({\n page: 'product',\n id: model.FriendlyID,\n name: decodeStringForURL(model.Name)\n })\n }\n />\n })\n }\n </Gallery>\n </div>\n } */}\n </div>\n <Slot name=\"homepage_bottom\"/>\n </Layout>\n )\n\n}\n\nexport default Home\n\nfunction clearCustomState () {\n UStoreProvider.state.customState.delete('homeFeaturedProducts')\n UStoreProvider.state.customState.delete('homeFeaturedCategory')\n UStoreProvider.state.customState.delete('currentProduct')\n UStoreProvider.state.customState.delete('currentOrderItem')\n UStoreProvider.state.customState.delete('currentOrderItemId')\n UStoreProvider.state.customState.delete('currentOrderItemPriceModel')\n UStoreProvider.state.customState.delete('lastOrder')\n UStoreProvider.state.customState.delete('currentProductThumbnails')\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React, { useCallback, useEffect, useState } from 'react'\nimport {useParams} from 'react-router-dom'\nimport { UStoreProvider } from '@ustore/core'\nimport { throttle } from 'throttle-debounce'\nimport Layout from '../components/layout'\nimport { Slider, ScrollableGallery } from '$core-components'\nimport CategoryItem from '../components/category/CategoryItem'\nimport ProductItem from '../components/products/ProductItem'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { t } from '$themelocalization'\nimport { getIsNGProduct } from '$themeservices'\nimport { decodeStringForURL } from '$ustoreinternal/services/utils'\n\nimport theme from '$styles/_theme.scss'\nimport './Category.scss'\nimport { Slot } from '$core-components'\n\nconst PRODUCTS_PAGE_SIZE = 8\nconst SUB_CATEGORIES_PAGE_SIZE = 200\n\nconst clearCustomState = () => {\n UStoreProvider.state.customState.delete('categoryFeaturedProducts')\n UStoreProvider.state.customState.delete('categoryProductsCount')\n UStoreProvider.state.customState.delete('currentCategory')\n UStoreProvider.state.customState.delete('subCategories')\n UStoreProvider.state.customState.delete('currentProduct')\n UStoreProvider.state.customState.delete('currentOrderItem')\n UStoreProvider.state.customState.delete('currentOrderItemId')\n UStoreProvider.state.customState.delete('currentOrderItemPriceModel')\n UStoreProvider.state.customState.delete('lastOrder')\n UStoreProvider.state.customState.delete('currentProductThumbnails')\n}\n\nconst Category = (props) => {\n const { id: categoryFriendlyID } = useParams()\n const [isMobile, setIsMobile] = useState(false)\n const [categoryID, setCategoryID] = useState(null)\n const [currentCategory, setCurrentCategory] = useState(null)\n const [subCategories, setSubCategories] = useState(null)\n const [categoryFeaturedProducts, setCategoryFeaturedProducts] = useState(null)\n const [categoryProductsCount, setCategoryProductsCount] = useState(null)\n const [showSubCategories, setShowSubCategories] = useState(false)\n const hasMoreItems = categoryFeaturedProducts && categoryFeaturedProducts.length < categoryProductsCount\n\n const onResize = throttle(250, () => setIsMobile(document.body.clientWidth < parseInt(theme.md.replace('px', ''))))\n const initialLoad = async () => {\n if (categoryFriendlyID !== currentCategory?.FriendlyID) {\n clearCustomState()\n const newCategoryID = await UStoreProvider.api.categories.getCategoryIDByFriendlyID(categoryFriendlyID)\n setCategoryID(newCategoryID)\n setCurrentCategory(await UStoreProvider.api.categories.getCategory(newCategoryID))\n setSubCategories((await UStoreProvider.api.categories.getSubCategories(newCategoryID, 1, SUB_CATEGORIES_PAGE_SIZE))?.Categories)\n const { Products, Count } = await UStoreProvider.api.products.getProducts(newCategoryID, 1, PRODUCTS_PAGE_SIZE)\n setCategoryFeaturedProducts(Products)\n setCategoryProductsCount(Count)\n // this causes the Slider to re-render and show the first slide when the category changes\n setShowSubCategories(() => false)\n setShowSubCategories(() => true)\n }\n }\n\n const loadProducts = useCallback(async () => {\n if (!props.customState) {\n return null\n }\n const nextPage = categoryFeaturedProducts ? Math.ceil(categoryFeaturedProducts.length / PRODUCTS_PAGE_SIZE) + 1 : 1\n const { Products: products } = await UStoreProvider.api.products.getProducts(currentCategory?.ID || categoryID, nextPage, PRODUCTS_PAGE_SIZE)\n const joinedProducts = categoryFeaturedProducts ? [...categoryFeaturedProducts, ...products] : products\n setCategoryFeaturedProducts(joinedProducts)\n UStoreProvider.state.customState.set('categoryFeaturedProducts', joinedProducts)\n }, [categoryFeaturedProducts, currentCategory?.ID, categoryID, props.customState])\n\n useEffect(() => {\n (async () => {\n window.addEventListener('resize', onResize)\n await initialLoad()\n })()\n return () => {\n window.removeEventListener('resize', onResize)\n clearCustomState()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n useEffect(() => {\n (async () => await initialLoad())()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [categoryFriendlyID])\n\n useEffect(() => {\n const allHeight = document.body.scrollHeight\n const visibleHeight = window.innerHeight\n const isVisibleFullSite = allHeight === visibleHeight\n if (isVisibleFullSite && categoryFeaturedProducts && hasMoreItems && currentCategory?.ID) {\n loadProducts()\n }\n }, [categoryFeaturedProducts, currentCategory?.ID, hasMoreItems, loadProducts])\n\n if (!props.customState) {\n return null\n }\n const galleryTitle =\n categoryProductsCount\n ? subCategories && subCategories.length > 0\n ? t('Category.Count_featured_products', { count: categoryProductsCount })\n : t('Category.Count_products', { count: categoryProductsCount })\n : ''\n\n return (\n\n <Layout {...props} className=\"category\">\n <Slot name=\"category_top\" />\n <div className=\"title\" dangerouslySetInnerHTML={{ __html: currentCategory && currentCategory.Name }} />\n\n {showSubCategories && subCategories && subCategories.length > 0 &&\n <div>\n <div className=\"categories-wrapper\">\n <Slider key={currentCategory.ID} multi>\n {\n subCategories.map((model) => {\n return <CategoryItem key={model.ID} model={model}\n url={urlGenerator.get({ page: 'category', id: model.FriendlyID, name: decodeStringForURL(model.Name) })} />\n }\n )\n }\n </Slider>\n </div>\n <div className=\"divider\" />\n </div>\n }\n {currentCategory && categoryFeaturedProducts && categoryFeaturedProducts.length > 0 &&\n <div>\n <div className=\"featured-products-wrapper\">\n <ScrollableGallery title={galleryTitle} hasMoreItems={hasMoreItems} onScroll={loadProducts}>\n {\n categoryFeaturedProducts.map((model) => {\n const hideProduct =\n isMobile &&\n model.Attributes &&\n model.Attributes.find(attr => attr.Name === 'UEditEnabled' && attr.Value === 'true') !== undefined\n\n return !hideProduct &&\n <ProductItem\n key={model.ID}\n model={model} detailed\n productNameLines=\"2\"\n descriptionLines=\"4\"\n url={getIsNGProduct(model)\n ? urlGenerator.get({ page: 'products', id: model.FriendlyID, name: decodeStringForURL(model.Name) })\n : urlGenerator.get({ page: 'product', id: model.FriendlyID, name: decodeStringForURL(model.Name) })\n }\n />\n })\n }\n </ScrollableGallery>\n </div>\n </div>\n }\n <Slot name=\"category_bottom\" />\n </Layout>\n )\n}\n\nexport default Category\n","import React, { useEffect } from 'react'\nimport { useNavigate } from 'react-router-dom'\nimport { t } from '$themelocalization'\nimport Layout from '../components/layout'\nimport { UStoreProvider } from '@ustore/core'\nimport legacyIframeHandler from '$ustoreinternal/services/legacyIframeHandler'\nimport './Legacy.scss'\n\n//Using https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage\nconst Legacy = (props) => {\n const navigate = useNavigate()\n\n const handleFrameMessage = (e) => {\n const msg = e.data\n if (!msg || !msg.type) {\n return\n }\n\n const asPath = window.location.pathname + window.location.search\n\n // if the message is an info request message, just call the function to get the info and post the reposnse.\n if (msg.type === '@REQUEST_UI_INFO') {\n legacyIframeHandler.onRequestScrollPosition(msg)\n return\n }\n\n if (msg.type === '@NG_REDIRECT' || msg.type === '@CHANGE_NG_ROUTE') {\n legacyIframeHandler.onRedirectRequested(msg, asPath)\n return\n }\n\n if (msg.type === '@SCROLL_PARENT_DISABLE' || msg.type === '@SCROLL_PARENT_ENABLE') {\n legacyIframeHandler.onScrollParentRequested(msg)\n return\n }\n\n if (msg.type === '@APPROVAL_SUMMARY') {\n if (msg.data?.pendingApprovalCount && parseInt(msg.data.pendingApprovalCount) !== 0) {\n return\n }\n UStoreProvider.api.orders.getUserOrdersSummary()\n .then((userOrdersSummary) => {\n UStoreProvider.state.customState.set('userOrdersSummary', userOrdersSummary)\n\n })\n return\n }\n\n const { messageHandled: changeRouteOrDimensionsHandled } = legacyIframeHandler.changeRouteOrDimensions(msg, asPath)\n const messageHandled = changeRouteOrDimensionsHandled || legacyIframeHandler.handleScrolling(msg)\n\n if (!messageHandled && !(['START', 'STATE', 'ACTION', 'PARTIAL_STATE', 'INIT_INSTANCE', '@SCROLL_ON', '@SCROLL_OFF', '@SCROLL_TO', '@CHANGE_ROUTE', '__REACT_CONTEXT_DEVTOOL_GLOBAL_HOOK_EVENT', 'webpackWarnings', 'webpackClose'].includes(msg.type))) { UStoreProvider.state.dispatch(msg) }\n }\n\n useEffect(() => {\n legacyIframeHandler.setNavigate = navigate\n })\n\n useEffect(() => {\n window.addEventListener('resize', legacyIframeHandler.handleResize)\n window.addEventListener('message', handleFrameMessage)\n window.addEventListener('blur', () => legacyIframeHandler.handleClickingIframe())\n\n legacyIframeHandler.adaptContainerToIframe()\n\n return () => {\n window.removeEventListener('resize', legacyIframeHandler.handleResize)\n window.removeEventListener('message', handleFrameMessage)\n window.removeEventListener('blur', () => legacyIframeHandler.handleClickingIframe())\n }\n }, [])\n\n return (\n <Layout {...props}>\n {window.uStoreConfig?.uStoreRemoteServerUrl?.includes('https://') ?\n <div className=\"cant-show-secured-legacy\">\n <h1>{t('LegacyPageCantShowSecuredInDev')}</h1>\n </div>:\n <div className=\"iframe-container\" ref={e => legacyIframeHandler.iframeContainer = e} />}\n </Layout>\n )\n}\n\nexport default Legacy\n","import React, { useEffect } from 'react'\nimport Legacy from './Legacy'\nimport {UStoreProvider} from \"@ustore/core\";\nimport { useParams } from 'react-router-dom'\n\n\nconst Product = (props) => {\n const params = useParams()\n\n useEffect(() => {\n (async () => {\n const productID = await UStoreProvider.api.products.getProductIDByFriendlyID(params.id)\n const currentProduct = await UStoreProvider.api.products.getProductByID(productID, false)\n UStoreProvider.state.customState.setBulk({ currentProduct })\n })()\n return () => {\n UStoreProvider.state.customState.delete('currentProduct')\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n if (!props.customState?.currentProduct) {\n return null\n }\n return <Legacy {...props}/>\n}\nexport default Product\n","/**\n * A component to display quantity input based on quantity data model\n *\n * @param {function} onQuantityChange(value, isValid) - a callback fired when quantity was changed.\n * @param {object} productModel\n * @param {object} orderModel\n */\n\nimport{ Component } from 'react'\nimport BaseQuantity from '../BaseQuantity'\nimport { t } from '$themelocalization'\nimport './KitQuantity.scss'\n\nclass KitQuantity extends Component {\n constructor (props) {\n super(props)\n\n this.state = {\n errorMessage: ''\n }\n\n this.onChange = this.onChange.bind(this)\n this.getValidationErrorMessage = this.getValidationErrorMessage.bind(this)\n }\n\n componentDidMount () {\n const { productModel: { Configuration: { Quantity } }, orderModel } = this.props\n // run onChange on mount, to show validation errors on default value.\n if ((Quantity.Changeable && Quantity.Options === null)) {\n // text box\n this.onChange({ target: { value: orderModel.Quantity } })\n }\n }\n\n getValidationErrorMessage (value) {\n const { productModel: { Configuration: { Quantity: { Minimum, Maximum } } } } = this.props\n\n if (!value || isNaN(value)) {\n return t('KitQuantity.Validation_required')\n }\n\n if (Minimum && Number(value) < Minimum) {\n return t('KitQuantity.Validation_minimum', { MinimumQuantity: Minimum })\n }\n\n if (Maximum && Number(value) > Maximum) {\n return t('KitQuantity.Validation_maximum', { MaximumQuantity: Maximum })\n }\n\n return null\n }\n\n onChange (e) {\n const { onQuantityChange } = this.props\n\n const value = e.target.value\n const errorMessage = this.getValidationErrorMessage(value)\n\n this.setState({ errorMessage: errorMessage })\n\n // send new value and error (if any, null if valid) to parent.\n onQuantityChange(value, errorMessage === null)\n }\n\n render () {\n const { productModel: { Configuration: { Quantity }, ID }, orderModel } = this.props\n\n // if no Configuration or if value = 1 and read only => dont show anything\n if (!Quantity || (!Quantity.Changeable && orderModel.Quantity === 1)) {\n return null\n }\n const additionalClassName = this.state.errorMessage ? 'not-valid' : ''\n\n return (<div className='kit-quantity-component'>\n <BaseQuantity\n quantityConfig={Quantity}\n additionalClassName={additionalClassName}\n quantity={orderModel.Quantity}\n id={ID}\n onChange={this.onChange}\n />\n {this.state.errorMessage && (\n <span className='quantity-error'>{this.state.errorMessage}</span>\n )}\n </div>)\n }\n}\n\nexport default KitQuantity\n","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from 'react';\nimport classNames from 'classnames';\nimport TooltipPopoverWrapper, { propTypes } from './TooltipPopoverWrapper';\nvar defaultProps = {\n placement: 'top',\n autohide: true,\n placementPrefix: 'bs-tooltip',\n trigger: 'hover focus'\n};\nfunction Tooltip(props) {\n var arrowClasses = classNames('tooltip-arrow', props.arrowClassName);\n var popperClasses = classNames('tooltip', 'show', props.popperClassName);\n var classes = classNames('tooltip-inner', props.innerClassName);\n return /*#__PURE__*/React.createElement(TooltipPopoverWrapper, _extends({}, props, {\n arrowClassName: arrowClasses,\n popperClassName: popperClasses,\n innerClassName: classes\n }));\n}\nTooltip.propTypes = propTypes;\nTooltip.defaultProps = defaultProps;\nexport default Tooltip;","/**\n * A component to display quantity input based on quantity data model\n *\n * @param {function} onQuantityChange(value, isValid) - a callback fired when quantity was changed.\n * @param {number} kitQuantity - the number of Kits (to multiply in case of Component Quantity)\n * @param {object} productModel\n * @param {object} orderModel\n */\n\nimport React, { Component } from 'react'\nimport './KitQuantity.scss'\nimport { Tooltip } from 'reactstrap'\nimport BaseQuantity from '../BaseQuantity'\nimport { t } from '$themelocalization'\n\nclass KitItemQuantity extends Component {\n constructor (props) {\n super(props)\n\n this.state = {\n errorMessage: ''\n }\n\n this.onChange = this.onChange.bind(this)\n this.getValidationErrorMessage = this.getValidationErrorMessage.bind(this)\n }\n\n componentDidUpdate (prevProps, prevState) {\n if (prevProps.kitQuantity !== this.props.kitQuantity && !isNaN(this.props.kitQuantity)) {\n const { orderModel } = this.props\n this.onChange({ target: { value: orderModel.Quantity } })\n }\n }\n\n componentDidMount () {\n const { orderModel } = this.props\n\n if (!orderModel) {\n return\n }\n\n // run onChange on mount, to show validation errors on default value.\n this.onChange({ target: { value: orderModel.Quantity } })\n }\n\n getValidationErrorMessage (value) {\n const { productModel: { Unit, Configuration: { Quantity: { Minimum, Maximum } }, Inventory }, kitQuantity } = this.props\n\n const itemUnitName = Unit.PackType ? Unit.PackType.PluralName : Unit.ItemType ? Unit.ItemType.PluralName : ''\n\n const inventory = Inventory ? Inventory.Quantity : null\n\n if (!value || isNaN(value)) {\n return t('KitQuantity.Validation_required')\n }\n\n if (Minimum && Number(value) < Minimum) {\n return t('KitQuantity.Validation_minimum', { MinimumQuantity: Minimum })\n }\n\n if (Maximum && Number(value) * kitQuantity > Maximum) {\n return kitQuantity === 1\n ? t('KitQuantity.Validation_maximum', { MaximumQuantity: Maximum })\n : `${t('KitQuantity.Validation_maximum', { MaximumQuantity: Maximum })}. \n ${t('KitQuantity.Validation_quantity_multiplier', {\n Quantity: Number(value),\n UnitPluralName: itemUnitName,\n KitQuantity: kitQuantity,\n TotalQuantity: kitQuantity * Number(value)\n })}\n `\n }\n\n if (inventory && Number(value) * kitQuantity > inventory && !Inventory.AllowOutOfStockPurchase) {\n return kitQuantity === 1\n ? t('KitQuantity.Validation_inventory', { InventoryQuantity: inventory })\n : `${t('KitQuantity.Validation_inventory', { InventoryQuantity: inventory })}\n ${t('KitQuantity.Validation_quantity_multiplier', {\n Quantity: Number(value),\n UnitPluralName: itemUnitName,\n KitQuantity: kitQuantity,\n TotalQuantity: kitQuantity * Number(value)\n })}`\n }\n\n return null // valid\n }\n\n onChange (e) {\n const { onQuantityChange } = this.props\n\n const value = e.target.value\n const errorMessage = this.getValidationErrorMessage(value)\n\n this.setState({ errorMessage: errorMessage })\n\n // send new value and error (if any, null if valid) to parent.\n onQuantityChange(value, errorMessage === null)\n }\n\n render () {\n const { productModel, orderModel } = this.props\n\n if (!productModel || !orderModel) {\n return null\n }\n\n const { Configuration: { Quantity }, ID } = productModel\n\n if (!Quantity) {\n return null\n }\n const additionalClassName = this.state.errorMessage ? 'not-valid' : ''\n\n return (<div className='kit-quantity-component'>\n <BaseQuantity\n quantityConfig={Quantity}\n additionalClassName={additionalClassName}\n quantity={orderModel.Quantity}\n id={ID}\n onChange={this.onChange}\n />\n {this.state.errorMessage &&\n <Tooltip className='quantity-error-tooltip' placement=\"bottom\" isOpen={true} target={'quantity_' + ID}>\n {this.state.errorMessage}\n </Tooltip>\n }\n </div>)\n }\n}\n\nexport default KitItemQuantity\n","import React from 'react';\n\n/**\n * CarouselContext\n * {\n * direction: PropTypes.oneOf(['start', 'end']).isRequired,\n * }\n */\nexport var CarouselContext = /*#__PURE__*/React.createContext({});","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"in\", \"children\", \"cssModule\", \"slide\", \"tag\", \"className\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Transition } from 'react-transition-group';\nimport { CarouselContext } from './CarouselContext';\nimport { mapToCssModules, TransitionTimeouts, TransitionStatuses, tagPropType } from './utils';\nvar CarouselItem = /*#__PURE__*/function (_React$Component) {\n _inherits(CarouselItem, _React$Component);\n var _super = _createSuper(CarouselItem);\n function CarouselItem(props) {\n var _this;\n _classCallCheck(this, CarouselItem);\n _this = _super.call(this, props);\n _this.state = {\n startAnimation: false\n };\n _this.onEnter = _this.onEnter.bind(_assertThisInitialized(_this));\n _this.onEntering = _this.onEntering.bind(_assertThisInitialized(_this));\n _this.onExit = _this.onExit.bind(_assertThisInitialized(_this));\n _this.onExiting = _this.onExiting.bind(_assertThisInitialized(_this));\n _this.onExited = _this.onExited.bind(_assertThisInitialized(_this));\n return _this;\n }\n _createClass(CarouselItem, [{\n key: \"onEnter\",\n value: function onEnter(node, isAppearing) {\n this.setState({\n startAnimation: false\n });\n this.props.onEnter(node, isAppearing);\n }\n }, {\n key: \"onEntering\",\n value: function onEntering(node, isAppearing) {\n // getting this variable triggers a reflow\n var offsetHeight = node.offsetHeight;\n this.setState({\n startAnimation: true\n });\n this.props.onEntering(node, isAppearing);\n return offsetHeight;\n }\n }, {\n key: \"onExit\",\n value: function onExit(node) {\n this.setState({\n startAnimation: false\n });\n this.props.onExit(node);\n }\n }, {\n key: \"onExiting\",\n value: function onExiting(node) {\n this.setState({\n startAnimation: true\n });\n node.dispatchEvent(new CustomEvent('slide.bs.carousel'));\n this.props.onExiting(node);\n }\n }, {\n key: \"onExited\",\n value: function onExited(node) {\n node.dispatchEvent(new CustomEvent('slid.bs.carousel'));\n this.props.onExited(node);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n var _this$props = this.props,\n isIn = _this$props[\"in\"],\n children = _this$props.children,\n cssModule = _this$props.cssModule,\n _this$props$slide = _this$props.slide,\n slide = _this$props$slide === void 0 ? true : _this$props$slide,\n _this$props$tag = _this$props.tag,\n Tag = _this$props$tag === void 0 ? 'div' : _this$props$tag,\n className = _this$props.className,\n transitionProps = _objectWithoutProperties(_this$props, _excluded);\n return /*#__PURE__*/React.createElement(Transition, _extends({}, transitionProps, {\n enter: slide,\n exit: slide,\n \"in\": isIn,\n onEnter: this.onEnter,\n onEntering: this.onEntering,\n onExit: this.onExit,\n onExiting: this.onExiting,\n onExited: this.onExited\n }), function (status) {\n var direction = _this2.context.direction;\n var isActive = status === TransitionStatuses.ENTERED || status === TransitionStatuses.EXITING;\n var directionClassName = (status === TransitionStatuses.ENTERING || status === TransitionStatuses.EXITING) && _this2.state.startAnimation && (direction === 'end' ? 'carousel-item-start' : 'carousel-item-end');\n var orderClassName = status === TransitionStatuses.ENTERING && (direction === 'end' ? 'carousel-item-next' : 'carousel-item-prev');\n var itemClasses = mapToCssModules(classNames(className, 'carousel-item', isActive && 'active', directionClassName, orderClassName), cssModule);\n return /*#__PURE__*/React.createElement(Tag, {\n className: itemClasses\n }, children);\n });\n }\n }]);\n return CarouselItem;\n}(React.Component);\nCarouselItem.propTypes = _objectSpread(_objectSpread({}, Transition.propTypes), {}, {\n /** Set a custom element for this component */\n tag: tagPropType,\n \"in\": PropTypes.bool,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n children: PropTypes.node,\n /** Enable/disable animation */\n slide: PropTypes.bool,\n /** Add custom class */\n className: PropTypes.string\n});\nCarouselItem.defaultProps = _objectSpread(_objectSpread({}, Transition.defaultProps), {}, {\n timeout: TransitionTimeouts.Carousel\n});\nCarouselItem.contextType = CarouselContext;\nexport default CarouselItem;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport CarouselItem from './CarouselItem';\nimport { CarouselContext } from './CarouselContext';\nimport { mapToCssModules, omit } from './utils';\nvar SWIPE_THRESHOLD = 40;\nvar propTypes = {\n /** the current active slide of the carousel */\n activeIndex: PropTypes.number,\n /** a function which should advance the carousel to the next slide (via activeIndex) */\n next: PropTypes.func.isRequired,\n /** a function which should advance the carousel to the previous slide (via activeIndex) */\n previous: PropTypes.func.isRequired,\n /** controls if the left and right arrow keys should control the carousel */\n keyboard: PropTypes.bool,\n /** If set to \"hover\", pauses the cycling of the carousel on mouseenter and resumes the cycling of the carousel on\n * mouseleave. If set to false, hovering over the carousel won't pause it.\n */\n pause: PropTypes.oneOf(['hover', false]),\n /** Autoplays the carousel after the user manually cycles the first item. If \"carousel\", autoplays the carousel on load. */\n ride: PropTypes.oneOf(['carousel']),\n /** the interval at which the carousel automatically cycles */\n interval: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.bool]),\n children: PropTypes.array,\n /** called when the mouse enters the Carousel */\n mouseEnter: PropTypes.func,\n /** called when the mouse exits the Carousel */\n mouseLeave: PropTypes.func,\n /** controls whether the slide animation on the Carousel works or not */\n slide: PropTypes.bool,\n /** make the controls, indicators and captions dark on the Carousel */\n dark: PropTypes.bool,\n fade: PropTypes.bool,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Add custom class */\n className: PropTypes.string,\n /** Enable touch support */\n enableTouch: PropTypes.bool\n};\nvar propsToOmit = Object.keys(propTypes);\nvar defaultProps = {\n interval: 5000,\n pause: 'hover',\n keyboard: true,\n slide: true,\n enableTouch: true,\n fade: false\n};\nvar Carousel = /*#__PURE__*/function (_React$Component) {\n _inherits(Carousel, _React$Component);\n var _super = _createSuper(Carousel);\n function Carousel(props) {\n var _this;\n _classCallCheck(this, Carousel);\n _this = _super.call(this, props);\n _this.handleKeyPress = _this.handleKeyPress.bind(_assertThisInitialized(_this));\n _this.renderItems = _this.renderItems.bind(_assertThisInitialized(_this));\n _this.hoverStart = _this.hoverStart.bind(_assertThisInitialized(_this));\n _this.hoverEnd = _this.hoverEnd.bind(_assertThisInitialized(_this));\n _this.handleTouchStart = _this.handleTouchStart.bind(_assertThisInitialized(_this));\n _this.handleTouchEnd = _this.handleTouchEnd.bind(_assertThisInitialized(_this));\n _this.touchStartX = 0;\n _this.touchStartY = 0;\n _this.state = {\n activeIndex: _this.props.activeIndex,\n direction: 'end',\n indicatorClicked: false\n };\n return _this;\n }\n _createClass(Carousel, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n // Set up the cycle\n if (this.props.ride === 'carousel') {\n this.setInterval();\n }\n\n // TODO: move this to the specific carousel like bootstrap. Currently it will trigger ALL carousels on the page.\n document.addEventListener('keyup', this.handleKeyPress);\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (prevState.activeIndex === this.state.activeIndex) return;\n this.setInterval();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.clearInterval();\n document.removeEventListener('keyup', this.handleKeyPress);\n }\n }, {\n key: \"handleKeyPress\",\n value: function handleKeyPress(evt) {\n if (this.props.keyboard) {\n if (evt.keyCode === 37) {\n this.props.previous();\n } else if (evt.keyCode === 39) {\n this.props.next();\n }\n }\n }\n }, {\n key: \"handleTouchStart\",\n value: function handleTouchStart(e) {\n if (!this.props.enableTouch) {\n return;\n }\n this.touchStartX = e.changedTouches[0].screenX;\n this.touchStartY = e.changedTouches[0].screenY;\n }\n }, {\n key: \"handleTouchEnd\",\n value: function handleTouchEnd(e) {\n if (!this.props.enableTouch) {\n return;\n }\n var currentX = e.changedTouches[0].screenX;\n var currentY = e.changedTouches[0].screenY;\n var diffX = Math.abs(this.touchStartX - currentX);\n var diffY = Math.abs(this.touchStartY - currentY);\n\n // Don't swipe if Y-movement is bigger than X-movement\n if (diffX < diffY) {\n return;\n }\n if (diffX < SWIPE_THRESHOLD) {\n return;\n }\n if (currentX < this.touchStartX) {\n this.props.next();\n } else {\n this.props.previous();\n }\n }\n }, {\n key: \"getContextValue\",\n value: function getContextValue() {\n return {\n direction: this.state.direction\n };\n }\n }, {\n key: \"setInterval\",\n value: function (_setInterval) {\n function setInterval() {\n return _setInterval.apply(this, arguments);\n }\n setInterval.toString = function () {\n return _setInterval.toString();\n };\n return setInterval;\n }(function () {\n var _this2 = this;\n // make sure not to have multiple intervals going...\n this.clearInterval();\n if (this.props.interval) {\n this.cycleInterval = setInterval(function () {\n _this2.props.next();\n }, parseInt(this.props.interval, 10));\n }\n })\n }, {\n key: \"clearInterval\",\n value: function (_clearInterval) {\n function clearInterval() {\n return _clearInterval.apply(this, arguments);\n }\n clearInterval.toString = function () {\n return _clearInterval.toString();\n };\n return clearInterval;\n }(function () {\n clearInterval(this.cycleInterval);\n })\n }, {\n key: \"hoverStart\",\n value: function hoverStart() {\n if (this.props.pause === 'hover') {\n this.clearInterval();\n }\n if (this.props.mouseEnter) {\n var _this$props;\n (_this$props = this.props).mouseEnter.apply(_this$props, arguments);\n }\n }\n }, {\n key: \"hoverEnd\",\n value: function hoverEnd() {\n if (this.props.pause === 'hover') {\n this.setInterval();\n }\n if (this.props.mouseLeave) {\n var _this$props2;\n (_this$props2 = this.props).mouseLeave.apply(_this$props2, arguments);\n }\n }\n }, {\n key: \"renderItems\",\n value: function renderItems(carouselItems, className) {\n var _this3 = this;\n var slide = this.props.slide;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: className\n }, carouselItems.map(function (item, index) {\n var isIn = index === _this3.state.activeIndex;\n return /*#__PURE__*/React.cloneElement(item, {\n \"in\": isIn,\n slide: slide\n });\n }));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this4 = this;\n var _this$props3 = this.props,\n cssModule = _this$props3.cssModule,\n slide = _this$props3.slide,\n className = _this$props3.className,\n dark = _this$props3.dark,\n fade = _this$props3.fade;\n var attributes = omit(this.props, propsToOmit);\n var outerClasses = mapToCssModules(classNames(className, 'carousel', fade && 'carousel-fade', slide && 'slide', dark && 'carousel-dark'), cssModule);\n var innerClasses = mapToCssModules(classNames('carousel-inner'), cssModule);\n\n // filter out booleans, null, or undefined\n var children = this.props.children.filter(function (child) {\n return child !== null && child !== undefined && typeof child !== 'boolean';\n });\n var slidesOnly = children.every(function (child) {\n return child.type === CarouselItem;\n });\n\n // Rendering only slides\n if (slidesOnly) {\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, attributes, {\n className: outerClasses,\n onMouseEnter: this.hoverStart,\n onMouseLeave: this.hoverEnd\n }), /*#__PURE__*/React.createElement(CarouselContext.Provider, {\n value: this.getContextValue()\n }, this.renderItems(children, innerClasses)));\n }\n\n // Rendering slides and controls\n if (children[0] instanceof Array) {\n var _carouselItems = children[0];\n var _controlLeft = children[1];\n var _controlRight = children[2];\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, attributes, {\n className: outerClasses,\n onMouseEnter: this.hoverStart,\n onMouseLeave: this.hoverEnd\n }), /*#__PURE__*/React.createElement(CarouselContext.Provider, {\n value: this.getContextValue()\n }, this.renderItems(_carouselItems, innerClasses), _controlLeft, _controlRight));\n }\n\n // Rendering indicators, slides and controls\n var indicators = children[0];\n var wrappedOnClick = function wrappedOnClick(e) {\n if (typeof indicators.props.onClickHandler === 'function') {\n _this4.setState({\n indicatorClicked: true\n }, function () {\n return indicators.props.onClickHandler(e);\n });\n }\n };\n var wrappedIndicators = /*#__PURE__*/React.cloneElement(indicators, {\n onClickHandler: wrappedOnClick\n });\n var carouselItems = children[1];\n var controlLeft = children[2];\n var controlRight = children[3];\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, attributes, {\n className: outerClasses,\n onMouseEnter: this.hoverStart,\n onMouseLeave: this.hoverEnd,\n onTouchStart: this.handleTouchStart,\n onTouchEnd: this.handleTouchEnd\n }), /*#__PURE__*/React.createElement(CarouselContext.Provider, {\n value: this.getContextValue()\n }, wrappedIndicators, this.renderItems(carouselItems, innerClasses), controlLeft, controlRight));\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n var newState = null;\n var activeIndex = prevState.activeIndex,\n direction = prevState.direction,\n indicatorClicked = prevState.indicatorClicked;\n if (nextProps.activeIndex !== activeIndex) {\n // Calculate the direction to turn\n if (nextProps.activeIndex === activeIndex + 1) {\n direction = 'end';\n } else if (nextProps.activeIndex === activeIndex - 1) {\n direction = 'start';\n } else if (nextProps.activeIndex < activeIndex) {\n direction = indicatorClicked ? 'start' : 'end';\n } else if (nextProps.activeIndex !== activeIndex) {\n direction = indicatorClicked ? 'end' : 'start';\n }\n newState = {\n activeIndex: nextProps.activeIndex,\n direction: direction,\n indicatorClicked: false\n };\n }\n return newState;\n }\n }]);\n return Carousel;\n}(React.Component);\nCarousel.propTypes = propTypes;\nCarousel.defaultProps = defaultProps;\nexport default Carousel;","import React, { useCallback, useEffect, useState } from 'react'\nimport './DotCarousel.scss'\n\n\nconst REGULAR = 'regular-dot'\nconst PADDING = 8\nconst REGULAR_WIDTH = 8\nconst SMALLEST = 'smallest-dot'\n\nconst DotCarousel = (props) => {\n const {images, active, onDotClick, disabled} = props\n const [currentDotsSet, setCurrentDotsSet] = useState([])\n\n const moveBack = (dots) => {\n if (active < 4) {\n setStartPosition(dots)\n } else {\n images.forEach((img, i) => {\n if (i > active - 4 && dots.length < 5) {\n dots.push({\n class: !dots.length || dots.length === 4 ? SMALLEST : REGULAR,\n id: i,\n active: i === active\n })\n }\n })\n }\n }\n\n const moveForward = (dots) => {\n images.forEach((image, i) => {\n if (dots.length < 5 && i >= active - 1) {\n dots.push({\n class: ((i === active - 1) || (dots.length === 4 && i !== images.length - 1)) ? SMALLEST : REGULAR,\n id: i,\n active: i === active\n })\n }\n })\n }\n\n const updateCurrentDotsSet = (dots) => {\n currentDotsSet.forEach((dot, i) => {\n dot.active = dot.id === active\n dots.push(dot)\n })\n }\n\n const setStartPosition = (dots) => {\n images.forEach((image, i) => {\n if (i < 4 && active < 4) {\n dots.push({class: REGULAR, id: i, active: i === active})\n }\n if (i === 4 && active < 4) {\n dots.push({class: images.length > 5 ? SMALLEST : REGULAR, id: i, active: i === active})\n }\n })\n }\n\n const setEndPosition = (dots) => {\n for (let i = images.length - 1; dots.length < 5; i--) {\n dots.unshift({class: dots.length === 4 ? SMALLEST : REGULAR, id: i, active: i === active})\n }\n }\n\n useEffect(() => {\n const dots = []\n if (active === 0) {\n setStartPosition(dots)\n }\n if (active > 0 && currentDotsSet.length) {\n const activePositionInSet = currentDotsSet.findIndex(dot => dot.id === active)\n if (activePositionInSet === 0) {\n moveBack(dots)\n }\n if (activePositionInSet === currentDotsSet.length - 1 && currentDotsSet[activePositionInSet].id !== images.length - 1) {\n moveForward(dots)\n }\n if (activePositionInSet > 0 && (activePositionInSet < currentDotsSet.length - 1 || currentDotsSet[activePositionInSet].id === images.length - 1)) {\n\n updateCurrentDotsSet(dots)\n }\n if (activePositionInSet === -1 && images.length - 1 === active) {\n setEndPosition(dots)\n }\n\n }\n setCurrentDotsSet(dots)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [images, active])\n\n const renderDots = useCallback(() => {\n if (images.length < 2) {\n return\n }\n\n return currentDotsSet.map((dot) => {\n const styles = {position: 'relative', margin: '0 4px'}\n\n return (\n <span\n style={styles}\n key={dot.id}\n className={`dot-indicator ${dot.class} ${dot.active ? 'active' : ''}`}\n onClick={() => {\n if (disabled) return\n onDotClick(dot.id)\n }}\n />\n )\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentDotsSet])\n\n return (\n <div className=\"dot-carousel-wrapper\">\n <div className=\"dot-carousel\" style={{\n height: `${REGULAR_WIDTH}px`,\n width: `${PADDING * 7 + REGULAR_WIDTH * 7}px`\n }}>\n {renderDots()}\n </div>\n </div>\n )\n}\n\nexport default DotCarousel\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import { useCallback, useEffect, useRef, useState } from 'react'\nimport { useSwipeable } from 'react-swipeable'\nimport ImageLoader from '$core-components/ImageLoader'\nimport { ReactComponent as LeftArrow } from '$assets/icons/dark_left_arrow.svg'\nimport { ReactComponent as RightArrow } from '$assets/icons/dark_right_arrow.svg'\nimport './MultiItemsCarousel.scss'\n\nconst MultiItemsCarousel = (props) => {\n const {\n leftArrow = {\n width: 20, height: 40\n },\n rightArrow = {\n width: 20, height: 40\n },\n hideDisabledArrows = true,\n itemWidth = 64,\n itemHeight = 64,\n borderWidth = 1,\n marginBetween = 9,\n responsive = {\n 1919: { items: 7 },\n 1199: { items: 4 }\n },\n images = [],\n items = [],\n onItemHovered,\n onItemClicked,\n activeImage = -1,\n styles\n } = props\n\n const [carouselWidth, setCarouselWidth] = useState('0')\n const [activeIndex, setActiveIndex] = useState(0)\n const [children, setChildren] = useState([])\n const [leftPos, setLeftPos] = useState(borderWidth)\n const carouselWrapperRef = useRef()\n const carouselInnerWrapperRef = useRef()\n const calculateLeftPos = useCallback(() => {\n if (activeIndex === 0) {\n setLeftPos(borderWidth)\n } else {\n const left = (itemWidth + marginBetween) * activeIndex - borderWidth\n setLeftPos(`-${left}`)\n }\n }, [activeIndex, borderWidth, itemWidth, marginBetween])\n\n useEffect(() => {\n const itemsPerSlide = getItemsPerSlide()\n const dif = activeImage - activeIndex\n\n if (dif === itemsPerSlide) {\n setActiveIndex(activeImage - itemsPerSlide + 1)\n }\n if (activeIndex === activeImage && activeIndex !==0) {\n setActiveIndex(activeImage - 1)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeImage, responsive])\n\n useEffect(() => {\n setActiveIndex(0)\n }, [children.length])\n\n useEffect(() => {\n setChildren(images && images.length ? images : items)\n }, [images, items])\n\n useEffect(() => {\n calculateLeftPos()\n }, [activeIndex, calculateLeftPos])\n\n const handlers = useSwipeable({\n onSwipedLeft: () => !rightArrowDisabled && setActiveIndex(next),\n onSwipedRight: () => !leftArrowDisabled && setActiveIndex(prev),\n preventDefaultTouchmoveEvent: true,\n trackTouch: true,\n })\n\n const getHideArrows = () => {\n return (carouselWrapperRef.current?.clientWidth + marginBetween) / (itemWidth + marginBetween) > images.length\n }\n\n const calculateLeftPosCallbackRef = useRef(calculateLeftPos)\n const getHideArrowsCallbackRef = useRef(getHideArrows)\n useEffect(() => {\n calculateLeftPosCallbackRef.current = calculateLeftPos\n getHideArrowsCallbackRef.current = getHideArrows\n });\n\n useEffect(() => {\n const calculateLeftPosCallback = e => calculateLeftPosCallbackRef.current(e);\n const getHideArrowsCallback = e => getHideArrowsCallbackRef.current(e);\n\n const calculateCarouselWidth = () => {\n setCarouselWidth(getHideArrowsCallback() ? '100%' : '80%')// `${itemWidth * itemsPerSlide + marginBetween * (itemsPerSlide - 1) + borderWidth * 2}px`)\n }\n\n const onResize = () => {\n setActiveIndex(0)\n calculateCarouselWidth()\n calculateLeftPosCallback()\n }\n\n onResize()\n window.addEventListener('resize', onResize)\n return () => {\n window.removeEventListener('resize', onResize)\n }\n }, [])\n\n useEffect(() => {\n const getHideArrowsCallback = e => getHideArrowsCallbackRef.current(e);\n setCarouselWidth(getHideArrowsCallback() ? '100%' : '80%')\n }, [images, items])\n\n const calculateSlideTo = (length) => {\n const itemsPerSlide = getItemsPerSlide()\n const itemsLeft = length - itemsPerSlide - activeIndex\n\n const next = itemsLeft >= itemsPerSlide ? activeIndex + itemsPerSlide : activeIndex + itemsLeft\n const prev = activeIndex < itemsPerSlide ? 0 : activeIndex - itemsPerSlide\n\n return { next, prev }\n }\n\n const getItemsPerSlide = () => Math.floor((carouselWrapperRef?.current?.clientWidth + marginBetween) / (itemWidth + marginBetween)) || 1\n\n const itemsPerSlide = getItemsPerSlide()\n\n const rightArrowDisabled = activeIndex + itemsPerSlide >= children.length\n const leftArrowDisabled = activeIndex === 0\n\n const { next, prev } = calculateSlideTo(children.length)\n\n if ((!images || !images.length) && (!items || !items.length)) {\n return null\n }\n\n return (\n <div style={styles} className=\"multi-carousel-container\" {...handlers}>\n {!getHideArrows() && <div\n style={{ width: leftArrow.width }}\n className={`multi-carousel-arrow left-arrow${leftArrowDisabled ? ' disabled' : ''}`}\n >\n {hideDisabledArrows && leftArrowDisabled ? null\n : <LeftArrow\n onClick={() => !leftArrowDisabled && setActiveIndex(prev)}\n name={leftArrow.svg}\n width={`${leftArrow.width}px`}\n height={`${leftArrow.height}px`}\n />\n }\n </div>}\n <div\n style={{\n width: carouselWidth,\n height: `${itemHeight + borderWidth * 2}px`\n }}\n className=\"multi-carousel-wrapper\"\n ref={carouselWrapperRef}\n >\n <div\n style={{ left: `${leftPos}px` }}\n className=\"multi-carousel\"\n ref={carouselInnerWrapperRef}\n >\n {items && items.length\n ? items.map((item, i) => (\n <div\n onMouseOver={() => onItemHovered && onItemHovered(i)}\n onMouseLeave={() => onItemHovered && onItemHovered(-1)}\n onClick={() => onItemClicked && onItemClicked(i)}\n style={{ width: `${itemWidth}px`, height: `${itemHeight}px`, marginRight: `${marginBetween}px` }}\n className=\"multi-carousel-item-wrapper\"\n key={`item_${i}`}\n >\n {item}\n </div>\n ))\n : images.map((image, i) => (\n <div\n onMouseOver={() => onItemHovered && onItemHovered(i)}\n onMouseLeave={() => onItemHovered && onItemHovered(-1)}\n onClick={() => onItemClicked && onItemClicked(i)}\n style={{ width: `${itemWidth}px`, height: `${itemHeight}px`, marginRight: `${marginBetween}px` }}\n className={`multi-carousel-item-wrapper${i === activeImage ? ' highlight-border' : ''}`}\n key={`image_${i}`}\n >\n <ImageLoader className=\"multi-carousel-image\" src={image} />\n </div>\n ))}\n </div>\n </div>\n {!getHideArrows() && <div\n style={{ width: rightArrow.width }}\n className={`multi-carousel-arrow right-arrow${rightArrowDisabled ? ' disabled' : ''}`}\n >\n {hideDisabledArrows && rightArrowDisabled ? null\n : <RightArrow\n onClick={() => !rightArrowDisabled && setActiveIndex(next)}\n width={`${rightArrow.width}px`}\n height={`${rightArrow.height}px`}\n />\n }\n </div>}\n </div>\n )\n}\n\nexport default MultiItemsCarousel\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React, { useCallback, useEffect, useState, useRef } from 'react'\nimport { Carousel, CarouselItem } from 'reactstrap'\nimport { useSwipeable } from 'react-swipeable'\nimport DotCarousel from './DotCarousel'\nimport { debounce} from 'throttle-debounce'\nimport { ImageZoom, LoadingDots, ImageLoader } from '$core-components'\nimport MultiItemsCarousel from './MultiItemsCarousel'\nimport { ReactComponent as LeftArrow } from '$assets/icons/left_arrow.svg'\nimport { ReactComponent as RightArrow } from '$assets/icons/right_arrow.svg'\nimport './ImageCarousel.scss'\n\nconst IMAGES_LIMIT = 20\n\nconst moveOnHover = debounce(500, (nextActive, setActiveImage) => {\n if (nextActive !== -1)\n setActiveImage(nextActive)\n})\n\n\nconst ImageCarousel = ({images = [], zoomAllowed = true, showLoaderDots = false, isStretched = false }) => {\n const wrapper = useRef(null)\n const [animating, setAnimating] = useState(false)\n const [activeImage, setActiveImage] = useState(0)\n const [activeHoveredImage, setActiveHoveredImage] = useState(-1)\n const [showArrows, setShowArrows] = useState(true)\n\n useEffect(() => {\n setAnimating(false)\n if (images.length < activeImage) {\n setActiveImage(images.length - 1)\n }\n\n setActiveHoveredImage(-1)\n setShowArrows(true)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [images])\n\n useEffect(() => {\n moveOnHover(activeHoveredImage, setActiveImage)\n }, [activeHoveredImage])\n\n const handlers = useSwipeable({\n onSwipedLeft: () => slides.length > 1 && next(),\n onSwipedRight: () => slides.length > 1 && previous(),\n preventDefaultTouchmoveEvent: true,\n trackTouch: true,\n })\n\n const triggerZoomed = useCallback((imageZoomed) => {\n if (imageZoomed) {\n setShowArrows(false)\n } else {\n setShowArrows(true)\n }\n }, [])\n\n const next = () => {\n if (animating) return\n const nextIndex = activeImage === images.length - 1 ? 0 : activeImage + 1\n setActiveImage(nextIndex)\n }\n\n const previous = () => {\n if (animating) return\n const nextIndex = activeImage === 0 ? images.length - 1 : activeImage - 1\n setActiveImage(nextIndex)\n }\n\n const slides = images.map((image, index) => (\n <CarouselItem\n key={image.Url + index}\n onExiting={() => setAnimating(true)}\n onExited={() => setAnimating(false)}\n >\n <div className=\"image-wrapper\">\n {zoomAllowed\n ? <ImageZoom onImageZoomed={triggerZoomed} src={image.Url} isStretched={isStretched} />\n : <ImageLoader className='image' src={image.Url} isStretched={isStretched}/>\n }\n </div>\n </CarouselItem>\n ))\n\n const getThumbnailTitleWrapper = () => {\n const titleShouldAppear = images[activeImage]?.DisplayName && images[activeImage]?.DisplayName?.trim().length > 0\n const getTitle = (value) => <div className=\"thumbnail-title-wrapper\">{value}</div>\n if (titleShouldAppear) {\n return getTitle(images[activeImage].DisplayName)\n }\n if (images.length > IMAGES_LIMIT) {\n return getTitle(`${activeImage + 1}/${images.length}`)\n }\n return null\n }\n\n if (!images || images.length === 0) return null\n\n return (\n <div ref={wrapper} className=\"main-carousel-wrapper\">\n <div\n id=\"image-carousel-wrapper\"\n className=\"image-carousel-wrapper carousel-fade\"\n >\n {slides.length > 1 &&\n <span className={`arrows left-arrow${showArrows ? ' show' : ''}`}>\n <LeftArrow width=\"40px\" height=\"40px\" onClick={previous} />\n </span>\n }\n <div {...handlers}>\n <Carousel\n interval={false}\n previous={previous}\n next={next}\n activeIndex={activeImage}>\n {slides}\n </Carousel>\n </div>\n {slides.length > 1 &&\n <span className={`arrows right-arrow${showArrows ? ' show' : ''}`}>\n <RightArrow width=\"40px\" height=\"40px\" onClick={next} />\n </span>\n }\n </div>\n {getThumbnailTitleWrapper()}\n {images.length > 1 &&\n <MultiItemsCarousel\n leftArrow={{\n width: 7, height: 12\n }}\n rightArrow={{\n width: 7, height: 12\n }}\n styles={{ width: `100%` }}\n images={images.map(image => image.Url)}\n onItemClicked={setActiveImage}\n onItemHovered={setActiveHoveredImage}\n activeImage={activeImage}\n hideDisabledArrows={false}\n />}\n <DotCarousel images={images} active={activeImage} onDotClick={(id) => setActiveImage(id)} />\n {showLoaderDots && <div className=\"carousel-dots-loader\">\n <LoadingDots/>\n </div>}\n </div>\n )\n}\n\nexport default ImageCarousel\n","import { useLocation, useNavigate, useSearchParams } from 'react-router-dom';\n\nexport const withRouter = (Component) => {\n const Wrapper = (props) => {\n const { pathname } = useLocation()\n const navigate = useNavigate()\n const [searchParams] = useSearchParams()\n\n return (\n <Component asPath={pathname} navigate={navigate} searchParams={searchParams} {...props}/>\n )\n }\n\n return Wrapper\n}\n","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { canUseDOM } from './utils';\nvar propTypes = {\n children: PropTypes.node.isRequired,\n node: PropTypes.any\n};\nvar Portal = /*#__PURE__*/function (_React$Component) {\n _inherits(Portal, _React$Component);\n var _super = _createSuper(Portal);\n function Portal() {\n _classCallCheck(this, Portal);\n return _super.apply(this, arguments);\n }\n _createClass(Portal, [{\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.defaultNode) {\n document.body.removeChild(this.defaultNode);\n }\n this.defaultNode = null;\n }\n }, {\n key: \"render\",\n value: function render() {\n if (!canUseDOM) {\n return null;\n }\n if (!this.props.node && !this.defaultNode) {\n this.defaultNode = document.createElement('div');\n document.body.appendChild(this.defaultNode);\n }\n return /*#__PURE__*/ReactDOM.createPortal(this.props.children, this.props.node || this.defaultNode);\n }\n }]);\n return Portal;\n}(React.Component);\nPortal.propTypes = propTypes;\nexport default Portal;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Portal from './Portal';\nimport Fade from './Fade';\nimport { getOriginalBodyPadding, conditionallyUpdateScrollbar, setScrollbarWidth, mapToCssModules, omit, focusableElements, TransitionTimeouts, keyCodes, targetPropType, getTarget } from './utils';\nfunction noop() {}\nvar FadePropTypes = PropTypes.shape(Fade.propTypes);\nvar propTypes = {\n /** */\n autoFocus: PropTypes.bool,\n /** Add backdrop to modal */\n backdrop: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['static'])]),\n /** add custom classname to backdrop */\n backdropClassName: PropTypes.string,\n backdropTransition: FadePropTypes,\n /** Vertically center the modal */\n centered: PropTypes.bool,\n /** Add children for the modal to wrap */\n children: PropTypes.node,\n /** Add custom className for modal content */\n contentClassName: PropTypes.string,\n className: PropTypes.string,\n container: targetPropType,\n cssModule: PropTypes.object,\n external: PropTypes.node,\n /** Enable/Disable animation */\n fade: PropTypes.bool,\n /** Make the modal fullscreen */\n fullscreen: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['sm', 'md', 'lg', 'xl'])]),\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func]),\n /** The status of the modal, either open or close */\n isOpen: PropTypes.bool,\n /** Allow modal to be closed with escape key. */\n keyboard: PropTypes.bool,\n /** Identifies the element (or elements) that labels the current element. */\n labelledBy: PropTypes.string,\n modalClassName: PropTypes.string,\n modalTransition: FadePropTypes,\n /** Function to be triggered on close */\n onClosed: PropTypes.func,\n /** Function to be triggered on enter */\n onEnter: PropTypes.func,\n /** Function to be triggered on exit */\n onExit: PropTypes.func,\n /** Function to be triggered on open */\n onOpened: PropTypes.func,\n /** Returns focus to the element that triggered opening of the modal */\n returnFocusAfterClose: PropTypes.bool,\n /** Accessibility role */\n role: PropTypes.string,\n /** Make the modal scrollable */\n scrollable: PropTypes.bool,\n /** Two optional sizes `lg` and `sm` */\n size: PropTypes.string,\n /** Function to toggle modal visibility */\n toggle: PropTypes.func,\n trapFocus: PropTypes.bool,\n /** Unmounts the modal when modal is closed */\n unmountOnClose: PropTypes.bool,\n wrapClassName: PropTypes.string,\n zIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n};\nvar propsToOmit = Object.keys(propTypes);\nvar defaultProps = {\n isOpen: false,\n autoFocus: true,\n centered: false,\n scrollable: false,\n role: 'dialog',\n backdrop: true,\n keyboard: true,\n zIndex: 1050,\n fade: true,\n onOpened: noop,\n onClosed: noop,\n modalTransition: {\n timeout: TransitionTimeouts.Modal\n },\n backdropTransition: {\n mountOnEnter: true,\n timeout: TransitionTimeouts.Fade // uses standard fade transition\n },\n\n unmountOnClose: true,\n returnFocusAfterClose: true,\n container: 'body',\n trapFocus: false\n};\nvar Modal = /*#__PURE__*/function (_React$Component) {\n _inherits(Modal, _React$Component);\n var _super = _createSuper(Modal);\n function Modal(props) {\n var _this;\n _classCallCheck(this, Modal);\n _this = _super.call(this, props);\n _this._element = null;\n _this._originalBodyPadding = null;\n _this.getFocusableChildren = _this.getFocusableChildren.bind(_assertThisInitialized(_this));\n _this.handleBackdropClick = _this.handleBackdropClick.bind(_assertThisInitialized(_this));\n _this.handleBackdropMouseDown = _this.handleBackdropMouseDown.bind(_assertThisInitialized(_this));\n _this.handleEscape = _this.handleEscape.bind(_assertThisInitialized(_this));\n _this.handleStaticBackdropAnimation = _this.handleStaticBackdropAnimation.bind(_assertThisInitialized(_this));\n _this.handleTab = _this.handleTab.bind(_assertThisInitialized(_this));\n _this.onOpened = _this.onOpened.bind(_assertThisInitialized(_this));\n _this.onClosed = _this.onClosed.bind(_assertThisInitialized(_this));\n _this.manageFocusAfterClose = _this.manageFocusAfterClose.bind(_assertThisInitialized(_this));\n _this.clearBackdropAnimationTimeout = _this.clearBackdropAnimationTimeout.bind(_assertThisInitialized(_this));\n _this.trapFocus = _this.trapFocus.bind(_assertThisInitialized(_this));\n _this.state = {\n isOpen: false,\n showStaticBackdropAnimation: false\n };\n return _this;\n }\n _createClass(Modal, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props = this.props,\n isOpen = _this$props.isOpen,\n autoFocus = _this$props.autoFocus,\n onEnter = _this$props.onEnter;\n if (isOpen) {\n this.init();\n this.setState({\n isOpen: true\n });\n if (autoFocus) {\n this.setFocus();\n }\n }\n if (onEnter) {\n onEnter();\n }\n\n // traps focus inside the Modal, even if the browser address bar is focused\n document.addEventListener('focus', this.trapFocus, true);\n this._isMounted = true;\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (this.props.isOpen && !prevProps.isOpen) {\n this.init();\n this.setState({\n isOpen: true\n });\n // let render() renders Modal Dialog first\n return;\n }\n\n // now Modal Dialog is rendered and we can refer this._element and this._dialog\n if (this.props.autoFocus && this.state.isOpen && !prevState.isOpen) {\n this.setFocus();\n }\n if (this._element && prevProps.zIndex !== this.props.zIndex) {\n this._element.style.zIndex = this.props.zIndex;\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.clearBackdropAnimationTimeout();\n if (this.props.onExit) {\n this.props.onExit();\n }\n if (this._element) {\n this.destroy();\n if (this.props.isOpen || this.state.isOpen) {\n this.close();\n }\n }\n document.removeEventListener('focus', this.trapFocus, true);\n this._isMounted = false;\n }\n\n // not mouseUp because scrollbar fires it, shouldn't close when user scrolls\n }, {\n key: \"handleBackdropClick\",\n value: function handleBackdropClick(e) {\n if (e.target === this._mouseDownElement) {\n e.stopPropagation();\n var backdrop = this._dialog ? this._dialog.parentNode : null;\n if (backdrop && e.target === backdrop && this.props.backdrop === 'static') {\n this.handleStaticBackdropAnimation();\n }\n if (!this.props.isOpen || this.props.backdrop !== true) return;\n if (backdrop && e.target === backdrop && this.props.toggle) {\n this.props.toggle(e);\n }\n }\n }\n }, {\n key: \"handleTab\",\n value: function handleTab(e) {\n if (e.which !== 9) return;\n if (this.modalIndex < Modal.openCount - 1) return; // last opened modal\n\n var focusableChildren = this.getFocusableChildren();\n var totalFocusable = focusableChildren.length;\n if (totalFocusable === 0) return;\n var currentFocus = this.getFocusedChild();\n var focusedIndex = 0;\n for (var i = 0; i < totalFocusable; i += 1) {\n if (focusableChildren[i] === currentFocus) {\n focusedIndex = i;\n break;\n }\n }\n if (e.shiftKey && focusedIndex === 0) {\n e.preventDefault();\n focusableChildren[totalFocusable - 1].focus();\n } else if (!e.shiftKey && focusedIndex === totalFocusable - 1) {\n e.preventDefault();\n focusableChildren[0].focus();\n }\n }\n }, {\n key: \"handleBackdropMouseDown\",\n value: function handleBackdropMouseDown(e) {\n this._mouseDownElement = e.target;\n }\n }, {\n key: \"handleEscape\",\n value: function handleEscape(e) {\n if (this.props.isOpen && e.keyCode === keyCodes.esc && this.props.toggle) {\n if (this.props.keyboard) {\n e.preventDefault();\n e.stopPropagation();\n this.props.toggle(e);\n } else if (this.props.backdrop === 'static') {\n e.preventDefault();\n e.stopPropagation();\n this.handleStaticBackdropAnimation();\n }\n }\n }\n }, {\n key: \"handleStaticBackdropAnimation\",\n value: function handleStaticBackdropAnimation() {\n var _this2 = this;\n this.clearBackdropAnimationTimeout();\n this.setState({\n showStaticBackdropAnimation: true\n });\n this._backdropAnimationTimeout = setTimeout(function () {\n _this2.setState({\n showStaticBackdropAnimation: false\n });\n }, 100);\n }\n }, {\n key: \"onOpened\",\n value: function onOpened(node, isAppearing) {\n this.props.onOpened();\n (this.props.modalTransition.onEntered || noop)(node, isAppearing);\n }\n }, {\n key: \"onClosed\",\n value: function onClosed(node) {\n var unmountOnClose = this.props.unmountOnClose;\n // so all methods get called before it is unmounted\n this.props.onClosed();\n (this.props.modalTransition.onExited || noop)(node);\n if (unmountOnClose) {\n this.destroy();\n }\n this.close();\n if (this._isMounted) {\n this.setState({\n isOpen: false\n });\n }\n }\n }, {\n key: \"setFocus\",\n value: function setFocus() {\n if (this._dialog && this._dialog.parentNode && typeof this._dialog.parentNode.focus === 'function') {\n this._dialog.parentNode.focus();\n }\n }\n }, {\n key: \"getFocusableChildren\",\n value: function getFocusableChildren() {\n return this._element.querySelectorAll(focusableElements.join(', '));\n }\n }, {\n key: \"getFocusedChild\",\n value: function getFocusedChild() {\n var currentFocus;\n var focusableChildren = this.getFocusableChildren();\n try {\n currentFocus = document.activeElement;\n } catch (err) {\n currentFocus = focusableChildren[0];\n }\n return currentFocus;\n }\n }, {\n key: \"trapFocus\",\n value: function trapFocus(ev) {\n if (!this.props.trapFocus) {\n return;\n }\n if (!this._element) {\n // element is not attached\n return;\n }\n if (this._dialog && this._dialog.parentNode === ev.target) {\n // initial focus when the Modal is opened\n return;\n }\n if (this.modalIndex < Modal.openCount - 1) {\n // last opened modal\n return;\n }\n var children = this.getFocusableChildren();\n for (var i = 0; i < children.length; i += 1) {\n // focus is already inside the Modal\n if (children[i] === ev.target) return;\n }\n if (children.length > 0) {\n // otherwise focus the first focusable element in the Modal\n ev.preventDefault();\n ev.stopPropagation();\n children[0].focus();\n }\n }\n }, {\n key: \"init\",\n value: function init() {\n try {\n this._triggeringElement = document.activeElement;\n } catch (err) {\n this._triggeringElement = null;\n }\n if (!this._element) {\n this._element = document.createElement('div');\n this._element.setAttribute('tabindex', '-1');\n this._element.style.position = 'relative';\n this._element.style.zIndex = this.props.zIndex;\n this._mountContainer = getTarget(this.props.container);\n this._mountContainer.appendChild(this._element);\n }\n this._originalBodyPadding = getOriginalBodyPadding();\n if (Modal.openCount < 1) {\n Modal.originalBodyOverflow = window.getComputedStyle(document.body).overflow;\n }\n conditionallyUpdateScrollbar();\n if (Modal.openCount === 0) {\n document.body.className = classNames(document.body.className, mapToCssModules('modal-open', this.props.cssModule));\n document.body.style.overflow = 'hidden';\n }\n this.modalIndex = Modal.openCount;\n Modal.openCount += 1;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n if (this._element) {\n this._mountContainer.removeChild(this._element);\n this._element = null;\n }\n this.manageFocusAfterClose();\n }\n }, {\n key: \"manageFocusAfterClose\",\n value: function manageFocusAfterClose() {\n if (this._triggeringElement) {\n var returnFocusAfterClose = this.props.returnFocusAfterClose;\n if (this._triggeringElement.focus && returnFocusAfterClose) this._triggeringElement.focus();\n this._triggeringElement = null;\n }\n }\n }, {\n key: \"close\",\n value: function close() {\n if (Modal.openCount <= 1) {\n var modalOpenClassName = mapToCssModules('modal-open', this.props.cssModule);\n // Use regex to prevent matching `modal-open` as part of a different class, e.g. `my-modal-opened`\n var modalOpenClassNameRegex = new RegExp(\"(^| )\".concat(modalOpenClassName, \"( |$)\"));\n document.body.className = document.body.className.replace(modalOpenClassNameRegex, ' ').trim();\n document.body.style.overflow = Modal.originalBodyOverflow;\n }\n this.manageFocusAfterClose();\n Modal.openCount = Math.max(0, Modal.openCount - 1);\n setScrollbarWidth(this._originalBodyPadding);\n }\n }, {\n key: \"clearBackdropAnimationTimeout\",\n value: function clearBackdropAnimationTimeout() {\n if (this._backdropAnimationTimeout) {\n clearTimeout(this._backdropAnimationTimeout);\n this._backdropAnimationTimeout = undefined;\n }\n }\n }, {\n key: \"renderModalDialog\",\n value: function renderModalDialog() {\n var _classNames,\n _this3 = this;\n var attributes = omit(this.props, propsToOmit);\n var dialogBaseClass = 'modal-dialog';\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, attributes, {\n className: mapToCssModules(classNames(dialogBaseClass, this.props.className, (_classNames = {}, _defineProperty(_classNames, \"modal-\".concat(this.props.size), this.props.size), _defineProperty(_classNames, \"\".concat(dialogBaseClass, \"-centered\"), this.props.centered), _defineProperty(_classNames, \"\".concat(dialogBaseClass, \"-scrollable\"), this.props.scrollable), _defineProperty(_classNames, 'modal-fullscreen', this.props.fullscreen === true), _defineProperty(_classNames, \"modal-fullscreen-\".concat(this.props.fullscreen, \"-down\"), typeof this.props.fullscreen === 'string'), _classNames)), this.props.cssModule),\n role: \"document\",\n ref: function ref(c) {\n _this3._dialog = c;\n }\n }), /*#__PURE__*/React.createElement(\"div\", {\n className: mapToCssModules(classNames('modal-content', this.props.contentClassName), this.props.cssModule)\n }, this.props.children));\n }\n }, {\n key: \"render\",\n value: function render() {\n var unmountOnClose = this.props.unmountOnClose;\n if (!!this._element && (this.state.isOpen || !unmountOnClose)) {\n var isModalHidden = !!this._element && !this.state.isOpen && !unmountOnClose;\n this._element.style.display = isModalHidden ? 'none' : 'block';\n var _this$props2 = this.props,\n wrapClassName = _this$props2.wrapClassName,\n modalClassName = _this$props2.modalClassName,\n backdropClassName = _this$props2.backdropClassName,\n cssModule = _this$props2.cssModule,\n isOpen = _this$props2.isOpen,\n backdrop = _this$props2.backdrop,\n role = _this$props2.role,\n labelledBy = _this$props2.labelledBy,\n external = _this$props2.external,\n innerRef = _this$props2.innerRef;\n var modalAttributes = {\n onClick: this.handleBackdropClick,\n onMouseDown: this.handleBackdropMouseDown,\n onKeyUp: this.handleEscape,\n onKeyDown: this.handleTab,\n style: {\n display: 'block'\n },\n 'aria-labelledby': labelledBy,\n 'aria-modal': true,\n role: role,\n tabIndex: '-1'\n };\n var hasTransition = this.props.fade;\n var modalTransition = _objectSpread(_objectSpread(_objectSpread({}, Fade.defaultProps), this.props.modalTransition), {}, {\n baseClass: hasTransition ? this.props.modalTransition.baseClass : '',\n timeout: hasTransition ? this.props.modalTransition.timeout : 0\n });\n var backdropTransition = _objectSpread(_objectSpread(_objectSpread({}, Fade.defaultProps), this.props.backdropTransition), {}, {\n baseClass: hasTransition ? this.props.backdropTransition.baseClass : '',\n timeout: hasTransition ? this.props.backdropTransition.timeout : 0\n });\n var Backdrop = backdrop && (hasTransition ? /*#__PURE__*/React.createElement(Fade, _extends({}, backdropTransition, {\n \"in\": isOpen && !!backdrop,\n cssModule: cssModule,\n className: mapToCssModules(classNames('modal-backdrop', backdropClassName), cssModule)\n })) : /*#__PURE__*/React.createElement(\"div\", {\n className: mapToCssModules(classNames('modal-backdrop', 'show', backdropClassName), cssModule)\n }));\n return /*#__PURE__*/React.createElement(Portal, {\n node: this._element\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: mapToCssModules(wrapClassName)\n }, /*#__PURE__*/React.createElement(Fade, _extends({}, modalAttributes, modalTransition, {\n \"in\": isOpen,\n onEntered: this.onOpened,\n onExited: this.onClosed,\n cssModule: cssModule,\n className: mapToCssModules(classNames('modal', modalClassName, this.state.showStaticBackdropAnimation && 'modal-static'), cssModule),\n innerRef: innerRef\n }), external, this.renderModalDialog()), Backdrop));\n }\n return null;\n }\n }]);\n return Modal;\n}(React.Component);\nModal.propTypes = propTypes;\nModal.defaultProps = defaultProps;\nModal.openCount = 0;\nModal.originalBodyOverflow = null;\nexport default Modal;","var _excluded = [\"className\", \"cssModule\", \"children\", \"toggle\", \"tag\", \"wrapTag\", \"closeAriaLabel\", \"close\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n /** Add custom class */\n className: PropTypes.string,\n /** Custom close button */\n close: PropTypes.object,\n closeAriaLabel: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType,\n /** Function to be triggered when close button is clicked */\n toggle: PropTypes.func,\n wrapTag: tagPropType\n};\nfunction ModalHeader(props) {\n var closeButton;\n var className = props.className,\n cssModule = props.cssModule,\n children = props.children,\n toggle = props.toggle,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'h5' : _props$tag,\n _props$wrapTag = props.wrapTag,\n WrapTag = _props$wrapTag === void 0 ? 'div' : _props$wrapTag,\n _props$closeAriaLabel = props.closeAriaLabel,\n closeAriaLabel = _props$closeAriaLabel === void 0 ? 'Close' : _props$closeAriaLabel,\n close = props.close,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'modal-header'), cssModule);\n if (!close && toggle) {\n closeButton = /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n onClick: toggle,\n className: mapToCssModules('btn-close', cssModule),\n \"aria-label\": closeAriaLabel\n });\n }\n return /*#__PURE__*/React.createElement(WrapTag, _extends({}, attributes, {\n className: classes\n }), /*#__PURE__*/React.createElement(Tag, {\n className: mapToCssModules('modal-title', cssModule)\n }, children), close || closeButton);\n}\nModalHeader.propTypes = propTypes;\nexport default ModalHeader;","var _excluded = [\"className\", \"cssModule\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction ModalBody(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'modal-body'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nModalBody.propTypes = propTypes;\nexport default ModalBody;","var _excluded = [\"className\", \"cssModule\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction ModalFooter(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'modal-footer'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nModalFooter.propTypes = propTypes;\nexport default ModalFooter;","\nexport const kitChangeType =\n {\n KIT_QUANTITY: 1,\n QUANTITY: 2,\n REMOVE: 3,\n ADD: 4,\n SAVE: 5\n }\n","/**\n * A component to display an item of a product of type Kit.\n *\n * @param {object} kitItemProductModel - the product related to this kit item\n * @param {object} kitItemOrderItemModel - the order item related to this kit item\n * @param {object} kitItemViewModel - the view model of this kit item, with all the information about displaying itself\n * @param {object} [kitItemPriceModel] - the order item price model for this kit item order item\n * @param {function} [onChange] - a callback to signal the item has changed\n * @param {boolean} [doLoadIframe] - a flag to denotes a required action of loading the iframe\n * @param {boolean} [doValidate] - a flag to denotes a required action of validation\n * @param {boolean} [isPriceCalculating] - a flag to indicate if the item's price is in loading state\n * @param {number} kitQuantity - the quantity of the parent kit component, used for inventory validations.\n */\n\nimport React, { Component } from 'react'\nimport KitItemQuantity from './KitItemQuantity'\nimport Inventory, { isOutOfStock } from '../Inventory'\nimport Price from '../Price'\nimport { Tooltip, ImageLoader, LoadingDots, Icon} from '$core-components'\nimport ImageCarousel from '../ImageCarousel';\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport logger from '$ustoreinternal/services/logger'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport { withRouter } from '$ustoreinternal/services/withRouter'\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\nimport theme from '$styles/_theme.scss'\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from 'reactstrap'\nimport { Scrollbars } from 'react-custom-scrollbars-2'\nimport { kitChangeType } from './consts'\nimport './KitItem.scss'\n\nclass KitItem extends Component {\n constructor(props) {\n super(props)\n this.externalValidation = false\n\n this.iframeElementModal = React.createRef()\n this.iframeElement = React.createRef()\n this.scrollbars = React.createRef()\n this.scrollableContainer = React.createRef()\n this.iframeSrc = ''\n this.shouldValidateModal = false\n\n this.togglePreviewModal = this.togglePreviewModal.bind(this)\n this.onClickCancel = this.onClickCancel.bind(this)\n this.onClickSave = this.onClickSave.bind(this)\n this.onClickEditOptions = this.onClickEditOptions.bind(this)\n this.onQuantityChange = this.onQuantityChange.bind(this)\n this.onRemove = this.onRemove.bind(this)\n this.onAdd = this.onAdd.bind(this)\n this.onModalCarouselChange = this.onModalCarouselChange.bind(this)\n this.onResizeHandler = this.onResizeHandler.bind(this)\n\n this.state = {\n isPropertiesOpen: false,\n isPreviewOpen: false,\n activeModalImage: 0,\n isPropsModalLoading: false,\n isMediumBreak: false,\n }\n }\n\n componentWillUnmount() {\n // if unmounting (clicking back on the browser) when modal is open, we need to manually remove the modal class from the html tag.\n if ((this.state.isPreviewOpen || this.state.isPropertiesOpen) && document && document.querySelector('html')) {\n document.querySelector('html').classList.remove('modal-open')\n }\n\n window.removeEventListener('message', this.onMessageRecieved)\n window.removeEventListener('resize', this.onResizeHandler)\n }\n\n onMessageRecieved = (e) => {\n\n const { kitItemOrderItemModel, navigate } = this.props\n\n logger.info(e.data.type + ' message from iframe', e)\n\n if (e.data.type === '@SCROLL_PARENT_DISABLE') {\n\n var x = document.querySelector('.view').scrollLeft;\n var y = document.querySelector('.view').scrollTop;\n document.querySelector('.view').onscroll = function () { document.querySelector('.view').scrollTo(x, y); };\n }\n if (e.data.type === '@SCROLL_PARENT_ENABLE') {\n document.querySelector('.view').onscroll = function () { }\n }\n if (e.data.type === '@SCROLL_TO' && e.data.data) {\n document.querySelector('.view').scrollTo(e.data.data.x, e.data.data.y);\n }\n\n if (e.data.type === '@PRODUCT_PROPERTIES_STATUS') {\n const orderItemID = e.data.data.orderItemID\n const isValid = e.data.data.isValid\n if (orderItemID && orderItemID === kitItemOrderItemModel.ID) {\n this.onValidateIframeReturn(isValid)\n }\n }\n if (e.data.type === '@PRODUCT_POPERTIES_LOADED') {\n const orderItemID = e.data.data.orderItemID\n if (orderItemID && orderItemID === kitItemOrderItemModel.ID) {\n if (this.props.kitItemViewModel.iframeLoading) {\n this.setKitViewModel(kitItemOrderItemModel.ID, { iframeLoading: false, iframeLoaded: true })\n }\n else if (this.state.isPropsModalLoading) {\n this.setState({ isPropsModalLoading: false })\n if (this.shouldValidateModal) {\n this.shouldValidateModal = false\n this.externalValidation = false\n this.validate()\n }\n }\n }\n }\n if (e.data.type === '@CHANGE_DIMENSIONS') {\n const orderItemID = e.data.data.orderItemID\n if (orderItemID && orderItemID === kitItemOrderItemModel.ID) {\n const height = e.data.data.height\n const width = e.data.data.width\n\n if (this.iframeElementModal && this.iframeElementModal.style) {\n this.iframeElementModal.style.height = `${height}px`\n this.iframeElementModal.style.width = `${width}px`\n\n const modalBody = document.querySelector('.kit-item-properties-modal .modal-body')\n this.scrollableContainer.style.height = `${modalBody.clientHeight - 16}px`\n this.scrollableContainer.style.width = `${modalBody.clientWidth}px`\n this.scrollbars.scrollTop(0)\n }\n }\n }\n\n if (e.data.type === '@CHANGE_LEGACY_ROUTE') {\n //session expired - we need to prevent displaying login page within iframe\n if (e.data.data.match(/\\/login\\.aspx\\?/) || e.data.data.match(/\\/ShowMessage\\.aspx\\?.*StoreID=-1&ErrorCode=3/)) {\n const { securityToken, storeID, classicUrl, languageCode } = themeContext.get()\n const cookiesToDelete = [storefrontCookies.token, storefrontCookies.storeID, storefrontCookies.language]\n cookiesToDelete.forEach(cn => CookiesManager.deleteCookie(cn))\n\n const url = `${classicUrl}/logout.aspx?SecurityToken=${securityToken}&StoreGuid=${storeID}&ShowRibbon=false&forceLogin=true&NgLanguageCode=${languageCode}`\n navigate(url)\n }\n }\n }\n\n componentDidMount() {\n const { kitItemOrderItemModel } = this.props\n\n if (!kitItemOrderItemModel)\n return null\n\n this.iframeSrc = this.getIframeSrc(kitItemOrderItemModel.ID)\n\n const isMediumBreak = document.body.clientWidth <= parseInt(theme.lg.replace('px', ''))\n\n this.setState({ isMediumBreak: isMediumBreak })\n\n if (isMediumBreak) {\n const input = document.getElementsByClassName('.quantity-control.quantity-input')\n if (input && input.length === 1) input[0].addEventListener('focus', function (e) { e.target.scrollIntoView(true) })\n }\n\n window.addEventListener('message', this.onMessageRecieved)\n window.addEventListener('resize', this.onResizeHandler)\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { kitItemProductModel, kitItemOrderItemModel: { ID, IsIncluded }, kitItemViewModel: { isPropertiesValid } } = this.props\n\n const hasProperties = !!kitItemProductModel.Configuration.Properties.length\n\n if (this.props.doValidate && !prevProps.doValidate) {\n if (!isPropertiesValid && IsIncluded && hasProperties) {\n this.externalValidation = true\n this.validate()\n }\n else if (IsIncluded) {\n this.setKitViewModel(ID, { isPropertiesValid: true })\n }\n }\n }\n\n onResizeHandler() {\n const isMediumBreak = document.body.clientWidth <= parseInt(theme.lg.replace('px', ''))\n this.setState({ isMediumBreak: isMediumBreak })\n }\n\n setKitViewModel(orderItemID, object) {\n UStoreProvider.state.customState.merge({ kitViewModel: { items: { [orderItemID]: object } } })\n }\n\n onValidateIframeReturn(isPropertiesValid) {\n const { onChange, kitItemOrderItemModel: { ID }, kitItemViewModel: { modalIsOpen: currentModalIsOpen } } = this.props\n let modalIsOpen = currentModalIsOpen //modalIsOpen is set according to current state in kitItemViewModel\n\n if (!this.externalValidation && isPropertiesValid) {\n this.iframeElement && this.iframeElement.contentWindow && this.iframeElement.contentWindow.location.replace(this.getIframeSrc(ID))\n this.setState({ isPropertiesOpen: false })\n modalIsOpen = false //if not external validation and properties are valid - modalIsOpen = false\n onChange(ID, kitChangeType.SAVE)\n }\n else if (!this.externalValidation) {\n this.scrollbars && this.scrollbars.scrollToTop()\n }\n\n if (this.externalValidation) {\n this.externalValidation = false\n }\n\n this.setKitViewModel(ID, { isPropertiesValid: !!isPropertiesValid, modalIsOpen: modalIsOpen })\n }\n\n onClickCancel() {\n const { kitItemOrderItemModel: { ID } } = this.props\n this.setState({ isPropertiesOpen: false }) //close even if not valid\n this.setKitViewModel(ID, { isPropertiesValid: null, modalIsOpen: false })\n }\n\n onClickSave() {\n this.externalValidation = false\n this.validate()\n }\n\n validate() {\n if (!this.externalValidation && this.iframeElement.contentWindow) {\n this.iframeElementModal.contentWindow.postMessage({\n type: '@PRODUCT_PROPERTIES_SAVE',\n data: {}\n }, '*')\n }\n else if (this.externalValidation && this.iframeElement.contentWindow) {\n this.iframeElement.contentWindow.postMessage({\n type: '@PRODUCT_PROPERTIES_SAVE',\n data: {}\n }, '*')\n }\n }\n\n onClickEditOptions() {\n const { kitItemOrderItemModel: { ID }, kitItemViewModel } = this.props\n\n if (kitItemViewModel.isPropertiesValid === false) {\n this.shouldValidateModal = true\n }\n\n this.setState({ isPropertiesOpen: !this.state.isPropertiesOpen, isPropsModalLoading: true })\n\n if (!kitItemViewModel.propsWasOpened) {\n this.setKitViewModel(ID, { propsWasOpened: true, modalIsOpen: true })\n }\n else {\n this.setKitViewModel(ID, { modalIsOpen: true })\n }\n }\n\n onQuantityChange(quantity, isValid) {\n const { onChange, kitItemOrderItemModel: { ID, Quantity } } = this.props\n this.setKitViewModel(ID, { isQuantityValid: isValid })\n\n if (quantity !== Quantity) {\n onChange(ID, kitChangeType.QUANTITY, { quantity })\n }\n }\n\n onRemove() {\n const { onChange, kitItemOrderItemModel: { ID } } = this.props\n onChange(ID, kitChangeType.REMOVE)\n this.setKitViewModel(ID, { isQuantityValid: null, isPropertiesValid: null })\n }\n\n onAdd() {\n const { onChange, kitItemOrderItemModel: { ID } } = this.props\n onChange(ID, kitChangeType.ADD)\n this.setKitViewModel(ID, { iframeLoaded: null, isPropertiesValid: null })\n }\n\n togglePreviewModal() {\n const { kitItemOrderItemModel: { ID } } = this.props\n this.setState({ isPreviewOpen: !this.state.isPreviewOpen })\n this.setKitViewModel(ID, { modalIsOpen: !this.state.isPreviewOpen })\n }\n\n\n onModalCarouselChange(value) {\n this.setState({ activeModalImage: value })\n }\n\n getIframeSrc(orderItemID) {\n const { storeID } = themeContext.get()\n const { currentUser } = UStoreProvider.state.get()\n\n const desktopBreakpoint = parseInt(theme.lg.replace('px', ''))\n const viewMobileVal = document.body.clientWidth > desktopBreakpoint ? 'viewMobile=false' : 'viewMobile=true'\n const { classicUrl } = themeContext.get()\n return `${classicUrl}/ProductProperties.aspx?OrderItemId=${orderItemID}&${viewMobileVal}&isFrameMode=true&rand=${Math.random()}&userUniqueId=${currentUser ? currentUser.ID : ''}&parentUrl=${encodeURIComponent(window.location.href)}&StoreGuid=${storeID ? storeID : ''}`\n }\n\n renderEditLink(className, isOutOfStock) {\n const { kitItemOrderItemModel, kitItemViewModel } = this.props\n\n return (\n <div className={'edit-section ' + className}>\n {kitItemOrderItemModel.IsIncluded && kitItemViewModel.iframeLoading && !isOutOfStock && <LoadingDots />}\n {kitItemViewModel.isPropertiesValid === false && (<span className='edit-options-error-icon'><Icon name=\"error.svg\" width=\"15px\" height=\"15px\" className=\"error-icon\" /></span>)}\n {kitItemOrderItemModel.IsIncluded && !kitItemViewModel.iframeLoading && !isOutOfStock && (<span className={'edit-options'} onClick={this.onClickEditOptions}><Tooltip placement=\"top\" text={t('KitItem.Edit_options')} maxLine={2} /></span>)}\n {(!kitItemOrderItemModel.IsIncluded || isOutOfStock) && (<span className='disabled-edit-options'><Tooltip placement=\"top\" text={t('KitItem.Edit_options')} maxLine={2} /></span>)}\n </div>\n )\n }\n\n renderInventoryLabel(className) {\n const { kitItemProductModel } = this.props\n return (\n <span className={className}>\n {kitItemProductModel.Inventory && kitItemProductModel.Inventory.AllowOutOfStockPurchase && <Inventory model={kitItemProductModel.Inventory} minQuantity={kitItemProductModel.Configuration.Quantity.Minimum} />}\n </span>\n )\n }\n\n propertiesModalOnOpened() {\n document.querySelector('.kit-item-properties-modal .modal-title').classList.add('truncate')\n }\n\n render() {\n const { kitItemProductModel, kitItemOrderItemModel, kitItemPriceModel, doLoadIframe, isPriceCalculating, kitItemViewModel, kitQuantity } = this.props\n\n if (!kitItemProductModel || !kitItemOrderItemModel || !kitItemViewModel)\n return null\n\n const { Name, ImageUrl, Thumbnails } = kitItemProductModel\n const { IsIncluded } = kitItemOrderItemModel\n\n const hasProperties = !!kitItemProductModel.Configuration.Properties.length\n\n if (doLoadIframe && IsIncluded && hasProperties && !kitItemViewModel.iframeLoading && !kitItemViewModel.iframeLoaded) {\n this.setKitViewModel(kitItemOrderItemModel.ID, { iframeLoading: true })\n }\n\n let itemClasses = 'kit-item-panel'\n if (!IsIncluded) itemClasses += ' excluded'\n\n let kitItemClasses = 'kit-item'\n if ((kitItemViewModel.isPropertiesValid === false || kitItemViewModel.isQuantityValid === false) && !this.state.isPropertiesOpen) {\n kitItemClasses += ' not-valid'\n }\n else {\n if (IsIncluded && !kitItemViewModel.propsWasOpened && kitItemViewModel.showPropsNotOpenedWarning && hasProperties) {\n kitItemClasses += ' not-edited'\n }\n }\n\n const itemUnitName = kitItemProductModel.Unit.PackType ? kitItemProductModel.Unit.PackType.PluralName : kitItemProductModel.Unit.ItemType ? kitItemProductModel.Unit.ItemType.PluralName : ''\n const OutOfStock = kitItemProductModel.Inventory && isOutOfStock(kitItemProductModel.Inventory.Quantity, kitItemProductModel.Configuration.Quantity.Minimum, kitItemProductModel.Inventory.AllowOutOfStockPurchase)\n\n const itemName = kitItemProductModel.CatalogNumber ? `${Name} / ${kitItemProductModel.CatalogNumber.toString()}` : Name\n\n const priceNotZero = kitItemPriceModel && kitItemPriceModel.Price && kitItemPriceModel.Price.Price !== 0\n return (\n <div className={kitItemClasses} data-qaautomationinfo={kitItemProductModel.FriendlyID}>\n <div className={itemClasses}>\n <div className='item-image' onClick={this.togglePreviewModal}>\n <ImageLoader className=\"image\" src={ImageUrl} />\n </div>\n <div className='item-name-price-quantity'>\n <div className='item-name-and-price'>\n <div className='item-name'>\n <Tooltip placement=\"top\" text={itemName} maxLine={2} />\n {hasProperties && this.renderEditLink('big-screen-only', OutOfStock)}\n {this.renderInventoryLabel('big-screen-only')}\n </div>\n <div className='item-price'>\n {isPriceCalculating && kitItemPriceModel && priceNotZero && <LoadingDots />}\n {!isPriceCalculating && kitItemPriceModel && priceNotZero && <Price model={kitItemPriceModel.Price} isMinimumPrice={kitItemPriceModel.IsMinimumPrice} />}\n </div>\n {hasProperties && this.renderEditLink('medium-screen-only', OutOfStock)}\n {this.renderInventoryLabel('medium-or-small-screen-only')}\n </div>\n {IsIncluded && (!kitItemProductModel.Inventory || kitItemProductModel.Inventory.AllowOutOfStockPurchase === true || kitItemProductModel.Inventory.Quantity >= kitItemProductModel.Configuration.Quantity.Minimum) && <div className=\"quantity\">\n <KitItemQuantity\n onQuantityChange={this.onQuantityChange}\n kitQuantity={kitQuantity}\n productModel={kitItemProductModel}\n orderModel={kitItemOrderItemModel}\n />\n {IsIncluded && <span className='quantity-label'>{itemUnitName}</span>}\n {kitItemProductModel.Unit.PackType &&\n <span className='quantity-per-pack'>\n {t('KitItem.Units_of_measure_notation',\n {\n PackTypeName: kitItemProductModel.Unit.PackType.Name,\n ItemQuantity: kitItemProductModel.Unit.ItemQuantity,\n ItemTypePluralName: kitItemProductModel.Unit.ItemType.PluralName\n })}\n </span>}\n </div>}\n\n {!IsIncluded && OutOfStock && <div className=\"out-of-stock\"><Inventory model={kitItemProductModel.Inventory} minQuantity={kitItemProductModel.Configuration.Quantity.Minimum} /></div>}\n {!IsIncluded && !OutOfStock && <div className=\"add-btn\"><div className=\"btn button button-secondary\" onClick={this.onAdd}>{t('KitItem.Add')}</div></div>}\n {hasProperties && this.renderEditLink('small-screen-only', OutOfStock)}\n\n </div>\n {IsIncluded && <div className=\"remove-btn\" onClick={this.onRemove}>×</div>}\n\n </div>\n <Modal isOpen={this.state.isPropertiesOpen} modalClassName=\"kit-item-properties-modal\" onOpened={this.propertiesModalOnOpened}>\n <ModalHeader><div dangerouslySetInnerHTML={{__html: `${t('KitItem.Edit_options')} - ${Name}`}}/><div className='modal-close'><div className='close-btn' onClick={this.onClickCancel}>×</div></div></ModalHeader>\n <ModalBody>\n {\n !this.state.isMediumBreak &&\n <div className=\"product-thumbnail\"><ImageLoader className=\"image\" src={ImageUrl} /></div>\n }\n <div className=\"scrollable-container\" ref={(ref) => this.scrollableContainer = ref}>\n <Scrollbars className=\"scrollbar\" universal renderThumbHorizontal={props => <div {...props} className=\"thumb-horizontal\" />}\n renderThumbVertical={props => <div {...props} className=\"thumb-vertical\" />} renderView={props => <div {...props} className=\"view\" />} ref={(ref) => this.scrollbars = ref}>\n {\n this.state.isMediumBreak &&\n <div className=\"product-thumbnail\"><ImageLoader className=\"image\" src={ImageUrl} /></div>\n }\n {\n this.state.isPropsModalLoading &&\n <div className=\"properties-loading-container\"><LoadingDots /></div>\n }\n <iframe className={`iframe-modal ${this.state.isPropsModalLoading ? 'iframe-hidden' : ''}`} src={this.iframeSrc} ref={(ref) => this.iframeElementModal = ref} frameBorder=\"0\" height=\"400px\" title=\"Kit Item Modal\" width=\"600px\" scrolling=\"no\" />\n </Scrollbars>\n </div>\n </ModalBody>\n <ModalFooter>\n <div className=\"cancel-btn button button-secondary thin\" onClick={this.onClickCancel}>{t('KitItem.Properties_cancel')}</div>\n <div className=\"save-btn button button-primary thin\" onClick={this.onClickSave}>{t('KitItem.Properties_save')}</div>\n </ModalFooter>\n </Modal>\n {\n doLoadIframe && IsIncluded && hasProperties &&\n <iframe src={this.iframeSrc} ref={(ref) => this.iframeElement = ref} className=\"iframe-hidden\" title='iframe hidden'/>\n }\n\n <Modal isOpen={this.state.isPreviewOpen} modalClassName=\"kit-preview-modal\" toggle={this.togglePreviewModal}>\n <ModalBody>\n <div>\n <div className='modal-close'><div className='close-btn' onClick={this.togglePreviewModal}>×</div></div>\n <div className='modal-title'>\n <Tooltip placement=\"top\" text={Name} maxLine={1} />\n </div>\n <div className='modal-carousel-wrapper'>\n <ImageCarousel id={`kitItemCarousel_${kitItemOrderItemModel.ID}`}\n activeSlide={this.state.activeModalImage}\n images={Thumbnails.map((image) => {\n return {\n Url: image\n }\n })}\n zoomAllowed={!this.state.isMediumBreak}\n />\n </div>\n </div>\n </ModalBody>\n </Modal>\n </div>\n )\n }\n}\n\nexport default withRouter(KitItem)\n","/**\n * A component to display and manage all items of a product of type Kit.\n *\n * @param {object} kitProduct - the kit product that is currently in redux state\n * @param {object} kitOrderItem - the order item of the kit product that is currently in redux state\n * @param {object} kitViewModel - the view model of this kit item, with all the information about displaying himself and its items\n * @param {object} [kitOrderItemPriceModel] - the price model of the kit order item that is currently in redux state\n * @param {boolean} [doValidate] - a flag to denotes a required action of validation, this flag is set from the parent component and passed to the children\n * @param {function} [onCalculatePrice] - a callback to signal that the price should be recalculated\n * @param {function} [onChange] - a callback to signal that one of the items were changed (added/removed/quantity/properties save)\n * @param {boolean} [isPriceCalculating] - a flag to indicate if the price is in loading state, this flag is set from the parent component and passed to the children\n * @param {number} lastChangedOrderItemID - the ID of the last orderItem that were changed, this should come as prop from parent component in order for the parent to manage this in case of concurrent actions from UI\n * @param {number} kitQuantity - the Quantity of the kit itself, to pass to the items, used for validation of quantity.\n */\n\nimport React, { Component } from 'react'\nimport KitItem from './KitItem'\n\nclass KitItemsList extends Component {\n constructor (props) {\n super(props)\n this.state = {\n doValidate: false\n }\n this.doLoadIframes = false\n\n this.onItemChange = this.onItemChange.bind(this)\n }\n\n static getDerivedStateFromProps (props, state) {\n if (props.doValidate && !state.doValidate) {\n return { doValidate: true }\n }\n return { doValidate: false }\n }\n\n componentDidMount () {\n this.doLoadIframes = true\n }\n\n onItemChange (orderItemID, changeType, data) {\n const { onChange } = this.props\n\n onChange && onChange(orderItemID, changeType, data)\n }\n\n render () {\n const { kitProduct, kitOrderItem, kitViewModel, kitOrderItemPriceModel, doValidate, isPriceCalculating, lastChangedOrderItemID, kitQuantity } = this.props\n\n if (!kitProduct || !kitOrderItem || !kitViewModel) {\n return null\n }\n const { Items: productItems } = kitProduct\n let { Items: orderItems } = kitOrderItem\n\n if (!productItems || !orderItems) {\n return null\n }\n return orderItems.map((orderItem, i) => {\n const productItem = productItems.find(\n kitProductItem => kitProductItem.Product.ID === orderItem.ProductID\n )\n const orderItemPriceModel = kitOrderItemPriceModel && kitOrderItemPriceModel.Items.find(\n kitItemPriceModel => kitItemPriceModel.OrderItemID === orderItem.ID\n )\n\n // show loading for price if all these conditions exist:\n // - isPriceCalculating flag is true\n // - the item is included\n // - there is no lastChangedOrderItemID, or there is a lastChangedOrderItemID its this item\n // otherwise: dont show loading\n const isPriceCalculatingForItem =\n isPriceCalculating && orderItem.IsIncluded && (!lastChangedOrderItemID || (lastChangedOrderItemID && lastChangedOrderItemID === orderItem.ID))\n\n const kitItemViewModel = kitViewModel.items[orderItem.ID]\n\n return (\n productItem && (\n <KitItem\n key={i}\n kitItemOrderItemModel={orderItem}\n kitItemProductModel={productItem.Product}\n kitItemViewModel={kitItemViewModel}\n kitItemPriceModel={orderItemPriceModel}\n onChange={this.onItemChange}\n doLoadIframe={this.doLoadIframes}\n doValidate={doValidate}\n isPriceCalculating={isPriceCalculatingForItem}\n kitQuantity={kitQuantity}\n />\n )\n )\n })\n }\n}\n\nexport default KitItemsList\n","import React from 'react'\nimport './ErrorBalloon.scss'\nimport { Icon } from '$core-components'\n\nconst ErrorBalloon = ({ children, className }) => {\n return <div className={`error-balloon ${className}`}>\n <div className=\"error-balloon-container\">\n <Icon name=\"error.svg\" width=\"13px\" height=\"13px\"/>\n <div className=\"error-balloon-children-container\">\n {children}\n </div>\n </div>\n </div>\n}\n\nexport default ErrorBalloon\n","import React from 'react'\nimport { t } from '$themelocalization'\nimport ErrorBalloon from '../ErrorBalloon'\n\nconst PreviewErrorBalloon = ({ poofPreviewError }) => poofPreviewError ?\n <ErrorBalloon className=\"proof-preview-failure\">\n {t('productProof.PreviewFailure')}\n </ErrorBalloon> : null\n\nexport default PreviewErrorBalloon\n","import React, { useState } from 'react'\nimport { t } from '$themelocalization'\nimport { ReactComponent as ProofIcon } from '$assets/icons/proof.svg'\n\nconst Proof = ({ onToggle, hideLink, currentProduct, orderItemId, isMobile, hasThumbnails }) => {\n const [fileUrl] = useState(\n currentProduct && currentProduct.Proof ? `${currentProduct.Proof.Url}&OrderItemID=${orderItemId}` : null\n )\n const [isDownloadProof] = useState(\n currentProduct && currentProduct.Proof &&\n ((isMobile && !currentProduct.Proof.MimeType.startsWith('image/')) ||\n (!isMobile && currentProduct.Proof.MimeType !== 'application/pdf' &&\n !currentProduct.Proof.MimeType.startsWith('image/')))\n )\n\n const handleModalToggle = () => {\n onToggle()\n }\n\n if (hideLink) return null\n if (!isMobile) {\n if (isDownloadProof) {\n return (\n <a download className=\"view-proof-wrapper desktop\" href={fileUrl} >\n <div className=\"view-proof\">\n <ProofIcon className=\"view-proof-icon\" width=\"20px\" height=\"24px\" />\n <div className=\"view-proof-title\">{t('product.view_proof')}</div>\n </div>\n </a>\n )\n }\n\n return <div className=\"view-proof-wrapper desktop\" onClick={handleModalToggle} >\n <div className=\"view-proof\">\n <ProofIcon className=\"view-proof-icon\" width=\"20px\" height=\"24px\" />\n <div className=\"view-proof-title\">{t('product.view_proof')}</div>\n </div>\n </div >\n } else {\n if (isDownloadProof) {\n return <a download className={`view-proof-wrapper mobile ${hasThumbnails ? '' : 'no-thumbs'}`} href={fileUrl}>\n <ProofIcon className=\"view-proof-icon\" width=\"20px\" height=\"24px\" />\n </a>\n }\n return <div className={`view-proof-wrapper mobile ${hasThumbnails ? '' : 'no-thumbs'}`} onClick={handleModalToggle}>\n <ProofIcon className=\"view-proof-icon\" width=\"20px\" height=\"24px\" />\n </div>\n }\n}\n\nexport default Proof\n","import React, { useEffect, useState } from 'react'\nimport { t } from '$themelocalization'\nimport './RefreshPreviewButton.scss'\n\nconst RefreshPreviewButton = ({showRefreshPreview, onProofPreviewClick, disabled}) => {\n const [isDisabled, setIsDisabled] = useState(false)\n\n useEffect(() => {\n setIsDisabled(disabled)\n }, [disabled])\n\n return showRefreshPreview ?\n <div className=\"button button-secondary refresh-preview\" disabled={isDisabled} onClick={onProofPreviewClick}>\n {t('productProof.RefreshPreview')}\n </div> : null\n}\n\nexport default RefreshPreviewButton\n","import PreviewErrorBalloon from './static/PreviewErrorBalloon'\nimport Proof from './static/Proof'\nimport RefreshPreviewButton from './static/RefreshPreviewButton'\nimport React, { useEffect, useState } from 'react'\nimport './static/ProductProperties.scss'\nimport './static/StaticProduct.scss'\nimport './kit/KitProduct.scss'\nimport './Preview.scss'\nimport { productTypes } from '$themeservices'\nimport { Carousel } from 'react-responsive-carousel'\nimport 'react-responsive-carousel/lib/styles/carousel.min.css'\nimport DotCarousel from './DotCarousel'\nimport { ReactComponent as LeftArrow } from '$assets/icons/left_arrow.svg'\nimport { ReactComponent as RightArrow } from '$assets/icons/right_arrow.svg'\nimport MultiItemsCarousel from './MultiItemsCarousel'\nimport { debounce } from 'throttle-debounce'\nimport { LoadingDots, ImageView } from '$core-components'\n\nconst IMAGES_LIMIT = 20\nconst THAMBNAILS_LIMIT = 10\n\nconst moveOnHover = debounce(500, (nextActive, setActiveImage) => {\n if (nextActive !== -1)\n setActiveImage(nextActive)\n})\n\nconst Preview = ({\n poofPreviewError,\n productThumbnails,\n isMobile,\n product,\n orderItem,\n setProofModalOpen,\n proofModalOpen,\n showRefreshPreview,\n onProofPreviewClick,\n showLoaderDots,\n disabledRefreshPreviewButton,\n isKitProduct = false,\n showThumbs = false,\n changeStickyThumbnail,\n productApprovalThumbnails = null\n}) => {\n\n const [activeImage, setActiveImage] = useState(0)\n const [activeHoveredImage, setActiveHoveredImage] = useState(-1)\n const [isImageZoomed, setIsImageZoomed] = useState(false)\n const [swipeScrollTolerance, setSwipeScrollTolerance] = useState(30)\n const isMultiThumbnails = () => productApprovalThumbnails?.length > 1 || productThumbnails?.Thumbnails?.length > 1\n\n const isThumbsShown = () => showThumbs && isMultiThumbnails() && productThumbnails.Thumbnails.length <= THAMBNAILS_LIMIT\n const isDotsShown = () => isMultiThumbnails() &&\n (!showThumbs || (product && (product.Type === productTypes.DYNAMIC || product.Type === productTypes.STATIC) && productThumbnails.Thumbnails && productThumbnails.Thumbnails.length > THAMBNAILS_LIMIT))\n\n const changeActiveImage = (image) => {\n setActiveImage(image)\n changeStickyThumbnail && changeStickyThumbnail(image)\n }\n\n useEffect(() => {\n moveOnHover(activeHoveredImage, changeActiveImage)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeHoveredImage])\n\n const images = productApprovalThumbnails || productThumbnails.Thumbnails || []\n const arrowStyles = {\n position: 'absolute',\n zIndex: 2,\n top: 'calc(50% - 15px)',\n cursor: 'pointer',\n }\n\n const getThumbnailTitleWrapper = () => {\n const titleShouldAppear = images[activeImage]?.DisplayName && images[activeImage]?.DisplayName?.trim().length > 0\n const getTitle = (value) => <div className=\"thumbnail-title-wrapper\">{value}</div>\n if (titleShouldAppear) {\n return getTitle(images[activeImage].DisplayName)\n }\n if (images.length > IMAGES_LIMIT) {\n return getTitle(`${activeImage + 1}/${images.length}`)\n }\n return null\n }\n\n const wrapperClass = ['preview-wrapper',\n product?.Type === productTypes.STATIC ? (isMultiThumbnails() ? 'multi-static' : 'single-static') : '',\n product?.Type === productTypes.KIT ? 'kit' : '',\n product?.Type === productTypes.DYNAMIC ? isMultiThumbnails() ? 'multi-dynamic' : 'single-dynamic' : '',\n product?.Type === productTypes.DYNAMIC && showRefreshPreview ? '' : 'with-preview-button',\n ].filter(s => s).join(' ')\n\n const swipeStartHandler = (e) => {\n if (isImageZoomed) {\n setSwipeScrollTolerance(10000)\n return\n }\n return e.touches.length > 1 ? setSwipeScrollTolerance(10000) : setSwipeScrollTolerance(30)\n }\n\n const onFastSwipeLeft = () => (activeImage === productThumbnails?.Thumbnails.length - 1) ?\n setActiveImage(0) :\n setActiveImage( activeImage + 1)\n\n const onFastSwipeRight = () => (activeImage === 0) ?\n setActiveImage(productThumbnails?.Thumbnails.length - 1) :\n setActiveImage(activeImage - 1)\n\n return (\n <>\n <div className={wrapperClass}>\n <Carousel\n infiniteLoop={true}\n showIndicators={false}\n showStatus={false}\n useKeyboardArrows={true}\n showThumbs={false}\n thumbWidth={64}\n onChange={changeActiveImage}\n selectedItem={activeImage}\n preventMovementUntilSwipeScrollTolerance={true}\n swipeable={true}\n swipeScrollTolerance={swipeScrollTolerance}\n onSwipeStart={swipeStartHandler}\n onSwipeForward={() => setActiveImage(Math.min(productThumbnails?.Thumbnails.length - 1, activeImage + 1))}\n onSwipeBackwards={() => setActiveImage(Math.max(0, activeImage - 1))}\n renderArrowPrev={(onClickHandler, hasPrev, label) =>\n hasPrev && !isImageZoomed && (\n <LeftArrow width=\"40px\" height=\"40px\" onClick={onClickHandler}\n style={{ ...arrowStyles, left: 35 }}/>\n )\n }\n renderArrowNext={(onClickHandler, hasNext, label) =>\n hasNext && !isImageZoomed && (\n <RightArrow width=\"40px\" height=\"40px\" onClick={onClickHandler}\n style={{ ...arrowStyles, right: 35 }}/>\n )\n }\n >\n {images.length && images.map((image, index) => {\n return (\n <div className=\"inner-carousel-image-wrapper\" key={image.Url || image + index}>\n {!isKitProduct && <PreviewErrorBalloon {...{ poofPreviewError }}/>}\n {showLoaderDots && <div className=\"carousel-dots-loader\">\n <LoadingDots/>\n </div>}\n <div className=\"image-wrapper\">\n <ImageView index={index} activeImage={activeImage} src={image.Url || image}\n zoomAllowed={true} isImageZoomed={isImageZoomed} setIsImageZoomed={setIsImageZoomed}\n onFastSwipeLeft={onFastSwipeLeft}\n\n onFastSwipeRight={onFastSwipeRight}\n />\n </div>\n </div>\n )\n })}\n </Carousel>\n {!isKitProduct && getThumbnailTitleWrapper()}\n {isThumbsShown() &&\n <MultiItemsCarousel\n leftArrow={{\n width: 7, height: 12\n }}\n rightArrow={{\n width: 7, height: 12\n }}\n styles={{ width: `100%` }}\n images={images.map(image => image.Url)}\n onItemClicked={changeActiveImage}\n onItemHovered={setActiveHoveredImage}\n activeImage={activeImage}\n hideDisabledArrows={false}\n />}\n {isDotsShown() &&\n <DotCarousel images={images} active={activeImage} onDotClick={(id) => setActiveImage(id)}/>}\n {product && product.Proof &&\n <Proof\n currentProduct={product}\n isMobile={isMobile}\n hasThumbnails\n orderItemId={orderItem.ID}\n onToggle={() => setProofModalOpen(!proofModalOpen)}\n hideLink={isMobile ? product.Type === productTypes.STATIC && !product.Proof : false}\n />\n }\n </div>\n {!isKitProduct && <RefreshPreviewButton {...{\n showRefreshPreview,\n onProofPreviewClick,\n disabled: disabledRefreshPreviewButton\n }}/>}\n </>\n )\n}\n\nexport default Preview\n","/**\n * A component that is loaded for displaying a product of type Kit\n *\n * @param {object} customState - the entire object from redux state\n * @param {object} router - the information about the current route, query param, etc\n *\n */\n\nimport { Component } from 'react'\nimport KitQuantity from './KitQuantity'\nimport KitItemsList from './KitItemsList'\nimport { isOutOfStock } from '../Inventory'\nimport Price from '../Price'\nimport { LoadingDots } from '$core-components'\nimport { Popover, PopoverBody } from 'reactstrap'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { withRouter } from '$ustoreinternal/services/withRouter'\nimport { decodeStringForURL, formatDateByLocale } from '$ustoreinternal/services/utils'\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\nimport deepcopy from 'deepcopy'\nimport { throttle } from 'throttle-debounce'\nimport { kitChangeType } from './consts'\nimport './KitProduct.scss'\nimport Preview from \"../Preview\";\n\nclass KitProduct extends Component {\n constructor() {\n super()\n this.state = {\n activeCarouselSlide: 0,\n doValidate: false,\n isKitQuantityValid: true,\n isPriceCalculating: true,\n showLoadingOnContinue: true,\n isLoading: false,\n isLoadingReorder: false,\n showWarningPopover: false,\n showErrorPopover: false,\n }\n\n this.initialDataLoaded = false // flag to indicate on ComponentDidUpdate whether the data APIs were already called.\n this.firstPriceCalculated = false\n\n this.ContinueErrorProperties = false\n this.ContinueErrorQuantity = false\n\n this.quantityChangeTriggered = false\n this.showItemsErrorOnKit = false\n this.lastChangedOrderItemID = 0\n\n this.onClickContinue = this.onClickContinue.bind(this)\n this.onClickContinueAnyway = this.onClickContinueAnyway.bind(this)\n this.onQuantityChange = this.onQuantityChange.bind(this)\n this.onCarouselImageChange = this.onCarouselImageChange.bind(this)\n this.onCalculatePrice = this.onCalculatePrice.bind(this)\n this.toggleWarningPopover = this.toggleWarningPopover.bind(this)\n this.toggleErrorPopover = this.toggleErrorPopover.bind(this)\n this.routeToCustomization = this.routeToCustomization.bind(this)\n this.onChange = this.onChange.bind(this)\n this.onReorder = this.onReorder.bind(this)\n }\n\n getData = async function (productID, orderItemID) {\n\n if (!productID) return\n\n const product = await UStoreProvider.api.products.getProductByID(productID, true)\n let orderProduct = null\n\n let currentOrderItemId;\n const { searchParams } = this.props;\n if (searchParams) {\n currentOrderItemId = searchParams.get('OrderItemId')\n }\n\n if (orderItemID || currentOrderItemId) {\n orderProduct = await UStoreProvider.api.orders.getOrderItem(orderItemID || currentOrderItemId)\n } else {\n orderProduct = await UStoreProvider.api.orders.addOrderItem(productID)\n }\n\n const lastOrder = await UStoreProvider.api.orders.getLastOrder(productID)\n\n const kitViewModel = { items: {} }\n orderProduct.Items.forEach(orderItem => {\n kitViewModel.items[orderItem.ID] = {\n iframeLoading: false,\n iframeLoaded: null,\n propsWasOpened: false,\n modalIsOpen: false,\n showPropsNotOpenedWarning: false,\n isPropertiesValid: null,\n isQuantityValid: null\n }\n\n if (orderItem.IsIncluded && product.Items) {\n const productItem = product.Items.find(\n kitProductItem => kitProductItem.Product.ID === orderItem.ProductID\n )\n if (productItem && productItem.Product.Inventory && isOutOfStock(productItem.Product.Inventory.Quantity, productItem.Product.Configuration.Quantity.Minimum, productItem.Product.Inventory.AllowOutOfStockPurchase)) {\n orderItem.IsIncluded = false\n }\n }\n })\n\n UStoreProvider.state.customState.setBulk({ currentProduct: product, currentOrderItem: orderProduct, lastOrder: lastOrder, kitViewModel: kitViewModel })\n }\n\n componentDidMount() {\n window.addEventListener('scroll', this.onScroll, true)\n throttle(250, this.onScroll);\t\t\t\t\t// Call this function once in 250ms only\n\n this.onScroll()\n }\n\n componentDidUpdate() {\n const { customState: { currentProduct } } = this.props\n\n const { customState: { currentOrderItem, kitViewModel } } = this.props\n\n if (!currentOrderItem || !kitViewModel || !currentProduct || !currentProduct.Items) return // we still don't have all data, do not continue.\n\n const { customState: { kitViewModel: { items } } } = this.props\n\n // if this is the first time we are getting the current order Item, and we found items with iframes, start showing loader on continue button, and calculate p\n if (!this.firstPriceCalculated) {\n this.firstPriceCalculated = true\n\n const itemsWithNoProperties = currentOrderItem.Items.filter(orderItem => {\n const productItem = orderItem && currentProduct.Items.find(kitProductItem => orderItem.ProductID === kitProductItem.Product.ID).Product\n return (productItem && !productItem.Configuration.Properties.length)\n }).map(item => item.ID)\n\n //check if there are items which are included and have properties\n const includedItemsWithIframe = currentOrderItem.Items.filter(orderItem => {\n return orderItem.IsIncluded && !itemsWithNoProperties.includes(orderItem.ID)\n })\n\n this.setState({ showLoadingOnContinue: !!includedItemsWithIframe.length })\n\n this.onCalculatePrice()\n .then((res) => res)\n .catch((err) => err)\n return\n }\n\n const includedItems = currentOrderItem.Items.filter(item => item.IsIncluded).map(item => item.ID)\n\n const itemsWithNoProperties = currentOrderItem.Items.filter(orderItem => {\n const productItem = orderItem && currentProduct.Items.find(kitProductItem => orderItem.ProductID === kitProductItem.Product.ID).Product\n return (productItem && !productItem.Configuration.Properties.length)\n }).map(item => item.ID)\n\n //check if all included kit items with properties has finished loading their iframes\n const allIncludedIframesAreLoaded = Object.keys(items).every(key => {\n return !includedItems.includes(key) ||\n (items[key].iframeLoaded && includedItems.includes(key)) ||\n itemsWithNoProperties.includes(key)\n })\n\n //if all included kit items are loaded - remove loading from continue\n if (this.state.showLoadingOnContinue && allIncludedIframesAreLoaded) {\n this.setState({ showLoadingOnContinue: false })\n }\n\n //if the kit quantity was changed and there is at least one item with invalid quantity - show general error on kit quantity\n if (this.quantityChangeTriggered && Object.keys(items).find(key => includedItems.includes(key) && items[key].isQuantityValid === false)) {\n this.showItemsErrorOnKit = true\n }\n\n //if the show general error on kit quantity is shown and all items have valid quantity or are not included - remove general error, remove flag of quantity changed\n if (this.showItemsErrorOnKit && Object.keys(items).every(key => !includedItems.includes(key) || items[key].isQuantityValid)) {\n this.showItemsErrorOnKit = false\n this.quantityChangeTriggered = false\n }\n\n const allItemsValidationReturned = Object.keys(items).every(key => !includedItems.includes(key) || items[key].isPropertiesValid !== null)\n\n //if all items returned from validation with any isValid value:\n // - remove loader on right side\n // - if at least one item is invalid or kit quantity is invalid - do nothing (errors are already shown)\n // - if all items are valid and kit quantity is valid check for warning on continue for not opening all items' props window\n // - if all items' props were opened dont show warning, navigate to next page\n if (this.state.isLoading && allItemsValidationReturned) {\n\n this.setState({ isLoading: false, isLoadingReorder: false, doValidate: false })\n\n //all is valid if kit quantity is valid, and all items have valid properties and valid quantity (or they are initially not included and their quantity in null)\n const isAllValid = this.state.isKitQuantityValid &&\n Object.keys(items).every(key => !includedItems.includes(key) || (items[key].isPropertiesValid && items[key].isQuantityValid)\n )\n\n if (isAllValid) {\n //reset flag for showing validation error popover\n this.ContinueErrorQuantity = this.ContinueErrorQuantity = false\n\n const allOpened = Object.keys(items).every(key => {\n return !includedItems.includes(key) ||\n items[key].propsWasOpened ||\n itemsWithNoProperties.includes(key)\n })\n\n // if at least one is included, has properties and not opened -> show the continue popover\n if (!allOpened) {\n this.setState({ showWarningPopover: !this.state.showWarningPopover })\n this.setAllKitViewModel(items, { showPropsNotOpenedWarning: true })\n return\n }\n\n // if valid and no need for popover, first put the OrderItemID into the URL, for navigation.\n this.routeToCustomization()\n .then((res) => res)\n .catch((err) => err)\n }\n else {\n this.setState({ showErrorPopover: true })\n //if kit quantity is not valid or there is at least one item with invalid quantity - raise flag for quantity error\n this.ContinueErrorQuantity = !this.state.isKitQuantityValid || Object.keys(items).find(key => includedItems.includes(key) && items[key].isQuantityValid === false)\n //if there is at least one item with invalid properties - raise flag for properties error\n this.ContinueErrorProperties = Object.keys(items).find(key => includedItems.includes(key) && items[key].isPropertiesValid === false)\n\n const nonValidItems = document.getElementsByClassName('not-valid')\n nonValidItems && nonValidItems.length && nonValidItems[0].scrollIntoView(false)\n }\n }\n\n //if any of the items has a modal opened, prevent scrolling on the back\n if (Object.keys(items).find(key => items[key].modalIsOpen)) {\n document.querySelector('html').classList.add('modal-open')\n }\n else {\n document.querySelector('html').classList.remove('modal-open')\n }\n\n }\n\n componentWillUnmount() {\n window.removeEventListener('scroll', this.onScroll, true)\n UStoreProvider.state.customState.delete('currentProduct')\n UStoreProvider.state.customState.delete('currentOrderItem')\n UStoreProvider.state.customState.delete('currentOrderItemId')\n UStoreProvider.state.customState.delete('currentOrderItemPriceModel')\n UStoreProvider.state.customState.delete('kitViewModel')\n UStoreProvider.state.customState.delete('lastOrder')\n }\n\n onScroll() {\n // make sure needed HTML elements exist\n const footer = document.querySelector('.footer')\n const stickyPanel = document.querySelector('.sticky-price-panel')\n\n if (!stickyPanel || stickyPanel.length === 0 || !footer) return\n\n if (footer.getBoundingClientRect().top <= window.innerHeight) {\n stickyPanel.classList.remove('fixed')\n }\n else {\n stickyPanel.classList.add('fixed')\n }\n }\n\n setAllKitViewModel(items, object) {\n const kitViewModelToMerge = { kitViewModel: { items: {} } }\n items && Object.keys(items).forEach(key => {\n kitViewModelToMerge.kitViewModel.items[key] = object\n })\n\n UStoreProvider.state.customState.merge(kitViewModelToMerge)\n }\n\n onClickContinue() {\n\n if (this.state.showLoadingOnContinue || this.state.isLoading) return\n\n const { customState: { currentOrderItem, kitViewModel: { items } } } = this.props\n\n const hasIncluded = currentOrderItem.Items && currentOrderItem.Items.find(item => item.IsIncluded) !== undefined\n\n if (!hasIncluded) return\n\n this.setAllKitViewModel(items, { isPropertiesValid: null })\n this.setState({ doValidate: true, isLoading: true, isLoadingReorder: false })\n }\n\n onClickContinueAnyway() {\n this.routeToCustomization()\n .then((res) => res)\n .catch((err) => err)\n }\n\n async routeToCustomization() {\n const { customState: { currentOrderItem }, asPath, navigate } = this.props\n\n const updatedFromDB = await UStoreProvider.api.orders.updateOrderItem(currentOrderItem.ID, currentOrderItem)\n\n //route only if update succeeded\n if (updatedFromDB) {\n if (!asPath.toLowerCase().includes(('?OrderItemID=').toLowerCase())) {\n const href = `${asPath}?OrderItemID=${currentOrderItem.ID}`\n\n let currentState = window.history.state\n // in Safari, history.state is NULL, so we need to replace it with an object.\n if (currentState === null || currentState === undefined) {\n currentState = { url: '', as: '', options: {} }\n }\n\n currentState.url = href\n currentState.as = href\n\n window.history.replaceState(currentState, '', href)\n }\n\n // now move to the next page (customization)\n navigate(urlGenerator.get({ page: 'customization' }) + `?OrderItemID=${currentOrderItem.ID}`)\n }\n }\n\n onQuantityChange(value, isvalid) {\n const { customState: { currentOrderItem } } = this.props\n\n if (currentOrderItem.Quantity !== value) {\n this.quantityChangeTriggered = true\n this.onChange(null, kitChangeType.KIT_QUANTITY, { quantity: value })\n }\n\n this.setState({ isKitQuantityValid: isvalid })\n\n }\n\n onCarouselImageChange(index) {\n this.setState({ activeCarouselSlide: index })\n }\n\n //this function is called when something has changed - kit_quantity/quantity/remove/add/save - price should be recalculate\n onChange(orderItemID, changeType, data) {\n let updatedKitOrderItem\n let orderItem\n let requestID\n\n //performing a lock in this thread in order to prevent concurrent updates on the OrderItem object\n if (!this.locked) {\n this.locked = true\n\n const { customState: { currentOrderItem } } = this.props\n\n updatedKitOrderItem = deepcopy(currentOrderItem)\n const orderItems = updatedKitOrderItem.Items\n switch (changeType) {\n case kitChangeType.KIT_QUANTITY:\n updatedKitOrderItem.Quantity = parseInt(data.quantity)\n break\n case kitChangeType.QUANTITY:\n orderItem = orderItems.find(item => item.ID === orderItemID)\n orderItem.Quantity = parseInt(data.quantity)\n break\n case kitChangeType.REMOVE:\n orderItem = orderItems.find(item => item.ID === orderItemID)\n orderItem.IsIncluded = false\n break\n case kitChangeType.ADD:\n orderItem = orderItems.find(item => item.ID === orderItemID)\n orderItem.IsIncluded = true\n //TODO: set showLoadingOnContinue: true only if item has properties\n this.setState({ showLoadingOnContinue: true })\n break\n case kitChangeType.SAVE:\n break\n default:\n // do nothing t\n }\n\n //saving the last OrderItemID that made the request in order to know which loader to show\n this.lastChangedOrderItemID = orderItemID\n\n //saving the last requestID in order to know when the last updated price is returned and show it\n requestID = Math.floor(Math.random() * Math.pow(10, 17)) + 1\n this.lastChangeRequestID = requestID\n\n UStoreProvider.state.customState.set('currentOrderItem', updatedKitOrderItem)\n this.locked = false\n }\n\n updatedKitOrderItem && this.onCalculatePrice(updatedKitOrderItem, requestID)\n .then((res) => res)\n .catch((err) => err)\n }\n\n // A method to calculate the price of this kit OrderItem.\n // The price is calculated with the API and change the price model in the state in order to re render all children.\n // Optional parameter:\n // - updatedKitOrderItem - an updated kit OrderItem to perform calculation of price according to, if doesnt exist takes the currentOrderItem from the props\n async onCalculatePrice(updatedKitOrderItem, requestID) {\n const { customState: { currentOrderItem } } = this.props\n\n this.setState({ isPriceCalculating: true })\n\n const kitOrderItemForPrice = updatedKitOrderItem ? updatedKitOrderItem : currentOrderItem\n\n const priceModel = await UStoreProvider.api.orders.getPriceOrderItem(kitOrderItemForPrice.ID, kitOrderItemForPrice)\n\n //validating that the returned price is the one received from the last updated OrderItem object, otherwise discard it.\n if (this.lastChangeRequestID === requestID || !requestID) {\n UStoreProvider.state.customState.set('currentOrderItemPriceModel', priceModel)\n this.setState({ isPriceCalculating: false })\n }\n }\n\n toggleWarningPopover() {\n this.setState({ showWarningPopover: false })\n const notEdited = document.getElementsByClassName('not-edited')\n notEdited && notEdited.length && notEdited[0].scrollIntoView(true)\n }\n\n toggleErrorPopover() {\n this.setState({ showErrorPopover: false })\n }\n\n async onReorder() {\n const { customState: { currentProduct, lastOrder } } = this.props\n this.setState({ isLoading: true, isLoadingReorder: true })\n const newOrder = await UStoreProvider.api.orders.reorder(lastOrder.OrderItemID)\n const newURL = `${urlGenerator.get({ page: 'products', id: currentProduct.FriendlyID, name: decodeStringForURL(currentProduct.Name) })}?OrderItemId=${newOrder.ID}&reorder=true`\n window.location.replace(newURL)\n }\n\n render() {\n if (!this.props.customState) return null\n\n const { customState: { currentProduct, currentOrderItem, lastOrder, kitViewModel, currentOrderItemPriceModel, currentOrderItemId } } = this.props\n\n if (!this.initialDataLoaded && currentProduct) {\n this.initialDataLoaded = true\n\n this.getData(currentProduct.ID, currentOrderItemId)\n .then((res) =>res)\n .catch((err) => err)\n\n return null\n }\n\n const { searchParams } = this.props\n const showReorderLink = !!searchParams.get('reorder')\n\n const { languageCode } = themeContext.get()\n\n if (!currentProduct) return null\n\n const quantityError = this.showItemsErrorOnKit ? t('KitProduct.Validation_kit_quantity_change_invalid_items') : null\n\n const catalogNumber = currentProduct.CatalogNumber ? ' / ' + currentProduct.CatalogNumber : ''\n\n const hasIncluded = !currentOrderItem || !currentOrderItem.Items ? null : currentOrderItem.Items.find(item => item.IsIncluded) !== undefined\n const showQuantity = !currentOrderItem ? false : !(!currentProduct.Configuration.Quantity.Changeable && currentOrderItem.Quantity === 1)\n\n return (\n <div className='kit-product'>\n <div className='main'>\n <div className=\"desktop-product\">\n <Preview product={currentProduct} isKitProduct={true} productThumbnails={currentProduct}/>\n </div>\n <div className='fixed-size-right'>\n {this.state.isLoading && (\n <div className='right-side-loading-container'>\n <div className='loading-content-container'>\n {this.state.isLoadingReorder && <div className='reorder-loading-msg'>{t('KitProduct.Reorder_loading_msg')}</div>}\n <LoadingDots />\n </div>\n </div>\n )}\n\n <div className='kit-name' dangerouslySetInnerHTML={{ __html: `${currentProduct.Name} ${catalogNumber}` }} />\n {lastOrder && !showReorderLink && <div className='kit-reorder'>\n {t('KitProduct.Last_order_notation', {\n OrderSubmittedDate: formatDateByLocale(lastOrder.SubmittedDate, languageCode)\n })}\n <span className='reorder-link' onClick={this.onReorder}>{t('KitProduct.Reorder')}</span>\n </div>}\n {currentProduct.Description && <div className='kit-description'>\n <div dangerouslySetInnerHTML={{ __html: currentProduct.Description }} />\n </div>}\n <div className=\"mobile-product\">\n <Preview product={currentProduct} isKitProduct={true} productThumbnails={currentProduct}/>\n </div>\n {showQuantity && currentOrderItem && <span className='kit-quantity'>\n {t('KitProduct.Quantity')}\n <div className='quantity-wrapper'>\n <KitQuantity\n onQuantityChange={this.onQuantityChange}\n productModel={currentProduct}\n orderModel={currentOrderItem}\n />\n {quantityError && (\n <div className='quantity-error'>{quantityError}</div>\n )}\n </div>\n </span>}\n\n <div className='divider' />\n <span className='kit-includes-title'>{t('KitProduct.Kit_includes')}</span>\n <div className='kit-item-list-wrapper'>\n {currentOrderItem && kitViewModel && currentOrderItemPriceModel ?\n <KitItemsList\n kitOrderItem={currentOrderItem}\n kitProduct={currentProduct}\n kitViewModel={kitViewModel}\n kitOrderItemPriceModel={currentOrderItemPriceModel}\n doValidate={this.state.doValidate}\n onCalculatePrice={this.onCalculatePrice}\n onChange={this.onChange}\n isPriceCalculating={this.state.isPriceCalculating}\n lastChangedOrderItemID={this.lastChangedOrderItemID}\n kitQuantity={currentOrderItem.Quantity}\n />\n :\n <div className='list-loader'>\n <LoadingDots />\n </div>\n }\n </div>\n\n <div id='kit-product-popover-container' />\n\n <div className='sticky-price-panel fixed'>\n <span className='total-price'>\n {this.state.isPriceCalculating && <LoadingDots />}\n {!this.state.isPriceCalculating && currentOrderItemPriceModel && <Price model={currentOrderItemPriceModel.Total.Price} isMinimumPrice={currentOrderItemPriceModel.Total.IsMinimumPrice} />}\n </span>\n\n <div\n id='kit-continue-button'\n className='continue-button button button-primary truncate'\n onClick={this.onClickContinue}\n disabled={!hasIncluded || this.state.isLoading}\n >\n {this.state.showLoadingOnContinue ?\n <LoadingDots />\n :\n t('KitProduct.Continue')}\n </div>\n\n {\n this.state.showWarningPopover &&\n <Popover\n className='continue-popover warning'\n container='kit-product-popover-container'\n isOpen={this.state.showWarningPopover}\n placement='top'\n target='kit-continue-button'\n toggle={this.toggleWarningPopover}>\n <PopoverBody>\n <div className='continue-popover-message'>\n {t('KitProduct.Continue_warning_msg')}\n </div>\n <div className='popover-buttons'>\n <div\n className='button btn-popover-cancel'\n onClick={this.toggleWarningPopover} >\n {t('KitProduct.Continue_warning_cancel')}\n </div>\n <div\n className='btn-popover-continue button button-secondary'\n onClick={this.onClickContinueAnyway} >\n {t('KitProduct.Continue_warning_continue')}\n </div>\n </div>\n </PopoverBody>\n </Popover>\n }\n {\n this.state.showErrorPopover &&\n <Popover\n className='continue-popover error'\n container='kit-product-popover-container'\n isOpen={this.state.showErrorPopover}\n placement='top'\n target='kit-continue-button'\n toggle={this.toggleErrorPopover}>\n <PopoverBody>\n <div className='popover-close'><div className='close-btn' onClick={this.toggleErrorPopover}>×</div></div>\n <div className='continue-popover-message'>\n {t('KitProduct.Continue_error_msg')} \n {\n this.ContinueErrorProperties && this.ContinueErrorQuantity ?\n <div>\n <ul>\n <li>{t('KitProduct.Continue_error_edit_msg')}</li>\n <li>{t('KitProduct.Continue_error_quantity_msg')}</li>\n </ul>\n </div>\n :\n this.ContinueErrorProperties ? t('KitProduct.Continue_error_edit_msg') : t('KitProduct.Continue_error_quantity_msg')\n }\n </div>\n </PopoverBody>\n </Popover>\n }\n </div>\n </div>\n </div>\n </div>\n )\n }\n}\nexport default withRouter(KitProduct)\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { Icon } from '$core-components'\nimport { ReactComponent as ErrorIcon } from '$assets/icons/error.svg'\nimport { t } from '$themelocalization'\nimport './Popper.scss'\n\nconst popperPositions = {\n topPrice: {\n refElementSelector: '#total-price-component.total-price',\n location: {\n top: '50px',\n left: '0'\n },\n tipPosition: {\n bottom: '95%',\n left: '10%',\n rotation: '225deg'\n }\n },\n stickyPriceError: {\n refElementSelector: '.sticky-add-to-cart-icon-container',\n location: {\n bottom: '72px',\n right: '0px'\n },\n tipPosition: {\n bottom: 'calc(0% - 6px)',\n left: '50%',\n rotation: '45deg'\n }\n },\n stickyPriceWarning: {\n refElementSelector: '.product-sticky-price .price-display',\n location: {\n bottom: '72px',\n right: '0px'\n },\n tipPosition: {\n bottom: 'calc(0% - 6px)',\n left: '50%',\n rotation: '45deg'\n }\n },\n bottomPrice: {\n refElementSelector: '.summary-table-row.total-row',\n location: {\n bottom: '35px',\n right: '0px'\n },\n tipPosition: {\n bottom: 'calc(0% - 6px)',\n left: '85%',\n rotation: '45deg'\n }\n },\n addToCartButton: {\n refElementSelector: '.add-to-cart-button-wrapper',\n location: {\n bottom: '166px',\n left: '50%',\n transform: 'translateX(-50%)'\n },\n tipPosition: {\n bottom: 'calc(0% - 6px)',\n left: '48%',\n rotation: '45deg'\n }\n }\n}\n\nconst isInViewport = (el, top = 140) => {\n const rect = el.getBoundingClientRect()\n return (\n rect.top >= top && // header height + tooltip height\n rect.left >= 0 &&\n rect.bottom - rect.height <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n )\n}\n\nconst setPopperPosition = (popperData, popperWrapper, stickPriceRef, topPriceRef, bottomPriceRef, forceAddToCartButton) => {\n if (!popperWrapper || !stickPriceRef|| !topPriceRef|| !bottomPriceRef) {\n return\n }\n const getPosition = () => {\n const stickyPanel = stickPriceRef.current\n if ((!stickyPanel || stickyPanel.style.height === '0px') && forceAddToCartButton) {\n return popperPositions.addToCartButton\n }\n if (popperData.errorType === 'error' && forceAddToCartButton && stickyPanel && stickyPanel.style.height !== '0px') {\n return popperPositions.stickyPriceError\n }\n if (popperData.errorType === 'warning' && stickyPanel && stickyPanel.style.height !== '0px') {\n return popperPositions.stickyPriceWarning\n }\n if (topPriceRef?.current && isInViewport(topPriceRef.current)) {\n return popperPositions.topPrice\n }\n if (bottomPriceRef?.current && isInViewport(bottomPriceRef.current)) {\n return popperPositions.bottomPrice\n }\n return null\n }\n\n const position = getPosition()\n if (position && popperWrapper.current) {\n const refElement = document.querySelector(position.refElementSelector)\n if (refElement) {\n refElement.appendChild(popperWrapper.current)\n refElement.style.setProperty('position', 'relative')\n popperWrapper.current.setAttribute('style', '')\n Object.keys(position.location).forEach((locationPoint) => {\n popperWrapper.current.style.setProperty(locationPoint, position.location[locationPoint])\n })\n if (position.tipPosition && Object.keys(position.tipPosition).length) {\n popperWrapper.current.style.setProperty('--tip-position-bottom', position.tipPosition.bottom)\n popperWrapper.current.style.setProperty('--tip-position-left', position.tipPosition.left)\n popperWrapper.current.style.setProperty('--tip-rotation', position.tipPosition.rotation)\n }\n }\n }\n\n}\n\nconst Popper = ({ errorCode, forceAddToCartButton, resetError, popperAffectedSections, stickPriceRef, topPriceRef, bottomPriceRef }) => {\n const [popperData, setPopperData] = useState({})\n const popperWrapper = useRef(null)\n\n const handleClose = () => {\n setPopperData({})\n resetError()\n }\n\n const setPosition = useCallback(() => {\n setPopperPosition(popperData, popperWrapper, stickPriceRef, topPriceRef, bottomPriceRef, forceAddToCartButton)\n }, [popperData, popperWrapper, stickPriceRef, topPriceRef, bottomPriceRef, forceAddToCartButton])\n\n const setPositionCallbackRef = useRef(setPosition)\n useEffect(() => {\n setPositionCallbackRef.current = setPosition\n }, [setPosition]);\n\n useEffect(() => {\n const handleScroll = () => {\n setPositionCallbackRef.current()\n }\n\n window.addEventListener('scroll', handleScroll)\n return () => {\n window.addEventListener('scroll', handleScroll)\n }\n }, [])\n\n useEffect(() => {\n const errors = {\n 'SOMETHING_WENT_WRONG': {\n type: 'error',\n message: t('product.error_something_went_wrong')\n },\n 'GET_PRICE': {\n type: 'error',\n message: t('product.price_is_not_valid')\n },\n 'PRICE_CAN_NOT_BE_UPDATED': {\n type: 'warning',\n message: t('product.price_cannot_be_updated')\n },\n 'VALIDATION_ERROR': {\n type: 'error',\n message: t('product.validation_error')\n },\n 'SECTION_ERROR': {\n type: 'error',\n message: t('Product.SectionError', {sections: `\\n${popperAffectedSections.slice(0, 5).join('\\n')}` })\n }\n }\n\n if (errorCode) {\n const newPopperData = { errorType: errors[errorCode].type, errorMessage: errors[errorCode].message }\n setPopperData(newPopperData)\n setPopperPosition(newPopperData, popperWrapper, stickPriceRef, topPriceRef, bottomPriceRef, forceAddToCartButton)\n if (popperWrapper.current) {\n popperWrapper.current.style.setProperty('display', 'block')\n popperWrapper.current.children[0].style.setProperty('display', 'flex')\n }\n } else if (errorCode === null) {\n setPopperData({})\n if (popperWrapper.current) {\n popperWrapper.current.style.setProperty('display', 'none')\n popperWrapper.current.children[0].style.setProperty('display', 'none')\n }\n const popperElement = document.getElementById('popper')\n if (popperElement) {\n const popperParentElement = popperElement.parentElement\n popperParentElement.removeChild(popperElement)\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [errorCode, popperAffectedSections])\n\n return (\n <div ref={popperWrapper} className={`popper-tooltip ${popperData.errorType}`} id=\"popper\" style={{ display: 'none' }}>\n <div className='popper-tooltip-inner' style={{ display: 'none' }}>\n <button className=\"close-popper\" onClick={() => handleClose()}>\n <Icon name=\"close_black.svg\" width=\"10px\" height=\"10px\"/>\n </button>\n <div className='error-icon'>\n <ErrorIcon width='15px' height='15px'/>\n </div>\n <div className='popover-message'>{popperData.errorMessage}</div>\n </div>\n <span className='arrow'/>\n </div>\n )\n}\n\nexport default Popper\n","import React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react'\nimport { t } from '$themelocalization'\nimport { ReactComponent as ErrorIcon } from '$assets/icons/error.svg'\nimport { ReactComponent as PencilIcon } from '$assets/icons/pencil_section.svg'\nimport { ReactComponent as TickIcon } from '$assets/icons/tick.svg'\nimport sanitizeHTML from 'sanitize-html'\n\nexport const Section = forwardRef(({\n number, section, children, isOpen, setOpenSection,\n isLastSection, onNext, changed, sectionToScrollTo, sectionErrors, isHidden, sectionDescription\n}, sectionRef) => {\n const sectionContentRef = useRef(null)\n const [hasBeenOpened, setHasBeenOpened] = useState(isOpen)\n const [hasChanged, setHasChanged] = useState(changed)\n\n const contentObserver = new MutationObserver(useCallback(() => {\n if (sectionContentRef.current.style.overflow !== 'hidden') {\n sectionContentRef.current.style.setProperty('max-height', (sectionContentRef.current.scrollHeight + 50) + 'px')\n }\n }, [sectionContentRef]))\n\n useEffect(() => {\n if (isOpen) {\n setHasBeenOpened(true)\n sectionContentRef.current.style.setProperty('max-height', (sectionContentRef.current.scrollHeight + 50) + 'px')\n } else {\n sectionContentRef.current.style.setProperty('overflow', 'hidden')\n sectionContentRef.current.style.setProperty('max-height', '0px')\n }\n }, [isOpen])\n\n useEffect(() => {\n setHasChanged(changed)\n }, [changed])\n\n useEffect(() => {\n contentObserver.observe(sectionContentRef.current, { childList: true, subtree: true, attributes: true })\n return () => contentObserver.disconnect()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const onHeaderClick = () => setOpenSection(isOpen ? -1 : number)\n const onHeaderKeyPress = (e) => e.key === 'Enter' && onHeaderClick()\n const transitionEnd = () => {\n if (isOpen) {\n sectionContentRef.current.style.setProperty('overflow', 'unset')\n }\n }\n const hasErrors = sectionErrors.reduce((r, err) => r || err, false)\n const sanitizedDescription = !!sectionDescription?.description && sanitizeHTML(sectionDescription?.description, {\n allowedClasses: { '*': ['*'] },\n allowedAttributes: { '*': ['*'] },\n parseStyleAttributes: false\n }).replace(/\\n/g, ' ').trim()\n\n return (\n <>\n <div\n className={`section ${isOpen ? 'section-open' : ''} ${hasErrors ? 'section-error' : ''} ${isHidden ? 'hidden' : ''}`}\n ref={sectionRef}>\n <div className=\"section-header\" onClick={onHeaderClick} onKeyDown={onHeaderKeyPress} tabIndex=\"0\">\n <div className=\"section-title\">\n <span className=\"section-title-id\">{number + 1}. </span>\n <span className=\"section-title-text\">\n {section.name === 'xmpie_product_properties' ? t('xmpie_product_properties') : section.name}</span>\n </div>\n {hasErrors && !isOpen && <ErrorIcon width=\"15px\" height=\"15px\"/>}\n {!hasErrors && hasBeenOpened && hasChanged && !isOpen &&\n <TickIcon className=\"section-tick-icon\" height=\"20px\" width=\"20px\"/>}\n {!hasErrors && (!hasBeenOpened || !hasChanged) && !isOpen &&\n <PencilIcon className=\"section-pencil-icon\" height=\"20px\" width=\"20px\"\n title={t('DynamicProduct.Section.Edit')}/>}\n </div>\n {isOpen && sanitizedDescription &&\n <div className=\"section-description\" dangerouslySetInnerHTML={{ __html: sanitizedDescription }}/>}\n <div className={`section-content`} ref={sectionContentRef} onTransitionEnd={transitionEnd}>\n {children}\n <div className=\"button button-primary\" onClick={onNext} onKeyDown={(e) => e.key === 'Enter' && onNext()}\n tabIndex=\"0\">{isLastSection ? t('DynamicForm.Continue') : t('DynamicForm.Done')}</div>\n </div>\n </div>\n {\n ((!isOpen && hasErrors)) &&\n <div className=\"section-error-msg\">\n {t('product.validation_error')}\n </div>\n }\n </>\n )\n})\n","export type NumberLike = bigint | number\n\nexport const keepUnique = <T>(content: Iterable<T>): T[] => [\n ...new Set(content),\n]\n\nexport const withoutChars = (\n chars: string[],\n charsToExclude: string[],\n): string[] => chars.filter((char) => !charsToExclude.includes(char))\n\nexport const onlyChars = (chars: string[], keepChars: string[]): string[] =>\n chars.filter((char) => keepChars.includes(char))\n\nexport const isIntegerNumber = (n: NumberLike | string) =>\n typeof n === 'bigint' ||\n (!Number.isNaN(Number(n)) && Math.floor(Number(n)) === n)\n\nexport const isPositiveAndFinite = (n: NumberLike) =>\n typeof n === 'bigint' || (n >= 0 && Number.isSafeInteger(n))\n\nexport function shuffle(\n alphabetChars: string[],\n saltChars: string[],\n): string[] {\n if (saltChars.length === 0) {\n return alphabetChars\n }\n\n let integer: number\n const transformed = [...alphabetChars]\n\n for (let i = transformed.length - 1, v = 0, p = 0; i > 0; i--, v++) {\n v %= saltChars.length\n // eslint-disable-next-line no-multi-assign\n p += integer = saltChars[v]!.codePointAt(0)!\n const j = (integer + v + p) % i\n\n // swap characters at positions i and j\n const a = transformed[i]!\n const b = transformed[j]!\n transformed[j] = a\n transformed[i] = b\n }\n\n return transformed\n}\n\nexport const toAlphabet = (\n input: NumberLike,\n alphabetChars: string[],\n): string[] => {\n const id: string[] = []\n let value = input\n\n if (typeof value === 'bigint') {\n const alphabetLength = BigInt(alphabetChars.length)\n do {\n id.unshift(alphabetChars[Number(value % alphabetLength)]!)\n value /= alphabetLength\n } while (value > BigInt(0))\n } else {\n do {\n id.unshift(alphabetChars[value % alphabetChars.length]!)\n value = Math.floor(value / alphabetChars.length)\n } while (value > 0)\n }\n\n return id\n}\n\nexport const fromAlphabet = (\n inputChars: string[],\n alphabetChars: string[],\n): NumberLike =>\n inputChars.reduce<NumberLike>((carry, item) => {\n const index = alphabetChars.indexOf(item)\n if (index === -1) {\n throw new Error(\n `The provided ID (${inputChars.join(\n '',\n )}) is invalid, as it contains characters that do not exist in the alphabet (${alphabetChars.join(\n '',\n )})`,\n )\n }\n if (typeof carry === 'bigint') {\n return carry * BigInt(alphabetChars.length) + BigInt(index)\n }\n const value = carry * alphabetChars.length + index\n const isSafeValue = Number.isSafeInteger(value)\n if (isSafeValue) {\n return value\n }\n\n throwIfBigIntNotAvailable(\n `Unable to decode the provided string, due to lack of support for BigInt numbers in the current environment`,\n )\n\n return BigInt(carry) * BigInt(alphabetChars.length) + BigInt(index)\n }, 0)\n\nconst safeToParseNumberRegExp = /^\\+?\\d+$/\n\nexport const safeParseInt10 = (str: string) => {\n if (!safeToParseNumberRegExp.test(str)) {\n return Number.NaN\n }\n\n const int10 = Number.parseInt(str, 10)\n\n if (Number.isSafeInteger(int10)) {\n return int10\n }\n\n throwIfBigIntNotAvailable(\n 'Unable to encode the provided BigInt string without loss of information due to lack of support for BigInt type in the current environment',\n )\n\n return BigInt(str)\n}\n\nexport const splitAtIntervalAndMap = <T>(\n str: string,\n nth: number,\n map: (n: string) => T,\n): T[] =>\n Array.from<never, T>({ length: Math.ceil(str.length / nth) }, (_, index) =>\n map(str.slice(index * nth, (index + 1) * nth)),\n )\n\nexport const makeAnyOfCharsRegExp = (chars: string[]) =>\n new RegExp(\n chars\n .map((char) => escapeRegExp(char))\n // we need to sort these from longest to shortest,\n // as they may contain multibyte unicode characters (these should come first)\n .sort((a, b) => b.length - a.length)\n .join('|'),\n )\n\nexport const makeAtLeastSomeCharRegExp = (chars: string[]) =>\n new RegExp(\n `^[${chars\n .map((char) => escapeRegExp(char))\n // we need to sort these from longest to shortest,\n // as they may contain multibyte unicode characters (these should come first)\n .sort((a, b) => b.length - a.length)\n .join('')}]+$`,\n )\n\nconst escapeRegExp = (text: string) =>\n text.replace(/[\\s#$()*+,.?[\\\\\\]^{|}-]/g, '\\\\$&')\n\nconst throwIfBigIntNotAvailable = (\n errorMessage: string = 'BigInt is not available in this environment',\n) => {\n if (typeof BigInt !== 'function') {\n throw new TypeError(errorMessage)\n }\n}\n","import type { NumberLike } from './util'\nimport {\n fromAlphabet,\n isIntegerNumber,\n isPositiveAndFinite,\n keepUnique,\n makeAnyOfCharsRegExp,\n makeAtLeastSomeCharRegExp,\n onlyChars,\n safeParseInt10,\n shuffle,\n splitAtIntervalAndMap,\n toAlphabet,\n withoutChars,\n} from './util'\n\nconst MIN_ALPHABET_LENGTH = 16\nconst SEPARATOR_DIV = 3.5\nconst GUARD_DIV = 12\nconst HEXADECIMAL = 16\nconst SPLIT_AT_EVERY_NTH = 12\n\nconst MODULO_PART = 100\nexport default class Hashids {\n private alphabet: string[]\n private seps: string[]\n private guards: string[]\n private salt: string[]\n private guardsRegExp: RegExp\n private sepsRegExp: RegExp\n private allowedCharsRegExp: RegExp\n\n constructor(\n salt = '',\n private minLength = 0,\n alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',\n seps = 'cfhistuCFHISTU',\n ) {\n if (typeof minLength !== 'number') {\n throw new TypeError(\n `Hashids: Provided 'minLength' has to be a number (is ${typeof minLength})`,\n )\n }\n if (typeof salt !== 'string') {\n throw new TypeError(\n `Hashids: Provided 'salt' has to be a string (is ${typeof salt})`,\n )\n }\n if (typeof alphabet !== 'string') {\n throw new TypeError(\n `Hashids: Provided alphabet has to be a string (is ${typeof alphabet})`,\n )\n }\n\n const saltChars = Array.from(salt)\n const alphabetChars = Array.from(alphabet)\n const sepsChars = Array.from(seps)\n\n this.salt = saltChars\n\n const uniqueAlphabet = keepUnique(alphabetChars)\n\n if (uniqueAlphabet.length < MIN_ALPHABET_LENGTH) {\n throw new Error(\n `Hashids: alphabet must contain at least ${MIN_ALPHABET_LENGTH} unique characters, provided: ${uniqueAlphabet.join(\n '',\n )}`,\n )\n }\n\n /** `alphabet` should not contains `seps` */\n this.alphabet = withoutChars(uniqueAlphabet, sepsChars)\n /** `seps` should contain only characters present in `alphabet` */\n const filteredSeps = onlyChars(sepsChars, uniqueAlphabet)\n this.seps = shuffle(filteredSeps, saltChars)\n\n let sepsLength\n let diff\n\n if (\n this.seps.length === 0 ||\n this.alphabet.length / this.seps.length > SEPARATOR_DIV\n ) {\n sepsLength = Math.ceil(this.alphabet.length / SEPARATOR_DIV)\n\n if (sepsLength > this.seps.length) {\n diff = sepsLength - this.seps.length\n this.seps.push(...this.alphabet.slice(0, diff))\n this.alphabet = this.alphabet.slice(diff)\n }\n }\n\n this.alphabet = shuffle(this.alphabet, saltChars)\n const guardCount = Math.ceil(this.alphabet.length / GUARD_DIV)\n\n if (this.alphabet.length < 3) {\n this.guards = this.seps.slice(0, guardCount)\n this.seps = this.seps.slice(guardCount)\n } else {\n this.guards = this.alphabet.slice(0, guardCount)\n this.alphabet = this.alphabet.slice(guardCount)\n }\n\n this.guardsRegExp = makeAnyOfCharsRegExp(this.guards)\n this.sepsRegExp = makeAnyOfCharsRegExp(this.seps)\n this.allowedCharsRegExp = makeAtLeastSomeCharRegExp([\n ...this.alphabet,\n ...this.guards,\n ...this.seps,\n ])\n }\n\n encode(numbers: NumberLike[] | string[] | string): string\n encode(...numbers: NumberLike[]): string\n encode(...numbers: string[]): string\n encode<T extends NumberLike | string>(\n first: T | T[],\n ...inputNumbers: T[]\n ): string {\n const ret = ''\n\n let numbers: T[] = Array.isArray(first)\n ? first\n : [...(first != null ? [first] : []), ...inputNumbers]\n\n if (numbers.length === 0) {\n return ret\n }\n\n if (!numbers.every(isIntegerNumber)) {\n numbers = numbers.map((n) =>\n typeof n === 'bigint' || typeof n === 'number'\n ? n\n : safeParseInt10(String(n)),\n ) as T[]\n }\n\n if (!(numbers as NumberLike[]).every(isPositiveAndFinite)) {\n return ret\n }\n\n return this._encode(numbers as number[]).join('')\n }\n\n decode(id: string): NumberLike[] {\n if (!id || typeof id !== 'string' || id.length === 0) return []\n return this._decode(id)\n }\n\n /**\n * @description Splits a hex string into groups of 12-digit hexadecimal numbers,\n * then prefixes each with '1' and encodes the resulting array of numbers\n *\n * Encoding '00000000000f00000000000f000f' would be the equivalent of:\n * Hashids.encode([0x100000000000f, 0x100000000000f, 0x1000f])\n *\n * This means that if your environment supports BigInts,\n * you will get different (shorter) results if you provide\n * a BigInt representation of your hex and use `encode` directly, e.g.:\n * Hashids.encode(BigInt(`0x${hex}`))\n *\n * To decode such a representation back to a hex string, use the following snippet:\n * Hashids.decode(id)[0].toString(16)\n */\n encodeHex(inputHex: bigint | string): string {\n let hex = inputHex\n switch (typeof hex) {\n case 'bigint':\n hex = hex.toString(HEXADECIMAL)\n break\n case 'string':\n if (!/^[\\dA-Fa-f]+$/.test(hex)) return ''\n break\n default:\n throw new Error(\n `Hashids: The provided value is neither a string, nor a BigInt (got: ${typeof hex})`,\n )\n }\n\n const numbers = splitAtIntervalAndMap(hex, SPLIT_AT_EVERY_NTH, (part) =>\n Number.parseInt(`1${part}`, 16),\n )\n return this.encode(numbers)\n }\n\n decodeHex(id: string): string {\n return this.decode(id)\n .map((number) => number.toString(HEXADECIMAL).slice(1))\n .join('')\n }\n\n isValidId(id: string): boolean {\n return this.allowedCharsRegExp.test(id)\n }\n\n private _encode(numbers: NumberLike[]): string[] {\n let { alphabet } = this\n\n const numbersIdInt = numbers.reduce<number>(\n (last, number, i) =>\n last +\n (typeof number === 'bigint'\n ? Number(number % BigInt(i + MODULO_PART))\n : number % (i + MODULO_PART)),\n 0,\n )\n\n let ret: string[] = [alphabet[numbersIdInt % alphabet.length]!]\n const lottery = [...ret]\n\n const { seps } = this\n const { guards } = this\n\n numbers.forEach((number, i) => {\n const buffer = lottery.concat(this.salt, alphabet)\n\n alphabet = shuffle(alphabet, buffer)\n const last = toAlphabet(number, alphabet)\n\n ret.push(...last)\n\n if (i + 1 < numbers.length) {\n const charCode = last[0]!.codePointAt(0)! + i\n const extraNumber =\n typeof number === 'bigint'\n ? Number(number % BigInt(charCode))\n : number % charCode\n ret.push(seps[extraNumber % seps.length]!)\n }\n })\n\n if (ret.length < this.minLength) {\n const prefixGuardIndex =\n (numbersIdInt + ret[0]!.codePointAt(0)!) % guards.length\n ret.unshift(guards[prefixGuardIndex]!)\n\n if (ret.length < this.minLength) {\n const suffixGuardIndex =\n (numbersIdInt + ret[2]!.codePointAt(0)!) % guards.length\n ret.push(guards[suffixGuardIndex]!)\n }\n }\n\n const halfLength = Math.floor(alphabet.length / 2)\n while (ret.length < this.minLength) {\n alphabet = shuffle(alphabet, alphabet)\n ret.unshift(...alphabet.slice(halfLength))\n ret.push(...alphabet.slice(0, halfLength))\n\n const excess = ret.length - this.minLength\n if (excess > 0) {\n const halfOfExcess = excess / 2\n ret = ret.slice(halfOfExcess, halfOfExcess + this.minLength)\n }\n }\n\n return ret\n }\n\n private _decode(id: string): NumberLike[] {\n if (!this.isValidId(id)) {\n throw new Error(\n `The provided ID (${id}) is invalid, as it contains characters that do not exist in the alphabet (${this.guards.join(\n '',\n )}${this.seps.join('')}${this.alphabet.join('')})`,\n )\n }\n const idGuardsArray = id.split(this.guardsRegExp)\n const splitIndex =\n idGuardsArray.length === 3 || idGuardsArray.length === 2 ? 1 : 0\n\n const idBreakdown = idGuardsArray[splitIndex]!\n if (idBreakdown.length === 0) return []\n\n const lotteryChar = idBreakdown[Symbol.iterator]().next().value as string\n const idArray = idBreakdown.slice(lotteryChar.length).split(this.sepsRegExp)\n\n let lastAlphabet: string[] = this.alphabet\n const result: NumberLike[] = []\n\n for (const subId of idArray) {\n const buffer = [lotteryChar, ...this.salt, ...lastAlphabet]\n const nextAlphabet = shuffle(\n lastAlphabet,\n buffer.slice(0, lastAlphabet.length),\n )\n result.push(fromAlphabet(Array.from(subId), nextAlphabet))\n lastAlphabet = nextAlphabet\n }\n\n // if the result is different from what we'd expect, we return an empty result (malformed input):\n if (this._encode(result).join('') !== id) return []\n return result\n }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React, { useEffect, useRef, useState } from 'react'\nimport { Section } from './Section'\nimport { Icon } from '$core-components'\nimport features from '$features'\nimport Hashids from 'hashids'\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\nimport './DynamicForm.scss'\nimport sanitizeHTML from 'sanitize-html'\n\nconst withCustomProps = (WrappedComponent = {}) => {\n class ConnectedComponent extends React.Component {\n constructor (props) {\n super(props)\n const regex = new RegExp(/[!$%^&*()+|~=`{}[\\]:\";'<>?,./]/, 'g')\n this.id = this.props.id.replace('root_', '').replace(regex, '')\n }\n\n onDucChange = (value, errors = [], skipValidation = false) => {\n const newDucValue = value === 'default' ? undefined : value\n const schemaErrors = !value && this.props.uiSchema['ui:errorMessages']\n ? Object.values(this.props.uiSchema['ui:errorMessages']).map((err) => err)\n : []\n const errSchema = { [this.props.id]: { __errors: [...schemaErrors, ...errors] } }\n this.props.onChange(this.props.id, newDucValue === '__xmpie__clear__' ? '' : newDucValue, errSchema, skipValidation)\n }\n\n render () {\n const hashids = new Hashids(this.id)\n const hashedID = hashids.encode(1, 2, 3)\n\n return (\n <div className={`a${hashedID}`}>\n <WrappedComponent\n {...this.props}\n id={this.id}\n disabled={this.props.readonly}\n onChange={this.onDucChange}\n />\n </div>\n )\n }\n }\n\n return ConnectedComponent\n}\n\nconst widgets = window.uStoreDucs.reduce((r, duc) => ({ ...r, [duc.name]: withCustomProps(duc.component) }), {})\n\nconst isSectionHidden = (section) => section.properties.every((property) => !property.uiSchema['ui:options'].visible)\nexport const sectionSplitter = (properties, nameOfSectionToKeepOpen, changedSections) => {\n const sections = Object.values(properties).reduce((r, property) => {\n if (property.uiSchema['ui:options'].section !== r.lastSectionName) {\n r.sections.push({\n name: property.uiSchema['ui:options'].section,\n properties: [property],\n changed: changedSections[r.sections.length] || false,\n })\n r.lastSectionName = property.uiSchema['ui:options'].section\n } else {\n r.sections[r.sections.length - 1].properties.push(property)\n }\n return r\n }, { sections: [], lastSectionName: null })\n return sections.sections.filter((section) => !isSectionHidden(section))\n}\n\nconst checkIfPropertyDependersHaveDefaultValueSelected = (property, formData) =>\n property.depended !== null &&\n formData[property.parent] === property.condition.enum[0] ?\n checkIfPropertyDependersHaveDefaultValueSelected(property.depended, formData) :\n formData[property.parent] === property.condition.enum[0]\n\nconst Property = ({ property, errors, handlePropertyChange, internalFormData }) => {\n\n if ((\n property.depended && checkIfPropertyDependersHaveDefaultValueSelected(property.depended, internalFormData)) ||\n !property.depended\n ) {\n\n const WidgetComponent = widgets[property.uiSchema['ui:widget']]\n return (\n <div key={property.id}\n className={`duc-wrapper \n ${property.uiSchema['ui:options'].visible ? '' : 'hidden'}\n ${errors[property.id] && errors[property.id].errors.length && errors[property.id].show ? 'errors' : ''}\n `}>\n <div className=\"duc-head\">\n <label htmlFor={property.id} className=\"duc-title\">\n {property.title}\n {property.required\n ? <span className=\"required-field\">*</span>\n : null\n }\n </label>\n {property.description &&\n <span className=\"duc-description\">\n <Icon name=\"info.svg\" width=\"16px\" height=\"16px\" className=\"info-icon\" title=\"\"/>\n <div className=\"duc-description-text\">{property.description}</div>\n </span>\n }\n {property.custom.info &&\n <span className=\"info-icon\">(i)\n <span className=\"tooltip-text\" dangerouslySetInnerHTML={{ __html: property.custom.info }}/>\n </span>\n }\n </div>\n <WidgetComponent\n features={features}\n formContext={{ UStoreProvider }}\n id={property.id}\n onChange={handlePropertyChange}\n onBlur={(id, value, errorsFromProperty, skipValidation) =>\n value && handlePropertyChange(id, value, errorsFromProperty || [], skipValidation)\n }\n options={property.uiSchema['ui:options']}\n readonly={property.uiSchema['ui:readonly']}\n required={property.required}\n schema={property.propertySchema}\n t={t}\n uiSchema={property.uiSchema}\n value={internalFormData[property.id]}\n />\n {\n errors[property.id] &&\n errors[property.id].errors &&\n errors[property.id].show\n ? errors[property.id].errors.map((error) => {\n return (\n <div className=\"duc-error\" key=\"err\">\n <div className=\"error-text\">{error}</div>\n </div>\n )\n })\n : null\n }\n </div>\n )\n }\n return null\n}\n\nconst getFirstSectionWithErrors = (sections, errors) => {\n const sectionWithErrors = sections.map((section) => {\n return section.properties.reduce((r, property) => r || (errors[property.id] && errors[property.id].show), false)\n })\n for (let i = 0; i < sectionWithErrors.length; i++) {\n if (sectionWithErrors[i]) {\n return i\n }\n }\n return -1\n}\n\nconst DynamicForm = ({ errors, excelPricingEnabled, formData, onChange, properties, sectionToOpen, sectionsDescription }) => {\n const [internalFormData, setInternalFormData] = useState(formData || {})\n const [openSection, setOpenSection] = useState(0)\n const [sections, setSections] = useState([])\n const [changedSections, setChangedSections] = useState({})\n const sectionsRef = useRef({})\n\n useEffect(() => formData && setInternalFormData(formData), [formData])\n\n// eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => setSections(sectionSplitter(properties, openSection, changedSections)), [properties])\n\n useEffect(() => {\n if (sectionToOpen && sectionToOpen !== openSection) {\n if (sectionToOpen < -2) {\n const firstSectionWithErrors = getFirstSectionWithErrors(sections, errors)\n setOpenSection(firstSectionWithErrors)\n scrollToElement(sectionsRef.current[firstSectionWithErrors])\n return\n }\n setOpenSection(sectionToOpen)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sectionToOpen])\n const handlePropertyChange = (id, value, errorsFromProperty, skipValidation = false) => {\n const sectionIndex = sections.findIndex(section => section.properties.some(property => property.id === id))\n setChangedSections({ ...changedSections, [sectionIndex]: true })\n\n const updatedErrors = Object.keys(errors)\n .reduce((acc, propertyId) => ({\n ...acc,\n [propertyId]: (errorsFromProperty[propertyId] &&\n errorsFromProperty[propertyId].__errors) || errors[propertyId].errors\n }), {})\n setInternalFormData({\n ...internalFormData,\n [id]: value\n })\n\n onChange(id, value, updatedErrors, {}, skipValidation)\n }\n\n const onNextSection = () => {\n const sectionProps = sections[openSection].properties\n const sectionChanges = sectionProps.reduce((acc, prop) => ({ ...acc, [prop.id]: prop.value || '' }), {})\n const changedPropList = sectionProps.map(prop => prop.id)\n setInternalFormData({\n ...internalFormData, ...sectionChanges\n })\n setChangedSections({ ...changedSections, [openSection]: true })\n const currentErrors = Object.entries(errors).reduce((acc, [key, value]) => ({ ...acc, [key]: value.errors }), {})\n onChange(changedPropList, null, currentErrors, sectionChanges, false)\n const nextSectionIndex = openSection + 1\n if (nextSectionIndex < sections.length) {\n setOpenSection(nextSectionIndex)\n scrollToElement(sectionsRef.current[nextSectionIndex])\n } else {\n setOpenSection(-1)\n }\n }\n\n if (!Object.keys(properties).length) return null\n\n if (sections.length < 2) {\n const description = sectionsDescription[Object.values(properties)[0].uiSchema['ui:options'].sectionId]?.description\n const sanitizedDescription = sanitizeHTML(description, {\n allowedClasses: { '*': ['*'] },\n allowedAttributes: { '*': ['*'] },\n parseStyleAttributes: false\n })\n\n return (\n <>\n {description && <div className=\"section-description\" dangerouslySetInnerHTML={{__html: sanitizedDescription}}/>}\n {Object.values(properties).map((property, index) => (\n <Property key={index} property={property} errors={errors} handlePropertyChange={handlePropertyChange}\n internalFormData={internalFormData}/>\n )\n )}\n </>\n )\n }\n\n const getSectionErrors = (section, index) => {\n if (changedSections[index] && openSection !== index) {\n return section.properties.map((prop) => errors[prop.id].errors.length > 0)\n }\n return section.properties.map((prop) => errors[prop.id].show && errors[prop.id].errors.length > 0)\n }\n\n\n return sections.map((section, index) => (\n <Section key={section.name} number={index}\n setOpenSection={(sectionNumber) => setOpenSection(sectionNumber)}\n section={section} sections={sections}\n isOpen={openSection === index}\n isLastSection={sections.length - 1 !== index}\n onNext={onNextSection}\n changed={section.changed}\n sectionToScrollTo={openSection}\n sectionErrors={getSectionErrors(section, index)}\n ref={(ref) => sectionsRef.current[index] = ref}\n isHidden={isSectionHidden(section)}\n sectionDescription={sectionsDescription[section.properties[0].uiSchema['ui:options'].sectionId]}\n >\n {section.properties.map((property) => (\n <Property key={property.id} property={property} errors={errors} handlePropertyChange={handlePropertyChange}\n internalFormData={internalFormData}/>\n ))}\n </Section>\n ))\n}\n\nexport default DynamicForm\n\nfunction smoothScroll (target, { duration = 100, offset = 0, container = document.body }) {\n const targetPosition = target.offsetTop - offset\n const startPosition = container.scrollTop\n const distance = targetPosition - startPosition\n\n let start = null\n\n const animation = (currentTime) => {\n if (!start) start = currentTime\n const timeElapsed = currentTime - start\n const run = ease(timeElapsed, startPosition, distance, duration)\n container.scrollTop = run\n if (timeElapsed < duration) {\n requestAnimationFrame(animation)\n }\n }\n\n const ease = (t, b, c, d) => {\n t /= d / 2\n if (t < 1) return c / 2 * t * t + b\n t--\n return -c / 2 * (t * (t - 2) - 1) + b\n }\n\n requestAnimationFrame(animation)\n}\n\nfunction scrollToElement (element) {\n setTimeout(() => {\n const header = document.querySelector('.header')\n const headerHeight = header ? header.offsetHeight + 20 : 20\n smoothScroll(element, { offset: headerHeight })\n\n }, 400)\n}\n\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React from 'react'\nimport './ProductDetails.scss'\nimport Inventory from './Inventory'\nimport { t } from '$themelocalization'\nimport { formatDateByLocale } from '$ustoreinternal/services/utils'\nimport { Slot } from '$core-components'\n\n/**\n * A component that is loaded for displaying the main details of the product (name, description, inventory, reorder)\n *\n * @param {object} productModel - the productModel that contains the details of the product.\n * @param {object} reorderModel - the object (if exist) that contains the reorder details for the product.\n * @param {function} onReorder - the callback function to be called when the reorder link is clicked.\n * @param {string} langCode - the locale code for date conversion.\n * @param {string} className -the class name to be added to the main container\n *\n */\n\nconst ProductDetails = ({ className, productModel, onReorder, reorderModel, langCode }) => {\n if (!productModel || Object.keys(productModel).length === 0) {\n return null\n }\n\n const displayName = `${productModel.Name} ${productModel.CatalogNumber ? ' / ' + productModel.CatalogNumber : ''}`\n\n const pluralName = productModel.Unit.PackType ? productModel.Unit.PackType.PluralName : productModel.Unit.ItemType.PluralName\n const itemName = productModel.Unit.PackType ? productModel.Unit.PackType.Name : productModel.Unit.ItemType.Name\n\n return <div className={`${className} product-details`}>\n <Slot name=\"static_product_above_name\" data={productModel}/>\n <div className='product-name' dangerouslySetInnerHTML={{ __html: displayName }} />\n {reorderModel && <div className='product-reorder'>\n {t('KitProduct.Last_order_notation', {\n OrderSubmittedDate: formatDateByLocale(reorderModel.SubmittedDate, langCode)\n })}\n <span className='reorder-link' onClick={onReorder}>{t('KitProduct.Reorder')}</span>\n </div>}\n {productModel.Inventory && <div className='product-inventory'>\n <Inventory hideInStock={false}\n model={productModel.Inventory}\n minQuantity={productModel.Configuration.Quantity.Minimum}\n pluralName={pluralName}\n singleName={itemName}\n />\n </div>}\n {productModel.Description && <div className='product-description'>\n <div className='product-description' dangerouslySetInnerHTML={{ __html: productModel.Description }} />\n </div>}\n </div>\n}\n\nexport default ProductDetails\n","import React, { Component } from 'react'\nimport './ProductDeliveryMethod.scss'\nimport { RadioGroup } from '$core-components'\nimport { t } from '$themelocalization'\n\n/**\n * A component that is\n *\n * @param {string} className -\n * @param {object} productModel -\n * @param {function} onDeliveryChange -\n * @param {number} currentDeliveryMethod\n * @param {string} currentDeliveryServiceID\n * @param {array} deliveryServices\n *\n */\n\nclass ProductDeliveryMethod extends Component {\n deliveryOptions = []\n\n constructor(props) {\n super(props)\n\n this.state = {\n selectedDelivery: props.currentDeliveryServiceID ? props.currentDeliveryServiceID : props.currentDeliveryMethod,\n }\n }\n\n componentDidMount() {\n const { onDeliveryChange, currentDeliveryMethod, currentDeliveryServiceID } = this.props\n\n onDeliveryChange && onDeliveryChange(currentDeliveryMethod, currentDeliveryServiceID, true)\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n const { currentDeliveryServiceID, currentDeliveryMethod } = this.props\n\n if (currentDeliveryServiceID !== prevProps.currentDeliveryServiceID || currentDeliveryMethod !== prevProps.currentDeliveryMethod)\n this.setState({\n selectedDelivery: currentDeliveryServiceID ? currentDeliveryServiceID : currentDeliveryMethod\n })\n }\n\n onDeliveryChanged = (value, obj) => {\n const { onDeliveryChange } = this.props\n\n this.setState({ selectedDelivery: value })\n onDeliveryChange && onDeliveryChange(obj && obj.isMailing ? 2 : value, obj && obj.isMailing ? value : null)\n }\n\n render() {\n const { className, productModel, deliveryServices } = this.props\n\n if (!productModel) { // || !isMultiple || !productModel.Configuration.Delivery.Shipping.Enabled && !productModel.Configuration.Delivery.Mailing.Enabled) {\n return null\n }\n\n this.deliveryOptions = [\n {\n id: 'ship',\n value: 1,\n label: t('product.shipping'),\n enabled: productModel.Configuration && productModel.Configuration.Delivery && productModel.Configuration.Delivery.Shipping.Enabled,\n isMailing: false,\n },\n // { value: 2, label: 'Mail Drop', enabled: productModel.Configuration.Delivery.Mailing.Enabled }\n ]\n if (deliveryServices && deliveryServices.MailingServices && deliveryServices.MailingServices.length) {\n deliveryServices.MailingServices.forEach((service) => {\n this.deliveryOptions.push(\n {\n id: 'mail',\n value: service.ID,\n label: service.Name,\n enabled: productModel.Configuration && productModel.Configuration.Delivery && productModel.Configuration.Delivery.Mailing.Enabled,\n isMailing: true,\n })\n })\n }\n\n const enabledOptions = this.deliveryOptions.filter(item => item.enabled)\n\n if (!enabledOptions || enabledOptions.length <= 1) {\n return null\n }\n\n return <div className={`${className} product-delivery-method`}>\n <div className='delivery-method'>\n <div className='delivery-method-label'>\n <span>{t('product.delivery')}</span><span className='required-indicator'>*</span>\n </div>\n <RadioGroup\n groupName='delivery'\n className={'static-delivery'}\n options={this.deliveryOptions.filter(d => d.enabled)}\n selectedValue={this.state.selectedDelivery}\n onChange={this.onDeliveryChanged}\n />\n </div>\n </div>\n }\n}\n\nexport default ProductDeliveryMethod\n","import React, { forwardRef } from 'react'\nimport Price from './Price'\nimport { LoadingDots } from '$core-components'\nimport { t } from '$themelocalization'\nimport './ProductOrderSummary.scss'\nimport { Slot } from '$core-components'\n\nconst ProductOrderSummary = forwardRef(({\n currency,\n className,\n productModel,\n quantity,\n priceModel,\n isPriceCalculating,\n deliveryMethod,\n taxFormatType\n }, ref) => {\n\n if (!productModel || !priceModel || !productModel.HasPricing || priceModel.Price === null) return null\n\n const itemUnitName = productModel.Unit.PackType\n ? `(${quantity} ${quantity.toString() === '1' ? productModel.Unit.PackType.Name : productModel.Unit.PackType.PluralName})`\n : productModel.Unit.ItemType\n ? `(${quantity} ${quantity.toString() === '1' ? productModel.Unit.ItemType.Name : productModel.Unit.ItemType.PluralName})`\n : ''\n\n return <div className={`${className} product-order-summary`}>\n <Slot name=\"static_product_above_summary\" data={productModel}/>\n <div className=\"summary-header\">{t('product.summary')}</div>\n\n <div className={`summary-table${taxFormatType === 3 ? ' custom-price' : ''}`}>\n {/* <div className={`summary-table`}> */}\n <div className=\"summary-table-row\">\n <div className=\"summary-table-label\">{t('productPrice.product_total', { itemUnitName })} </div>\n <div className=\"summary-table-value\">{isPriceCalculating ? <LoadingDots/>\n : priceModel.IsMinimumPrice ? <span>-</span> : <Price showCurrency={false}\n model={{ Price: priceModel.ProductPrice, Tax: 0 }}\n isMinimumPrice={false}\n overridePriceFormat={'{Price}'}/>}\n </div>\n </div>\n {deliveryMethod === 1 && <div className=\"summary-table-row\">\n <div className=\"summary-table-label\">{t('productPrice.shipping_message')}</div>\n </div>}\n {deliveryMethod === 2 && <div className=\"summary-table-row\">\n <div className=\"summary-table-label\">{t('productPrice.mailiing_fee')}</div>\n <div className=\"summary-table-value\">{isPriceCalculating ? <LoadingDots/>\n : priceModel.IsMinimumPrice ? <span>-</span> : <Price showCurrency={false}\n model={{ Price: priceModel.MailingFee, Tax: 0 }}\n isMinimumPrice={false}\n overridePriceFormat={'{Price}'}/>}\n </div>\n </div>}\n {(taxFormatType === 3 || taxFormatType === 2) && <div className=\"summary-table-row\">\n <div className=\"summary-table-label\">{t('productPrice.tax')}</div>\n <div className=\"summary-table-value\">{isPriceCalculating ? <LoadingDots/>\n : priceModel.IsMinimumPrice ? <span>-</span> : <Price showCurrency={false}\n model={{ Price: priceModel.Price.Tax, Tax: 0 }}\n isMinimumPrice={false}\n overridePriceFormat={'{Price}'}/>}\n </div>\n </div>}\n <div className=\"summary-table-row total-row\" ref={ref}>\n <div className=\"summary-table-label total\">{t('productPrice.total_price', { currency })}</div>\n <div className=\"summary-table-value total\">{isPriceCalculating ? <LoadingDots/>\n : <Price showCurrency={false} model={priceModel.Price} isMinimumPrice={priceModel.IsMinimumPrice}/>}\n </div>\n </div>\n </div>\n <Slot name=\"static_product_below_summary\" data={productModel}/>\n </div>\n\n }\n)\n\nexport default ProductOrderSummary\n","import React, { forwardRef } from 'react'\nimport Price from './Price'\nimport { Icon, LoadingDots } from '$core-components'\nimport './ProductStickyPrice.scss'\n\nconst ProductStickyPrice = forwardRef(({\n priceModel,\n addToCartBtnText,\n disabled,\n onClick,\n longPrice,\n isPriceLoading,\n showMinimumPrice,\n productThumbnails,\n onImageClick,\n lastViewImageId\n }, ref) => {\n const image = (productThumbnails && productThumbnails.Thumbnails && productThumbnails.Thumbnails.length)\n ? productThumbnails.Thumbnails[lastViewImageId?lastViewImageId:0] : null;\n return (\n <div className='product-sticky-price'>\n <div className=\"sticky-container\">\n {image &&\n <div className=\"sticky-image-block\" onClick={onImageClick}>\n <img className=\"block-reload\" key={image.Url} height={50} src={image.Url} alt={image.DisplayName}/>\n </div>\n }\n\n <div className={`total-price${longPrice ? ' long-price' : ''}${!priceModel ? ' button-only' : ''}`}>\n {priceModel\n ?\n (<>\n <span className={`${isPriceLoading ? 'text-hidden' : ''}`}>\n <Price\n showCurrency\n model={priceModel.Price}\n isMinimumPrice={showMinimumPrice}/>\n </span>\n {isPriceLoading && <LoadingDots/>}\n <div className='filler'/>\n </>)\n : null\n }\n <div className='sticky-add-to-cart-icon-container'>\n {image === null &&\n <span className='add-to-cart-icon-wrapper' onClick={() => !disabled ? onClick('sticky_add_button') : undefined}>\n <Icon id='sticky-add-to-cart-icon' className='sticky-add-to-cart-icon' name='add_to_cart.svg'\n width='26px'\n height='26px'\n onClick={() => !disabled ? onClick('sticky_add_icon') : undefined}/>\n </span>\n }\n <div\n id='sticky-add-to-cart-button'\n className={'button button-secondary sticky-add-to-cart-button'}\n onClick={() => !disabled ? onClick('sticky_add_button') : undefined} ref={ref}>\n <span className={`${disabled ? 'text-hidden' : ''}`}>{addToCartBtnText}</span>\n {disabled && <LoadingDots/>}\n </div>\n </div>\n\n </div>\n </div>\n {image\n &&\n (<span className='add-to-cart-icon-wrapper'>\n <Icon id='sticky-add-to-cart-icon' className='sticky-add-to-cart-icon' name='add_to_cart.svg'\n width='26px'\n height='26px'\n onClick={() => !disabled ? onClick('sticky_add_icon') : undefined}/>\n </span>)\n }\n </div>\n )\n})\n\nexport default ProductStickyPrice\n","import React, { useEffect } from 'react'\nimport { Modal, ModalBody } from 'reactstrap'\nimport './ProductThumbnailsPreview.scss'\nimport ErrorBalloon from '../ErrorBalloon'\nimport { t } from '$themelocalization'\nimport Preview from \"../Preview\";\n\nconst ProofErrorBalloon = ({ show }) => show &&\n <ErrorBalloon\n className=\"mobile-preview-failure\">{t('productProof.PreviewFailure')}</ErrorBalloon>\n\nconst ProductThumbnailsPreview = ({\n productThumbnails,\n isModalOpen,\n onCloseModal,\n modalClassName,\n onImageChange,\n poofPreviewError,\n onProofPreviewClick,\n}) => {\n\n useEffect(() => {\n if (isModalOpen)\n onProofPreviewClick()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isModalOpen])\n\n return (\n <Modal toggle={onCloseModal} isOpen={isModalOpen} modalClassName={`${modalClassName}`}>\n <div className=\"modal-close\">\n <div className=\"close-btn\" onClick={onCloseModal}>×</div>\n </div>\n <ModalBody>\n <div className=\"thumbnail-modal-image mobile\">\n <ProofErrorBalloon show={poofPreviewError}/>\n <Preview\n poofPreviewError={poofPreviewError}\n productThumbnails={productThumbnails}\n changeStickyThumbnail={(id) => onImageChange(id)}\n />\n </div>\n </ModalBody>\n </Modal>\n )\n}\n\nexport default ProductThumbnailsPreview\n","import './ProductLayout.scss'\n\n/**\n * A component that is loaded for displaying a product of type Kit\n *\n * @param {string} className -the class name to be added to the main container\n *\n * @param children\n */\n\nconst ProductLayout = ({ className, children, dynamic }) => {\n if (!children) {\n return null\n }\n\n return <div className={`${className} product-layout`}>\n <div className={`main-wrapper ${dynamic ? 'dynamic' : 'static'}`}>\n <div className='left'>\n {children.find((child) => { return child.type === 'left' })}\n </div>\n <div className='right'>\n {children.find((child) => { return child.type === 'right' })}\n </div>\n </div>\n </div>\n}\n\nexport default ProductLayout\n","import React, {forwardRef} from 'react'\nimport { LoadingDots } from '$core-components'\nimport PriceDisplay from '../Price'\n\nconst Price = forwardRef(({ price, isPriceCalculating, showMinimumPrice }, ref) => {\n if (!price) return null\n return (\n <div className='product-instance-price' ref={ref}>\n <div className='total-price' id='total-price-component'>\n {isPriceCalculating || !price\n ? <LoadingDots />\n : <div className='price-wrapper'>\n <PriceDisplay\n model={price.Price}\n showCurrency\n isMinimumPrice={showMinimumPrice}\n />\n </div>\n }\n </div>\n </div>\n )\n})\n\nexport default Price\n","import deepcopy from 'deepcopy'\nimport {UStoreProvider} from '@ustore/core'\n\nexport const convertPropertiesFromApiToPropertiesObject = (propertiesFromApi, dependenciesObject = null) => {\n // We create a sorted properties array according\n const propertiesOrder = Object\n .keys(propertiesFromApi.JSONSchema.definitions)\n .sort((a, b) => propertiesFromApi.JSONSchema.definitions[a].custom.displayOrder - propertiesFromApi.JSONSchema.definitions[b].custom.displayOrder)\n\n // We create a dependent properties array to check which property has dependencies\n\n // Array of property objects, sorted\n const sortedPropertiesObject = propertiesOrder.map((propertyId) => {\n return {\n ...propertiesFromApi.JSONSchema.definitions[propertyId],\n id: propertyId,\n pattern: propertiesFromApi.JSONSchema.definitions[propertyId].pattern,\n custom: propertiesFromApi.JSONSchema.definitions[propertyId].custom,\n depended: dependenciesObject && Object.keys(dependenciesObject).includes(propertyId) ? createNestedDependencyTree(propertiesFromApi, dependenciesObject, propertyId) : null,\n required: propertiesFromApi.JSONSchema.required.includes(propertyId),\n order: propertiesFromApi.JSONSchema.definitions[propertyId].custom.displayOrder,\n uiSchema: {\n ...propertiesFromApi.UISchema[propertyId],\n 'ui:errorMessages': propertiesFromApi.UISchema[propertyId]['ui:errorMessages']\n },\n propertySchema: dependenciesObject &&\n Object\n .keys(dependenciesObject)\n .includes(propertyId)\n ? {\n ...propertiesFromApi\n .JSONSchema\n .dependencies[Object.values(dependenciesObject)[Object.keys(dependenciesObject).indexOf(propertyId)]]\n .oneOf\n .filter((dependees) => Object.keys(dependees.properties).includes(propertyId))[0]\n .properties[propertyId],\n ...propertiesFromApi.JSONSchema.definitions[propertyId]\n }\n : {\n ...propertiesFromApi.JSONSchema.properties[propertyId],\n ...propertiesFromApi.JSONSchema.definitions[propertyId]\n },\n value: propertiesFromApi.formData[propertyId] === '' || propertiesFromApi.formData[propertyId] === '[]' ? undefined : propertiesFromApi.formData[propertyId]\n }\n })\n\n const propertiesObject = {}\n // Convert array back to object\n sortedPropertiesObject.forEach((property) => {\n propertiesObject[property.id] = {\n ...property\n }\n })\n\n return propertiesObject\n}\n\nexport const pushOrderItem = async (orderId, orderItem) => {\n return UStoreProvider.api.orders.updateOrderItem(orderId, orderItem)\n}\n\nexport const pushPropertiesState = async (orderItemId, dataToPush) => {\n return UStoreProvider.api.orders.updatePropertiesState(orderItemId, dataToPush)\n}\n\nexport const getPriceOrderItem = (orderItemId, obj) => {\n return UStoreProvider.api.orders.getPriceOrderItem(orderItemId, obj)\n}\n\nexport const pushCart = async (orderId) => {\n await UStoreProvider.api.orders.addToCart(orderId)\n}\n\nexport const pushSavedForLater = async (orderId) => {\n await UStoreProvider.api.orders.saveForLater(orderId)\n}\n\nexport const getReorder = async (lastOrderId) => {\n return UStoreProvider.api.orders.reorder(lastOrderId)\n}\n\nexport const pushProperties = async (orderId, properties) => {\n await UStoreProvider.api.orders.updateProperties(orderId, properties)\n}\n\nexport const removeEmptyValuesFromFormData = (formData) => Object\n .keys(formData)\n .map((propertyId) => (\n {\n [propertyId]: formData[propertyId] === '' || formData[propertyId] === '[]'\n ? undefined\n : formData[propertyId]\n }))\n .reduce((acc, value) => (\n {\n ...acc,\n [Object.entries(value)[0][0].toString().replace(',', '')]: Object.entries(value)[0][1] }\n ), {})\n\nexport const getDependentSchema = (schema, formData) => {\n if (schema.dependencies) {\n const depTree = Object.entries(schema.dependencies).reduce((r, [key, dep]) => {\n const allDeps = dep.oneOf.map(({ properties }) => {\n const parentKey = `${key}|${properties[key].enum.join('|')}`\n const depProps = { ...properties }\n delete depProps[key]\n\n return { parentKey, depProps }\n }).reduce((acc, deps) => ({ ...acc, [deps.parentKey]: deps.depProps }), {})\n\n return { ...r, ...allDeps }\n }, {})\n const schemaWithDeps = deepcopy(schema)\n\n const getProperty = (propSchema) => {\n return Object.keys(propSchema).map(key => {\n if (depTree[`${key}|${formData[key]}`]) {\n return [{ [key]: propSchema[key] }, ...getProperty(depTree[`${key}|${formData[key]}`])]\n } else {\n return { [key]: propSchema[key] }\n }\n }).flat()\n }\n\n schemaWithDeps.properties = getProperty(schema.properties).reduce((r, prop) => ({ ...r, ...prop }), {})\n\n const propsMap = Object.keys(schemaWithDeps.properties).reduce((r, d) => ({ ...r, [d]: 1 }), {})\n schemaWithDeps.required = schemaWithDeps.required.filter(d => propsMap[d])\n schemaWithDeps.dependencies = {}\n\n return schemaWithDeps\n } else {\n return schema\n }\n}\n\nexport const getDependenciesObject = (properties, excelPricing) => {\n if (properties.JSONSchema.dependencies) {\n const dependenciesObject = {}\n const dependenciesObjectWithValues = {}\n\n Object\n .keys(properties.JSONSchema.dependencies)\n .forEach((propertyId) => {\n properties\n .JSONSchema\n .dependencies[propertyId]\n .oneOf\n .forEach((dependees) => {\n Object.keys(dependees.properties)\n .forEach((dependentPropertyId) => {\n if (propertyId !== dependentPropertyId) {\n dependenciesObject[dependentPropertyId] = propertyId\n dependenciesObjectWithValues[dependentPropertyId] = {\n dependant: propertyId,\n dependantValue: dependees.properties[propertyId].enum\n }\n }\n })\n })\n })\n return { dependenciesObject, dependenciesObjectWithValues }\n }\n return null\n}\n\nconst createNestedDependencyTree = (propertiesFromApi, dependenciesObject, propertyId) => {\n if (Object.keys(dependenciesObject).includes(propertyId)) {\n return {\n parent: dependenciesObject[propertyId],\n condition: propertiesFromApi.JSONSchema.dependencies[dependenciesObject[propertyId]].oneOf\n .filter((dependees) => Object.keys(dependees.properties).includes(propertyId))\n .map((dependees) => dependees.properties[dependenciesObject[propertyId]])[0],\n depended: createNestedDependencyTree(propertiesFromApi, dependenciesObject, dependenciesObject[propertyId]) || null\n }\n }\n}\n\n","/**\n * A component to display quantity input based on quantity data model\n *\n * @param {function} onQuantityChange(value, isValid) - a callback fired when quantity was changed.\n * @param {object} productModel\n * @param {object} orderModel\n * @param {supportsInventory} boolean\n */\n\nimport React, { Component } from 'react'\nimport './ProductQuantity.scss'\nimport BaseQuantity from './/BaseQuantity'\nimport { t } from '$themelocalization'\n\nclass ProductQuantity extends Component {\n constructor (props) {\n super(props)\n\n this.state = {\n errorMessage: ''\n }\n\n this.onChange = this.onChange.bind(this)\n this.getValidationErrorMessage = this.getValidationErrorMessage.bind(this)\n }\n\n componentDidMount () {\n const { productModel: { Configuration: { Quantity } }, orderModel } = this.props\n // run onChange on mount, to show validation errors on default value.\n if ((Quantity.Changeable && Quantity.Options === null)) {\n // text box\n this.onChange({ target: { value: orderModel.Quantity || Quantity.Minimum } }, true)\n }\n }\n\n getValidationErrorMessage (value) {\n const { productModel: { Configuration: { Quantity: { Minimum, Maximum } } }, productModel: { Inventory }, supportsInventory } = this.props\n\n const inventory = supportsInventory && Inventory ? Inventory.Quantity : null\n\n if (!value || isNaN(value)) {\n return <span className='validation-required'>{t('KitQuantity.Validation_required')}</span>\n }\n\n if (Minimum && Number(value) < Minimum) {\n return <span className='validation-minimum'>{t('KitQuantity.Validation_minimum', { MinimumQuantity: Minimum })}</span>\n }\n\n if (Maximum && Number(value) > Maximum) {\n return <span className='validation-maximum'>{t('KitQuantity.Validation_maximum', { MaximumQuantity: Maximum })}</span>\n }\n\n if (inventory && Number(value) > inventory && !Inventory.AllowOutOfStockPurchase) {\n return <span className='validation-inventory'>{t('KitQuantity.Validation_inventory', { InventoryQuantity: inventory })}</span>\n }\n\n return null\n }\n\n onChange (e, initialChange = false) {\n const { onQuantityChange } = this.props\n\n const value = e.target.value\n const errorMessage = this.getValidationErrorMessage(value)\n\n this.setState({ errorMessage })\n\n // send new value and error (if any, null if valid) to parent.\n onQuantityChange(value, errorMessage, initialChange)\n }\n\n render () {\n const { productModel: { Configuration: { Quantity }, ID, Unit }, orderModel } = this.props\n\n // if no Configuration or if value = 1 and read only => dont show anything\n if (!Quantity || !orderModel.Quantity) {\n return null\n }\n const additionalClassName = this.state.errorMessage ? 'not-valid' : ''\n\n const itemUnitName = Unit.PackType\n ? `${Unit.PackType.PluralName}`\n : Unit.ItemType ? Unit.ItemType.PluralName : ''\n\n const packDesc = Unit.PackType ? ` (${t('product.packs_notation',\n {\n PackTypeName: Unit.PackType.Name,\n ItemQuantity: Unit.ItemQuantity,\n ItemTypePluralName: Unit.ItemType.PluralName\n })})` : ''\n\n return (<div className='product-quantity-component'>\n <BaseQuantity\n quantityConfig={Quantity}\n additionalClassName={additionalClassName}\n quantity={orderModel.Quantity}\n id={ID}\n onChange={this.onChange}\n />\n <span className='quantity-units'>{itemUnitName}</span>\n {Unit.PackType && <span className='pack-description'>{packDesc}</span>}\n {this.state.errorMessage && (<span className='quantity-error'>{this.state.errorMessage}</span>)}\n </div>)\n }\n}\n\nexport default ProductQuantity\n","import React from 'react'\nimport { Modal, ModalBody } from 'reactstrap'\nimport { t } from '$themelocalization'\nimport { ImageLoader, ImageZoom } from '$core-components'\nimport './ProductProof.scss'\n\nconst ProductProof = ({ type, src, isModalOpen, onCloseModal, modalClassName = 'product-proof-modal', isMobile = false }) => {\n if (!src) {\n return null\n }\n\n const isProofPdf = type === 'application/pdf'\n\n return (\n <Modal toggle={onCloseModal} isOpen={isModalOpen} modalClassName={`${modalClassName} product-proof-modal`}>\n <div className='modal-close'>\n <div className='close-btn' onClick={onCloseModal}>×</div>\n </div>\n <ModalBody>\n {isProofPdf &&\n <div className='proof-modal-pdf'>\n <object data={src + '&inline=true&#view=Fit'}\n type=\"application/pdf\"\n width=\"100%\"\n height=\"100%\">\n <div className='download-pdf-wrapper'>\n <a href={src}>{t('productProof.download')}</a>\n </div>\n </object>\n </div>}\n {!isProofPdf && !isMobile &&\n <div className=\"proof-modal-image\"><ImageZoom src={src} /></div>\n }\n {!isProofPdf && isMobile &&\n <div className=\"proof-modal-image mobile\"><ImageLoader className='image' src={src} /></div>\n }\n </ModalBody>\n </Modal>\n )\n}\n\nexport default ProductProof\n","import React, { useEffect, useState } from 'react'\nimport './DynamicImageViewer.scss'\nimport Preview from '../Preview'\n\nconst DynamicImageViewer = ({ thumbnails, onChange, proofError, showLoaderDots }) => {\n const [images, setImages] = useState([])\n const [activeImage, setActiveImage] = useState(0)\n useEffect(() => {\n setImages(thumbnails)\n setActiveImage(0)\n },[thumbnails])\n\n useEffect(() => {\n if (onChange) {\n onChange(activeImage)\n }\n }, [activeImage, onChange])\n\n return <>\n {images?.length > 0 &&\n <div className=\"preview-image dynamic-product-approval\">\n <Preview\n poofPreviewError={proofError}\n productApprovalThumbnails={thumbnails}\n showLoaderDots={showLoaderDots}\n />\n </div>}\n </>\n}\n\nexport default DynamicImageViewer\n","import React, { useEffect, useRef, useState } from 'react'\nimport { Modal, ModalBody } from 'reactstrap'\nimport { t } from '$themelocalization'\nimport './DynamicProductApproval.scss'\nimport { LoadingDots } from '$core-components'\nimport DynamicImageViewer from './DynamicImageViewer'\nimport { UStoreProvider } from '@ustore/core'\nimport { convertProductPropertiesFormIntoArray } from '$themeservices/utils'\n\nconst DesktopProofPreview = ({ proof, images, showLoaderDots, proofError }) => proof && proof.Format === 1 && proof.Items?.length > 0 ? <object\n data={proof.Items[0].Url + '#view=Fit'}\n type=\"application/pdf\"\n width=\"100%\"\n height=\"100%\"\n >\n </object> :\n <DynamicImageViewer proofError={proofError} thumbnails={images} showLoaderDots={showLoaderDots}/>\n\nconst MobileProofPreview =\n ({ isPDF, showLoaderDots, proof, onDownloadPDFClick, images, proofError }) => {\n\n if (isPDF) {\n return <>\n {showLoaderDots ? <div className=\"button button-secondary\"><LoadingDots/></div> :\n <div className=\"button button-secondary download-pdf-proof\" disabled={proofError}\n onClick={() => onDownloadPDFClick(proof.Items[0])}>\n {t('productProof.DownloadPreview')}\n </div>}\n </>\n }\n return <>\n <DynamicImageViewer showLoaderDots={showLoaderDots} thumbnails={images} proofError={proofError}/>\n </>\n}\nconst ProductApproval = ({\n thumbnails,\n isModalOpen,\n onCloseModal,\n onAddToCartClick,\n addToCartBtnText,\n checkboxText,\n errorText,\n orderItemID,\n orderItem,\n proofType,\n properties,\n excelPricingEnabled,\n}) => {\n\n const [proof, setProof] = useState(null)\n const [approved, setApproved] = useState(false)\n const [showError, setShowError] = useState(false)\n const [images, setImages] = useState([])\n const [showLoaderDots, setShowLoaderDots] = useState(true)\n const [proofError, setProofError] = useState(false)\n const isPDF = proofType && proofType.toLowerCase().endsWith('pdf')\n const addToCartRef = useRef()\n const currentPullTimeout = useRef()\n\n const waitForProof = (currentProof) => new Promise((resolve, reject) => {\n const pullProof = async (pullingProof) => {\n if (pullingProof.Status === 3) {\n reject({Message: ''})\n return\n }\n if (pullingProof.Status === 1) {\n try {\n pullingProof = await window.UStoreProvider.api.products.createProof(orderItem.ID)\n } catch (e) {\n if (e.Message?.toLowerCase() !== 'too much requests.') {\n reject(e)\n return\n }\n }\n currentPullTimeout.current = setTimeout(() => {\n pullProof(pullingProof)\n }, 2000)\n return\n }\n resolve(pullingProof)\n }\n\n pullProof(currentProof)\n })\n\n\n useEffect(() => {\n (async () => {\n try {\n if (isModalOpen && orderItem) {\n setShowLoaderDots(true)\n currentPullTimeout.current && clearTimeout(currentPullTimeout.current)\n await UStoreProvider.api.orders.updateProperties(orderItem.ID, convertProductPropertiesFormIntoArray(properties))\n await UStoreProvider.api.orders.updateOrderItem(orderItem.ID, {\n ...orderItem,\n Properties: properties && Object.keys(properties).length ? convertProductPropertiesFormIntoArray(\n properties,\n excelPricingEnabled\n ) : null\n })\n let proof = await window.UStoreProvider.api.products.createProof(orderItem.ID)\n proof = await waitForProof(proof)\n const fileNames = proof.Items.map((p) => ({ Url: p.Url.replace(/.*?fileName=(.*)$/, '$1') }))\n proof.Items = []\n let hasError = false\n for (const file of fileNames) {\n const fileBlob = await UStoreProvider.api.products.downloadProof(orderItem.ID, file.Url)\n if (fileBlob) {\n proof.Items = [...proof.Items, {\n Url: URL.createObjectURL(fileBlob),\n DisplayName: t('DynamicProof.Page', { pageNumber: proof.Items.length + 1 }),\n type: proof.Format === 1 ? 'pdf' : 'image',\n fileName: file.Url\n }]\n if (proof.Format === 2) {\n setImages(proof.Items)\n }\n } else {\n hasError = true\n }\n }\n setProof(proof)\n setShowLoaderDots(false)\n setProofError(hasError)\n addToCartRef.current?.scrollIntoView({behavior: 'smooth'})\n }\n } catch {\n setShowLoaderDots(false)\n setProofError(true)\n }\n })()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [orderItemID, isModalOpen])\n\n useEffect(() => {\n if (proof?.Status !== 2) {\n setImages(thumbnails)\n }\n }, [thumbnails, proof])\n\n useEffect(() => {\n setTimeout(() => {\n addToCartRef.current?.scrollIntoView({behavior: 'smooth'})\n }, 50)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [addToCartRef.current])\n\n const onAddClicked = () => {\n if (approved) {\n setShowError(false)\n onAddToCartClick()\n } else {\n setShowError(true)\n }\n }\n\n if (!isModalOpen) {\n return false\n }\n\n const onDownloadPDFClick = (itemToDownload) => {\n if (proofError) {\n return\n }\n const downloadLink = document.createElement('a')\n downloadLink.href = itemToDownload.Url\n downloadLink.download = itemToDownload.fileName\n downloadLink.textContent = 'Download File'\n downloadLink.click()\n }\n\n const onCloseModalClick = (e) => {\n currentPullTimeout.current && clearTimeout(currentPullTimeout.current)\n onCloseModal(e)\n }\n\n return (\n <Modal toggle={onCloseModalClick} isOpen={isModalOpen} modalClassName=\"dynamic-proof-approval\">\n <div className={`${proof?.Format === 1 ? 'transparent' : ''} modal-close`}>\n <div className=\"close-btn\" onClick={onCloseModalClick}>×</div>\n </div>\n <ModalBody>\n <div className={`approval-title-mobile`}>\n {t('productProof.review_label')}\n </div>\n <div className=\"approval-preview\">\n <DesktopProofPreview proofError={proofError} proof={proof} images={images} showLoaderDots={showLoaderDots}/>\n </div>\n <div className=\"mobile-approval-preview\">\n <MobileProofPreview {...{ isPDF, showLoaderDots, proof, onDownloadPDFClick, images, proofError }} />\n </div>\n\n <div className=\"proof-approval\">\n <div className=\"approval-title-desktop\">\n {t('productProof.review_label')}\n </div>\n <div className=\"approval-checkbox\">\n <label>\n <input type=\"checkbox\" onChange={() => { setApproved(prev => !prev) }}/>\n <span className=\"checkbox-label\">{checkboxText || t('productProof.ProofIsApproved')}</span>\n <span className=\"required\">*</span>\n </label>\n </div>\n {\n showError && <div className=\"proof-approval-required\">\n <span>{errorText || t('productProof.ConfirmProof')}</span>\n </div>\n }\n <div\n className=\"button button-primary add-to-cart-button\"\n onClick={onAddClicked}\n ref={addToCartRef}\n >\n {addToCartBtnText}\n </div>\n </div>\n </ModalBody>\n </Modal>\n )\n}\n\nexport default ProductApproval\n","import { useState } from 'react'\nimport { ImageZoom } from '$core-components'\nimport { Modal, ModalBody } from 'reactstrap'\nimport { t } from '$themelocalization'\nimport theme from '$styles/_theme.scss'\nimport './ProductApproval.scss'\n\nconst ProductApproval = ({ type, isModalOpen, onCloseModal, src, onAddToCartClick, addToCartBtnText, checkboxText, errorText }) => {\n const isMobile = document.body.clientWidth < parseInt(theme.lg.replace('px', ''))\n\n const isProofPdf = type === 'application/pdf'\n const isimage = type.startsWith('image/')\n const [approved, setApproved] = useState(false)\n const [showError, setShowError] = useState(false)\n\n const onAddClicked = () => {\n if (approved) {\n setShowError(false)\n onAddToCartClick()\n } else {\n setShowError(true)\n }\n }\n\n if (!src) {\n return null\n }\n\n return (\n <Modal toggle={onCloseModal} isOpen={isModalOpen} modalClassName=\"proof-approval\">\n <div className={`${isProofPdf ? 'transparent' : ''} modal-close`}>\n <div className='close-btn' onClick={onCloseModal}>×</div>\n </div>\n <ModalBody>\n <div className={`approval-title mobile`}>\n {t('productProof.review_label')}\n </div>\n {isProofPdf && !isMobile &&\n <div className='approve-modal-pdf'>\n <object data={src + '&inline=true&#view=Fit'}\n type=\"application/pdf\"\n width=\"100%\"\n height=\"100%\"\n >\n </object>\n </div>\n }\n {isimage && (\n !isMobile\n ? <div className=\"approval-image-wrapper\"><ImageZoom src={src} /></div>\n : <div className=\"approval-image-wrapper mobile\"><img src={src} alt='product-approval' /></div>\n )\n }\n {((!isimage && !isProofPdf) || (isProofPdf && isMobile)) &&\n <div className={`approve-modal-pdf ${isMobile ? 'mobile' : ''}`}>\n\n <div className='download-pdf-wrapper'>\n <a download href={src}>{t('productProof.download')}</a>\n </div>\n </div>\n }\n <div className={`proof-approval ${isMobile ? 'mobile' : ''}`}>\n <div className=\"approval-title desktop\">\n {t('productProof.review_label')}\n </div>\n <div className=\"approval-checkbox\">\n <label>\n <input type=\"checkbox\" onChange={() => { setApproved(prev => !prev) }} />\n <span className='checkbox-label'>{checkboxText || t('productProof.ProofIsApproved')}</span>\n <span className=\"required\">*</span>\n </label>\n </div>\n {\n showError && <div className='proof-approval-required'>\n <span>{errorText || t('productProof.ConfirmProof')}</span>\n </div>\n }\n <div\n className='button button-primary add-to-cart-button'\n onClick={onAddClicked}\n >\n {addToCartBtnText}\n </div>\n </div>\n </ModalBody>\n </Modal >\n )\n}\n\nexport default ProductApproval\n","import React from 'react'\nimport DynamicProductApproval from './dynamic/DynamicProductApproval'\nimport ProductApproval from './static/ProductApproval'\nimport { productTypes } from '$themeservices'\n\nconst ProductApprovalModal = ({\n product,\n properties,\n onAddToCartClick,\n orderItem,\n productThumbnails,\n modalOpen,\n onCloseModal,\n continueButtonText,\n src,\n excelPricingEnabled\n}) => {\n return product.Type === productTypes.DYNAMIC ? <DynamicProductApproval\n properties={properties}\n proofType={product?.Proof?.MimeType}\n onAddToCartClick={() => onAddToCartClick(true)}\n orderItem={orderItem}\n thumbnails={productThumbnails.Thumbnails}\n isModalOpen={modalOpen}\n onCloseModal={onCloseModal}\n addToCartBtnText={continueButtonText}\n checkboxText={\n product.Configuration &&\n product.Configuration.Proof &&\n product.Configuration.Proof.ProofApprovalText\n ? product.Configuration.Proof.ProofApprovalText\n : null\n }\n errorText={\n product.Configuration &&\n product.Configuration.Proof &&\n product.Configuration.Proof.ProofApprovalValidationMessage\n ? product.Configuration.Proof.ProofApprovalValidationMessage\n : null\n }\n /> : <ProductApproval\n isModalOpen={modalOpen}\n src={src}\n type={product.Proof && product.Proof.MimeType ? product.Proof.MimeType : ''}\n onCloseModal={onCloseModal}\n onAddToCartClick={() => onAddToCartClick()}\n addToCartBtnText={continueButtonText}\n checkboxText={\n product.Configuration &&\n product.Configuration.Proof &&\n product.Configuration.Proof.ProofApprovalText\n ? product.Configuration.Proof.ProofApprovalText\n : null\n }\n errorText={\n product.Configuration &&\n product.Configuration.Proof &&\n product.Configuration.Proof.ProofApprovalValidationMessage\n ? product.Configuration.Proof.ProofApprovalValidationMessage\n : null\n }\n excelPricingEnabled={excelPricingEnabled}\n />\n\n}\n\nexport default ProductApprovalModal\n","import { useEffect, useState } from 'react'\nimport Ajv from 'ajv'\nimport { union } from 'lodash'\nimport { getDependenciesObject, getDependentSchema, removeEmptyValuesFromFormData } from './utils'\n\nconst useErrors = (initialPropertiesSchema) => {\n const [errors, setErrors] = useState({})\n const [errorsExist, setErrorsExist] = useState(false)\n const [visibleErrorsExist, setVisibleErrorsExist] = useState(false)\n const [initialSchemaLoaded, setInitialSchemaLoaded] = useState(false)\n const [excelPricingError, setExcelPricingError] = useState(false)\n\n useEffect(() => {\n if (Object.keys(initialPropertiesSchema).length && !initialSchemaLoaded) {\n setErrors(\n Object.keys(initialPropertiesSchema.JSONSchema.definitions)\n .reduce((acc, propertyId) => ({\n ...acc,\n [propertyId]: {\n errors: [],\n show: false\n }\n }), {})\n )\n setInitialSchemaLoaded(true)\n }\n }, [initialPropertiesSchema, initialSchemaLoaded])\n\n useEffect(() => {\n setErrorsExist(checkIfThereArePropertyErrors())\n setVisibleErrorsExist(checkIfThereAreVisiblePropertyErrors())\n // eslint-disable-next-line\n }, [errors])\n\n const checkIfThereArePropertyErrors = () => Object.values(errors)\n .some((property) => !!(property && property.errors && property.errors.length))\n\n const checkIfThereAreVisiblePropertyErrors = () => Object.values(errors)\n .some((property) => property.errors && property.errors.length && property.show)\n\n const checkIfThereAreDisabledAffectPricePropertiesWithErrors = (updatedProperties) => Object.keys(updatedProperties.UISchema)\n .some(propertyId =>\n updatedProperties.UISchema[propertyId]['ui:readonly'] &&\n updatedProperties.JSONSchema.definitions[propertyId].custom.affectPrice &&\n updatedProperties.errors &&\n Object.keys(updatedProperties.errors).includes(propertyId)\n )\n\n const processErrorsOnApiResponse = (propertiesFromApi, currentErrors = null, propertiesToShowErrors = []) => {\n const excelError = checkIfThereAreDisabledAffectPricePropertiesWithErrors(propertiesFromApi)\n setExcelPricingError(excelError)\n const updatedFormErrors = combineAjvErrorsWithUiSchema(propertiesFromApi)\n const updatedErrors = getErrorsObject(combineApiErrorsWithFormErrors(propertiesFromApi, excelError ? {} : updatedFormErrors, excelError), propertiesFromApi, currentErrors || errors)\n Object.keys(updatedErrors).forEach((propertyId) => {\n const showError = () => {\n if (excelError) {\n if (propertiesFromApi.errors && Object.keys(propertiesFromApi.errors).includes(propertyId)) return true\n return errors[propertyId] ? errors[propertyId].show : false\n } else {\n if (!propertiesToShowErrors.includes(propertyId)) {\n if (currentErrors) {\n return currentErrors[propertyId] ? currentErrors[propertyId].show : false\n }\n return errors[propertyId] ? errors[propertyId].show : false\n }\n return true\n }\n }\n updatedErrors[propertyId].show = showError()\n })\n\n setErrors(updatedErrors)\n return updatedErrors\n }\n\n const processErrorsOnFormChange = (changedPropertyId, propertyErrors, propertiesSchema, changedPropertyValue = null) => {\n if (changedPropertyValue === '__xmpie__clear__') {\n return\n }\n const formErrors = combineAjvErrorsWithUiSchema(propertiesSchema)\n const updatedFormErrors = propertyErrors\n ? combineOnFormChangeErrorsWithFormErrors(propertyErrors, formErrors)\n : formErrors\n const errorsObject = getErrorsObject(updatedFormErrors, propertiesSchema, errors)\n if (Array.isArray(changedPropertyId)) {\n changedPropertyId.forEach((propertyId) => {\n errorsObject[propertyId].show = !!errorsObject[propertyId].errors.length\n })\n Object.keys(propertiesSchema.JSONSchema.definitions).forEach((propertyId) => {\n if (!changedPropertyId.includes(propertyId)) {\n errorsObject[propertyId].show = !errorsObject[propertyId].errors.length ? false : errorsObject[propertyId].show\n }\n })\n } else {\n if (changedPropertyValue === '__xmpie__error__' && propertyErrors) {\n errorsObject[changedPropertyId].show = true\n } else {\n errorsObject[changedPropertyId].show = !!errorsObject[changedPropertyId].errors.length\n }\n Object.keys(propertiesSchema.JSONSchema.definitions).forEach((propertyId) => {\n if (propertyId !== changedPropertyId) {\n errorsObject[propertyId].show = !errorsObject[propertyId].errors.length ? false : errorsObject[propertyId].show\n }\n })\n }\n\n // Before returning errorsObject, check if the parent field has dependencies and if so, clear errors of the other dependant fields of parent than the one clicked\n if (getDependenciesObject(propertiesSchema) && propertiesSchema.JSONSchema.dependencies && Object.keys(propertiesSchema.JSONSchema.dependencies).includes(changedPropertyId)) {\n const { dependenciesObjectWithValues } = getDependenciesObject(propertiesSchema)\n const dependentFields = Object.keys(dependenciesObjectWithValues)\n .filter(key => dependenciesObjectWithValues[key].dependant === changedPropertyId && dependenciesObjectWithValues[key].dependantValue[0] !== changedPropertyValue)\n dependentFields.forEach((field) => {\n errorsObject[field].errors = []\n errorsObject[field].show = false\n })\n }\n\n setErrors(errorsObject)\n return errorsObject\n }\n\n const processErrorsOnAddToCart = (propertiesSchema) => {\n if (propertiesSchema && Object.keys(propertiesSchema).length) {\n const formErrors = combineAjvErrorsWithUiSchema(propertiesSchema)\n const errorsObject = getErrorsObject(formErrors, propertiesSchema, errors)\n Object.keys(errorsObject).forEach((propertyId) => {\n errorsObject[propertyId].show = true\n })\n setErrors(errorsObject)\n return errorsObject\n }\n return errors\n }\n\n const getAjvErrors = (propertiesSchema) => {\n const ajv = new Ajv({ allErrors: true, strict: false, coerceTypes: true })\n const schemaWithDeps = getDependentSchema(propertiesSchema.JSONSchema, propertiesSchema.formData)\n ajv.validate(schemaWithDeps, removeEmptyValuesFromFormData(propertiesSchema.formData))\n return ajv.errors\n }\n\n\n const combineAjvErrorsWithUiSchema = (propertiesSchema) => {\n const isPropertyForError = (ajvError, propertyId) => {\n if (ajvError.keyword === 'required') {\n return ajvError.params.missingProperty === propertyId\n }\n return ajvError.instancePath.substring(1) === propertyId\n }\n const ajvErrors = getAjvErrors(propertiesSchema)\n\n if (ajvErrors) {\n return Object.keys(propertiesSchema.JSONSchema.definitions)\n .reduce((acc, propertyId) =>\n ({\n ...acc,\n [propertyId]: [\n ...ajvErrors\n .filter((ajvError) => isPropertyForError(ajvError, propertyId))\n .map((errorObj) => {\n if (\n propertiesSchema.UISchema[propertyId]['ui:errorMessages'] &&\n Object.keys(propertiesSchema.UISchema[propertyId]['ui:errorMessages']).length\n ) {\n if (\n propertiesSchema.UISchema[propertyId]['ui:errorMessages'][errorObj.keyword] &&\n isPropertyForError(errorObj, propertyId)\n ) {\n return propertiesSchema\n .UISchema[propertyId]['ui:errorMessages'][errorObj.keyword]\n }\n }\n\n return undefined\n })\n .filter((error) => error !== undefined)\n ]\n }), {})\n }\n return Object.keys(errors).reduce((acc, propertyId) => ({\n ...acc,\n [propertyId]: []\n }), {})\n }\n\n const combineApiErrorsWithFormErrors = (propertiesSchema, formErrors, excelPricingError) => {\n const apiErrors = excelPricingError ? propertiesSchema.errors : formErrors\n if (propertiesSchema.errors) {\n return Object.keys(apiErrors).reduce((acc, propertyId) =>\n formErrors[propertyId] ? {\n ...acc,\n [propertyId]: union(propertiesSchema.errors[propertyId], formErrors[propertyId])\n } : {\n ...acc,\n [propertyId]: propertiesSchema.errors[propertyId]\n }, {})\n } else {\n return formErrors\n }\n }\n\n const getErrorsObject = (newErrors, propertiesSchema, currentErrors) => {\n return Object.keys(propertiesSchema.JSONSchema.definitions).reduce((acc, propertyId) => newErrors[propertyId] ? {\n ...acc,\n [propertyId]: {\n errors: newErrors[propertyId],\n show: currentErrors[propertyId] ? currentErrors[propertyId].show : false,\n ...(propertiesSchema.UISchema[propertyId]['ui:options'].section && { section: propertiesSchema.UISchema[propertyId]['ui:options'].section })\n }\n } : {\n ...acc,\n [propertyId]: {\n errors: [],\n show: false\n }\n }, {})\n }\n\n const checkIsPriceAffectedWithErrors = (properties, errors) => {\n const propertiesCanAffectPrice = Object.values(properties).filter((property) => property.custom.affectPrice)\n return propertiesCanAffectPrice.some((property) => errors[property.id].errors.length)\n }\n\n const combineOnFormChangeErrorsWithFormErrors = (propertyErrors, formErrors) => {\n return Object.keys(errors).reduce((acc, propertyId) =>\n (propertyErrors[propertyId] && propertyErrors[propertyId].length)\n ? {\n ...acc,\n [propertyId]: union(propertyErrors[propertyId], formErrors[propertyId])\n }\n : {\n ...acc,\n [propertyId]: formErrors[propertyId] || []\n }, {})\n }\n\n const showErrors = (propertiesToShowErrors, currentErrors = null) => {\n const errorsToUse = currentErrors || errors\n const showAll = propertiesToShowErrors.length === 0\n const updatedErrors = Object.keys(errorsToUse).reduce((acc, propertyId) => ({\n ...acc,\n [propertyId]: {\n errors: errorsToUse[propertyId].errors,\n show: showAll ? true : propertiesToShowErrors.includes(propertyId)\n }\n }), {})\n setErrors(updatedErrors)\n }\n\n const showAllErrors = (updatedErrors = null) => {\n const errorsObject = updatedErrors || errors\n Object.keys(errorsObject).forEach((propertyId) => {\n errorsObject[propertyId].show = !!errorsObject[propertyId].errors.length\n })\n setErrors(errorsObject)\n }\n\n const hideErrors = (propertiesToHideErrors) => {\n const updatedErrors = Object.keys(errors).reduce((acc, propertyId) => ({\n ...acc,\n [propertyId]: {\n errors: errors[propertyId].errors,\n show: !propertiesToHideErrors.includes(propertyId)\n }\n }), {})\n setErrors(updatedErrors)\n }\n\n return ({\n errors,\n errorsExist,\n visibleErrorsExist,\n processErrorsOnApiResponse,\n processErrorsOnFormChange,\n processErrorsOnAddToCart,\n showErrors,\n hideErrors,\n showAllErrors,\n excelPricingError,\n checkIsPriceAffectedWithErrors\n })\n}\n\nexport default useErrors\n","import { useEffect, useRef, useState } from 'react'\n\nconst useUpdateProperties = () => {\n const [promises, setPromises] = useState([])\n const [loading, setLoading] = useState(false)\n const lastPromise = useRef(null)\n const lastCallback = useRef(null)\n\n const addPromise = (promise, callback) => {\n setPromises((prev) => [...prev, promise])\n lastPromise.current = promise\n lastCallback.current = callback\n }\n\n useEffect(() => {\n const resolvePromises = async () => {\n setLoading(true)\n try {\n const promiseToResolve = await promises[0]\n if (promises[0] === lastPromise.current) {\n await lastCallback.current(promiseToResolve)\n }\n setPromises((prev) => prev.slice(1))\n } catch (e) {\n console.error(e)\n await lastCallback.current(null, e)\n }\n setLoading(false)\n }\n\n if (promises.length > 0) {\n resolvePromises()\n }\n }, [promises])\n\n return {\n addPromise,\n loading\n }\n}\n\nexport default useUpdateProperties\n","import { useEffect, useRef, useState } from 'react'\n\nexport const useSticky = (topMarkerRef, bottomMarkerRef) => {\n const [showStickyPrice, setShowStickyPrice] = useState(true)\n const [topIntersecting, setTopIntersecting] = useState(false)\n const [bottomIntersecting, setBottomIntersecting] = useState(false)\n\n const topObserver = useRef(null)\n const bottomObserver = useRef(null)\n\n useEffect(() => {\n setShowStickyPrice(!topIntersecting && !bottomIntersecting)\n }, [topIntersecting, bottomIntersecting])\n\n const observeCallback = (entries) => {\n entries.forEach((entry) => {\n if (topMarkerRef && entry.target === topMarkerRef.current) {\n setTopIntersecting(entry.isIntersecting)\n }\n if (bottomMarkerRef && entry.target === bottomMarkerRef.current) {\n setBottomIntersecting(entry.isIntersecting)\n }\n })\n }\n\n const stickyConnect = () => {\n if (topMarkerRef) {\n topObserver.current = new IntersectionObserver(observeCallback, {\n root: null,\n rootMargin: '0px',\n threshold: 0.2,\n })\n topObserver.current.observe(topMarkerRef.current)\n }\n\n if (bottomMarkerRef) {\n bottomObserver.current = new IntersectionObserver(observeCallback, {\n root: null,\n rootMargin: '0px',\n threshold: 0.999,\n })\n bottomObserver.current.observe(bottomMarkerRef.current)\n }\n }\n\n const stickyDisconnect = () => {\n topObserver.current.disconnect()\n bottomObserver.current.disconnect()\n }\n\n return {\n showStickyPrice,\n stickyConnect,\n stickyDisconnect\n }\n\n}\n\n\n\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { throttle } from 'throttle-debounce'\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\nimport { useNavigate, useSearchParams } from 'react-router-dom'\nimport { LoadingDots } from '$core-components'\nimport Popper from './Popper'\nimport DynamicForm from '../DynamicForm'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport theme from '$styles/_theme.scss'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport ProductDetails from '../ProductDetails'\nimport ProductDeliveryMethod from '../ProductDeliveryMethod'\nimport ProductOrderSummary from '../ProductOrderSummary'\nimport ProductStickyPrice from '../ProductStickyPrice'\nimport ProductThumbnailsPreview from '../dynamic/ProductThumbnailsPreview'\nimport ProductLayout from '../ProductLayout'\nimport Price from './Price'\nimport {\n convertPropertiesFromApiToPropertiesObject,\n getDependenciesObject,\n getPriceOrderItem, getReorder, pushCart,\n pushOrderItem,\n pushProperties,\n pushPropertiesState,\n pushSavedForLater,\n} from './utils'\nimport {\n fastProofService,\n convertProductPropertiesFormIntoArray,\n preparingFormDataToSendToServer,\n productTypes\n} from '$themeservices'\nimport { isOutOfStock } from '../Inventory'\nimport ProductQuantity from '../ProductQuantity'\nimport ProductProof from '../ProductProof'\nimport ProductApprovalModal from '../ProductApprovalModal'\nimport useErrors from './useErrors'\nimport useUpdateProperties from './useUpdateProperties'\nimport { Slot } from '$core-components'\nimport './ProductProperties.scss'\nimport './StaticProduct.scss'\nimport {useSticky} from './useSticky'\nimport Preview from \"../Preview\";\n\nconst State = {\n loading: 'LOADING',\n calculatingPrice: 'CALCULATING_PRICE',\n initial: 'INITIAL',\n clickedAddToCart: 'CLICKED_ADD_TO_CART',\n error: 'ERROR'\n}\n\n\nconst StaticProduct = ({\n customState,\n state: {\n currentCurrency,\n currentStore: { TaxFormatType, StoreType }\n }\n}) => {\n const [pageState, setPageState] = useState(State.loading)\n const [orderItem, setOrderItem] = useState(customState.currentOrderItem || {})\n const [product, setProduct] = useState(customState.currentProduct || {})\n const [productThumbnails, setProductThumbnails] = useState({})\n const [quantity, setQuantity] = useState(1)\n const [price, setPrice] = useState({})\n const [properties, setProperties] = useState({})\n const [propertiesObject, setPropertiesObject] = useState({})\n const [excelPricingEnabled, setExcelPricingEnabled] = useState(false)\n const [productDeliveries, setProductDeliveries] = useState(customState.currentDeliveryServices || null)\n const [deliveryMethod, setDeliveryMethod] = useState(null)\n const [deliveryService, setDeliveryService] = useState(null)\n const [priceError, setPriceError] = useState(null)\n const [quantityError, setQuantityError] = useState(null)\n const [proofUrl, setProofUrl] = useState(null)\n const [proofModalOpen, setProofModalOpen] = useState(false)\n const [approvalModalOpen, setApprovalModalOpen] = useState(false)\n const [thumbnailModalOpen, setThumbnailModalOpen] = useState(false)\n const [popperAffectedSections, setPopperAffectedSections] = useState([])\n const [popperError, setPopperError] = useState(null)\n const [postLoadingProcedures, setPostLoadingProcedures] = useState(false)\n const [forceAddToCartButtonPopper, setForceAddToCartButtonPopper] = useState(false)\n const [htmlDataUpdateTimeout, setHtmlDataUpdateTimeout] = useState(null)\n const [showLoaderDots, setShowLoaderDots] = useState(false)\n const [disabledRefreshPreviewButton, setDisabledRefreshPreviewButton] = useState(false)\n const [lastViewImageId, setLastViewImageId] = useState(0)\n const [isMobile, setIsMobile] = useState( document.body.clientWidth < parseInt(theme.md.replace('px', '')))\n const [sectionToOpen, setSectionToOpen] = useState(0)\n const [searchParams, setSearchParams] = useSearchParams()\n const [poofPreviewError, setPoofPreviewError] = useState(false)\n const topMarkerRef = useRef(null)\n const bottomMarkerRef = useRef(null)\n const { showStickyPrice, stickyConnect, stickyDisconnect } = useSticky(topMarkerRef, bottomMarkerRef)\n const topPriceRef = useRef(null)\n const bottomPriceRef = useRef(null)\n const { addPromise } = useUpdateProperties()\n const navigate = useNavigate()\n const {\n errors,\n processErrorsOnApiResponse,\n processErrorsOnFormChange,\n processErrorsOnAddToCart,\n showAllErrors,\n excelPricingError,\n checkIsPriceAffectedWithErrors\n } = useErrors(properties)\n const [showRefreshPreview, setShowRefreshPreview] = useState(false)\n const stickyPriceRef = useRef(null)\n\n const checkIfThereArePropertyErrors = useCallback((updatedErrors = null, updatedProperties = null) => {\n const productErrors = updatedErrors ? { ...updatedErrors } : { ...errors }\n const propertiesToUse = updatedProperties ? convertPropertiesFromApiToPropertiesObject(updatedProperties) : propertiesObject\n\n return Object.keys(productErrors)\n .some((propertyId) =>\n productErrors[propertyId] &&\n productErrors[propertyId].errors &&\n productErrors[propertyId].errors.length &&\n propertiesToUse[propertyId].uiSchema['ui:options'].visible\n )\n }, [errors, propertiesObject])\n\n const checkIfThereAreSectionErrors = useCallback(() => {\n return Object.values(errors).some((property) => property.errors.length && property.show && property.section)\n }, [errors])\n\n const checkIfThereAreVisiblePropertyErrors = useCallback((updatedErrors = null) => {\n const productErrors = updatedErrors ? { ...updatedErrors } : { ...errors }\n return Object.values(productErrors).some((property) => property.errors.length && property.show)\n }, [errors])\n\n const calculateProperties = throttle(750, async (usedQuantity, updatedOrderItem = null, updatedProperties = null, updatedErrors = null) => {\n if (price.Price === null) return\n setPageState(State.calculatingPrice)\n const updatedPrice = await getPriceOrderItem(\n updatedOrderItem ? updatedOrderItem.ID : orderItem.ID,\n {\n ...updatedOrderItem || orderItem,\n Properties: ((updatedProperties && Object.keys(updatedProperties).length)) || (properties && Object.keys(properties).length) ? convertProductPropertiesFormIntoArray(\n updatedProperties || properties,\n excelPricingEnabled\n ) : null,\n Quantity: usedQuantity\n })\n if (updatedPrice.Price === null) {\n setPrice(updatedPrice)\n setPageState(State.initial)\n return\n }\n if (updatedErrors && updatedProperties) {\n const errorsExist = checkIfThereArePropertyErrors(updatedErrors, updatedProperties)\n if (errorsExist && (updatedPrice.Price.Price === -1 || updatedPrice.IsMinimumPrice)) {\n setPriceError('can not recalculate')\n setPostLoadingProcedures(true)\n } else if (!errorsExist && (updatedPrice.Price.Price === -1 || updatedPrice.IsMinimumPrice)) {\n setPricingError({\n ErrorCode: 'ExcelCalculation'\n })\n setPageState(State.initial)\n return\n } else if (product.Type === productTypes.DYNAMIC) {\n const keepError = Object.entries(updatedErrors).reduce((r, [key, val]) => {\n return r || (val.show && updatedProperties.JSONSchema.definitions[key]?.custom.affectPrice)\n }, false )\n if (!keepError) {\n setPriceError(null)\n }\n } else {\n setPriceError(null)\n }\n }\n setPrice(updatedPrice)\n UStoreProvider.state.customState.set('currentOrderItemPriceModel', updatedPrice)\n setPageState(State.initial)\n })\n\n const updateProperties = useCallback(async (changedProperties = [], updatedProperties = null, usedQuantity = null, recalculatePrice = true, updatedErrors = null) => {\n const updatedPropertiesSchema = updatedProperties || properties\n\n const formDataForApi = preparingFormDataToSendToServer(updatedPropertiesSchema.formData, properties)\n formDataForApi.push({\n id: 'uStoreOrderItemQuantity',\n value: usedQuantity || quantity\n })\n\n const handleResponse = async (response, e) => {\n if (e) {\n console.error(e)\n // Excel template V15.0 error\n setPricingError(e)\n return {\n updatedPropertiesFromApi: properties, updatedPropertiesObject: propertiesObject\n }\n }\n\n const updatedPropertiesObject = convertPropertiesFromApiToPropertiesObject(\n response,\n getDependenciesObject(response, excelPricingEnabled) ? getDependenciesObject(response, excelPricingEnabled).dependenciesObject : null\n )\n setProperties(response)\n setPropertiesObject(updatedPropertiesObject)\n\n UStoreProvider.state.customState.set('currentProductProperties', response)\n const updatedErrorsFromApi = await processErrorsOnApiResponse(\n response,\n updatedErrors || errors,\n changedProperties\n )\n if (product.Type === productTypes.DYNAMIC) {\n recalculatePrice = changedProperties.reduce((acc, propertyId) => {\n return acc || response.JSONSchema.definitions[propertyId]?.custom.affectPrice\n }, recalculatePrice)\n }\n\n if (recalculatePrice && !checkIfThereAreVisiblePropertyErrors(updatedErrorsFromApi)) {\n calculateProperties(usedQuantity || quantity, null, response, updatedErrorsFromApi)\n }\n return { updatedPropertiesFromApi: response, updatedPropertiesObject }\n }\n\n addPromise(pushPropertiesState(\n orderItem.ID,\n formDataForApi\n ), handleResponse)\n\n return { updatedPropertiesFromApi: properties, updatedPropertiesObject: propertiesObject }\n }, [addPromise, calculateProperties, checkIfThereAreVisiblePropertyErrors, errors, excelPricingEnabled, orderItem.ID,\n processErrorsOnApiResponse, properties, propertiesObject, quantity, product.Type])\n\n const createPreview = useCallback(async (propsFromApiToPropsObject, orderItemId = null, propertiesFromApi = null) => {\n setDisabledRefreshPreviewButton(() => true)\n const propsForProof = preparingFormDataToSendToServer(Object.values(propsFromApiToPropsObject).reduce((r, p) => ({...r, [p.id]: p.value}), {}), propertiesFromApi || properties)\n fastProofService.onError = () => {\n setDisabledRefreshPreviewButton(() => false)\n fastProofService.breakCurrentLoop()\n setPoofPreviewError(true)\n setShowLoaderDots(false)\n }\n\n fastProofService.onProof = async (proof) => {\n setDisabledRefreshPreviewButton(() => false)\n const fileNames = proof.Items.map((p) => ({Url: p.Url.replace(/.*?fileName=(.*)$/,'$1')}))\n let proofedDownloaded = []\n let hadError = false\n let firstProof = true\n for (const file of fileNames) {\n const fileBlob = await UStoreProvider.api.products.downloadProofPreview(orderItem.ID || orderItemId, proof.PreviewID, file.Url)\n if (fileBlob) {\n if (firstProof) {\n window['proofPreview'] = window['proofPreview'] || {}\n window['proofPreview'][orderItem.ID || orderItemId] = window['proofPreview'][orderItem.ID || orderItemId] || []\n window['proofPreview'][orderItem.ID || orderItemId].push(fileBlob)\n firstProof = false\n }\n proofedDownloaded = [...proofedDownloaded, {\n Url: URL.createObjectURL(fileBlob),\n DisplayName: t('DynamicProof.Page', { pageNumber: proofedDownloaded.length + 1 }),\n type: proof.Format === 1 ? 'image' : 'pdf'\n }]\n } else {\n hadError = true\n }\n }\n if (!hadError) {\n setProductThumbnails({ Thumbnails: proofedDownloaded })\n }\n setShowLoaderDots(false)\n setPoofPreviewError(hadError)\n }\n if (showRefreshPreview || searchParams.has('OrderItemId')) {\n setShowLoaderDots(true)\n }\n setPoofPreviewError(false)\n fastProofService.push([orderItem.ID || orderItemId, propsForProof])\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[orderItem.ID, properties])\n\n const handleFormChange = useCallback(async (\n propertyId = null,\n propertyValue = undefined,\n propertyErrors = null,\n formChanges = {}\n ) => {\n setPriceError(null)\n resetPopperError()\n const updatedPropertiesSchema = properties\n if (Object.keys(formChanges).length) {\n updatedPropertiesSchema.formData = {\n ...properties.formData,\n ...formChanges\n }\n } else {\n updatedPropertiesSchema.formData = {\n ...properties.formData,\n [propertyId]: propertyValue\n }\n }\n const updatedErrors = processErrorsOnFormChange(\n Object.keys(formChanges).length ? Object.keys(formChanges) : propertyId,\n propertyErrors,\n updatedPropertiesSchema,\n propertyValue\n )\n const updatedFormData = {\n ...properties,\n formData: updatedPropertiesSchema.formData\n }\n const propsFromApiToPropsObject = convertPropertiesFromApiToPropertiesObject(\n updatedFormData,\n getDependenciesObject(updatedFormData, excelPricingEnabled) ? getDependenciesObject(updatedFormData, excelPricingEnabled).dependenciesObject : null\n )\n\n const propAffectProof = formChanges && !propertyId ?\n Object.entries(formChanges).reduce((r, [key, value]) => r || updatedFormData.JSONSchema.definitions[key]?.custom?.affectProof) :\n updatedFormData.JSONSchema.definitions[propertyId]?.custom?.affectProof\n\n if ( propAffectProof && product.Type === productTypes.DYNAMIC && !showRefreshPreview && (formChanges || propertyErrors[propertyId]?.length === 0)) {\n await createPreview(propsFromApiToPropsObject)\n }\n\n // Set temporal local state\n setPropertiesObject(propsFromApiToPropsObject)\n setProperties({\n ...properties,\n formData: updatedPropertiesSchema.formData\n })\n if (!quantityError) {\n // Check if there are validation errors on changed property\n if ((!Object.keys(formChanges).length && updatedErrors[propertyId] && updatedErrors[propertyId].errors.length) ||\n (Object.keys(formChanges).length && checkIfThereArePropertyErrors(updatedErrors))\n ) {\n // Errors already shown as part of errors processing - processErrorsOnFormChange\n setPageState(State.initial)\n } else if (checkIfThereArePropertyErrors(updatedErrors)) {\n if (excelPricingEnabled) {\n await updateProperties(\n Object.keys(formChanges).length ? Object.keys(formChanges) : [propertyId],\n updatedPropertiesSchema,\n null,\n true,\n updatedErrors\n )\n setPageState(State.initial)\n } else if (!excelPricingEnabled && checkIfThereAreVisiblePropertyErrors(updatedErrors)) {\n await updateProperties(\n Object.keys(formChanges).length ? Object.keys(formChanges) : [propertyId],\n updatedPropertiesSchema,\n null,\n false,\n updatedErrors\n )\n setPageState(State.initial)\n } else if (!excelPricingEnabled && !checkIfThereAreVisiblePropertyErrors(updatedErrors)) {\n await updateProperties(\n Object.keys(formChanges).length ? Object.keys(formChanges) : [propertyId],\n updatedPropertiesSchema,\n null,\n false,\n updatedErrors\n )\n if (checkIsPriceAffectedWithErrors(propertiesObject, updatedErrors)) {\n setPageState(State.initial)\n setPriceError('can not recalculate')\n setPostLoadingProcedures(true)\n } else {\n await updateProperties(\n Object.keys(formChanges).length ? Object.keys(formChanges) : [propertyId],\n updatedPropertiesSchema,\n null,\n true,\n updatedErrors\n )\n setPageState(State.initial)\n }\n }\n } else {\n await updateProperties(\n Object.keys(formChanges).length ? Object.keys(formChanges) : [propertyId],\n updatedPropertiesSchema,\n null,\n true,\n updatedErrors\n )\n setPageState(State.initial)\n }\n }\n if (quantityError === 'invalid' && product.Type === productTypes.DYNAMIC) {\n setPageState(State.initial)\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [checkIfThereArePropertyErrors, checkIfThereAreVisiblePropertyErrors, excelPricingEnabled, product.Type,\n processErrorsOnFormChange, properties, quantityError, updateProperties, createPreview, showRefreshPreview])\n\n const loadProductData = async () => {\n if (product.ID) {\n setPageState(State.loading)\n const productFromApi = await UStoreProvider.api.products.getProductByID(product.ID)\n setProduct(productFromApi)\n const fastPreviewEnabled = !productFromApi?.Configuration?.Proof?.FastPreviewEnabled && productFromApi.Type === productTypes.DYNAMIC\n setShowRefreshPreview(fastPreviewEnabled)\n const productThumbnailsFromApi = await UStoreProvider.api.products.getProductThumbnails(productFromApi.ID)\n setProductThumbnails(productThumbnailsFromApi)\n let orderItemFromApi\n if (searchParams.get('OrderItemId')) orderItemFromApi = await UStoreProvider.api.orders.getOrderItem(searchParams.get('OrderItemId'))\n else orderItemFromApi = await UStoreProvider.api.orders.addOrderItem(productFromApi.ID)\n setOrderItem(orderItemFromApi)\n setQuantity(orderItemFromApi.Quantity)\n setDeliveryMethod(orderItemFromApi.DeliveryMethod)\n setDeliveryService(orderItemFromApi.DeliveryServiceID)\n const lastOrderFromApi = await UStoreProvider.api.orders.getLastOrder(productFromApi.ID) // null\n await loadProductDeliveries(productFromApi, orderItemFromApi.ID)\n loadProductProofUrl(productFromApi, orderItemFromApi.ID)\n await loadProductProperties(orderItemFromApi, orderItemFromApi.Quantity, productFromApi, fastPreviewEnabled)\n UStoreProvider.state.customState.setBulk({\n currentProductThumbnails: productThumbnailsFromApi,\n currentOrderItem: orderItemFromApi,\n lastOrder: lastOrderFromApi,\n })\n setPageState(State.initial)\n }\n }\n\n const onFormChange = useCallback((...args) => {\n setPageState(State.loading)\n handleFormChange(...args)\n }, [handleFormChange])\n\n const loadProductDataCallbackRef = useRef(loadProductData)\n useEffect(() => {\n loadProductDataCallbackRef.current = loadProductData\n })\n\n useEffect(() => {\n const loadProductDataCallback = e => loadProductDataCallbackRef.current(e)\n\n const onResize = (event) => {\n setIsMobile(document.body.clientWidth < parseInt(theme.md.replace('px', '')))\n }\n\n window.addEventListener('beforeunload', cleanCustomState, true)\n window.addEventListener('resize', onResize, true)\n stickyConnect()\n onResize()\n loadProductDataCallback()\n\n return () => {\n stickyDisconnect()\n cleanCustomState()\n window.removeEventListener('beforeunload', cleanCustomState, true)\n fastProofService.breakCurrentLoop()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n useEffect(() => {\n setExcelPricingEnabled(product\n .Attributes\n .find((attribute) => attribute.Name === 'PartialPriceCalculationEnabled')\n .Value === 'true')\n }, [product])\n\n useEffect(() => {\n const demiState = { ...properties.formData }\n\n window.triggerFormPropertyChange = (propertyId, propertyValue) => {\n if (propertyValue && propertyValue.includes && propertyValue.includes('__GENERIC_HTML_ACCUMULATOR_VALUE__')) {\n const formValues = JSON.parse(propertyValue)['__GENERIC_HTML_ACCUMULATOR_VALUE__']\n onFormChange(null, null, null, formValues)\n } else {\n if (propertiesObject[propertyId]) demiState[propertyId] = propertyValue\n clearTimeout(htmlDataUpdateTimeout)\n const newHtmlUpdateTimeout = setTimeout(() => {\n onFormChange(null, null, null, demiState)\n }, 500)\n setHtmlDataUpdateTimeout(newHtmlUpdateTimeout)\n }\n }\n return () => { window.triggerFormPropertyChange = undefined }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [properties, propertiesObject, errors])\n\n useEffect(() => {\n if (pageState !== State.loading && pageState !== State.calculatingPrice && postLoadingProcedures) {\n if (!forceAddToCartButtonPopper) {\n if (priceError === 'invalid') {\n setPopperError('GET_PRICE')\n } else if (priceError === 'can not recalculate') {\n setPopperError('PRICE_CAN_NOT_BE_UPDATED')\n } else if (priceError === null) {\n setPopperError(null)\n }\n }\n setPostLoadingProcedures(false)\n }\n }, [\n priceError,\n quantityError,\n pageState,\n excelPricingEnabled,\n postLoadingProcedures,\n forceAddToCartButtonPopper,\n price\n ])\n\n useEffect(() => {\n if (pageState !== State.loading && pageState !== State.calculatingPrice) setPostLoadingProcedures(true)\n else setPostLoadingProcedures(false)\n }, [pageState])\n\n const cleanCustomState = () => {\n ['currentProduct',\n 'currentOrderItem',\n 'currentOrderItemId',\n 'currentOrderItemPriceModel',\n 'lastOrder',\n 'currentProductThumbnails',\n 'currentDeliveryServices',\n 'CurrentProductDucErrors',\n 'ducData',\n 'currentProductProperties',\n 'isLoadingData'\n ].forEach((property) => {\n UStoreProvider.state.customState.delete(property)\n })\n }\n\n const setPricingError = (error) => {\n if (error.ErrorCode && error.ErrorCode === 'ExcelCalculation') {\n const updatedPrice = {\n IsMinimumPrice: true,\n MailingFee: 0,\n Price: { Price: -1, Tax: 0 },\n ProductPrice: 0\n }\n setPrice(updatedPrice)\n UStoreProvider.state.customState.set('currentOrderItemPriceModel', updatedPrice)\n setPriceError('invalid')\n setPostLoadingProcedures(true)\n }\n }\n\n const loadProductDeliveries = async (productFromApi, orderItemId) => {\n if (productFromApi.Configuration.Delivery.Mailing.Enabled) {\n const deliveriesFromApi = await UStoreProvider.api.orders.getDeliveryServices(orderItemId)\n setProductDeliveries(deliveriesFromApi)\n UStoreProvider.state.customState.set('currentProductDeliveries', deliveriesFromApi)\n }\n }\n\n const loadProductProperties = async (updatedOrderItem, initialQuantity, product, fastPreviewEnabled) => {\n try {\n const propertiesFromApi = await UStoreProvider.api.orders.getProperties(updatedOrderItem.ID)\n const updatedPropertiesObject = convertPropertiesFromApiToPropertiesObject(\n propertiesFromApi,\n getDependenciesObject(propertiesFromApi, excelPricingEnabled) ? getDependenciesObject(propertiesFromApi, excelPricingEnabled).dependenciesObject : null\n )\n\n setProperties(propertiesFromApi)\n setPropertiesObject(updatedPropertiesObject)\n if (product.Type === productTypes.DYNAMIC) {\n if (searchParams.get('OrderItemId')) {\n setTimeout(() => createPreview(updatedPropertiesObject, searchParams.get('OrderItemId'), propertiesFromApi), 0)\n } else if (!fastPreviewEnabled) {\n setTimeout(() => createPreview(updatedPropertiesObject, updatedOrderItem.ID, propertiesFromApi), 0)\n }\n }\n\n\n UStoreProvider.state.customState.set('currentProductProperties', { ...propertiesFromApi })\n const updatedErrors = await processErrorsOnApiResponse(propertiesFromApi, null)\n\n if (!checkIfThereAreVisiblePropertyErrors(updatedErrors)) {\n await calculateProperties(initialQuantity, updatedOrderItem, propertiesFromApi, updatedErrors)\n } else {\n setPricingError({\n ErrorCode: 'ExcelCalculation'\n })\n }\n } catch (e) {\n console.error(e)\n // Excel template V15.0 error\n setPricingError(e)\n }\n }\n\n const loadProductProofUrl = (productFromApi, orderItemId) => {\n setProofUrl(productFromApi.Proof ? `${productFromApi.Proof.Url}&OrderItemID=${orderItemId}` : null)\n }\n\n const reRouteToCart = (storeType, cartUrl) => {\n if (storeType === 3 && cartUrl) {\n const decoded = decodeURIComponent(cartUrl)\n window.location.href = `${decoded}${decoded.includes('?') ? '&' : '?'}OrderProductId=${orderItem.FriendlyID}`\n } else {\n navigate(urlGenerator.get({ page: 'cart' }))\n }\n }\n\n const reRouteToNewOrder = (productId, productName, newOrderId) => {\n setSearchParams({ OrderItemId: newOrderId, reorder: true })\n navigate(0)\n }\n\n const handleQuantityChange = async (newQuantity, error) => {\n try {\n if (error) {\n setQuantityError('invalid')\n if (newQuantity === '') setQuantity('')\n return\n } else {\n setQuantityError(null)\n }\n\n if (checkIfThereArePropertyErrors() && !excelPricingEnabled) {\n if (checkIfThereAreVisiblePropertyErrors()) {\n return\n } else {\n const propertiesCanAffectPrice = Object.values(propertiesObject).filter((property) => property.custom.affectPrice)\n const isPriceAffectedWithErrors = propertiesCanAffectPrice.some((property) => errors[property.id].errors.length)\n if (isPriceAffectedWithErrors) {\n setPriceError('can not recalculate')\n setPostLoadingProcedures(true)\n return\n }\n }\n }\n\n if (pageState !== State.loading) {\n await updateProperties(['quantity'], null, newQuantity)\n setPageState(State.initial)\n setPopperError(null)\n }\n } catch (e) {\n setPageState(State.initial)\n console.error(e)\n setPricingError(e)\n } finally {\n setQuantity(newQuantity)\n if (!isNaN(parseInt(newQuantity))) {\n setOrderItem({\n ...orderItem,\n Quantity: newQuantity\n })\n }\n }\n }\n\n const addToCartOrSave = async (skipPropertiesPush = false) => {\n // If product is out of stock - save it for later\n const productStockQuantity = product.Inventory && product.Inventory.Quantity\n const minQuantity = product.Configuration &&\n product.Configuration.Quantity &&\n product.Configuration.Quantity.Minimum\n ? product.Configuration.Quantity.Minimum\n : 0\n const allowOutOfStockPurchase = product.Inventory && product.Inventory.AllowOutOfStockPurchase\n if (\n product.Inventory &&\n isOutOfStock(\n productStockQuantity,\n minQuantity,\n allowOutOfStockPurchase\n )\n ) {\n await pushSavedForLater(orderItem.ID)\n } else {\n if (!skipPropertiesPush) {\n if (properties && Object.keys(properties).length) {\n await pushProperties(\n orderItem.ID,\n convertProductPropertiesFormIntoArray(\n properties,\n excelPricingEnabled\n )\n )\n }\n await pushOrderItem(orderItem.ID, {\n ...orderItem,\n Properties: properties && Object.keys(properties).length ? convertProductPropertiesFormIntoArray(\n properties,\n excelPricingEnabled\n ) : null\n })\n }\n await pushCart(orderItem.ID)\n }\n reRouteToCart(StoreType, themeContext.get('cartUrl'))\n }\n\n const handleAddToCartButtonClick = async () => {\n if (pageState !== State.initial) return\n // Error checking\n if (quantityError) {\n setForceAddToCartButtonPopper(true)\n setPopperError('VALIDATION_ERROR')\n setPostLoadingProcedures(true)\n return\n } else if ((priceError === 'invalid' && !((price.Price && price.Price.Price === -1) || price.IsMinimumPrice)) || excelPricingError) {\n setForceAddToCartButtonPopper(true)\n setPopperError('SOMETHING_WENT_WRONG')\n setPostLoadingProcedures(true)\n return\n } else if (priceError === 'invalid' && ((price.Price && price.Price.Price === -1) || price.IsMinimumPrice)) {\n setForceAddToCartButtonPopper(true)\n setPopperError('GET_PRICE')\n setPostLoadingProcedures(true)\n return\n } else if (checkIfThereArePropertyErrors()) {\n setForceAddToCartButtonPopper(true)\n setPostLoadingProcedures(true)\n showAllErrors()\n if (product.Type === productTypes.DYNAMIC && checkIfThereAreSectionErrors()) {\n const distinctSections = [...new Set(Object.values(propertiesObject).reduce((acc, current) => [...acc, current.uiSchema['ui:options'].section], []))]\n\n if (distinctSections.length > 1) {\n const sectionsAffectedByErrors = [...new Set(Object.values(errors).reduce((acc, current) => current.show && current.section ? [...acc, current.section] : [...acc], []))].sort((a, b) => distinctSections.indexOf(a) - distinctSections.indexOf(b))\n const sectionsAffectedByErrorsWithIndexes = sectionsAffectedByErrors.map((section) =>\n distinctSections.includes(section) ?\n `${distinctSections.indexOf(section) + 1}. ${section === 'xmpie_product_properties' ? t('xmpie_product_properties') : section}` :\n ''\n )\n // numbers lower than -2 are special values to signal dynamic form to open the first section with errors\n setSectionToOpen(-2 - Date.now())\n setPopperAffectedSections(sectionsAffectedByErrorsWithIndexes)\n setPopperError('SECTION_ERROR')\n return\n }\n }\n setPopperError('VALIDATION_ERROR')\n return\n }\n const updatedProperties = await updateProperties(Object.keys(propertiesObject))\n if (priceError) {\n setForceAddToCartButtonPopper(true)\n setPopperError('SOMETHING_WENT_WRONG')\n setPostLoadingProcedures(true)\n return\n }\n const updatedErrors = await processErrorsOnAddToCart(updatedProperties.updatedPropertiesFromApi)\n if (checkIfThereArePropertyErrors(updatedErrors)) {\n setForceAddToCartButtonPopper(true)\n setPopperError('VALIDATION_ERROR')\n setPostLoadingProcedures(true)\n return\n }\n setPageState(State.loading)\n // If product requires proof approval, open form approval modal and exit\n if (product.Configuration.Proof && product.Configuration.Proof.RequireProofApproval) {\n if (price && price.Price) await calculateProperties(quantity, null, updatedProperties.updatedPropertiesFromApi, updatedErrors)\n setApprovalModalOpen(true)\n setPageState(State.initial)\n return\n }\n\n await addToCartOrSave()\n }\n\n const handleDeliveryChange = async (newDeliveryMethod, newDeliveryServiceId) => {\n setDeliveryMethod(newDeliveryMethod)\n setDeliveryService(newDeliveryServiceId)\n const updatedOrderItem = {\n ...orderItem,\n DeliveryMethod: newDeliveryMethod,\n DeliveryServiceID: newDeliveryServiceId\n }\n setOrderItem(updatedOrderItem)\n UStoreProvider.state.customState.set('currentOrderItem', updatedOrderItem)\n if (Object.keys(price).length && price.Price) calculateProperties(quantity, updatedOrderItem)\n }\n\n const handlePropertyBlur = (propertyId) => {\n const updatedErrors = processErrorsOnFormChange(propertyId, null, properties)\n processErrorsOnApiResponse(\n properties,\n updatedErrors,\n [propertyId]\n )\n }\n\n const handleReorder = async () => {\n const { lastOrder } = UStoreProvider.state.customState.get()\n setPageState(State.loading)\n const newOrder = await getReorder(lastOrder.OrderItemID)\n reRouteToNewOrder(product.FriendlyID, product.Name, newOrder.ID)\n }\n\n const getContinueButtonText = (proofModal = false) => {\n if (\n product.Configuration.Proof &&\n product.Configuration.Proof.RequireProofApproval &&\n !proofModal\n ) return t('product.review_approve')\n if (\n product &&\n product.Inventory &&\n Object.keys(product.Inventory).includes('Quantity') &&\n Object.keys(product.Inventory).includes('AllowOutOfStockPurchase') &&\n isOutOfStock(\n product.Inventory.Quantity,\n product.Configuration.Quantity.Minimum,\n product.Inventory.AllowOutOfStockPurchase\n )\n ) return t('product.save_for_later')\n return t('product.add_to_cart')\n }\n\n const resetPopperError = () => {\n setPopperError(null)\n setForceAddToCartButtonPopper(false)\n }\n\n const onProofPreviewClick = async () => await createPreview(propertiesObject)\n\n return (\n <ProductLayout className='product-instance'\n dynamic={product.Type === productTypes.DYNAMIC}\n >\n <left id='custom' className=\"desktop-product\">\n <Preview\n poofPreviewError={poofPreviewError}\n productThumbnails={productThumbnails}\n showLoaderDots={showLoaderDots}\n product={product}\n orderItem={orderItem}\n setProofModalOpen={setProofModalOpen}\n proofModalOpen={proofModalOpen}\n showRefreshPreview={showRefreshPreview}\n onProofPreviewClick={onProofPreviewClick}\n disabledRefreshPreviewButton={disabledRefreshPreviewButton}\n showThumbs={product.Type !== productTypes.KIT}\n />\n </left>\n <right is=\"custom\">\n <Slot name=\"static_product_top\" data={product} />\n <ProductDetails\n className='product-instance'\n productModel={product}\n minimumQuantity={product.Configuration ? product.Configuration.Quantity.Minimum : null}\n reorderModel={!searchParams.get('reorder') ? UStoreProvider.state.customState.get('lastOrder') : null}\n onReorder={handleReorder}\n showInStock\n langCode={themeContext.get('languageCode')}\n />\n <div className=\"mobile-product\">\n <Preview\n poofPreviewError={poofPreviewError}\n productThumbnails={productThumbnails}\n showLoaderDots={showLoaderDots}\n product={product}\n orderItem={orderItem}\n setProofModalOpen={setProofModalOpen}\n proofModalOpen={proofModalOpen}\n showRefreshPreview={showRefreshPreview}\n onProofPreviewClick={onProofPreviewClick}\n disabledRefreshPreviewButton={disabledRefreshPreviewButton}\n />\n </div>\n <Price\n ref={topPriceRef}\n isPriceCalculating={pageState === State.calculatingPrice || pageState === State.loading}\n price={price} showMinimumPrice={!!price.IsMinimumPrice}\n />\n <div ref={topMarkerRef} className=\"price-top-marker\"></div>\n <div className='product-instance-wizard'>\n <div id=\"form-container\" className='product-instance-properties product-properties'>\n <Slot name=\"static_product_above_quantity\" data={product}/>\n <div className='quantity'>\n <span className='quantity-label'>{t('product.quantity')}</span>\n {orderItem?.Quantity && <ProductQuantity\n supportsInventory\n productModel={product}\n orderModel={orderItem}\n onQuantityChange={handleQuantityChange}\n />}\n </div>\n <Slot name=\"static_product_below_quantity\" data={product} />\n <DynamicForm\n errors={errors}\n excelPricingEnabled={excelPricingEnabled}\n formData={properties.formData}\n onBlur={handlePropertyBlur}\n onChange={onFormChange}\n properties={propertiesObject}\n sectionToOpen={sectionToOpen}\n sectionsDescription={properties.JSONSchema && properties.JSONSchema.sections}\n />\n </div>\n </div>\n <ProductDeliveryMethod\n className='static-delivery-method'\n productModel={product}\n onDeliveryChange={handleDeliveryChange}\n currentDeliveryMethod={deliveryMethod}\n currentDeliveryServiceID={deliveryService}\n deliveryServices={productDeliveries}\n />\n <ProductOrderSummary\n ref={bottomPriceRef}\n currency={currentCurrency?.Code}\n deliveryMethod={deliveryMethod}\n className='static-order-summary'\n productModel={product}\n quantity={quantity}\n taxFormatType={TaxFormatType}\n priceModel={Object.keys(price).length ? price : null}\n isPriceCalculating={pageState === State.calculatingPrice || pageState === State.loading}\n />\n <div ref={bottomMarkerRef} className=\"price-bottom-marker\"></div>\n <ProductProof\n onAddToCartClick={handleAddToCartButtonClick}\n isModalOpen={proofModalOpen}\n modalClassName='product-instance-proof-modal'\n src={proofUrl}\n type={product.Proof && product.Proof.MimeType ? product.Proof.MimeType : ''}\n onCloseModal={() => setProofModalOpen(!proofModalOpen)}\n isMobile={isMobile}\n />\n {approvalModalOpen && <ProductApprovalModal product={product} properties={properties}\n onAddToCartClick={addToCartOrSave} orderItem={orderItem}\n productThumbnails={productThumbnails} modalOpen={approvalModalOpen}\n onCloseModal={() => setApprovalModalOpen(!approvalModalOpen)}\n continueButtonText={getContinueButtonText(true)} src={proofUrl}\n excelPricingEnabled={excelPricingEnabled}/>}\n <div className='add-to-cart-button-wrapper'>\n <Slot name=\"static_product_above_add_to_cart\" data={product} />\n <div\n className='button button-primary add-to-cart-button'\n id='add-to-cart-button'\n onClick={handleAddToCartButtonClick}\n tabIndex='0'\n >\n {\n pageState === State.loading ||\n pageState === State.calculatingPrice\n ? <LoadingDots/>\n : getContinueButtonText()}\n </div>\n <Slot name=\"static_product_below_add_to_cart\" data={product} />\n </div>\n <Popper\n bottomPriceRef={bottomPriceRef}\n topPriceRef={topPriceRef}\n stickPriceRef={stickyPriceRef}\n errorCode={popperError}\n forceAddToCartButton={forceAddToCartButtonPopper}\n resetError={resetPopperError}\n popperAffectedSections={popperAffectedSections}\n />\n <Slot name=\"static_product_bottom\" data={product} />\n {product.Type === productTypes.DYNAMIC &&\n <ProductThumbnailsPreview\n isModalOpen={thumbnailModalOpen}\n onCloseModal={() => setThumbnailModalOpen(false)}\n productThumbnails={(product.Type === productTypes.DYNAMIC && productThumbnails) ? productThumbnails : null}\n modalClassName='thumbnails-preview'\n onImageChange={(id) => setLastViewImageId(id)}\n poofPreviewError={poofPreviewError}\n onProofPreviewClick={onProofPreviewClick}\n />\n }\n {showStickyPrice &&\n <ProductStickyPrice\n longPrice={TaxFormatType === 3}\n onClick={handleAddToCartButtonClick}\n addToCartBtnText={getContinueButtonText()}\n priceModel={price}\n isPriceLoading={pageState === State.loading || pageState === State.calculatingPrice}\n disabled={pageState === State.loading || pageState === State.calculatingPrice}\n showMinimumPrice={!!price.IsMinimumPrice}\n productThumbnails={(product.Type === productTypes.DYNAMIC && productThumbnails) ? productThumbnails : null}\n onImageClick={() => setThumbnailModalOpen(true)}\n lastViewImageId={lastViewImageId}\n ref={stickyPriceRef}\n />}\n\n </right>\n\n </ProductLayout>\n )\n}\n\nexport default StaticProduct\n","import React, { useEffect } from 'react'\nimport { useParams } from 'react-router-dom'\nimport { UStoreProvider } from '@ustore/core'\nimport { LoadingDots } from '$core-components'\nimport { t } from '$themelocalization'\nimport KitProduct from '../components/products/kit/KitProduct'\nimport StaticProduct from '../components/products/static/StaticProduct'\nimport Layout from '../components/layout'\nimport { productTypes } from '../services/utils'\n\nimport './Products.scss'\n\n\nconst renderLoader = () => {\n return (\n <div>\n <div className={'product-loading'}>\n <LoadingDots />\n {t('product.loading-msg')}\n </div>\n </div>\n )\n}\n\nconst Products = (props) => {\n const params = useParams()\n\n useEffect(() => {\n (async () => {\n const { id: productFriendlyID, OrderItemId: orderItemID } = params\n if (!productFriendlyID) return\n\n const { currentProduct } = UStoreProvider.state.customState.get()\n if (currentProduct && currentProduct.FriendlyID === parseInt(productFriendlyID)) {\n UStoreProvider.state.customState.setBulk({ currentOrderItemId: orderItemID || null })\n return\n }\n const productID = await UStoreProvider.api.products.getProductIDByFriendlyID(productFriendlyID)\n const product = await UStoreProvider.api.products.getProductByID(productID)\n\n UStoreProvider.state.customState.setBulk({ currentProduct: product,currentOrderItemId: orderItemID})\n })()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n if (!props.state || !props.customState) {\n return <Layout {...props}>\n {renderLoader()}\n </Layout>\n }\n\n if (!props.customState.currentProduct) {\n return <Layout {...props}>\n {renderLoader()}\n </Layout>\n }\n\n const product = props.customState.currentProduct\n // check type of product to decide which component to render.\n switch (product.Type) {\n case productTypes.KIT:\n return <Layout {...props}>\n <KitProduct key={product.ID} {...props} />\n </Layout>\n case productTypes.STATIC:\n case productTypes.DYNAMIC:\n return <Layout {...props}>\n <StaticProduct key={product.ID} {...props} />\n </Layout>\n default:\n return null\n }\n}\n\nexport default Products\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst OrderFinalStep = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default OrderFinalStep\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst Addresses = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default Addresses","const niceErrors = {\n 0: `Invalid value for configuration 'enforceActions', expected 'never', 'always' or 'observed'`,\n 1(annotationType, key: PropertyKey) {\n return `Cannot apply '${annotationType}' to '${key.toString()}': Field not found.`\n },\n /*\n 2(prop) {\n return `invalid decorator for '${prop.toString()}'`\n },\n 3(prop) {\n return `Cannot decorate '${prop.toString()}': action can only be used on properties with a function value.`\n },\n 4(prop) {\n return `Cannot decorate '${prop.toString()}': computed can only be used on getter properties.`\n },\n */\n 5: \"'keys()' can only be used on observable objects, arrays, sets and maps\",\n 6: \"'values()' can only be used on observable objects, arrays, sets and maps\",\n 7: \"'entries()' can only be used on observable objects, arrays and maps\",\n 8: \"'set()' can only be used on observable objects, arrays and maps\",\n 9: \"'remove()' can only be used on observable objects, arrays and maps\",\n 10: \"'has()' can only be used on observable objects, arrays and maps\",\n 11: \"'get()' can only be used on observable objects, arrays and maps\",\n 12: `Invalid annotation`,\n 13: `Dynamic observable objects cannot be frozen. If you're passing observables to 3rd party component/function that calls Object.freeze, pass copy instead: toJS(observable)`,\n 14: \"Intercept handlers should return nothing or a change object\",\n 15: `Observable arrays cannot be frozen. If you're passing observables to 3rd party component/function that calls Object.freeze, pass copy instead: toJS(observable)`,\n 16: `Modification exception: the internal structure of an observable array was changed.`,\n 17(index, length) {\n return `[mobx.array] Index out of bounds, ${index} is larger than ${length}`\n },\n 18: \"mobx.map requires Map polyfill for the current browser. Check babel-polyfill or core-js/es6/map.js\",\n 19(other) {\n return \"Cannot initialize from classes that inherit from Map: \" + other.constructor.name\n },\n 20(other) {\n return \"Cannot initialize map from \" + other\n },\n 21(dataStructure) {\n return `Cannot convert to map from '${dataStructure}'`\n },\n 22: \"mobx.set requires Set polyfill for the current browser. Check babel-polyfill or core-js/es6/set.js\",\n 23: \"It is not possible to get index atoms from arrays\",\n 24(thing) {\n return \"Cannot obtain administration from \" + thing\n },\n 25(property, name) {\n return `the entry '${property}' does not exist in the observable map '${name}'`\n },\n 26: \"please specify a property\",\n 27(property, name) {\n return `no observable property '${property.toString()}' found on the observable object '${name}'`\n },\n 28(thing) {\n return \"Cannot obtain atom from \" + thing\n },\n 29: \"Expecting some object\",\n 30: \"invalid action stack. did you forget to finish an action?\",\n 31: \"missing option for computed: get\",\n 32(name, derivation) {\n return `Cycle detected in computation ${name}: ${derivation}`\n },\n 33(name) {\n return `The setter of computed value '${name}' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?`\n },\n 34(name) {\n return `[ComputedValue '${name}'] It is not possible to assign a new value to a computed value.`\n },\n 35: \"There are multiple, different versions of MobX active. Make sure MobX is loaded only once or use `configure({ isolateGlobalState: true })`\",\n 36: \"isolateGlobalState should be called before MobX is running any reactions\",\n 37(method) {\n return `[mobx] \\`observableArray.${method}()\\` mutates the array in-place, which is not allowed inside a derivation. Use \\`array.slice().${method}()\\` instead`\n },\n 38: \"'ownKeys()' can only be used on observable objects\",\n 39: \"'defineProperty()' can only be used on observable objects\"\n} as const\n\nconst errors: typeof niceErrors = __DEV__ ? niceErrors : ({} as any)\n\nexport function die(error: string | keyof typeof errors, ...args: any[]): never {\n if (__DEV__) {\n let e: any = typeof error === \"string\" ? error : errors[error]\n if (typeof e === \"function\") e = e.apply(null, args as any)\n throw new Error(`[MobX] ${e}`)\n }\n throw new Error(\n typeof error === \"number\"\n ? `[MobX] minified error nr: ${error}${\n args.length ? \" \" + args.map(String).join(\",\") : \"\"\n }. Find the full error at: https://github.com/mobxjs/mobx/blob/main/packages/mobx/src/errors.ts`\n : `[MobX] ${error}`\n )\n}\n","declare const window: any\ndeclare const self: any\n\nconst mockGlobal = {}\n\nexport function getGlobal() {\n if (typeof globalThis !== \"undefined\") {\n return globalThis\n }\n if (typeof window !== \"undefined\") {\n return window\n }\n if (typeof global !== \"undefined\") {\n return global\n }\n if (typeof self !== \"undefined\") {\n return self\n }\n return mockGlobal\n}\n","import { globalState, die } from \"../internal\"\n\n// We shorten anything used > 5 times\nexport const assign = Object.assign\nexport const getDescriptor = Object.getOwnPropertyDescriptor\nexport const defineProperty = Object.defineProperty\nexport const objectPrototype = Object.prototype\n\nexport const EMPTY_ARRAY = []\nObject.freeze(EMPTY_ARRAY)\n\nexport const EMPTY_OBJECT = {}\nObject.freeze(EMPTY_OBJECT)\n\nexport interface Lambda {\n (): void\n name?: string\n}\n\nconst hasProxy = typeof Proxy !== \"undefined\"\nconst plainObjectString = Object.toString()\n\nexport function assertProxies() {\n if (!hasProxy) {\n die(\n __DEV__\n ? \"`Proxy` objects are not available in the current environment. Please configure MobX to enable a fallback implementation.`\"\n : \"Proxy not available\"\n )\n }\n}\n\nexport function warnAboutProxyRequirement(msg: string) {\n if (__DEV__ && globalState.verifyProxies) {\n die(\n \"MobX is currently configured to be able to run in ES5 mode, but in ES5 MobX won't be able to \" +\n msg\n )\n }\n}\n\nexport function getNextId() {\n return ++globalState.mobxGuid\n}\n\n/**\n * Makes sure that the provided function is invoked at most once.\n */\nexport function once(func: Lambda): Lambda {\n let invoked = false\n return function () {\n if (invoked) {\n return\n }\n invoked = true\n return (func as any).apply(this, arguments)\n }\n}\n\nexport const noop = () => {}\n\nexport function isFunction(fn: any): fn is Function {\n return typeof fn === \"function\"\n}\n\nexport function isString(value: any): value is string {\n return typeof value === \"string\"\n}\n\nexport function isStringish(value: any): value is string | number | symbol {\n const t = typeof value\n switch (t) {\n case \"string\":\n case \"symbol\":\n case \"number\":\n return true\n }\n return false\n}\n\nexport function isObject(value: any): value is Object {\n return value !== null && typeof value === \"object\"\n}\n\nexport function isPlainObject(value: any) {\n if (!isObject(value)) {\n return false\n }\n const proto = Object.getPrototypeOf(value)\n if (proto == null) {\n return true\n }\n const protoConstructor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor\n return (\n typeof protoConstructor === \"function\" && protoConstructor.toString() === plainObjectString\n )\n}\n\n// https://stackoverflow.com/a/37865170\nexport function isGenerator(obj: any): boolean {\n const constructor = obj?.constructor\n if (!constructor) {\n return false\n }\n if (\n \"GeneratorFunction\" === constructor.name ||\n \"GeneratorFunction\" === constructor.displayName\n ) {\n return true\n }\n return false\n}\n\nexport function addHiddenProp(object: any, propName: PropertyKey, value: any) {\n defineProperty(object, propName, {\n enumerable: false,\n writable: true,\n configurable: true,\n value\n })\n}\n\nexport function addHiddenFinalProp(object: any, propName: PropertyKey, value: any) {\n defineProperty(object, propName, {\n enumerable: false,\n writable: false,\n configurable: true,\n value\n })\n}\n\nexport function createInstanceofPredicate<T>(\n name: string,\n theClass: new (...args: any[]) => T\n): (x: any) => x is T {\n const propName = \"isMobX\" + name\n theClass.prototype[propName] = true\n return function (x) {\n return isObject(x) && x[propName] === true\n } as any\n}\n\nexport function isES6Map(thing: any): thing is Map<any, any> {\n return thing instanceof Map\n}\n\nexport function isES6Set(thing: any): thing is Set<any> {\n return thing instanceof Set\n}\n\nconst hasGetOwnPropertySymbols = typeof Object.getOwnPropertySymbols !== \"undefined\"\n\n/**\n * Returns the following: own enumerable keys and symbols.\n */\nexport function getPlainObjectKeys(object: any) {\n const keys = Object.keys(object)\n // Not supported in IE, so there are not going to be symbol props anyway...\n if (!hasGetOwnPropertySymbols) {\n return keys\n }\n const symbols = Object.getOwnPropertySymbols(object)\n if (!symbols.length) {\n return keys\n }\n return [...keys, ...symbols.filter(s => objectPrototype.propertyIsEnumerable.call(object, s))]\n}\n\n// From Immer utils\n// Returns all own keys, including non-enumerable and symbolic\nexport const ownKeys: (target: any) => Array<string | symbol> =\n typeof Reflect !== \"undefined\" && Reflect.ownKeys\n ? Reflect.ownKeys\n : hasGetOwnPropertySymbols\n ? obj => Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj) as any)\n : /* istanbul ignore next */ Object.getOwnPropertyNames\n\nexport function stringifyKey(key: any): string {\n if (typeof key === \"string\") {\n return key\n }\n if (typeof key === \"symbol\") {\n return key.toString()\n }\n return new String(key).toString()\n}\n\nexport function toPrimitive(value: any) {\n return value === null ? null : typeof value === \"object\" ? \"\" + value : value\n}\n\nexport function hasProp(target: Object, prop: PropertyKey): boolean {\n return objectPrototype.hasOwnProperty.call(target, prop)\n}\n\n// From Immer utils\nexport const getOwnPropertyDescriptors =\n Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(target: any) {\n // Polyfill needed for Hermes and IE, see https://github.com/facebook/hermes/issues/274\n const res: any = {}\n // Note: without polyfill for ownKeys, symbols won't be picked up\n ownKeys(target).forEach(key => {\n res[key] = getDescriptor(target, key)\n })\n return res\n }\n","import { Annotation, addHiddenProp, AnnotationsMap, hasProp, die, isOverride } from \"../internal\"\n\nimport type { Decorator } from \"../types/decorator_fills\"\n\nexport const storedAnnotationsSymbol = Symbol(\"mobx-stored-annotations\")\n\n/**\n * Creates a function that acts as\n * - decorator\n * - annotation object\n */\nexport function createDecoratorAnnotation<D extends Decorator = Decorator>(\n annotation: Annotation\n): PropertyDecorator & Annotation & D {\n function decorator(target, property) {\n if (is20223Decorator(property)) {\n return annotation.decorate_20223_(target, property)\n } else {\n storeAnnotation(target, property, annotation)\n }\n }\n return Object.assign(decorator, annotation) as any\n}\n\n/**\n * Stores annotation to prototype,\n * so it can be inspected later by `makeObservable` called from constructor\n */\nexport function storeAnnotation(prototype: any, key: PropertyKey, annotation: Annotation) {\n if (!hasProp(prototype, storedAnnotationsSymbol)) {\n addHiddenProp(prototype, storedAnnotationsSymbol, {\n // Inherit annotations\n ...prototype[storedAnnotationsSymbol]\n })\n }\n // @override must override something\n if (__DEV__ && isOverride(annotation) && !hasProp(prototype[storedAnnotationsSymbol], key)) {\n const fieldName = `${prototype.constructor.name}.prototype.${key.toString()}`\n die(\n `'${fieldName}' is decorated with 'override', ` +\n `but no such decorated member was found on prototype.`\n )\n }\n // Cannot re-decorate\n assertNotDecorated(prototype, annotation, key)\n\n // Ignore override\n if (!isOverride(annotation)) {\n prototype[storedAnnotationsSymbol][key] = annotation\n }\n}\n\nfunction assertNotDecorated(prototype: object, annotation: Annotation, key: PropertyKey) {\n if (__DEV__ && !isOverride(annotation) && hasProp(prototype[storedAnnotationsSymbol], key)) {\n const fieldName = `${prototype.constructor.name}.prototype.${key.toString()}`\n const currentAnnotationType = prototype[storedAnnotationsSymbol][key].annotationType_\n const requestedAnnotationType = annotation.annotationType_\n die(\n `Cannot apply '@${requestedAnnotationType}' to '${fieldName}':` +\n `\\nThe field is already decorated with '@${currentAnnotationType}'.` +\n `\\nRe-decorating fields is not allowed.` +\n `\\nUse '@override' decorator for methods overridden by subclass.`\n )\n }\n}\n\n/**\n * Collects annotations from prototypes and stores them on target (instance)\n */\nexport function collectStoredAnnotations(target): AnnotationsMap<any, any> {\n if (!hasProp(target, storedAnnotationsSymbol)) {\n // if (__DEV__ && !target[storedAnnotationsSymbol]) {\n // die(\n // `No annotations were passed to makeObservable, but no decorated members have been found either`\n // )\n // }\n // We need a copy as we will remove annotation from the list once it's applied.\n addHiddenProp(target, storedAnnotationsSymbol, { ...target[storedAnnotationsSymbol] })\n }\n return target[storedAnnotationsSymbol]\n}\n\nexport function is20223Decorator(context): context is DecoratorContext {\n return typeof context == \"object\" && typeof context[\"kind\"] == \"string\"\n}\n\nexport function assert20223DecoratorType(\n context: DecoratorContext,\n types: DecoratorContext[\"kind\"][]\n) {\n if (__DEV__ && !types.includes(context.kind)) {\n die(\n `The decorator applied to '${String(context.name)}' cannot be used on a ${\n context.kind\n } element`\n )\n }\n}\n","import {\n die,\n Annotation,\n hasProp,\n createDecoratorAnnotation,\n ObservableObjectAdministration,\n MakeResult\n} from \"../internal\"\n\nimport type { ClassMethodDecorator } from \"./decorator_fills\"\n\nconst OVERRIDE = \"override\"\n\nexport const override: Annotation & PropertyDecorator & ClassMethodDecorator =\n createDecoratorAnnotation({\n annotationType_: OVERRIDE,\n make_,\n extend_,\n decorate_20223_\n })\n\nexport function isOverride(annotation: Annotation): boolean {\n return annotation.annotationType_ === OVERRIDE\n}\n\nfunction make_(this: Annotation, adm: ObservableObjectAdministration, key): MakeResult {\n // Must not be plain object\n if (__DEV__ && adm.isPlainObject_) {\n die(\n `Cannot apply '${this.annotationType_}' to '${adm.name_}.${key.toString()}':` +\n `\\n'${this.annotationType_}' cannot be used on plain objects.`\n )\n }\n // Must override something\n if (__DEV__ && !hasProp(adm.appliedAnnotations_!, key)) {\n die(\n `'${adm.name_}.${key.toString()}' is annotated with '${this.annotationType_}', ` +\n `but no such annotated member was found on prototype.`\n )\n }\n return MakeResult.Cancel\n}\n\nfunction extend_(this: Annotation, adm, key, descriptor, proxyTrap): boolean {\n die(`'${this.annotationType_}' can only be used with 'makeObservable'`)\n}\n\nfunction decorate_20223_(this: Annotation, desc, context: DecoratorContext) {\n console.warn(`'${this.annotationType_}' cannot be used with decorators - this is a no-op`)\n}\n","import {\n IDerivationState_,\n IObservable,\n IDerivation,\n createInstanceofPredicate,\n endBatch,\n getNextId,\n noop,\n onBecomeObserved,\n onBecomeUnobserved,\n propagateChanged,\n reportObserved,\n startBatch,\n Lambda\n} from \"../internal\"\n\nexport const $mobx = Symbol(\"mobx administration\")\n\nexport interface IAtom extends IObservable {\n reportObserved(): boolean\n reportChanged(): void\n}\n\nexport class Atom implements IAtom {\n isPendingUnobservation_ = false // for effective unobserving. BaseAtom has true, for extra optimization, so its onBecomeUnobserved never gets called, because it's not needed\n isBeingObserved_ = false\n observers_ = new Set<IDerivation>()\n\n diffValue_ = 0\n lastAccessedBy_ = 0\n lowestObserverState_ = IDerivationState_.NOT_TRACKING_\n /**\n * Create a new atom. For debugging purposes it is recommended to give it a name.\n * The onBecomeObserved and onBecomeUnobserved callbacks can be used for resource management.\n */\n constructor(public name_ = __DEV__ ? \"Atom@\" + getNextId() : \"Atom\") {}\n\n // onBecomeObservedListeners\n public onBOL: Set<Lambda> | undefined\n // onBecomeUnobservedListeners\n public onBUOL: Set<Lambda> | undefined\n\n public onBO() {\n if (this.onBOL) {\n this.onBOL.forEach(listener => listener())\n }\n }\n\n public onBUO() {\n if (this.onBUOL) {\n this.onBUOL.forEach(listener => listener())\n }\n }\n\n /**\n * Invoke this method to notify mobx that your atom has been used somehow.\n * Returns true if there is currently a reactive context.\n */\n public reportObserved(): boolean {\n return reportObserved(this)\n }\n\n /**\n * Invoke this method _after_ this method has changed to signal mobx that all its observers should invalidate.\n */\n public reportChanged() {\n startBatch()\n propagateChanged(this)\n endBatch()\n }\n\n toString() {\n return this.name_\n }\n}\n\nexport const isAtom = createInstanceofPredicate(\"Atom\", Atom)\n\nexport function createAtom(\n name: string,\n onBecomeObservedHandler: () => void = noop,\n onBecomeUnobservedHandler: () => void = noop\n): IAtom {\n const atom = new Atom(name)\n // default `noop` listener will not initialize the hook Set\n if (onBecomeObservedHandler !== noop) {\n onBecomeObserved(atom, onBecomeObservedHandler)\n }\n\n if (onBecomeUnobservedHandler !== noop) {\n onBecomeUnobserved(atom, onBecomeUnobservedHandler)\n }\n return atom\n}\n","import {\n IComputedValue,\n IObservable,\n IObservableArray,\n Lambda,\n ObservableMap,\n getAtom,\n ObservableSet,\n isFunction,\n IObservableValue\n} from \"../internal\"\n\nconst ON_BECOME_OBSERVED = \"onBO\"\nconst ON_BECOME_UNOBSERVED = \"onBUO\"\n\nexport function onBecomeObserved(\n value:\n | IObservable\n | IComputedValue<any>\n | IObservableArray<any>\n | ObservableMap<any, any>\n | ObservableSet<any>\n | IObservableValue<any>,\n listener: Lambda\n): Lambda\nexport function onBecomeObserved<K, V = any>(\n value: ObservableMap<K, V> | Object,\n property: K,\n listener: Lambda\n): Lambda\nexport function onBecomeObserved(thing, arg2, arg3?): Lambda {\n return interceptHook(ON_BECOME_OBSERVED, thing, arg2, arg3)\n}\n\nexport function onBecomeUnobserved(\n value:\n | IObservable\n | IComputedValue<any>\n | IObservableArray<any>\n | ObservableMap<any, any>\n | ObservableSet<any>\n | IObservableValue<any>,\n listener: Lambda\n): Lambda\nexport function onBecomeUnobserved<K, V = any>(\n value: ObservableMap<K, V> | Object,\n property: K,\n listener: Lambda\n): Lambda\nexport function onBecomeUnobserved(thing, arg2, arg3?): Lambda {\n return interceptHook(ON_BECOME_UNOBSERVED, thing, arg2, arg3)\n}\n\nfunction interceptHook(hook: \"onBO\" | \"onBUO\", thing, arg2, arg3) {\n const atom: IObservable =\n typeof arg3 === \"function\" ? getAtom(thing, arg2) : (getAtom(thing) as any)\n const cb = isFunction(arg3) ? arg3 : arg2\n const listenersKey = `${hook}L` as \"onBOL\" | \"onBUOL\"\n\n if (atom[listenersKey]) {\n atom[listenersKey]!.add(cb)\n } else {\n atom[listenersKey] = new Set<Lambda>([cb])\n }\n\n return function () {\n const hookListeners = atom[listenersKey]\n if (hookListeners) {\n hookListeners.delete(cb)\n if (hookListeners.size === 0) {\n delete atom[listenersKey]\n }\n }\n }\n}\n","import { deepEqual } from \"../internal\"\n\nexport interface IEqualsComparer<T> {\n (a: T, b: T): boolean\n}\n\nfunction identityComparer(a: any, b: any): boolean {\n return a === b\n}\n\nfunction structuralComparer(a: any, b: any): boolean {\n return deepEqual(a, b)\n}\n\nfunction shallowComparer(a: any, b: any): boolean {\n return deepEqual(a, b, 1)\n}\n\nfunction defaultComparer(a: any, b: any): boolean {\n if (Object.is) {\n return Object.is(a, b)\n }\n\n return a === b ? a !== 0 || 1 / a === 1 / b : a !== a && b !== b\n}\n\nexport const comparer = {\n identity: identityComparer,\n structural: structuralComparer,\n default: defaultComparer,\n shallow: shallowComparer\n}\n","import {\n deepEqual,\n isES6Map,\n isES6Set,\n isObservable,\n isObservableArray,\n isObservableMap,\n isObservableSet,\n isObservableObject,\n isPlainObject,\n observable,\n die,\n isAction,\n autoAction,\n flow,\n isFlow,\n isGenerator\n} from \"../internal\"\n\nexport interface IEnhancer<T> {\n (newValue: T, oldValue: T | undefined, name: string): T\n}\n\nexport function deepEnhancer(v, _, name) {\n // it is an observable already, done\n if (isObservable(v)) {\n return v\n }\n\n // something that can be converted and mutated?\n if (Array.isArray(v)) {\n return observable.array(v, { name })\n }\n if (isPlainObject(v)) {\n return observable.object(v, undefined, { name })\n }\n if (isES6Map(v)) {\n return observable.map(v, { name })\n }\n if (isES6Set(v)) {\n return observable.set(v, { name })\n }\n if (typeof v === \"function\" && !isAction(v) && !isFlow(v)) {\n if (isGenerator(v)) {\n return flow(v)\n } else {\n return autoAction(name, v)\n }\n }\n return v\n}\n\nexport function shallowEnhancer(v, _, name): any {\n if (v === undefined || v === null) {\n return v\n }\n if (isObservableObject(v) || isObservableArray(v) || isObservableMap(v) || isObservableSet(v)) {\n return v\n }\n if (Array.isArray(v)) {\n return observable.array(v, { name, deep: false })\n }\n if (isPlainObject(v)) {\n return observable.object(v, undefined, { name, deep: false })\n }\n if (isES6Map(v)) {\n return observable.map(v, { name, deep: false })\n }\n if (isES6Set(v)) {\n return observable.set(v, { name, deep: false })\n }\n\n if (__DEV__) {\n die(\n \"The shallow modifier / decorator can only used in combination with arrays, objects, maps and sets\"\n )\n }\n}\n\nexport function referenceEnhancer(newValue?) {\n // never turn into an observable\n return newValue\n}\n\nexport function refStructEnhancer(v, oldValue): any {\n if (__DEV__ && isObservable(v)) {\n die(`observable.struct should not be used with observable values`)\n }\n if (deepEqual(v, oldValue)) {\n return oldValue\n }\n return v\n}\n","import {\n ObservableObjectAdministration,\n createAction,\n isAction,\n defineProperty,\n die,\n isFunction,\n Annotation,\n globalState,\n MakeResult,\n assert20223DecoratorType,\n storeAnnotation\n} from \"../internal\"\n\nexport function createActionAnnotation(name: string, options?: object): Annotation {\n return {\n annotationType_: name,\n options_: options,\n make_,\n extend_,\n decorate_20223_\n }\n}\n\nfunction make_(\n this: Annotation,\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n source: object\n): MakeResult {\n // bound\n if (this.options_?.bound) {\n return this.extend_(adm, key, descriptor, false) === null\n ? MakeResult.Cancel\n : MakeResult.Break\n }\n // own\n if (source === adm.target_) {\n return this.extend_(adm, key, descriptor, false) === null\n ? MakeResult.Cancel\n : MakeResult.Continue\n }\n // prototype\n if (isAction(descriptor.value)) {\n // A prototype could have been annotated already by other constructor,\n // rest of the proto chain must be annotated already\n return MakeResult.Break\n }\n const actionDescriptor = createActionDescriptor(adm, this, key, descriptor, false)\n defineProperty(source, key, actionDescriptor)\n return MakeResult.Continue\n}\n\nfunction extend_(\n this: Annotation,\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n proxyTrap: boolean\n): boolean | null {\n const actionDescriptor = createActionDescriptor(adm, this, key, descriptor)\n return adm.defineProperty_(key, actionDescriptor, proxyTrap)\n}\n\nfunction decorate_20223_(this: Annotation, mthd, context: DecoratorContext) {\n if (__DEV__) {\n assert20223DecoratorType(context, [\"method\", \"field\"])\n }\n const { kind, name, addInitializer } = context\n const ann = this\n\n const _createAction = m =>\n createAction(ann.options_?.name ?? name!.toString(), m, ann.options_?.autoAction ?? false)\n\n // Backwards/Legacy behavior, expects makeObservable(this)\n if (kind == \"field\") {\n addInitializer(function () {\n storeAnnotation(this, name, ann)\n })\n return\n }\n\n if (kind == \"method\") {\n if (!isAction(mthd)) {\n mthd = _createAction(mthd)\n }\n\n if (this.options_?.bound) {\n addInitializer(function () {\n const self = this as any\n const bound = self[name].bind(self)\n bound.isMobxAction = true\n self[name] = bound\n })\n }\n\n return mthd\n }\n\n die(\n `Cannot apply '${ann.annotationType_}' to '${String(name)}' (kind: ${kind}):` +\n `\\n'${ann.annotationType_}' can only be used on properties with a function value.`\n )\n}\n\nfunction assertActionDescriptor(\n adm: ObservableObjectAdministration,\n { annotationType_ }: Annotation,\n key: PropertyKey,\n { value }: PropertyDescriptor\n) {\n if (__DEV__ && !isFunction(value)) {\n die(\n `Cannot apply '${annotationType_}' to '${adm.name_}.${key.toString()}':` +\n `\\n'${annotationType_}' can only be used on properties with a function value.`\n )\n }\n}\n\nexport function createActionDescriptor(\n adm: ObservableObjectAdministration,\n annotation: Annotation,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n // provides ability to disable safeDescriptors for prototypes\n safeDescriptors: boolean = globalState.safeDescriptors\n) {\n assertActionDescriptor(adm, annotation, key, descriptor)\n let { value } = descriptor\n if (annotation.options_?.bound) {\n value = value.bind(adm.proxy_ ?? adm.target_)\n }\n return {\n value: createAction(\n annotation.options_?.name ?? key.toString(),\n value,\n annotation.options_?.autoAction ?? false,\n // https://github.com/mobxjs/mobx/discussions/3140\n annotation.options_?.bound ? adm.proxy_ ?? adm.target_ : undefined\n ),\n // Non-configurable for classes\n // prevents accidental field redefinition in subclass\n configurable: safeDescriptors ? adm.isPlainObject_ : true,\n // https://github.com/mobxjs/mobx/pull/2641#issuecomment-737292058\n enumerable: false,\n // Non-obsevable, therefore non-writable\n // Also prevents rewriting in subclass constructor\n writable: safeDescriptors ? false : true\n }\n}\n","import {\n ObservableObjectAdministration,\n Annotation,\n defineProperty,\n die,\n flow,\n isFlow,\n isFunction,\n globalState,\n MakeResult,\n hasProp,\n assert20223DecoratorType\n} from \"../internal\"\n\nexport function createFlowAnnotation(name: string, options?: object): Annotation {\n return {\n annotationType_: name,\n options_: options,\n make_,\n extend_,\n decorate_20223_\n }\n}\n\nfunction make_(\n this: Annotation,\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n source: object\n): MakeResult {\n // own\n if (source === adm.target_) {\n return this.extend_(adm, key, descriptor, false) === null\n ? MakeResult.Cancel\n : MakeResult.Continue\n }\n // prototype\n // bound - must annotate protos to support super.flow()\n if (this.options_?.bound && (!hasProp(adm.target_, key) || !isFlow(adm.target_[key]))) {\n if (this.extend_(adm, key, descriptor, false) === null) {\n return MakeResult.Cancel\n }\n }\n if (isFlow(descriptor.value)) {\n // A prototype could have been annotated already by other constructor,\n // rest of the proto chain must be annotated already\n return MakeResult.Break\n }\n const flowDescriptor = createFlowDescriptor(adm, this, key, descriptor, false, false)\n defineProperty(source, key, flowDescriptor)\n return MakeResult.Continue\n}\n\nfunction extend_(\n this: Annotation,\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n proxyTrap: boolean\n): boolean | null {\n const flowDescriptor = createFlowDescriptor(adm, this, key, descriptor, this.options_?.bound)\n return adm.defineProperty_(key, flowDescriptor, proxyTrap)\n}\n\nfunction decorate_20223_(this: Annotation, mthd, context: ClassMethodDecoratorContext) {\n if (__DEV__) {\n assert20223DecoratorType(context, [\"method\"])\n }\n const { name, addInitializer } = context\n\n if (!isFlow(mthd)) {\n mthd = flow(mthd)\n }\n\n if (this.options_?.bound) {\n addInitializer(function () {\n const self = this as any\n const bound = self[name].bind(self)\n bound.isMobXFlow = true\n self[name] = bound\n })\n }\n\n return mthd\n}\n\nfunction assertFlowDescriptor(\n adm: ObservableObjectAdministration,\n { annotationType_ }: Annotation,\n key: PropertyKey,\n { value }: PropertyDescriptor\n) {\n if (__DEV__ && !isFunction(value)) {\n die(\n `Cannot apply '${annotationType_}' to '${adm.name_}.${key.toString()}':` +\n `\\n'${annotationType_}' can only be used on properties with a generator function value.`\n )\n }\n}\n\nfunction createFlowDescriptor(\n adm: ObservableObjectAdministration,\n annotation: Annotation,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n bound: boolean,\n // provides ability to disable safeDescriptors for prototypes\n safeDescriptors: boolean = globalState.safeDescriptors\n): PropertyDescriptor {\n assertFlowDescriptor(adm, annotation, key, descriptor)\n let { value } = descriptor\n // In case of flow.bound, the descriptor can be from already annotated prototype\n if (!isFlow(value)) {\n value = flow(value)\n }\n if (bound) {\n // We do not keep original function around, so we bind the existing flow\n value = value.bind(adm.proxy_ ?? adm.target_)\n // This is normally set by `flow`, but `bind` returns new function...\n value.isMobXFlow = true\n }\n return {\n value,\n // Non-configurable for classes\n // prevents accidental field redefinition in subclass\n configurable: safeDescriptors ? adm.isPlainObject_ : true,\n // https://github.com/mobxjs/mobx/pull/2641#issuecomment-737292058\n enumerable: false,\n // Non-obsevable, therefore non-writable\n // Also prevents rewriting in subclass constructor\n writable: safeDescriptors ? false : true\n }\n}\n","import {\n ObservableObjectAdministration,\n die,\n Annotation,\n MakeResult,\n assert20223DecoratorType,\n $mobx,\n asObservableObject,\n ComputedValue\n} from \"../internal\"\n\nexport function createComputedAnnotation(name: string, options?: object): Annotation {\n return {\n annotationType_: name,\n options_: options,\n make_,\n extend_,\n decorate_20223_\n }\n}\n\nfunction make_(\n this: Annotation,\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor\n): MakeResult {\n return this.extend_(adm, key, descriptor, false) === null ? MakeResult.Cancel : MakeResult.Break\n}\n\nfunction extend_(\n this: Annotation,\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n proxyTrap: boolean\n): boolean | null {\n assertComputedDescriptor(adm, this, key, descriptor)\n return adm.defineComputedProperty_(\n key,\n {\n ...this.options_,\n get: descriptor.get,\n set: descriptor.set\n },\n proxyTrap\n )\n}\n\nfunction decorate_20223_(this: Annotation, get, context: ClassGetterDecoratorContext) {\n if (__DEV__) {\n assert20223DecoratorType(context, [\"getter\"])\n }\n const ann = this\n const { name: key, addInitializer } = context\n\n addInitializer(function () {\n const adm: ObservableObjectAdministration = asObservableObject(this)[$mobx]\n const options = {\n ...ann.options_,\n get,\n context: this\n }\n options.name ||= __DEV__\n ? `${adm.name_}.${key.toString()}`\n : `ObservableObject.${key.toString()}`\n adm.values_.set(key, new ComputedValue(options))\n })\n\n return function () {\n return this[$mobx].getObservablePropValue_(key)\n }\n}\n\nfunction assertComputedDescriptor(\n adm: ObservableObjectAdministration,\n { annotationType_ }: Annotation,\n key: PropertyKey,\n { get }: PropertyDescriptor\n) {\n if (__DEV__ && !get) {\n die(\n `Cannot apply '${annotationType_}' to '${adm.name_}.${key.toString()}':` +\n `\\n'${annotationType_}' can only be used on getter(+setter) properties.`\n )\n }\n}\n","import {\n ObservableObjectAdministration,\n deepEnhancer,\n die,\n Annotation,\n MakeResult,\n assert20223DecoratorType,\n ObservableValue,\n asObservableObject,\n $mobx\n} from \"../internal\"\n\nexport function createObservableAnnotation(name: string, options?: object): Annotation {\n return {\n annotationType_: name,\n options_: options,\n make_,\n extend_,\n decorate_20223_\n }\n}\n\nfunction make_(\n this: Annotation,\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor\n): MakeResult {\n return this.extend_(adm, key, descriptor, false) === null ? MakeResult.Cancel : MakeResult.Break\n}\n\nfunction extend_(\n this: Annotation,\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n proxyTrap: boolean\n): boolean | null {\n assertObservableDescriptor(adm, this, key, descriptor)\n return adm.defineObservableProperty_(\n key,\n descriptor.value,\n this.options_?.enhancer ?? deepEnhancer,\n proxyTrap\n )\n}\n\nfunction decorate_20223_(\n this: Annotation,\n desc,\n context: ClassAccessorDecoratorContext | ClassFieldDecoratorContext\n) {\n if (__DEV__) {\n if (context.kind === \"field\") {\n throw die(\n `Please use \\`@observable accessor ${String(\n context.name\n )}\\` instead of \\`@observable ${String(context.name)}\\``\n )\n }\n assert20223DecoratorType(context, [\"accessor\"])\n }\n\n const ann = this\n const { kind, name } = context\n\n // The laziness here is not ideal... It's a workaround to how 2022.3 Decorators are implemented:\n // `addInitializer` callbacks are executed _before_ any accessors are defined (instead of the ideal-for-us right after each).\n // This means that, if we were to do our stuff in an `addInitializer`, we'd attempt to read a private slot\n // before it has been initialized. The runtime doesn't like that and throws a `Cannot read private member\n // from an object whose class did not declare it` error.\n // TODO: it seems that this will not be required anymore in the final version of the spec\n // See TODO: link\n const initializedObjects = new WeakSet()\n\n function initializeObservable(target, value) {\n const adm: ObservableObjectAdministration = asObservableObject(target)[$mobx]\n const observable = new ObservableValue(\n value,\n ann.options_?.enhancer ?? deepEnhancer,\n __DEV__ ? `${adm.name_}.${name.toString()}` : `ObservableObject.${name.toString()}`,\n false\n )\n adm.values_.set(name, observable)\n initializedObjects.add(target)\n }\n\n if (kind == \"accessor\") {\n return {\n get() {\n if (!initializedObjects.has(this)) {\n initializeObservable(this, desc.get.call(this))\n }\n return this[$mobx].getObservablePropValue_(name)\n },\n set(value) {\n if (!initializedObjects.has(this)) {\n initializeObservable(this, value)\n }\n return this[$mobx].setObservablePropValue_(name, value)\n },\n init(value) {\n if (!initializedObjects.has(this)) {\n initializeObservable(this, value)\n }\n return value\n }\n }\n }\n\n return\n}\n\nfunction assertObservableDescriptor(\n adm: ObservableObjectAdministration,\n { annotationType_ }: Annotation,\n key: PropertyKey,\n descriptor: PropertyDescriptor\n) {\n if (__DEV__ && !(\"value\" in descriptor)) {\n die(\n `Cannot apply '${annotationType_}' to '${adm.name_}.${key.toString()}':` +\n `\\n'${annotationType_}' cannot be used on getter/setter properties`\n )\n }\n}\n","import {\n ObservableObjectAdministration,\n observable,\n Annotation,\n defineProperty,\n createAction,\n globalState,\n flow,\n computed,\n autoAction,\n isGenerator,\n MakeResult,\n die\n} from \"../internal\"\n\nconst AUTO = \"true\"\n\nexport const autoAnnotation: Annotation = createAutoAnnotation()\n\nexport function createAutoAnnotation(options?: object): Annotation {\n return {\n annotationType_: AUTO,\n options_: options,\n make_,\n extend_,\n decorate_20223_\n }\n}\n\nfunction make_(\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n source: object\n): MakeResult {\n // getter -> computed\n if (descriptor.get) {\n return computed.make_(adm, key, descriptor, source)\n }\n // lone setter -> action setter\n if (descriptor.set) {\n // TODO make action applicable to setter and delegate to action.make_\n const set = createAction(key.toString(), descriptor.set) as (v: any) => void\n // own\n if (source === adm.target_) {\n return adm.defineProperty_(key, {\n configurable: globalState.safeDescriptors ? adm.isPlainObject_ : true,\n set\n }) === null\n ? MakeResult.Cancel\n : MakeResult.Continue\n }\n // proto\n defineProperty(source, key, {\n configurable: true,\n set\n })\n return MakeResult.Continue\n }\n // function on proto -> autoAction/flow\n if (source !== adm.target_ && typeof descriptor.value === \"function\") {\n if (isGenerator(descriptor.value)) {\n const flowAnnotation = this.options_?.autoBind ? flow.bound : flow\n return flowAnnotation.make_(adm, key, descriptor, source)\n }\n const actionAnnotation = this.options_?.autoBind ? autoAction.bound : autoAction\n return actionAnnotation.make_(adm, key, descriptor, source)\n }\n // other -> observable\n // Copy props from proto as well, see test:\n // \"decorate should work with Object.create\"\n let observableAnnotation = this.options_?.deep === false ? observable.ref : observable\n // if function respect autoBind option\n if (typeof descriptor.value === \"function\" && this.options_?.autoBind) {\n descriptor.value = descriptor.value.bind(adm.proxy_ ?? adm.target_)\n }\n return observableAnnotation.make_(adm, key, descriptor, source)\n}\n\nfunction extend_(\n adm: ObservableObjectAdministration,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n proxyTrap: boolean\n): boolean | null {\n // getter -> computed\n if (descriptor.get) {\n return computed.extend_(adm, key, descriptor, proxyTrap)\n }\n // lone setter -> action setter\n if (descriptor.set) {\n // TODO make action applicable to setter and delegate to action.extend_\n return adm.defineProperty_(\n key,\n {\n configurable: globalState.safeDescriptors ? adm.isPlainObject_ : true,\n set: createAction(key.toString(), descriptor.set) as (v: any) => void\n },\n proxyTrap\n )\n }\n // other -> observable\n // if function respect autoBind option\n if (typeof descriptor.value === \"function\" && this.options_?.autoBind) {\n descriptor.value = descriptor.value.bind(adm.proxy_ ?? adm.target_)\n }\n let observableAnnotation = this.options_?.deep === false ? observable.ref : observable\n return observableAnnotation.extend_(adm, key, descriptor, proxyTrap)\n}\n\nfunction decorate_20223_(this: Annotation, desc, context: ClassGetterDecoratorContext) {\n die(`'${this.annotationType_}' cannot be used as a decorator`)\n}\n","import {\n IEnhancer,\n IEqualsComparer,\n IObservableArray,\n IObservableMapInitialValues,\n IObservableSetInitialValues,\n IObservableValue,\n ObservableMap,\n ObservableSet,\n ObservableValue,\n asDynamicObservableObject,\n createObservableArray,\n deepEnhancer,\n extendObservable,\n isES6Map,\n isES6Set,\n isObservable,\n isPlainObject,\n referenceEnhancer,\n Annotation,\n shallowEnhancer,\n refStructEnhancer,\n AnnotationsMap,\n asObservableObject,\n storeAnnotation,\n createDecoratorAnnotation,\n createLegacyArray,\n globalState,\n assign,\n isStringish,\n createObservableAnnotation,\n createAutoAnnotation,\n is20223Decorator,\n initObservable\n} from \"../internal\"\n\nimport type { ClassAccessorDecorator, ClassFieldDecorator } from \"../types/decorator_fills\"\n\nexport const OBSERVABLE = \"observable\"\nexport const OBSERVABLE_REF = \"observable.ref\"\nexport const OBSERVABLE_SHALLOW = \"observable.shallow\"\nexport const OBSERVABLE_STRUCT = \"observable.struct\"\n\nexport type CreateObservableOptions = {\n name?: string\n equals?: IEqualsComparer<any>\n deep?: boolean\n defaultDecorator?: Annotation\n proxy?: boolean\n autoBind?: boolean\n}\n\n// Predefined bags of create observable options, to avoid allocating temporarily option objects\n// in the majority of cases\nexport const defaultCreateObservableOptions: CreateObservableOptions = {\n deep: true,\n name: undefined,\n defaultDecorator: undefined,\n proxy: true\n}\nObject.freeze(defaultCreateObservableOptions)\n\nexport function asCreateObservableOptions(thing: any): CreateObservableOptions {\n return thing || defaultCreateObservableOptions\n}\n\nconst observableAnnotation = createObservableAnnotation(OBSERVABLE)\nconst observableRefAnnotation = createObservableAnnotation(OBSERVABLE_REF, {\n enhancer: referenceEnhancer\n})\nconst observableShallowAnnotation = createObservableAnnotation(OBSERVABLE_SHALLOW, {\n enhancer: shallowEnhancer\n})\nconst observableStructAnnotation = createObservableAnnotation(OBSERVABLE_STRUCT, {\n enhancer: refStructEnhancer\n})\nconst observableDecoratorAnnotation =\n createDecoratorAnnotation<ClassAccessorDecorator>(observableAnnotation)\n\nexport function getEnhancerFromOptions(options: CreateObservableOptions): IEnhancer<any> {\n return options.deep === true\n ? deepEnhancer\n : options.deep === false\n ? referenceEnhancer\n : getEnhancerFromAnnotation(options.defaultDecorator)\n}\n\nexport function getAnnotationFromOptions(\n options?: CreateObservableOptions\n): Annotation | undefined {\n return options ? options.defaultDecorator ?? createAutoAnnotation(options) : undefined\n}\n\nexport function getEnhancerFromAnnotation(annotation?: Annotation): IEnhancer<any> {\n return !annotation ? deepEnhancer : annotation.options_?.enhancer ?? deepEnhancer\n}\n\n/**\n * Turns an object, array or function into a reactive structure.\n * @param v the value which should become observable.\n */\nfunction createObservable(v: any, arg2?: any, arg3?: any) {\n // @observable someProp; (2022.3 Decorators)\n if (is20223Decorator(arg2)) {\n return observableAnnotation.decorate_20223_(v, arg2)\n }\n\n // @observable someProp;\n if (isStringish(arg2)) {\n storeAnnotation(v, arg2, observableAnnotation)\n return\n }\n\n // already observable - ignore\n if (isObservable(v)) {\n return v\n }\n\n // plain object\n if (isPlainObject(v)) {\n return observable.object(v, arg2, arg3)\n }\n\n // Array\n if (Array.isArray(v)) {\n return observable.array(v, arg2)\n }\n\n // Map\n if (isES6Map(v)) {\n return observable.map(v, arg2)\n }\n\n // Set\n if (isES6Set(v)) {\n return observable.set(v, arg2)\n }\n\n // other object - ignore\n if (typeof v === \"object\" && v !== null) {\n return v\n }\n\n // anything else\n return observable.box(v, arg2)\n}\nassign(createObservable, observableDecoratorAnnotation)\n\nexport interface IObservableValueFactory {\n <T>(value: T, options?: CreateObservableOptions): IObservableValue<T>\n <T>(value?: T, options?: CreateObservableOptions): IObservableValue<T | undefined>\n}\n\nexport interface IObservableFactory\n extends Annotation,\n PropertyDecorator,\n ClassAccessorDecorator,\n ClassFieldDecorator {\n // TODO: remove ClassFieldDecorator, this is only temporarily support for legacy decorators\n <T = any>(value: T[], options?: CreateObservableOptions): IObservableArray<T>\n <T = any>(value: Set<T>, options?: CreateObservableOptions): ObservableSet<T>\n <K = any, V = any>(value: Map<K, V>, options?: CreateObservableOptions): ObservableMap<K, V>\n <T extends object>(\n value: T,\n decorators?: AnnotationsMap<T, never>,\n options?: CreateObservableOptions\n ): T\n\n box: IObservableValueFactory\n array: <T = any>(initialValues?: T[], options?: CreateObservableOptions) => IObservableArray<T>\n set: <T = any>(\n initialValues?: IObservableSetInitialValues<T>,\n options?: CreateObservableOptions\n ) => ObservableSet<T>\n map: <K = any, V = any>(\n initialValues?: IObservableMapInitialValues<K, V>,\n options?: CreateObservableOptions\n ) => ObservableMap<K, V>\n object: <T = any>(\n props: T,\n decorators?: AnnotationsMap<T, never>,\n options?: CreateObservableOptions\n ) => T\n\n /**\n * Decorator that creates an observable that only observes the references, but doesn't try to turn the assigned value into an observable.ts.\n */\n ref: Annotation & PropertyDecorator & ClassAccessorDecorator & ClassFieldDecorator\n /**\n * Decorator that creates an observable converts its value (objects, maps or arrays) into a shallow observable structure\n */\n shallow: Annotation & PropertyDecorator & ClassAccessorDecorator & ClassFieldDecorator\n deep: Annotation & PropertyDecorator & ClassAccessorDecorator & ClassFieldDecorator\n struct: Annotation & PropertyDecorator & ClassAccessorDecorator & ClassFieldDecorator\n}\n\nconst observableFactories: IObservableFactory = {\n box<T = any>(value: T, options?: CreateObservableOptions): IObservableValue<T> {\n const o = asCreateObservableOptions(options)\n return new ObservableValue(value, getEnhancerFromOptions(o), o.name, true, o.equals)\n },\n array<T = any>(initialValues?: T[], options?: CreateObservableOptions): IObservableArray<T> {\n const o = asCreateObservableOptions(options)\n return (\n globalState.useProxies === false || o.proxy === false\n ? createLegacyArray\n : createObservableArray\n )(initialValues, getEnhancerFromOptions(o), o.name)\n },\n map<K = any, V = any>(\n initialValues?: IObservableMapInitialValues<K, V>,\n options?: CreateObservableOptions\n ): ObservableMap<K, V> {\n const o = asCreateObservableOptions(options)\n return new ObservableMap<K, V>(initialValues, getEnhancerFromOptions(o), o.name)\n },\n set<T = any>(\n initialValues?: IObservableSetInitialValues<T>,\n options?: CreateObservableOptions\n ): ObservableSet<T> {\n const o = asCreateObservableOptions(options)\n return new ObservableSet<T>(initialValues, getEnhancerFromOptions(o), o.name)\n },\n object<T extends object = any>(\n props: T,\n decorators?: AnnotationsMap<T, never>,\n options?: CreateObservableOptions\n ): T {\n return initObservable(() =>\n extendObservable(\n globalState.useProxies === false || options?.proxy === false\n ? asObservableObject({}, options)\n : asDynamicObservableObject({}, options),\n props,\n decorators\n )\n )\n },\n ref: createDecoratorAnnotation(observableRefAnnotation),\n shallow: createDecoratorAnnotation(observableShallowAnnotation),\n deep: observableDecoratorAnnotation,\n struct: createDecoratorAnnotation(observableStructAnnotation)\n} as any\n\n// eslint-disable-next-line\nexport var observable: IObservableFactory = assign(createObservable, observableFactories)\n","import {\n $mobx,\n IIsObservableObject,\n ObservableObjectAdministration,\n warnAboutProxyRequirement,\n assertProxies,\n die,\n isStringish,\n globalState,\n CreateObservableOptions,\n asObservableObject\n} from \"../internal\"\n\nfunction getAdm(target): ObservableObjectAdministration {\n return target[$mobx]\n}\n\n// Optimization: we don't need the intermediate objects and could have a completely custom administration for DynamicObjects,\n// and skip either the internal values map, or the base object with its property descriptors!\nconst objectProxyTraps: ProxyHandler<any> = {\n has(target: IIsObservableObject, name: PropertyKey): boolean {\n if (__DEV__ && globalState.trackingDerivation) {\n warnAboutProxyRequirement(\n \"detect new properties using the 'in' operator. Use 'has' from 'mobx' instead.\"\n )\n }\n return getAdm(target).has_(name)\n },\n get(target: IIsObservableObject, name: PropertyKey): any {\n return getAdm(target).get_(name)\n },\n set(target: IIsObservableObject, name: PropertyKey, value: any): boolean {\n if (!isStringish(name)) {\n return false\n }\n if (__DEV__ && !getAdm(target).values_.has(name)) {\n warnAboutProxyRequirement(\n \"add a new observable property through direct assignment. Use 'set' from 'mobx' instead.\"\n )\n }\n // null (intercepted) -> true (success)\n return getAdm(target).set_(name, value, true) ?? true\n },\n deleteProperty(target: IIsObservableObject, name: PropertyKey): boolean {\n if (__DEV__) {\n warnAboutProxyRequirement(\n \"delete properties from an observable object. Use 'remove' from 'mobx' instead.\"\n )\n }\n if (!isStringish(name)) {\n return false\n }\n // null (intercepted) -> true (success)\n return getAdm(target).delete_(name, true) ?? true\n },\n defineProperty(\n target: IIsObservableObject,\n name: PropertyKey,\n descriptor: PropertyDescriptor\n ): boolean {\n if (__DEV__) {\n warnAboutProxyRequirement(\n \"define property on an observable object. Use 'defineProperty' from 'mobx' instead.\"\n )\n }\n // null (intercepted) -> true (success)\n return getAdm(target).defineProperty_(name, descriptor) ?? true\n },\n ownKeys(target: IIsObservableObject): ArrayLike<string | symbol> {\n if (__DEV__ && globalState.trackingDerivation) {\n warnAboutProxyRequirement(\n \"iterate keys to detect added / removed properties. Use 'keys' from 'mobx' instead.\"\n )\n }\n return getAdm(target).ownKeys_()\n },\n preventExtensions(target) {\n die(13)\n }\n}\n\nexport function asDynamicObservableObject(\n target: any,\n options?: CreateObservableOptions\n): IIsObservableObject {\n assertProxies()\n target = asObservableObject(target, options)\n return (target[$mobx].proxy_ ??= new Proxy(target, objectProxyTraps))\n}\n","import {\n ComputedValue,\n IComputedValueOptions,\n Annotation,\n storeAnnotation,\n createDecoratorAnnotation,\n isStringish,\n isPlainObject,\n isFunction,\n die,\n IComputedValue,\n createComputedAnnotation,\n comparer,\n is20223Decorator\n} from \"../internal\"\n\nimport type { ClassGetterDecorator } from \"../types/decorator_fills\"\n\nexport const COMPUTED = \"computed\"\nexport const COMPUTED_STRUCT = \"computed.struct\"\n\nexport interface IComputedFactory extends Annotation, PropertyDecorator, ClassGetterDecorator {\n // @computed(opts)\n <T>(options: IComputedValueOptions<T>): Annotation & PropertyDecorator & ClassGetterDecorator\n // computed(fn, opts)\n <T>(func: () => T, options?: IComputedValueOptions<T>): IComputedValue<T>\n\n struct: Annotation & PropertyDecorator & ClassGetterDecorator\n}\n\nconst computedAnnotation = createComputedAnnotation(COMPUTED)\nconst computedStructAnnotation = createComputedAnnotation(COMPUTED_STRUCT, {\n equals: comparer.structural\n})\n\n/**\n * Decorator for class properties: @computed get value() { return expr; }.\n * For legacy purposes also invokable as ES5 observable created: `computed(() => expr)`;\n */\nexport const computed: IComputedFactory = function computed(arg1, arg2) {\n if (is20223Decorator(arg2)) {\n // @computed (2022.3 Decorators)\n return computedAnnotation.decorate_20223_(arg1, arg2)\n }\n if (isStringish(arg2)) {\n // @computed\n return storeAnnotation(arg1, arg2, computedAnnotation)\n }\n if (isPlainObject(arg1)) {\n // @computed({ options })\n return createDecoratorAnnotation(createComputedAnnotation(COMPUTED, arg1))\n }\n\n // computed(expr, options?)\n if (__DEV__) {\n if (!isFunction(arg1)) {\n die(\"First argument to `computed` should be an expression.\")\n }\n if (isFunction(arg2)) {\n die(\n \"A setter as second argument is no longer supported, use `{ set: fn }` option instead\"\n )\n }\n }\n const opts: IComputedValueOptions<any> = isPlainObject(arg2) ? arg2 : {}\n opts.get = arg1\n opts.name ||= arg1.name || \"\" /* for generated name */\n\n return new ComputedValue(opts)\n} as any\n\nObject.assign(computed, computedAnnotation)\n\ncomputed.struct = createDecoratorAnnotation(computedStructAnnotation)\n","import {\n IDerivation,\n endBatch,\n globalState,\n isSpyEnabled,\n spyReportEnd,\n spyReportStart,\n startBatch,\n untrackedEnd,\n untrackedStart,\n isFunction,\n allowStateReadsStart,\n allowStateReadsEnd,\n ACTION,\n EMPTY_ARRAY,\n die,\n getDescriptor,\n defineProperty\n} from \"../internal\"\n\n// we don't use globalState for these in order to avoid possible issues with multiple\n// mobx versions\nlet currentActionId = 0\nlet nextActionId = 1\nconst isFunctionNameConfigurable = getDescriptor(() => {}, \"name\")?.configurable ?? false\n\n// we can safely recycle this object\nconst tmpNameDescriptor: PropertyDescriptor = {\n value: \"action\",\n configurable: true,\n writable: false,\n enumerable: false\n}\n\nexport function createAction(\n actionName: string,\n fn: Function,\n autoAction: boolean = false,\n ref?: Object\n): Function {\n if (__DEV__) {\n if (!isFunction(fn)) {\n die(\"`action` can only be invoked on functions\")\n }\n if (typeof actionName !== \"string\" || !actionName) {\n die(`actions should have valid names, got: '${actionName}'`)\n }\n }\n function res() {\n return executeAction(actionName, autoAction, fn, ref || this, arguments)\n }\n res.isMobxAction = true\n res.toString = () => fn.toString()\n if (isFunctionNameConfigurable) {\n tmpNameDescriptor.value = actionName\n defineProperty(res, \"name\", tmpNameDescriptor)\n }\n return res\n}\n\nexport function executeAction(\n actionName: string,\n canRunAsDerivation: boolean,\n fn: Function,\n scope?: any,\n args?: IArguments\n) {\n const runInfo = _startAction(actionName, canRunAsDerivation, scope, args)\n try {\n return fn.apply(scope, args)\n } catch (err) {\n runInfo.error_ = err\n throw err\n } finally {\n _endAction(runInfo)\n }\n}\n\nexport interface IActionRunInfo {\n prevDerivation_: IDerivation | null\n prevAllowStateChanges_: boolean\n prevAllowStateReads_: boolean\n notifySpy_: boolean\n startTime_: number\n error_?: any\n parentActionId_: number\n actionId_: number\n runAsAction_?: boolean\n}\n\nexport function _startAction(\n actionName: string,\n canRunAsDerivation: boolean, // true for autoAction\n scope: any,\n args?: IArguments\n): IActionRunInfo {\n const notifySpy_ = __DEV__ && isSpyEnabled() && !!actionName\n let startTime_: number = 0\n if (__DEV__ && notifySpy_) {\n startTime_ = Date.now()\n const flattenedArgs = args ? Array.from(args) : EMPTY_ARRAY\n spyReportStart({\n type: ACTION,\n name: actionName,\n object: scope,\n arguments: flattenedArgs\n })\n }\n const prevDerivation_ = globalState.trackingDerivation\n const runAsAction = !canRunAsDerivation || !prevDerivation_\n startBatch()\n let prevAllowStateChanges_ = globalState.allowStateChanges // by default preserve previous allow\n if (runAsAction) {\n untrackedStart()\n prevAllowStateChanges_ = allowStateChangesStart(true)\n }\n const prevAllowStateReads_ = allowStateReadsStart(true)\n const runInfo = {\n runAsAction_: runAsAction,\n prevDerivation_,\n prevAllowStateChanges_,\n prevAllowStateReads_,\n notifySpy_,\n startTime_,\n actionId_: nextActionId++,\n parentActionId_: currentActionId\n }\n currentActionId = runInfo.actionId_\n return runInfo\n}\n\nexport function _endAction(runInfo: IActionRunInfo) {\n if (currentActionId !== runInfo.actionId_) {\n die(30)\n }\n currentActionId = runInfo.parentActionId_\n\n if (runInfo.error_ !== undefined) {\n globalState.suppressReactionErrors = true\n }\n allowStateChangesEnd(runInfo.prevAllowStateChanges_)\n allowStateReadsEnd(runInfo.prevAllowStateReads_)\n endBatch()\n if (runInfo.runAsAction_) {\n untrackedEnd(runInfo.prevDerivation_)\n }\n if (__DEV__ && runInfo.notifySpy_) {\n spyReportEnd({ time: Date.now() - runInfo.startTime_ })\n }\n globalState.suppressReactionErrors = false\n}\n\nexport function allowStateChanges<T>(allowStateChanges: boolean, func: () => T): T {\n const prev = allowStateChangesStart(allowStateChanges)\n try {\n return func()\n } finally {\n allowStateChangesEnd(prev)\n }\n}\n\nexport function allowStateChangesStart(allowStateChanges: boolean) {\n const prev = globalState.allowStateChanges\n globalState.allowStateChanges = allowStateChanges\n return prev\n}\n\nexport function allowStateChangesEnd(prev: boolean) {\n globalState.allowStateChanges = prev\n}\n","import {\n Atom,\n IEnhancer,\n IInterceptable,\n IEqualsComparer,\n IInterceptor,\n IListenable,\n Lambda,\n checkIfStateModificationsAreAllowed,\n comparer,\n createInstanceofPredicate,\n getNextId,\n hasInterceptors,\n hasListeners,\n interceptChange,\n isSpyEnabled,\n notifyListeners,\n registerInterceptor,\n registerListener,\n spyReport,\n spyReportEnd,\n spyReportStart,\n toPrimitive,\n globalState,\n IUNCHANGED,\n UPDATE\n} from \"../internal\"\n\nexport interface IValueWillChange<T> {\n object: IObservableValue<T>\n type: \"update\"\n newValue: T\n}\n\nexport type IValueDidChange<T = any> = {\n type: \"update\"\n observableKind: \"value\"\n object: IObservableValue<T>\n debugObjectName: string\n newValue: T\n oldValue: T | undefined\n}\nexport type IBoxDidChange<T = any> =\n | {\n type: \"create\"\n observableKind: \"value\"\n object: IObservableValue<T>\n debugObjectName: string\n newValue: T\n }\n | IValueDidChange<T>\n\nexport interface IObservableValue<T> {\n get(): T\n set(value: T): void\n}\n\nconst CREATE = \"create\"\n\nexport class ObservableValue<T>\n extends Atom\n implements IObservableValue<T>, IInterceptable<IValueWillChange<T>>, IListenable\n{\n hasUnreportedChange_ = false\n interceptors_\n changeListeners_\n value_\n dehancer: any\n\n constructor(\n value: T,\n public enhancer: IEnhancer<T>,\n public name_ = __DEV__ ? \"ObservableValue@\" + getNextId() : \"ObservableValue\",\n notifySpy = true,\n private equals: IEqualsComparer<any> = comparer.default\n ) {\n super(name_)\n this.value_ = enhancer(value, undefined, name_)\n if (__DEV__ && notifySpy && isSpyEnabled()) {\n // only notify spy if this is a stand-alone observable\n spyReport({\n type: CREATE,\n object: this,\n observableKind: \"value\",\n debugObjectName: this.name_,\n newValue: \"\" + this.value_\n })\n }\n }\n\n private dehanceValue(value: T): T {\n if (this.dehancer !== undefined) {\n return this.dehancer(value)\n }\n return value\n }\n\n public set(newValue: T) {\n const oldValue = this.value_\n newValue = this.prepareNewValue_(newValue) as any\n if (newValue !== globalState.UNCHANGED) {\n const notifySpy = isSpyEnabled()\n if (__DEV__ && notifySpy) {\n spyReportStart({\n type: UPDATE,\n object: this,\n observableKind: \"value\",\n debugObjectName: this.name_,\n newValue,\n oldValue\n })\n }\n this.setNewValue_(newValue)\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n }\n }\n\n private prepareNewValue_(newValue): T | IUNCHANGED {\n checkIfStateModificationsAreAllowed(this)\n if (hasInterceptors(this)) {\n const change = interceptChange<IValueWillChange<T>>(this, {\n object: this,\n type: UPDATE,\n newValue\n })\n if (!change) {\n return globalState.UNCHANGED\n }\n newValue = change.newValue\n }\n // apply modifier\n newValue = this.enhancer(newValue, this.value_, this.name_)\n return this.equals(this.value_, newValue) ? globalState.UNCHANGED : newValue\n }\n\n setNewValue_(newValue: T) {\n const oldValue = this.value_\n this.value_ = newValue\n this.reportChanged()\n if (hasListeners(this)) {\n notifyListeners(this, {\n type: UPDATE,\n object: this,\n newValue,\n oldValue\n })\n }\n }\n\n public get(): T {\n this.reportObserved()\n return this.dehanceValue(this.value_)\n }\n\n intercept_(handler: IInterceptor<IValueWillChange<T>>): Lambda {\n return registerInterceptor(this, handler)\n }\n\n observe_(listener: (change: IValueDidChange<T>) => void, fireImmediately?: boolean): Lambda {\n if (fireImmediately) {\n listener({\n observableKind: \"value\",\n debugObjectName: this.name_,\n object: this,\n type: UPDATE,\n newValue: this.value_,\n oldValue: undefined\n })\n }\n return registerListener(this, listener)\n }\n\n raw() {\n // used by MST ot get undehanced value\n return this.value_\n }\n\n toJSON() {\n return this.get()\n }\n\n toString() {\n return `${this.name_}[${this.value_}]`\n }\n\n valueOf(): T {\n return toPrimitive(this.get())\n }\n\n [Symbol.toPrimitive]() {\n return this.valueOf()\n }\n}\n\nexport const isObservableValue = createInstanceofPredicate(\"ObservableValue\", ObservableValue) as (\n x: any\n) => x is IObservableValue<any>\n","import {\n CaughtException,\n IDerivation,\n IDerivationState_,\n IEqualsComparer,\n IObservable,\n Lambda,\n TraceMode,\n autorun,\n clearObserving,\n comparer,\n createAction,\n createInstanceofPredicate,\n endBatch,\n getNextId,\n globalState,\n isCaughtException,\n isSpyEnabled,\n propagateChangeConfirmed,\n propagateMaybeChanged,\n reportObserved,\n shouldCompute,\n spyReport,\n startBatch,\n toPrimitive,\n trackDerivedFunction,\n untrackedEnd,\n untrackedStart,\n UPDATE,\n die,\n allowStateChangesStart,\n allowStateChangesEnd\n} from \"../internal\"\n\nexport interface IComputedValue<T> {\n get(): T\n set(value: T): void\n}\n\nexport interface IComputedValueOptions<T> {\n get?: () => T\n set?: (value: T) => void\n name?: string\n equals?: IEqualsComparer<T>\n context?: any\n requiresReaction?: boolean\n keepAlive?: boolean\n}\n\nexport type IComputedDidChange<T = any> = {\n type: \"update\"\n observableKind: \"computed\"\n object: unknown\n debugObjectName: string\n newValue: T\n oldValue: T | undefined\n}\n\n/**\n * A node in the state dependency root that observes other nodes, and can be observed itself.\n *\n * ComputedValue will remember the result of the computation for the duration of the batch, or\n * while being observed.\n *\n * During this time it will recompute only when one of its direct dependencies changed,\n * but only when it is being accessed with `ComputedValue.get()`.\n *\n * Implementation description:\n * 1. First time it's being accessed it will compute and remember result\n * give back remembered result until 2. happens\n * 2. First time any deep dependency change, propagate POSSIBLY_STALE to all observers, wait for 3.\n * 3. When it's being accessed, recompute if any shallow dependency changed.\n * if result changed: propagate STALE to all observers, that were POSSIBLY_STALE from the last step.\n * go to step 2. either way\n *\n * If at any point it's outside batch and it isn't observed: reset everything and go to 1.\n */\nexport class ComputedValue<T> implements IObservable, IComputedValue<T>, IDerivation {\n dependenciesState_ = IDerivationState_.NOT_TRACKING_\n observing_: IObservable[] = [] // nodes we are looking at. Our value depends on these nodes\n newObserving_ = null // during tracking it's an array with new observed observers\n isBeingObserved_ = false\n isPendingUnobservation_: boolean = false\n observers_ = new Set<IDerivation>()\n diffValue_ = 0\n runId_ = 0\n lastAccessedBy_ = 0\n lowestObserverState_ = IDerivationState_.UP_TO_DATE_\n unboundDepsCount_ = 0\n protected value_: T | undefined | CaughtException = new CaughtException(null)\n name_: string\n triggeredBy_?: string\n isComputing_: boolean = false // to check for cycles\n isRunningSetter_: boolean = false\n derivation: () => T // N.B: unminified as it is used by MST\n setter_?: (value: T) => void\n isTracing_: TraceMode = TraceMode.NONE\n scope_: Object | undefined\n private equals_: IEqualsComparer<any>\n private requiresReaction_: boolean | undefined\n keepAlive_: boolean\n\n /**\n * Create a new computed value based on a function expression.\n *\n * The `name` property is for debug purposes only.\n *\n * The `equals` property specifies the comparer function to use to determine if a newly produced\n * value differs from the previous value. Two comparers are provided in the library; `defaultComparer`\n * compares based on identity comparison (===), and `structuralComparer` deeply compares the structure.\n * Structural comparison can be convenient if you always produce a new aggregated object and\n * don't want to notify observers if it is structurally the same.\n * This is useful for working with vectors, mouse coordinates etc.\n */\n constructor(options: IComputedValueOptions<T>) {\n if (!options.get) {\n die(31)\n }\n this.derivation = options.get!\n this.name_ = options.name || (__DEV__ ? \"ComputedValue@\" + getNextId() : \"ComputedValue\")\n if (options.set) {\n this.setter_ = createAction(\n __DEV__ ? this.name_ + \"-setter\" : \"ComputedValue-setter\",\n options.set\n ) as any\n }\n this.equals_ =\n options.equals ||\n ((options as any).compareStructural || (options as any).struct\n ? comparer.structural\n : comparer.default)\n this.scope_ = options.context\n this.requiresReaction_ = options.requiresReaction\n this.keepAlive_ = !!options.keepAlive\n }\n\n onBecomeStale_() {\n propagateMaybeChanged(this)\n }\n\n public onBOL: Set<Lambda> | undefined\n public onBUOL: Set<Lambda> | undefined\n\n public onBO() {\n if (this.onBOL) {\n this.onBOL.forEach(listener => listener())\n }\n }\n\n public onBUO() {\n if (this.onBUOL) {\n this.onBUOL.forEach(listener => listener())\n }\n }\n\n /**\n * Returns the current value of this computed value.\n * Will evaluate its computation first if needed.\n */\n public get(): T {\n if (this.isComputing_) {\n die(32, this.name_, this.derivation)\n }\n if (\n globalState.inBatch === 0 &&\n // !globalState.trackingDerivatpion &&\n this.observers_.size === 0 &&\n !this.keepAlive_\n ) {\n if (shouldCompute(this)) {\n this.warnAboutUntrackedRead_()\n startBatch() // See perf test 'computed memoization'\n this.value_ = this.computeValue_(false)\n endBatch()\n }\n } else {\n reportObserved(this)\n if (shouldCompute(this)) {\n let prevTrackingContext = globalState.trackingContext\n if (this.keepAlive_ && !prevTrackingContext) {\n globalState.trackingContext = this\n }\n if (this.trackAndCompute()) {\n propagateChangeConfirmed(this)\n }\n globalState.trackingContext = prevTrackingContext\n }\n }\n const result = this.value_!\n\n if (isCaughtException(result)) {\n throw result.cause\n }\n return result\n }\n\n public set(value: T) {\n if (this.setter_) {\n if (this.isRunningSetter_) {\n die(33, this.name_)\n }\n this.isRunningSetter_ = true\n try {\n this.setter_.call(this.scope_, value)\n } finally {\n this.isRunningSetter_ = false\n }\n } else {\n die(34, this.name_)\n }\n }\n\n trackAndCompute(): boolean {\n // N.B: unminified as it is used by MST\n const oldValue = this.value_\n const wasSuspended =\n /* see #1208 */ this.dependenciesState_ === IDerivationState_.NOT_TRACKING_\n const newValue = this.computeValue_(true)\n\n const changed =\n wasSuspended ||\n isCaughtException(oldValue) ||\n isCaughtException(newValue) ||\n !this.equals_(oldValue, newValue)\n\n if (changed) {\n this.value_ = newValue\n\n if (__DEV__ && isSpyEnabled()) {\n spyReport({\n observableKind: \"computed\",\n debugObjectName: this.name_,\n object: this.scope_,\n type: \"update\",\n oldValue,\n newValue\n } as IComputedDidChange)\n }\n }\n\n return changed\n }\n\n computeValue_(track: boolean) {\n this.isComputing_ = true\n // don't allow state changes during computation\n const prev = allowStateChangesStart(false)\n let res: T | CaughtException\n if (track) {\n res = trackDerivedFunction(this, this.derivation, this.scope_)\n } else {\n if (globalState.disableErrorBoundaries === true) {\n res = this.derivation.call(this.scope_)\n } else {\n try {\n res = this.derivation.call(this.scope_)\n } catch (e) {\n res = new CaughtException(e)\n }\n }\n }\n allowStateChangesEnd(prev)\n this.isComputing_ = false\n return res\n }\n\n suspend_() {\n if (!this.keepAlive_) {\n clearObserving(this)\n this.value_ = undefined // don't hold on to computed value!\n if (__DEV__ && this.isTracing_ !== TraceMode.NONE) {\n console.log(\n `[mobx.trace] Computed value '${this.name_}' was suspended and it will recompute on the next access.`\n )\n }\n }\n }\n\n observe_(listener: (change: IComputedDidChange<T>) => void, fireImmediately?: boolean): Lambda {\n let firstTime = true\n let prevValue: T | undefined = undefined\n return autorun(() => {\n // TODO: why is this in a different place than the spyReport() function? in all other observables it's called in the same place\n let newValue = this.get()\n if (!firstTime || fireImmediately) {\n const prevU = untrackedStart()\n listener({\n observableKind: \"computed\",\n debugObjectName: this.name_,\n type: UPDATE,\n object: this,\n newValue,\n oldValue: prevValue\n })\n untrackedEnd(prevU)\n }\n firstTime = false\n prevValue = newValue\n })\n }\n\n warnAboutUntrackedRead_() {\n if (!__DEV__) {\n return\n }\n if (this.isTracing_ !== TraceMode.NONE) {\n console.log(\n `[mobx.trace] Computed value '${this.name_}' is being read outside a reactive context. Doing a full recompute.`\n )\n }\n if (\n typeof this.requiresReaction_ === \"boolean\"\n ? this.requiresReaction_\n : globalState.computedRequiresReaction\n ) {\n console.warn(\n `[mobx] Computed value '${this.name_}' is being read outside a reactive context. Doing a full recompute.`\n )\n }\n }\n\n toString() {\n return `${this.name_}[${this.derivation.toString()}]`\n }\n\n valueOf(): T {\n return toPrimitive(this.get())\n }\n\n [Symbol.toPrimitive]() {\n return this.valueOf()\n }\n}\n\nexport const isComputedValue = createInstanceofPredicate(\"ComputedValue\", ComputedValue)\n","import {\n IAtom,\n IDepTreeNode,\n IObservable,\n addObserver,\n globalState,\n isComputedValue,\n removeObserver\n} from \"../internal\"\n\nexport enum IDerivationState_ {\n // before being run or (outside batch and not being observed)\n // at this point derivation is not holding any data about dependency tree\n NOT_TRACKING_ = -1,\n // no shallow dependency changed since last computation\n // won't recalculate derivation\n // this is what makes mobx fast\n UP_TO_DATE_ = 0,\n // some deep dependency changed, but don't know if shallow dependency changed\n // will require to check first if UP_TO_DATE or POSSIBLY_STALE\n // currently only ComputedValue will propagate POSSIBLY_STALE\n //\n // having this state is second big optimization:\n // don't have to recompute on every dependency change, but only when it's needed\n POSSIBLY_STALE_ = 1,\n // A shallow dependency has changed since last computation and the derivation\n // will need to recompute when it's needed next.\n STALE_ = 2\n}\n\nexport enum TraceMode {\n NONE,\n LOG,\n BREAK\n}\n\n/**\n * A derivation is everything that can be derived from the state (all the atoms) in a pure manner.\n * See https://medium.com/@mweststrate/becoming-fully-reactive-an-in-depth-explanation-of-mobservable-55995262a254#.xvbh6qd74\n */\nexport interface IDerivation extends IDepTreeNode {\n observing_: IObservable[]\n newObserving_: null | IObservable[]\n dependenciesState_: IDerivationState_\n /**\n * Id of the current run of a derivation. Each time the derivation is tracked\n * this number is increased by one. This number is globally unique\n */\n runId_: number\n /**\n * amount of dependencies used by the derivation in this run, which has not been bound yet.\n */\n unboundDepsCount_: number\n onBecomeStale_(): void\n isTracing_: TraceMode\n\n /**\n * warn if the derivation has no dependencies after creation/update\n */\n requiresObservable_?: boolean\n}\n\nexport class CaughtException {\n constructor(public cause: any) {\n // Empty\n }\n}\n\nexport function isCaughtException(e: any): e is CaughtException {\n return e instanceof CaughtException\n}\n\n/**\n * Finds out whether any dependency of the derivation has actually changed.\n * If dependenciesState is 1 then it will recalculate dependencies,\n * if any dependency changed it will propagate it by changing dependenciesState to 2.\n *\n * By iterating over the dependencies in the same order that they were reported and\n * stopping on the first change, all the recalculations are only called for ComputedValues\n * that will be tracked by derivation. That is because we assume that if the first x\n * dependencies of the derivation doesn't change then the derivation should run the same way\n * up until accessing x-th dependency.\n */\nexport function shouldCompute(derivation: IDerivation): boolean {\n switch (derivation.dependenciesState_) {\n case IDerivationState_.UP_TO_DATE_:\n return false\n case IDerivationState_.NOT_TRACKING_:\n case IDerivationState_.STALE_:\n return true\n case IDerivationState_.POSSIBLY_STALE_: {\n // state propagation can occur outside of action/reactive context #2195\n const prevAllowStateReads = allowStateReadsStart(true)\n const prevUntracked = untrackedStart() // no need for those computeds to be reported, they will be picked up in trackDerivedFunction.\n const obs = derivation.observing_,\n l = obs.length\n for (let i = 0; i < l; i++) {\n const obj = obs[i]\n if (isComputedValue(obj)) {\n if (globalState.disableErrorBoundaries) {\n obj.get()\n } else {\n try {\n obj.get()\n } catch (e) {\n // we are not interested in the value *or* exception at this moment, but if there is one, notify all\n untrackedEnd(prevUntracked)\n allowStateReadsEnd(prevAllowStateReads)\n return true\n }\n }\n // if ComputedValue `obj` actually changed it will be computed and propagated to its observers.\n // and `derivation` is an observer of `obj`\n // invariantShouldCompute(derivation)\n if ((derivation.dependenciesState_ as any) === IDerivationState_.STALE_) {\n untrackedEnd(prevUntracked)\n allowStateReadsEnd(prevAllowStateReads)\n return true\n }\n }\n }\n changeDependenciesStateTo0(derivation)\n untrackedEnd(prevUntracked)\n allowStateReadsEnd(prevAllowStateReads)\n return false\n }\n }\n}\n\nexport function isComputingDerivation() {\n return globalState.trackingDerivation !== null // filter out actions inside computations\n}\n\nexport function checkIfStateModificationsAreAllowed(atom: IAtom) {\n if (!__DEV__) {\n return\n }\n const hasObservers = atom.observers_.size > 0\n // Should not be possible to change observed state outside strict mode, except during initialization, see #563\n if (\n !globalState.allowStateChanges &&\n (hasObservers || globalState.enforceActions === \"always\")\n ) {\n console.warn(\n \"[MobX] \" +\n (globalState.enforceActions\n ? \"Since strict-mode is enabled, changing (observed) observable values without using an action is not allowed. Tried to modify: \"\n : \"Side effects like changing state are not allowed at this point. Are you trying to modify state from, for example, a computed value or the render function of a React component? You can wrap side effects in 'runInAction' (or decorate functions with 'action') if needed. Tried to modify: \") +\n atom.name_\n )\n }\n}\n\nexport function checkIfStateReadsAreAllowed(observable: IObservable) {\n if (__DEV__ && !globalState.allowStateReads && globalState.observableRequiresReaction) {\n console.warn(\n `[mobx] Observable '${observable.name_}' being read outside a reactive context.`\n )\n }\n}\n\n/**\n * Executes the provided function `f` and tracks which observables are being accessed.\n * The tracking information is stored on the `derivation` object and the derivation is registered\n * as observer of any of the accessed observables.\n */\nexport function trackDerivedFunction<T>(derivation: IDerivation, f: () => T, context: any) {\n const prevAllowStateReads = allowStateReadsStart(true)\n // pre allocate array allocation + room for variation in deps\n // array will be trimmed by bindDependencies\n changeDependenciesStateTo0(derivation)\n derivation.newObserving_ = new Array(derivation.observing_.length + 100)\n derivation.unboundDepsCount_ = 0\n derivation.runId_ = ++globalState.runId\n const prevTracking = globalState.trackingDerivation\n globalState.trackingDerivation = derivation\n globalState.inBatch++\n let result\n if (globalState.disableErrorBoundaries === true) {\n result = f.call(context)\n } else {\n try {\n result = f.call(context)\n } catch (e) {\n result = new CaughtException(e)\n }\n }\n globalState.inBatch--\n globalState.trackingDerivation = prevTracking\n bindDependencies(derivation)\n\n warnAboutDerivationWithoutDependencies(derivation)\n allowStateReadsEnd(prevAllowStateReads)\n return result\n}\n\nfunction warnAboutDerivationWithoutDependencies(derivation: IDerivation) {\n if (!__DEV__) {\n return\n }\n\n if (derivation.observing_.length !== 0) {\n return\n }\n\n if (\n typeof derivation.requiresObservable_ === \"boolean\"\n ? derivation.requiresObservable_\n : globalState.reactionRequiresObservable\n ) {\n console.warn(\n `[mobx] Derivation '${derivation.name_}' is created/updated without reading any observable value.`\n )\n }\n}\n\n/**\n * diffs newObserving with observing.\n * update observing to be newObserving with unique observables\n * notify observers that become observed/unobserved\n */\nfunction bindDependencies(derivation: IDerivation) {\n // invariant(derivation.dependenciesState !== IDerivationState.NOT_TRACKING, \"INTERNAL ERROR bindDependencies expects derivation.dependenciesState !== -1\");\n const prevObserving = derivation.observing_\n const observing = (derivation.observing_ = derivation.newObserving_!)\n let lowestNewObservingDerivationState = IDerivationState_.UP_TO_DATE_\n\n // Go through all new observables and check diffValue: (this list can contain duplicates):\n // 0: first occurrence, change to 1 and keep it\n // 1: extra occurrence, drop it\n let i0 = 0,\n l = derivation.unboundDepsCount_\n for (let i = 0; i < l; i++) {\n const dep = observing[i]\n if (dep.diffValue_ === 0) {\n dep.diffValue_ = 1\n if (i0 !== i) {\n observing[i0] = dep\n }\n i0++\n }\n\n // Upcast is 'safe' here, because if dep is IObservable, `dependenciesState` will be undefined,\n // not hitting the condition\n if ((dep as any as IDerivation).dependenciesState_ > lowestNewObservingDerivationState) {\n lowestNewObservingDerivationState = (dep as any as IDerivation).dependenciesState_\n }\n }\n observing.length = i0\n\n derivation.newObserving_ = null // newObserving shouldn't be needed outside tracking (statement moved down to work around FF bug, see #614)\n\n // Go through all old observables and check diffValue: (it is unique after last bindDependencies)\n // 0: it's not in new observables, unobserve it\n // 1: it keeps being observed, don't want to notify it. change to 0\n l = prevObserving.length\n while (l--) {\n const dep = prevObserving[l]\n if (dep.diffValue_ === 0) {\n removeObserver(dep, derivation)\n }\n dep.diffValue_ = 0\n }\n\n // Go through all new observables and check diffValue: (now it should be unique)\n // 0: it was set to 0 in last loop. don't need to do anything.\n // 1: it wasn't observed, let's observe it. set back to 0\n while (i0--) {\n const dep = observing[i0]\n if (dep.diffValue_ === 1) {\n dep.diffValue_ = 0\n addObserver(dep, derivation)\n }\n }\n\n // Some new observed derivations may become stale during this derivation computation\n // so they have had no chance to propagate staleness (#916)\n if (lowestNewObservingDerivationState !== IDerivationState_.UP_TO_DATE_) {\n derivation.dependenciesState_ = lowestNewObservingDerivationState\n derivation.onBecomeStale_()\n }\n}\n\nexport function clearObserving(derivation: IDerivation) {\n // invariant(globalState.inBatch > 0, \"INTERNAL ERROR clearObserving should be called only inside batch\");\n const obs = derivation.observing_\n derivation.observing_ = []\n let i = obs.length\n while (i--) {\n removeObserver(obs[i], derivation)\n }\n\n derivation.dependenciesState_ = IDerivationState_.NOT_TRACKING_\n}\n\nexport function untracked<T>(action: () => T): T {\n const prev = untrackedStart()\n try {\n return action()\n } finally {\n untrackedEnd(prev)\n }\n}\n\nexport function untrackedStart(): IDerivation | null {\n const prev = globalState.trackingDerivation\n globalState.trackingDerivation = null\n return prev\n}\n\nexport function untrackedEnd(prev: IDerivation | null) {\n globalState.trackingDerivation = prev\n}\n\nexport function allowStateReadsStart(allowStateReads: boolean) {\n const prev = globalState.allowStateReads\n globalState.allowStateReads = allowStateReads\n return prev\n}\n\nexport function allowStateReadsEnd(prev: boolean) {\n globalState.allowStateReads = prev\n}\n\n/**\n * needed to keep `lowestObserverState` correct. when changing from (2 or 1) to 0\n *\n */\nexport function changeDependenciesStateTo0(derivation: IDerivation) {\n if (derivation.dependenciesState_ === IDerivationState_.UP_TO_DATE_) {\n return\n }\n derivation.dependenciesState_ = IDerivationState_.UP_TO_DATE_\n\n const obs = derivation.observing_\n let i = obs.length\n while (i--) {\n obs[i].lowestObserverState_ = IDerivationState_.UP_TO_DATE_\n }\n}\n","import {\n Lambda,\n ComputedValue,\n IDependencyTree,\n IDerivation,\n IDerivationState_,\n TraceMode,\n getDependencyTree,\n globalState,\n runReactions,\n checkIfStateReadsAreAllowed\n} from \"../internal\"\n\nexport interface IDepTreeNode {\n name_: string\n observing_?: IObservable[]\n}\n\nexport interface IObservable extends IDepTreeNode {\n diffValue_: number\n /**\n * Id of the derivation *run* that last accessed this observable.\n * If this id equals the *run* id of the current derivation,\n * the dependency is already established\n */\n lastAccessedBy_: number\n isBeingObserved_: boolean\n\n lowestObserverState_: IDerivationState_ // Used to avoid redundant propagations\n isPendingUnobservation_: boolean // Used to push itself to global.pendingUnobservations at most once per batch.\n\n observers_: Set<IDerivation>\n\n onBUO(): void\n onBO(): void\n\n onBUOL: Set<Lambda> | undefined\n onBOL: Set<Lambda> | undefined\n}\n\nexport function hasObservers(observable: IObservable): boolean {\n return observable.observers_ && observable.observers_.size > 0\n}\n\nexport function getObservers(observable: IObservable): Set<IDerivation> {\n return observable.observers_\n}\n\n// function invariantObservers(observable: IObservable) {\n// const list = observable.observers\n// const map = observable.observersIndexes\n// const l = list.length\n// for (let i = 0; i < l; i++) {\n// const id = list[i].__mapid\n// if (i) {\n// invariant(map[id] === i, \"INTERNAL ERROR maps derivation.__mapid to index in list\") // for performance\n// } else {\n// invariant(!(id in map), \"INTERNAL ERROR observer on index 0 shouldn't be held in map.\") // for performance\n// }\n// }\n// invariant(\n// list.length === 0 || Object.keys(map).length === list.length - 1,\n// \"INTERNAL ERROR there is no junk in map\"\n// )\n// }\nexport function addObserver(observable: IObservable, node: IDerivation) {\n // invariant(node.dependenciesState !== -1, \"INTERNAL ERROR, can add only dependenciesState !== -1\");\n // invariant(observable._observers.indexOf(node) === -1, \"INTERNAL ERROR add already added node\");\n // invariantObservers(observable);\n\n observable.observers_.add(node)\n if (observable.lowestObserverState_ > node.dependenciesState_) {\n observable.lowestObserverState_ = node.dependenciesState_\n }\n\n // invariantObservers(observable);\n // invariant(observable._observers.indexOf(node) !== -1, \"INTERNAL ERROR didn't add node\");\n}\n\nexport function removeObserver(observable: IObservable, node: IDerivation) {\n // invariant(globalState.inBatch > 0, \"INTERNAL ERROR, remove should be called only inside batch\");\n // invariant(observable._observers.indexOf(node) !== -1, \"INTERNAL ERROR remove already removed node\");\n // invariantObservers(observable);\n observable.observers_.delete(node)\n if (observable.observers_.size === 0) {\n // deleting last observer\n queueForUnobservation(observable)\n }\n // invariantObservers(observable);\n // invariant(observable._observers.indexOf(node) === -1, \"INTERNAL ERROR remove already removed node2\");\n}\n\nexport function queueForUnobservation(observable: IObservable) {\n if (observable.isPendingUnobservation_ === false) {\n // invariant(observable._observers.length === 0, \"INTERNAL ERROR, should only queue for unobservation unobserved observables\");\n observable.isPendingUnobservation_ = true\n globalState.pendingUnobservations.push(observable)\n }\n}\n\n/**\n * Batch starts a transaction, at least for purposes of memoizing ComputedValues when nothing else does.\n * During a batch `onBecomeUnobserved` will be called at most once per observable.\n * Avoids unnecessary recalculations.\n */\nexport function startBatch() {\n globalState.inBatch++\n}\n\nexport function endBatch() {\n if (--globalState.inBatch === 0) {\n runReactions()\n // the batch is actually about to finish, all unobserving should happen here.\n const list = globalState.pendingUnobservations\n for (let i = 0; i < list.length; i++) {\n const observable = list[i]\n observable.isPendingUnobservation_ = false\n if (observable.observers_.size === 0) {\n if (observable.isBeingObserved_) {\n // if this observable had reactive observers, trigger the hooks\n observable.isBeingObserved_ = false\n observable.onBUO()\n }\n if (observable instanceof ComputedValue) {\n // computed values are automatically teared down when the last observer leaves\n // this process happens recursively, this computed might be the last observabe of another, etc..\n observable.suspend_()\n }\n }\n }\n globalState.pendingUnobservations = []\n }\n}\n\nexport function reportObserved(observable: IObservable): boolean {\n checkIfStateReadsAreAllowed(observable)\n\n const derivation = globalState.trackingDerivation\n if (derivation !== null) {\n /**\n * Simple optimization, give each derivation run an unique id (runId)\n * Check if last time this observable was accessed the same runId is used\n * if this is the case, the relation is already known\n */\n if (derivation.runId_ !== observable.lastAccessedBy_) {\n observable.lastAccessedBy_ = derivation.runId_\n // Tried storing newObserving, or observing, or both as Set, but performance didn't come close...\n derivation.newObserving_![derivation.unboundDepsCount_++] = observable\n if (!observable.isBeingObserved_ && globalState.trackingContext) {\n observable.isBeingObserved_ = true\n observable.onBO()\n }\n }\n return observable.isBeingObserved_\n } else if (observable.observers_.size === 0 && globalState.inBatch > 0) {\n queueForUnobservation(observable)\n }\n\n return false\n}\n\n// function invariantLOS(observable: IObservable, msg: string) {\n// // it's expensive so better not run it in produciton. but temporarily helpful for testing\n// const min = getObservers(observable).reduce((a, b) => Math.min(a, b.dependenciesState), 2)\n// if (min >= observable.lowestObserverState) return // <- the only assumption about `lowestObserverState`\n// throw new Error(\n// \"lowestObserverState is wrong for \" +\n// msg +\n// \" because \" +\n// min +\n// \" < \" +\n// observable.lowestObserverState\n// )\n// }\n\n/**\n * NOTE: current propagation mechanism will in case of self reruning autoruns behave unexpectedly\n * It will propagate changes to observers from previous run\n * It's hard or maybe impossible (with reasonable perf) to get it right with current approach\n * Hopefully self reruning autoruns aren't a feature people should depend on\n * Also most basic use cases should be ok\n */\n\n// Called by Atom when its value changes\nexport function propagateChanged(observable: IObservable) {\n // invariantLOS(observable, \"changed start\");\n if (observable.lowestObserverState_ === IDerivationState_.STALE_) {\n return\n }\n observable.lowestObserverState_ = IDerivationState_.STALE_\n\n // Ideally we use for..of here, but the downcompiled version is really slow...\n observable.observers_.forEach(d => {\n if (d.dependenciesState_ === IDerivationState_.UP_TO_DATE_) {\n if (__DEV__ && d.isTracing_ !== TraceMode.NONE) {\n logTraceInfo(d, observable)\n }\n d.onBecomeStale_()\n }\n d.dependenciesState_ = IDerivationState_.STALE_\n })\n // invariantLOS(observable, \"changed end\");\n}\n\n// Called by ComputedValue when it recalculate and its value changed\nexport function propagateChangeConfirmed(observable: IObservable) {\n // invariantLOS(observable, \"confirmed start\");\n if (observable.lowestObserverState_ === IDerivationState_.STALE_) {\n return\n }\n observable.lowestObserverState_ = IDerivationState_.STALE_\n\n observable.observers_.forEach(d => {\n if (d.dependenciesState_ === IDerivationState_.POSSIBLY_STALE_) {\n d.dependenciesState_ = IDerivationState_.STALE_\n if (__DEV__ && d.isTracing_ !== TraceMode.NONE) {\n logTraceInfo(d, observable)\n }\n } else if (\n d.dependenciesState_ === IDerivationState_.UP_TO_DATE_ // this happens during computing of `d`, just keep lowestObserverState up to date.\n ) {\n observable.lowestObserverState_ = IDerivationState_.UP_TO_DATE_\n }\n })\n // invariantLOS(observable, \"confirmed end\");\n}\n\n// Used by computed when its dependency changed, but we don't wan't to immediately recompute.\nexport function propagateMaybeChanged(observable: IObservable) {\n // invariantLOS(observable, \"maybe start\");\n if (observable.lowestObserverState_ !== IDerivationState_.UP_TO_DATE_) {\n return\n }\n observable.lowestObserverState_ = IDerivationState_.POSSIBLY_STALE_\n\n observable.observers_.forEach(d => {\n if (d.dependenciesState_ === IDerivationState_.UP_TO_DATE_) {\n d.dependenciesState_ = IDerivationState_.POSSIBLY_STALE_\n d.onBecomeStale_()\n }\n })\n // invariantLOS(observable, \"maybe end\");\n}\n\nfunction logTraceInfo(derivation: IDerivation, observable: IObservable) {\n console.log(\n `[mobx.trace] '${derivation.name_}' is invalidated due to a change in: '${observable.name_}'`\n )\n if (derivation.isTracing_ === TraceMode.BREAK) {\n const lines = []\n printDepTree(getDependencyTree(derivation), lines, 1)\n\n // prettier-ignore\n new Function(\n`debugger;\n/*\nTracing '${derivation.name_}'\n\nYou are entering this break point because derivation '${derivation.name_}' is being traced and '${observable.name_}' is now forcing it to update.\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\n\n${derivation instanceof ComputedValue ? derivation.derivation.toString().replace(/[*]\\//g, \"/\") : \"\"}\n\nThe dependencies for this derivation are:\n\n${lines.join(\"\\n\")}\n*/\n `)()\n }\n}\n\nfunction printDepTree(tree: IDependencyTree, lines: string[], depth: number) {\n if (lines.length >= 1000) {\n lines.push(\"(and many more)\")\n return\n }\n lines.push(`${\"\\t\".repeat(depth - 1)}${tree.name}`)\n if (tree.dependencies) {\n tree.dependencies.forEach(child => printDepTree(child, lines, depth + 1))\n }\n}\n","import { IDerivation, IObservable, Reaction, die, getGlobal } from \"../internal\"\nimport { ComputedValue } from \"./computedvalue\"\n\n/**\n * These values will persist if global state is reset\n */\nconst persistentKeys: (keyof MobXGlobals)[] = [\n \"mobxGuid\",\n \"spyListeners\",\n \"enforceActions\",\n \"computedRequiresReaction\",\n \"reactionRequiresObservable\",\n \"observableRequiresReaction\",\n \"allowStateReads\",\n \"disableErrorBoundaries\",\n \"runId\",\n \"UNCHANGED\",\n \"useProxies\"\n]\n\nexport type IUNCHANGED = {}\n\nexport class MobXGlobals {\n /**\n * MobXGlobals version.\n * MobX compatiblity with other versions loaded in memory as long as this version matches.\n * It indicates that the global state still stores similar information\n *\n * N.B: this version is unrelated to the package version of MobX, and is only the version of the\n * internal state storage of MobX, and can be the same across many different package versions\n */\n version = 6\n\n /**\n * globally unique token to signal unchanged\n */\n UNCHANGED: IUNCHANGED = {}\n\n /**\n * Currently running derivation\n */\n trackingDerivation: IDerivation | null = null\n\n /**\n * Currently running reaction. This determines if we currently have a reactive context.\n * (Tracking derivation is also set for temporal tracking of computed values inside actions,\n * but trackingReaction can only be set by a form of Reaction)\n */\n trackingContext: Reaction | ComputedValue<any> | null = null\n\n /**\n * Each time a derivation is tracked, it is assigned a unique run-id\n */\n runId = 0\n\n /**\n * 'guid' for general purpose. Will be persisted amongst resets.\n */\n mobxGuid = 0\n\n /**\n * Are we in a batch block? (and how many of them)\n */\n inBatch: number = 0\n\n /**\n * Observables that don't have observers anymore, and are about to be\n * suspended, unless somebody else accesses it in the same batch\n *\n * @type {IObservable[]}\n */\n pendingUnobservations: IObservable[] = []\n\n /**\n * List of scheduled, not yet executed, reactions.\n */\n pendingReactions: Reaction[] = []\n\n /**\n * Are we currently processing reactions?\n */\n isRunningReactions = false\n\n /**\n * Is it allowed to change observables at this point?\n * In general, MobX doesn't allow that when running computations and React.render.\n * To ensure that those functions stay pure.\n */\n allowStateChanges = false\n\n /**\n * Is it allowed to read observables at this point?\n * Used to hold the state needed for `observableRequiresReaction`\n */\n allowStateReads = true\n\n /**\n * If strict mode is enabled, state changes are by default not allowed\n */\n enforceActions: boolean | \"always\" = true\n\n /**\n * Spy callbacks\n */\n spyListeners: { (change: any): void }[] = []\n\n /**\n * Globally attached error handlers that react specifically to errors in reactions\n */\n globalReactionErrorHandlers: ((error: any, derivation: IDerivation) => void)[] = []\n\n /**\n * Warn if computed values are accessed outside a reactive context\n */\n computedRequiresReaction = false\n\n /**\n * (Experimental)\n * Warn if you try to create to derivation / reactive context without accessing any observable.\n */\n reactionRequiresObservable = false\n\n /**\n * (Experimental)\n * Warn if observables are accessed outside a reactive context\n */\n observableRequiresReaction = false\n\n /*\n * Don't catch and rethrow exceptions. This is useful for inspecting the state of\n * the stack when an exception occurs while debugging.\n */\n disableErrorBoundaries = false\n\n /*\n * If true, we are already handling an exception in an action. Any errors in reactions should be suppressed, as\n * they are not the cause, see: https://github.com/mobxjs/mobx/issues/1836\n */\n suppressReactionErrors = false\n\n useProxies = true\n /*\n * print warnings about code that would fail if proxies weren't available\n */\n verifyProxies = false\n\n /**\n * False forces all object's descriptors to\n * writable: true\n * configurable: true\n */\n safeDescriptors = true\n}\n\nlet canMergeGlobalState = true\nlet isolateCalled = false\n\nexport let globalState: MobXGlobals = (function () {\n let global = getGlobal()\n if (global.__mobxInstanceCount > 0 && !global.__mobxGlobals) {\n canMergeGlobalState = false\n }\n if (global.__mobxGlobals && global.__mobxGlobals.version !== new MobXGlobals().version) {\n canMergeGlobalState = false\n }\n\n if (!canMergeGlobalState) {\n // Because this is a IIFE we need to let isolateCalled a chance to change\n // so we run it after the event loop completed at least 1 iteration\n setTimeout(() => {\n if (!isolateCalled) {\n die(35)\n }\n }, 1)\n return new MobXGlobals()\n } else if (global.__mobxGlobals) {\n global.__mobxInstanceCount += 1\n if (!global.__mobxGlobals.UNCHANGED) {\n global.__mobxGlobals.UNCHANGED = {}\n } // make merge backward compatible\n return global.__mobxGlobals\n } else {\n global.__mobxInstanceCount = 1\n return (global.__mobxGlobals = new MobXGlobals())\n }\n})()\n\nexport function isolateGlobalState() {\n if (\n globalState.pendingReactions.length ||\n globalState.inBatch ||\n globalState.isRunningReactions\n ) {\n die(36)\n }\n isolateCalled = true\n if (canMergeGlobalState) {\n let global = getGlobal()\n if (--global.__mobxInstanceCount === 0) {\n global.__mobxGlobals = undefined\n }\n globalState = new MobXGlobals()\n }\n}\n\nexport function getGlobalState(): any {\n return globalState\n}\n\n/**\n * For testing purposes only; this will break the internal state of existing observables,\n * but can be used to get back at a stable state after throwing errors\n */\nexport function resetGlobalState() {\n const defaultGlobals = new MobXGlobals()\n for (let key in defaultGlobals) {\n if (persistentKeys.indexOf(key as any) === -1) {\n globalState[key] = defaultGlobals[key]\n }\n }\n globalState.allowStateChanges = !globalState.enforceActions\n}\n","import {\n $mobx,\n IDerivation,\n IDerivationState_,\n IObservable,\n Lambda,\n TraceMode,\n clearObserving,\n createInstanceofPredicate,\n endBatch,\n getNextId,\n globalState,\n isCaughtException,\n isSpyEnabled,\n shouldCompute,\n spyReport,\n spyReportEnd,\n spyReportStart,\n startBatch,\n trace,\n trackDerivedFunction, GenericAbortSignal\n} from \"../internal\"\n\n/**\n * Reactions are a special kind of derivations. Several things distinguishes them from normal reactive computations\n *\n * 1) They will always run, whether they are used by other computations or not.\n * This means that they are very suitable for triggering side effects like logging, updating the DOM and making network requests.\n * 2) They are not observable themselves\n * 3) They will always run after any 'normal' derivations\n * 4) They are allowed to change the state and thereby triggering themselves again, as long as they make sure the state propagates to a stable state in a reasonable amount of iterations.\n *\n * The state machine of a Reaction is as follows:\n *\n * 1) after creating, the reaction should be started by calling `runReaction` or by scheduling it (see also `autorun`)\n * 2) the `onInvalidate` handler should somehow result in a call to `this.track(someFunction)`\n * 3) all observables accessed in `someFunction` will be observed by this reaction.\n * 4) as soon as some of the dependencies has changed the Reaction will be rescheduled for another run (after the current mutation or transaction). `isScheduled` will yield true once a dependency is stale and during this period\n * 5) `onInvalidate` will be called, and we are back at step 1.\n *\n */\n\nexport interface IReactionPublic {\n dispose(): void\n trace(enterBreakPoint?: boolean): void\n}\n\nexport interface IReactionDisposer {\n (): void\n $mobx: Reaction\n}\n\nexport class Reaction implements IDerivation, IReactionPublic {\n observing_: IObservable[] = [] // nodes we are looking at. Our value depends on these nodes\n newObserving_: IObservable[] = []\n dependenciesState_ = IDerivationState_.NOT_TRACKING_\n diffValue_ = 0\n runId_ = 0\n unboundDepsCount_ = 0\n isDisposed_ = false\n isScheduled_ = false\n isTrackPending_ = false\n isRunning_ = false\n isTracing_: TraceMode = TraceMode.NONE\n\n constructor(\n public name_: string = __DEV__ ? \"Reaction@\" + getNextId() : \"Reaction\",\n private onInvalidate_: () => void,\n private errorHandler_?: (error: any, derivation: IDerivation) => void,\n public requiresObservable_?\n ) {}\n\n onBecomeStale_() {\n this.schedule_()\n }\n\n schedule_() {\n if (!this.isScheduled_) {\n this.isScheduled_ = true\n globalState.pendingReactions.push(this)\n runReactions()\n }\n }\n\n isScheduled() {\n return this.isScheduled_\n }\n\n /**\n * internal, use schedule() if you intend to kick off a reaction\n */\n runReaction_() {\n if (!this.isDisposed_) {\n startBatch()\n this.isScheduled_ = false\n const prev = globalState.trackingContext\n globalState.trackingContext = this\n if (shouldCompute(this)) {\n this.isTrackPending_ = true\n\n try {\n this.onInvalidate_()\n if (__DEV__ && this.isTrackPending_ && isSpyEnabled()) {\n // onInvalidate didn't trigger track right away..\n spyReport({\n name: this.name_,\n type: \"scheduled-reaction\"\n })\n }\n } catch (e) {\n this.reportExceptionInDerivation_(e)\n }\n }\n globalState.trackingContext = prev\n endBatch()\n }\n }\n\n track(fn: () => void) {\n if (this.isDisposed_) {\n return\n // console.warn(\"Reaction already disposed\") // Note: Not a warning / error in mobx 4 either\n }\n startBatch()\n const notify = isSpyEnabled()\n let startTime\n if (__DEV__ && notify) {\n startTime = Date.now()\n spyReportStart({\n name: this.name_,\n type: \"reaction\"\n })\n }\n this.isRunning_ = true\n const prevReaction = globalState.trackingContext // reactions could create reactions...\n globalState.trackingContext = this\n const result = trackDerivedFunction(this, fn, undefined)\n globalState.trackingContext = prevReaction\n this.isRunning_ = false\n this.isTrackPending_ = false\n if (this.isDisposed_) {\n // disposed during last run. Clean up everything that was bound after the dispose call.\n clearObserving(this)\n }\n if (isCaughtException(result)) {\n this.reportExceptionInDerivation_(result.cause)\n }\n if (__DEV__ && notify) {\n spyReportEnd({\n time: Date.now() - startTime\n })\n }\n endBatch()\n }\n\n reportExceptionInDerivation_(error: any) {\n if (this.errorHandler_) {\n this.errorHandler_(error, this)\n return\n }\n\n if (globalState.disableErrorBoundaries) {\n throw error\n }\n\n const message = __DEV__\n ? `[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '${this}'`\n : `[mobx] uncaught error in '${this}'`\n if (!globalState.suppressReactionErrors) {\n console.error(message, error)\n /** If debugging brought you here, please, read the above message :-). Tnx! */\n } else if (__DEV__) { console.warn(`[mobx] (error in reaction '${this.name_}' suppressed, fix error of causing action below)`) } // prettier-ignore\n\n if (__DEV__ && isSpyEnabled()) {\n spyReport({\n type: \"error\",\n name: this.name_,\n message,\n error: \"\" + error\n })\n }\n\n globalState.globalReactionErrorHandlers.forEach(f => f(error, this))\n }\n\n dispose() {\n if (!this.isDisposed_) {\n this.isDisposed_ = true\n if (!this.isRunning_) {\n // if disposed while running, clean up later. Maybe not optimal, but rare case\n startBatch()\n clearObserving(this)\n endBatch()\n }\n }\n }\n\n getDisposer_(abortSignal?: GenericAbortSignal): IReactionDisposer {\n const dispose = (() => {\n this.dispose()\n abortSignal?.removeEventListener?.(\"abort\", dispose)\n }) as IReactionDisposer\n abortSignal?.addEventListener?.(\"abort\", dispose)\n dispose[$mobx] = this\n\n return dispose\n }\n\n toString() {\n return `Reaction[${this.name_}]`\n }\n\n trace(enterBreakPoint: boolean = false) {\n trace(this, enterBreakPoint)\n }\n}\n\nexport function onReactionError(handler: (error: any, derivation: IDerivation) => void): Lambda {\n globalState.globalReactionErrorHandlers.push(handler)\n return () => {\n const idx = globalState.globalReactionErrorHandlers.indexOf(handler)\n if (idx >= 0) {\n globalState.globalReactionErrorHandlers.splice(idx, 1)\n }\n }\n}\n\n/**\n * Magic number alert!\n * Defines within how many times a reaction is allowed to re-trigger itself\n * until it is assumed that this is gonna be a never ending loop...\n */\nconst MAX_REACTION_ITERATIONS = 100\n\nlet reactionScheduler: (fn: () => void) => void = f => f()\n\nexport function runReactions() {\n // Trampolining, if runReactions are already running, new reactions will be picked up\n if (globalState.inBatch > 0 || globalState.isRunningReactions) {\n return\n }\n reactionScheduler(runReactionsHelper)\n}\n\nfunction runReactionsHelper() {\n globalState.isRunningReactions = true\n const allReactions = globalState.pendingReactions\n let iterations = 0\n\n // While running reactions, new reactions might be triggered.\n // Hence we work with two variables and check whether\n // we converge to no remaining reactions after a while.\n while (allReactions.length > 0) {\n if (++iterations === MAX_REACTION_ITERATIONS) {\n console.error(\n __DEV__\n ? `Reaction doesn't converge to a stable state after ${MAX_REACTION_ITERATIONS} iterations.` +\n ` Probably there is a cycle in the reactive function: ${allReactions[0]}`\n : `[mobx] cycle in reaction: ${allReactions[0]}`\n )\n allReactions.splice(0) // clear reactions\n }\n let remainingReactions = allReactions.splice(0)\n for (let i = 0, l = remainingReactions.length; i < l; i++) {\n remainingReactions[i].runReaction_()\n }\n }\n globalState.isRunningReactions = false\n}\n\nexport const isReaction = createInstanceofPredicate(\"Reaction\", Reaction)\n\nexport function setReactionScheduler(fn: (f: () => void) => void) {\n const baseScheduler = reactionScheduler\n reactionScheduler = f => fn(() => baseScheduler(f))\n}\n","import {\n createAction,\n executeAction,\n Annotation,\n storeAnnotation,\n die,\n isFunction,\n isStringish,\n createDecoratorAnnotation,\n createActionAnnotation,\n is20223Decorator\n} from \"../internal\"\n\nimport type { ClassFieldDecorator, ClassMethodDecorator } from \"../types/decorator_fills\"\n\nexport const ACTION = \"action\"\nexport const ACTION_BOUND = \"action.bound\"\nexport const AUTOACTION = \"autoAction\"\nexport const AUTOACTION_BOUND = \"autoAction.bound\"\n\nconst DEFAULT_ACTION_NAME = \"<unnamed action>\"\n\nconst actionAnnotation = createActionAnnotation(ACTION)\nconst actionBoundAnnotation = createActionAnnotation(ACTION_BOUND, {\n bound: true\n})\nconst autoActionAnnotation = createActionAnnotation(AUTOACTION, {\n autoAction: true\n})\nconst autoActionBoundAnnotation = createActionAnnotation(AUTOACTION_BOUND, {\n autoAction: true,\n bound: true\n})\n\nexport interface IActionFactory\n extends Annotation,\n PropertyDecorator,\n ClassMethodDecorator,\n ClassFieldDecorator {\n // nameless actions\n <T extends Function | undefined | null>(fn: T): T\n // named actions\n <T extends Function | undefined | null>(name: string, fn: T): T\n\n // named decorator\n (customName: string): PropertyDecorator &\n Annotation &\n ClassMethodDecorator &\n ClassFieldDecorator\n\n // decorator (name no longer supported)\n bound: Annotation & PropertyDecorator & ClassMethodDecorator & ClassFieldDecorator\n}\n\nfunction createActionFactory(autoAction: boolean): IActionFactory {\n const res: IActionFactory = function action(arg1, arg2?): any {\n // action(fn() {})\n if (isFunction(arg1)) {\n return createAction(arg1.name || DEFAULT_ACTION_NAME, arg1, autoAction)\n }\n // action(\"name\", fn() {})\n if (isFunction(arg2)) {\n return createAction(arg1, arg2, autoAction)\n }\n // @action (2022.3 Decorators)\n if (is20223Decorator(arg2)) {\n return (autoAction ? autoActionAnnotation : actionAnnotation).decorate_20223_(\n arg1,\n arg2\n )\n }\n // @action\n if (isStringish(arg2)) {\n return storeAnnotation(arg1, arg2, autoAction ? autoActionAnnotation : actionAnnotation)\n }\n // action(\"name\") & @action(\"name\")\n if (isStringish(arg1)) {\n return createDecoratorAnnotation(\n createActionAnnotation(autoAction ? AUTOACTION : ACTION, {\n name: arg1,\n autoAction\n })\n )\n }\n\n if (__DEV__) {\n die(\"Invalid arguments for `action`\")\n }\n } as IActionFactory\n return res\n}\n\nexport const action: IActionFactory = createActionFactory(false)\nObject.assign(action, actionAnnotation)\nexport const autoAction: IActionFactory = createActionFactory(true)\nObject.assign(autoAction, autoActionAnnotation)\n\naction.bound = createDecoratorAnnotation(actionBoundAnnotation)\nautoAction.bound = createDecoratorAnnotation(autoActionBoundAnnotation)\n\nexport function runInAction<T>(fn: () => T): T {\n return executeAction(fn.name || DEFAULT_ACTION_NAME, false, fn, this, undefined)\n}\n\nexport function isAction(thing: any) {\n return isFunction(thing) && thing.isMobxAction === true\n}\n","import {\n EMPTY_OBJECT,\n IEqualsComparer,\n IReactionDisposer,\n IReactionPublic,\n Lambda,\n Reaction,\n action,\n comparer,\n getNextId,\n isAction,\n isFunction,\n isPlainObject,\n die,\n allowStateChanges,\n GenericAbortSignal\n} from \"../internal\"\n\nexport interface IAutorunOptions {\n delay?: number\n name?: string\n /**\n * Experimental.\n * Warns if the view doesn't track observables\n */\n requiresObservable?: boolean\n scheduler?: (callback: () => void) => any\n onError?: (error: any) => void\n signal?: GenericAbortSignal\n}\n\n/**\n * Creates a named reactive view and keeps it alive, so that the view is always\n * updated if one of the dependencies changes, even when the view is not further used by something else.\n * @param view The reactive view\n * @returns disposer function, which can be used to stop the view from being updated in the future.\n */\nexport function autorun(\n view: (r: IReactionPublic) => any,\n opts: IAutorunOptions = EMPTY_OBJECT\n): IReactionDisposer {\n if (__DEV__) {\n if (!isFunction(view)) {\n die(\"Autorun expects a function as first argument\")\n }\n if (isAction(view)) {\n die(\"Autorun does not accept actions since actions are untrackable\")\n }\n }\n\n const name: string =\n opts?.name ?? (__DEV__ ? (view as any).name || \"Autorun@\" + getNextId() : \"Autorun\")\n const runSync = !opts.scheduler && !opts.delay\n let reaction: Reaction\n\n if (runSync) {\n // normal autorun\n reaction = new Reaction(\n name,\n function (this: Reaction) {\n this.track(reactionRunner)\n },\n opts.onError,\n opts.requiresObservable\n )\n } else {\n const scheduler = createSchedulerFromOptions(opts)\n // debounced autorun\n let isScheduled = false\n\n reaction = new Reaction(\n name,\n () => {\n if (!isScheduled) {\n isScheduled = true\n scheduler(() => {\n isScheduled = false\n if (!reaction.isDisposed_) {\n reaction.track(reactionRunner)\n }\n })\n }\n },\n opts.onError,\n opts.requiresObservable\n )\n }\n\n function reactionRunner() {\n view(reaction)\n }\n\n if(!opts?.signal?.aborted) {\n reaction.schedule_()\n }\n return reaction.getDisposer_(opts?.signal)\n}\n\nexport type IReactionOptions<T, FireImmediately extends boolean> = IAutorunOptions & {\n fireImmediately?: FireImmediately\n equals?: IEqualsComparer<T>\n}\n\nconst run = (f: Lambda) => f()\n\nfunction createSchedulerFromOptions(opts: IAutorunOptions) {\n return opts.scheduler\n ? opts.scheduler\n : opts.delay\n ? (f: Lambda) => setTimeout(f, opts.delay!)\n : run\n}\n\nexport function reaction<T, FireImmediately extends boolean = false>(\n expression: (r: IReactionPublic) => T,\n effect: (\n arg: T,\n prev: FireImmediately extends true ? T | undefined : T,\n r: IReactionPublic\n ) => void,\n opts: IReactionOptions<T, FireImmediately> = EMPTY_OBJECT\n): IReactionDisposer {\n if (__DEV__) {\n if (!isFunction(expression) || !isFunction(effect)) {\n die(\"First and second argument to reaction should be functions\")\n }\n if (!isPlainObject(opts)) {\n die(\"Third argument of reactions should be an object\")\n }\n }\n const name = opts.name ?? (__DEV__ ? \"Reaction@\" + getNextId() : \"Reaction\")\n const effectAction = action(\n name,\n opts.onError ? wrapErrorHandler(opts.onError, effect) : effect\n )\n const runSync = !opts.scheduler && !opts.delay\n const scheduler = createSchedulerFromOptions(opts)\n\n let firstTime = true\n let isScheduled = false\n let value: T\n let oldValue: T | undefined\n\n const equals: IEqualsComparer<T> = (opts as any).compareStructural\n ? comparer.structural\n : opts.equals || comparer.default\n\n const r = new Reaction(\n name,\n () => {\n if (firstTime || runSync) {\n reactionRunner()\n } else if (!isScheduled) {\n isScheduled = true\n scheduler!(reactionRunner)\n }\n },\n opts.onError,\n opts.requiresObservable\n )\n\n function reactionRunner() {\n isScheduled = false\n if (r.isDisposed_) {\n return\n }\n let changed: boolean = false\n r.track(() => {\n const nextValue = allowStateChanges(false, () => expression(r))\n changed = firstTime || !equals(value, nextValue)\n oldValue = value\n value = nextValue\n })\n\n // This casting is nesessary as TS cannot infer proper type in current funciton implementation\n type OldValue = FireImmediately extends true ? T | undefined : T\n if (firstTime && opts.fireImmediately!) {\n effectAction(value, oldValue as OldValue, r)\n } else if (!firstTime && changed) {\n effectAction(value, oldValue as OldValue, r)\n }\n firstTime = false\n }\n\n if(!opts?.signal?.aborted) {\n r.schedule_()\n }\n return r.getDisposer_(opts?.signal)\n}\n\nfunction wrapErrorHandler(errorHandler, baseFn) {\n return function () {\n try {\n return baseFn.apply(this, arguments)\n } catch (e) {\n errorHandler.call(this, e)\n }\n }\n}\n","import { globalState, isolateGlobalState, setReactionScheduler } from \"../internal\"\n\nconst NEVER = \"never\"\nconst ALWAYS = \"always\"\nconst OBSERVED = \"observed\"\n// const IF_AVAILABLE = \"ifavailable\"\n\nexport function configure(options: {\n enforceActions?: \"never\" | \"always\" | \"observed\"\n computedRequiresReaction?: boolean\n /**\n * Warn if you try to create to derivation / reactive context without accessing any observable.\n */\n reactionRequiresObservable?: boolean\n /**\n * Warn if observables are accessed outside a reactive context\n */\n observableRequiresReaction?: boolean\n isolateGlobalState?: boolean\n disableErrorBoundaries?: boolean\n safeDescriptors?: boolean\n reactionScheduler?: (f: () => void) => void\n useProxies?: \"always\" | \"never\" | \"ifavailable\"\n}): void {\n if (options.isolateGlobalState === true) {\n isolateGlobalState()\n }\n const { useProxies, enforceActions } = options\n if (useProxies !== undefined) {\n globalState.useProxies =\n useProxies === ALWAYS\n ? true\n : useProxies === NEVER\n ? false\n : typeof Proxy !== \"undefined\"\n }\n if (useProxies === \"ifavailable\") {\n globalState.verifyProxies = true\n }\n if (enforceActions !== undefined) {\n const ea = enforceActions === ALWAYS ? ALWAYS : enforceActions === OBSERVED\n globalState.enforceActions = ea\n globalState.allowStateChanges = ea === true || ea === ALWAYS ? false : true\n }\n ;[\n \"computedRequiresReaction\",\n \"reactionRequiresObservable\",\n \"observableRequiresReaction\",\n \"disableErrorBoundaries\",\n \"safeDescriptors\"\n ].forEach(key => {\n if (key in options) {\n globalState[key] = !!options[key]\n }\n })\n globalState.allowStateReads = !globalState.observableRequiresReaction\n if (__DEV__ && globalState.disableErrorBoundaries === true) {\n console.warn(\n \"WARNING: Debug feature only. MobX will NOT recover from errors when `disableErrorBoundaries` is enabled.\"\n )\n }\n if (options.reactionScheduler) {\n setReactionScheduler(options.reactionScheduler)\n }\n}\n","import {\n CreateObservableOptions,\n isObservableMap,\n AnnotationsMap,\n asObservableObject,\n isPlainObject,\n ObservableObjectAdministration,\n isObservable,\n die,\n getOwnPropertyDescriptors,\n $mobx,\n ownKeys,\n initObservable\n} from \"../internal\"\n\nexport function extendObservable<A extends Object, B extends Object>(\n target: A,\n properties: B,\n annotations?: AnnotationsMap<B, never>,\n options?: CreateObservableOptions\n): A & B {\n if (__DEV__) {\n if (arguments.length > 4) {\n die(\"'extendObservable' expected 2-4 arguments\")\n }\n if (typeof target !== \"object\") {\n die(\"'extendObservable' expects an object as first argument\")\n }\n if (isObservableMap(target)) {\n die(\"'extendObservable' should not be used on maps, use map.merge instead\")\n }\n if (!isPlainObject(properties)) {\n die(`'extendObservable' only accepts plain objects as second argument`)\n }\n if (isObservable(properties) || isObservable(annotations)) {\n die(`Extending an object with another observable (object) is not supported`)\n }\n }\n // Pull descriptors first, so we don't have to deal with props added by administration ($mobx)\n const descriptors = getOwnPropertyDescriptors(properties)\n\n initObservable(() => {\n const adm: ObservableObjectAdministration = asObservableObject(target, options)[$mobx]\n ownKeys(descriptors).forEach(key => {\n adm.extend_(\n key,\n descriptors[key as any],\n // must pass \"undefined\" for { key: undefined }\n !annotations ? true : key in annotations ? annotations[key] : true\n )\n })\n })\n\n return target as any\n}\n","import { IDepTreeNode, getAtom, getObservers, hasObservers } from \"../internal\"\n\nexport interface IDependencyTree {\n name: string\n dependencies?: IDependencyTree[]\n}\n\nexport interface IObserverTree {\n name: string\n observers?: IObserverTree[]\n}\n\nexport function getDependencyTree(thing: any, property?: string): IDependencyTree {\n return nodeToDependencyTree(getAtom(thing, property))\n}\n\nfunction nodeToDependencyTree(node: IDepTreeNode): IDependencyTree {\n const result: IDependencyTree = {\n name: node.name_\n }\n if (node.observing_ && node.observing_.length > 0) {\n result.dependencies = unique(node.observing_).map(nodeToDependencyTree)\n }\n return result\n}\n\nexport function getObserverTree(thing: any, property?: string): IObserverTree {\n return nodeToObserverTree(getAtom(thing, property))\n}\n\nfunction nodeToObserverTree(node: IDepTreeNode): IObserverTree {\n const result: IObserverTree = {\n name: node.name_\n }\n if (hasObservers(node as any)) {\n result.observers = Array.from(<any>getObservers(node as any)).map(<any>nodeToObserverTree)\n }\n return result\n}\n\nfunction unique<T>(list: T[]): T[] {\n return Array.from(new Set(list))\n}\n","import {\n action,\n noop,\n die,\n isFunction,\n Annotation,\n isStringish,\n storeAnnotation,\n createFlowAnnotation,\n createDecoratorAnnotation,\n is20223Decorator\n} from \"../internal\"\n\nimport type { ClassMethodDecorator } from \"../types/decorator_fills\"\n\nexport const FLOW = \"flow\"\n\nlet generatorId = 0\n\nexport function FlowCancellationError() {\n this.message = \"FLOW_CANCELLED\"\n}\nFlowCancellationError.prototype = Object.create(Error.prototype)\n\nexport function isFlowCancellationError(error: Error) {\n return error instanceof FlowCancellationError\n}\n\nexport type CancellablePromise<T> = Promise<T> & { cancel(): void }\n\ninterface Flow extends Annotation, PropertyDecorator, ClassMethodDecorator {\n <R, Args extends any[]>(\n generator: (...args: Args) => Generator<any, R, any> | AsyncGenerator<any, R, any>\n ): (...args: Args) => CancellablePromise<R>\n bound: Annotation & PropertyDecorator & ClassMethodDecorator\n}\n\nconst flowAnnotation = createFlowAnnotation(\"flow\")\nconst flowBoundAnnotation = createFlowAnnotation(\"flow.bound\", { bound: true })\n\nexport const flow: Flow = Object.assign(\n function flow(arg1, arg2?) {\n // @flow (2022.3 Decorators)\n if (is20223Decorator(arg2)) {\n return flowAnnotation.decorate_20223_(arg1, arg2)\n }\n // @flow\n if (isStringish(arg2)) {\n return storeAnnotation(arg1, arg2, flowAnnotation)\n }\n // flow(fn)\n if (__DEV__ && arguments.length !== 1) {\n die(`Flow expects single argument with generator function`)\n }\n const generator = arg1\n const name = generator.name || \"<unnamed flow>\"\n\n // Implementation based on https://github.com/tj/co/blob/master/index.js\n const res = function () {\n const ctx = this\n const args = arguments\n const runId = ++generatorId\n const gen = action(`${name} - runid: ${runId} - init`, generator).apply(ctx, args)\n let rejector: (error: any) => void\n let pendingPromise: CancellablePromise<any> | undefined = undefined\n\n const promise = new Promise(function (resolve, reject) {\n let stepId = 0\n rejector = reject\n\n function onFulfilled(res: any) {\n pendingPromise = undefined\n let ret\n try {\n ret = action(\n `${name} - runid: ${runId} - yield ${stepId++}`,\n gen.next\n ).call(gen, res)\n } catch (e) {\n return reject(e)\n }\n\n next(ret)\n }\n\n function onRejected(err: any) {\n pendingPromise = undefined\n let ret\n try {\n ret = action(\n `${name} - runid: ${runId} - yield ${stepId++}`,\n gen.throw!\n ).call(gen, err)\n } catch (e) {\n return reject(e)\n }\n next(ret)\n }\n\n function next(ret: any) {\n if (isFunction(ret?.then)) {\n // an async iterator\n ret.then(next, reject)\n return\n }\n if (ret.done) {\n return resolve(ret.value)\n }\n pendingPromise = Promise.resolve(ret.value) as any\n return pendingPromise!.then(onFulfilled, onRejected)\n }\n\n onFulfilled(undefined) // kick off the process\n }) as any\n\n promise.cancel = action(`${name} - runid: ${runId} - cancel`, function () {\n try {\n if (pendingPromise) {\n cancelPromise(pendingPromise)\n }\n // Finally block can return (or yield) stuff..\n const res = gen.return!(undefined as any)\n // eat anything that promise would do, it's cancelled!\n const yieldedPromise = Promise.resolve(res.value)\n yieldedPromise.then(noop, noop)\n cancelPromise(yieldedPromise) // maybe it can be cancelled :)\n // reject our original promise\n rejector(new FlowCancellationError())\n } catch (e) {\n rejector(e) // there could be a throwing finally block\n }\n })\n return promise\n }\n res.isMobXFlow = true\n return res\n } as any,\n flowAnnotation\n)\n\nflow.bound = createDecoratorAnnotation(flowBoundAnnotation)\n\nfunction cancelPromise(promise) {\n if (isFunction(promise.cancel)) {\n promise.cancel()\n }\n}\n\nexport function flowResult<T>(\n result: T\n): T extends Generator<any, infer R, any>\n ? CancellablePromise<R>\n : T extends CancellablePromise<any>\n ? T\n : never {\n return result as any // just tricking TypeScript :)\n}\n\nexport function isFlow(fn: any): boolean {\n return fn?.isMobXFlow === true\n}\n","import {\n $mobx,\n isAtom,\n isComputedValue,\n isObservableArray,\n isObservableMap,\n isObservableObject,\n isReaction,\n die,\n isStringish\n} from \"../internal\"\n\nfunction _isObservable(value, property?: PropertyKey): boolean {\n if (!value) {\n return false\n }\n if (property !== undefined) {\n if (__DEV__ && (isObservableMap(value) || isObservableArray(value))) {\n return die(\n \"isObservable(object, propertyName) is not supported for arrays and maps. Use map.has or array.length instead.\"\n )\n }\n if (isObservableObject(value)) {\n return value[$mobx].values_.has(property)\n }\n return false\n }\n // For first check, see #701\n return (\n isObservableObject(value) ||\n !!value[$mobx] ||\n isAtom(value) ||\n isReaction(value) ||\n isComputedValue(value)\n )\n}\n\nexport function isObservable(value: any): boolean {\n if (__DEV__ && arguments.length !== 1) {\n die(\n `isObservable expects only 1 argument. Use isObservableProp to inspect the observability of a property`\n )\n }\n return _isObservable(value)\n}\n\nexport function isObservableProp(value: any, propName: PropertyKey): boolean {\n if (__DEV__ && !isStringish(propName)) {\n return die(`expected a property name as second argument`)\n }\n return _isObservable(value, propName)\n}\n","import { endBatch, startBatch } from \"../internal\"\n\n/**\n * During a transaction no views are updated until the end of the transaction.\n * The transaction will be run synchronously nonetheless.\n *\n * @param action a function that updates some reactive state\n * @returns any value that was returned by the 'action' parameter.\n */\nexport function transaction<T>(action: () => T, thisArg = undefined): T {\n startBatch()\n try {\n return action.apply(thisArg)\n } finally {\n endBatch()\n }\n}\n","import { Lambda, once, untrackedEnd, untrackedStart, die } from \"../internal\"\n\nexport type IInterceptor<T> = (change: T) => T | null\n\nexport interface IInterceptable<T> {\n interceptors_: IInterceptor<T>[] | undefined\n}\n\nexport function hasInterceptors(interceptable: IInterceptable<any>) {\n return interceptable.interceptors_ !== undefined && interceptable.interceptors_.length > 0\n}\n\nexport function registerInterceptor<T>(\n interceptable: IInterceptable<T>,\n handler: IInterceptor<T>\n): Lambda {\n const interceptors = interceptable.interceptors_ || (interceptable.interceptors_ = [])\n interceptors.push(handler)\n return once(() => {\n const idx = interceptors.indexOf(handler)\n if (idx !== -1) {\n interceptors.splice(idx, 1)\n }\n })\n}\n\nexport function interceptChange<T>(\n interceptable: IInterceptable<T | null>,\n change: T | null\n): T | null {\n const prevU = untrackedStart()\n try {\n // Interceptor can modify the array, copy it to avoid concurrent modification, see #1950\n const interceptors = [...(interceptable.interceptors_ || [])]\n for (let i = 0, l = interceptors.length; i < l; i++) {\n change = interceptors[i](change)\n if (change && !(change as any).type) {\n die(14)\n }\n if (!change) {\n break\n }\n }\n return change\n } finally {\n untrackedEnd(prevU)\n }\n}\n","import { Lambda, once, untrackedEnd, untrackedStart } from \"../internal\"\n\nexport interface IListenable {\n changeListeners_: Function[] | undefined\n}\n\nexport function hasListeners(listenable: IListenable) {\n return listenable.changeListeners_ !== undefined && listenable.changeListeners_.length > 0\n}\n\nexport function registerListener(listenable: IListenable, handler: Function): Lambda {\n const listeners = listenable.changeListeners_ || (listenable.changeListeners_ = [])\n listeners.push(handler)\n return once(() => {\n const idx = listeners.indexOf(handler)\n if (idx !== -1) {\n listeners.splice(idx, 1)\n }\n })\n}\n\nexport function notifyListeners<T>(listenable: IListenable, change: T) {\n const prevU = untrackedStart()\n let listeners = listenable.changeListeners_\n if (!listeners) {\n return\n }\n listeners = listeners.slice()\n for (let i = 0, l = listeners.length; i < l; i++) {\n listeners[i](change)\n }\n untrackedEnd(prevU)\n}\n","import {\n $mobx,\n asObservableObject,\n AnnotationsMap,\n CreateObservableOptions,\n ObservableObjectAdministration,\n collectStoredAnnotations,\n isPlainObject,\n isObservableObject,\n die,\n ownKeys,\n extendObservable,\n addHiddenProp,\n storedAnnotationsSymbol,\n initObservable\n} from \"../internal\"\n\n// Hack based on https://github.com/Microsoft/TypeScript/issues/14829#issuecomment-322267089\n// We need this, because otherwise, AdditionalKeys is going to be inferred to be any\n// set of superfluous keys. But, we rather want to get a compile error unless AdditionalKeys is\n// _explicity_ passed as generic argument\n// Fixes: https://github.com/mobxjs/mobx/issues/2325#issuecomment-691070022\ntype NoInfer<T> = [T][T extends any ? 0 : never]\n\ntype MakeObservableOptions = Omit<CreateObservableOptions, \"proxy\">\n\nexport function makeObservable<T extends object, AdditionalKeys extends PropertyKey = never>(\n target: T,\n annotations?: AnnotationsMap<T, NoInfer<AdditionalKeys>>,\n options?: MakeObservableOptions\n): T {\n initObservable(() => {\n const adm: ObservableObjectAdministration = asObservableObject(target, options)[$mobx]\n if (__DEV__ && annotations && target[storedAnnotationsSymbol]) {\n die(\n `makeObservable second arg must be nullish when using decorators. Mixing @decorator syntax with annotations is not supported.`\n )\n }\n // Default to decorators\n annotations ??= collectStoredAnnotations(target)\n\n // Annotate\n ownKeys(annotations).forEach(key => adm.make_(key, annotations![key]))\n })\n return target\n}\n\n// proto[keysSymbol] = new Set<PropertyKey>()\nconst keysSymbol = Symbol(\"mobx-keys\")\n\nexport function makeAutoObservable<T extends object, AdditionalKeys extends PropertyKey = never>(\n target: T,\n overrides?: AnnotationsMap<T, NoInfer<AdditionalKeys>>,\n options?: MakeObservableOptions\n): T {\n if (__DEV__) {\n if (!isPlainObject(target) && !isPlainObject(Object.getPrototypeOf(target))) {\n die(`'makeAutoObservable' can only be used for classes that don't have a superclass`)\n }\n if (isObservableObject(target)) {\n die(`makeAutoObservable can only be used on objects not already made observable`)\n }\n }\n\n // Optimization: avoid visiting protos\n // Assumes that annotation.make_/.extend_ works the same for plain objects\n if (isPlainObject(target)) {\n return extendObservable(target, target, overrides, options)\n }\n\n initObservable(() => {\n const adm: ObservableObjectAdministration = asObservableObject(target, options)[$mobx]\n\n // Optimization: cache keys on proto\n // Assumes makeAutoObservable can be called only once per object and can't be used in subclass\n if (!target[keysSymbol]) {\n const proto = Object.getPrototypeOf(target)\n const keys = new Set([...ownKeys(target), ...ownKeys(proto)])\n keys.delete(\"constructor\")\n keys.delete($mobx)\n addHiddenProp(proto, keysSymbol, keys)\n }\n\n target[keysSymbol].forEach(key =>\n adm.make_(\n key,\n // must pass \"undefined\" for { key: undefined }\n !overrides ? true : key in overrides ? overrides[key] : true\n )\n )\n })\n\n return target\n}\n","import {\n $mobx,\n Atom,\n EMPTY_ARRAY,\n IAtom,\n IEnhancer,\n IInterceptable,\n IInterceptor,\n IListenable,\n Lambda,\n addHiddenFinalProp,\n checkIfStateModificationsAreAllowed,\n createInstanceofPredicate,\n getNextId,\n hasInterceptors,\n hasListeners,\n interceptChange,\n isObject,\n isSpyEnabled,\n notifyListeners,\n registerInterceptor,\n registerListener,\n spyReportEnd,\n spyReportStart,\n assertProxies,\n reserveArrayBuffer,\n hasProp,\n die,\n globalState,\n initObservable\n} from \"../internal\"\n\nconst SPLICE = \"splice\"\nexport const UPDATE = \"update\"\nexport const MAX_SPLICE_SIZE = 10000 // See e.g. https://github.com/mobxjs/mobx/issues/859\n\nexport interface IObservableArray<T = any> extends Array<T> {\n spliceWithArray(index: number, deleteCount?: number, newItems?: T[]): T[]\n clear(): T[]\n replace(newItems: T[]): T[]\n remove(value: T): boolean\n toJSON(): T[]\n}\n\ninterface IArrayBaseChange<T> {\n object: IObservableArray<T>\n observableKind: \"array\"\n debugObjectName: string\n index: number\n}\n\nexport type IArrayDidChange<T = any> = IArrayUpdate<T> | IArraySplice<T>\n\nexport interface IArrayUpdate<T = any> extends IArrayBaseChange<T> {\n type: \"update\"\n newValue: T\n oldValue: T\n}\n\nexport interface IArraySplice<T = any> extends IArrayBaseChange<T> {\n type: \"splice\"\n added: T[]\n addedCount: number\n removed: T[]\n removedCount: number\n}\n\nexport interface IArrayWillChange<T = any> {\n object: IObservableArray<T>\n index: number\n type: \"update\"\n newValue: T\n}\n\nexport interface IArrayWillSplice<T = any> {\n object: IObservableArray<T>\n index: number\n type: \"splice\"\n added: T[]\n removedCount: number\n}\n\nconst arrayTraps = {\n get(target, name) {\n const adm: ObservableArrayAdministration = target[$mobx]\n if (name === $mobx) {\n return adm\n }\n if (name === \"length\") {\n return adm.getArrayLength_()\n }\n if (typeof name === \"string\" && !isNaN(name as any)) {\n return adm.get_(parseInt(name))\n }\n if (hasProp(arrayExtensions, name)) {\n return arrayExtensions[name]\n }\n return target[name]\n },\n set(target, name, value): boolean {\n const adm: ObservableArrayAdministration = target[$mobx]\n if (name === \"length\") {\n adm.setArrayLength_(value)\n }\n if (typeof name === \"symbol\" || isNaN(name)) {\n target[name] = value\n } else {\n // numeric string\n adm.set_(parseInt(name), value)\n }\n return true\n },\n preventExtensions() {\n die(15)\n }\n}\n\nexport class ObservableArrayAdministration\n implements IInterceptable<IArrayWillChange<any> | IArrayWillSplice<any>>, IListenable\n{\n atom_: IAtom\n readonly values_: any[] = [] // this is the prop that gets proxied, so can't replace it!\n interceptors_\n changeListeners_\n enhancer_: (newV: any, oldV: any | undefined) => any\n dehancer: any\n proxy_!: IObservableArray<any>\n lastKnownLength_ = 0\n\n constructor(\n name = __DEV__ ? \"ObservableArray@\" + getNextId() : \"ObservableArray\",\n enhancer: IEnhancer<any>,\n public owned_: boolean,\n public legacyMode_: boolean\n ) {\n this.atom_ = new Atom(name)\n this.enhancer_ = (newV, oldV) =>\n enhancer(newV, oldV, __DEV__ ? name + \"[..]\" : \"ObservableArray[..]\")\n }\n\n dehanceValue_(value: any): any {\n if (this.dehancer !== undefined) {\n return this.dehancer(value)\n }\n return value\n }\n\n dehanceValues_(values: any[]): any[] {\n if (this.dehancer !== undefined && values.length > 0) {\n return values.map(this.dehancer) as any\n }\n return values\n }\n\n intercept_(handler: IInterceptor<IArrayWillChange<any> | IArrayWillSplice<any>>): Lambda {\n return registerInterceptor<IArrayWillChange<any> | IArrayWillSplice<any>>(this, handler)\n }\n\n observe_(\n listener: (changeData: IArrayDidChange<any>) => void,\n fireImmediately = false\n ): Lambda {\n if (fireImmediately) {\n listener(<IArraySplice<any>>{\n observableKind: \"array\",\n object: this.proxy_ as any,\n debugObjectName: this.atom_.name_,\n type: \"splice\",\n index: 0,\n added: this.values_.slice(),\n addedCount: this.values_.length,\n removed: [],\n removedCount: 0\n })\n }\n return registerListener(this, listener)\n }\n\n getArrayLength_(): number {\n this.atom_.reportObserved()\n return this.values_.length\n }\n\n setArrayLength_(newLength: number) {\n if (typeof newLength !== \"number\" || isNaN(newLength) || newLength < 0) {\n die(\"Out of range: \" + newLength)\n }\n let currentLength = this.values_.length\n if (newLength === currentLength) {\n return\n } else if (newLength > currentLength) {\n const newItems = new Array(newLength - currentLength)\n for (let i = 0; i < newLength - currentLength; i++) {\n newItems[i] = undefined\n } // No Array.fill everywhere...\n this.spliceWithArray_(currentLength, 0, newItems)\n } else {\n this.spliceWithArray_(newLength, currentLength - newLength)\n }\n }\n\n updateArrayLength_(oldLength: number, delta: number) {\n if (oldLength !== this.lastKnownLength_) {\n die(16)\n }\n this.lastKnownLength_ += delta\n if (this.legacyMode_ && delta > 0) {\n reserveArrayBuffer(oldLength + delta + 1)\n }\n }\n\n spliceWithArray_(index: number, deleteCount?: number, newItems?: any[]): any[] {\n checkIfStateModificationsAreAllowed(this.atom_)\n const length = this.values_.length\n\n if (index === undefined) {\n index = 0\n } else if (index > length) {\n index = length\n } else if (index < 0) {\n index = Math.max(0, length + index)\n }\n\n if (arguments.length === 1) {\n deleteCount = length - index\n } else if (deleteCount === undefined || deleteCount === null) {\n deleteCount = 0\n } else {\n deleteCount = Math.max(0, Math.min(deleteCount, length - index))\n }\n\n if (newItems === undefined) {\n newItems = EMPTY_ARRAY\n }\n\n if (hasInterceptors(this)) {\n const change = interceptChange<IArrayWillSplice<any>>(this as any, {\n object: this.proxy_ as any,\n type: SPLICE,\n index,\n removedCount: deleteCount,\n added: newItems\n })\n if (!change) {\n return EMPTY_ARRAY\n }\n deleteCount = change.removedCount\n newItems = change.added\n }\n\n newItems =\n newItems.length === 0 ? newItems : newItems.map(v => this.enhancer_(v, undefined))\n if (this.legacyMode_ || __DEV__) {\n const lengthDelta = newItems.length - deleteCount\n this.updateArrayLength_(length, lengthDelta) // checks if internal array wasn't modified\n }\n const res = this.spliceItemsIntoValues_(index, deleteCount, newItems)\n\n if (deleteCount !== 0 || newItems.length !== 0) {\n this.notifyArraySplice_(index, newItems, res)\n }\n return this.dehanceValues_(res)\n }\n\n spliceItemsIntoValues_(index: number, deleteCount: number, newItems: any[]): any[] {\n if (newItems.length < MAX_SPLICE_SIZE) {\n return this.values_.splice(index, deleteCount, ...newItems)\n } else {\n // The items removed by the splice\n const res = this.values_.slice(index, index + deleteCount)\n // The items that that should remain at the end of the array\n let oldItems = this.values_.slice(index + deleteCount)\n // New length is the previous length + addition count - deletion count\n this.values_.length += newItems.length - deleteCount\n for (let i = 0; i < newItems.length; i++) {\n this.values_[index + i] = newItems[i]\n }\n for (let i = 0; i < oldItems.length; i++) {\n this.values_[index + newItems.length + i] = oldItems[i]\n }\n return res\n }\n }\n\n notifyArrayChildUpdate_(index: number, newValue: any, oldValue: any) {\n const notifySpy = !this.owned_ && isSpyEnabled()\n const notify = hasListeners(this)\n const change: IArrayDidChange | null =\n notify || notifySpy\n ? ({\n observableKind: \"array\",\n object: this.proxy_,\n type: UPDATE,\n debugObjectName: this.atom_.name_,\n index,\n newValue,\n oldValue\n } as const)\n : null\n\n // The reason why this is on right hand side here (and not above), is this way the uglifier will drop it, but it won't\n // cause any runtime overhead in development mode without NODE_ENV set, unless spying is enabled\n if (__DEV__ && notifySpy) {\n spyReportStart(change!)\n }\n this.atom_.reportChanged()\n if (notify) {\n notifyListeners(this, change)\n }\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n }\n\n notifyArraySplice_(index: number, added: any[], removed: any[]) {\n const notifySpy = !this.owned_ && isSpyEnabled()\n const notify = hasListeners(this)\n const change: IArraySplice | null =\n notify || notifySpy\n ? ({\n observableKind: \"array\",\n object: this.proxy_,\n debugObjectName: this.atom_.name_,\n type: SPLICE,\n index,\n removed,\n added,\n removedCount: removed.length,\n addedCount: added.length\n } as const)\n : null\n\n if (__DEV__ && notifySpy) {\n spyReportStart(change!)\n }\n this.atom_.reportChanged()\n // conform: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/observe\n if (notify) {\n notifyListeners(this, change)\n }\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n }\n\n get_(index: number): any | undefined {\n if (this.legacyMode_ && index >= this.values_.length) {\n console.warn(\n __DEV__\n ? `[mobx.array] Attempt to read an array index (${index}) that is out of bounds (${this.values_.length}). Please check length first. Out of bound indices will not be tracked by MobX`\n : `[mobx] Out of bounds read: ${index}`\n )\n return undefined\n }\n this.atom_.reportObserved()\n return this.dehanceValue_(this.values_[index])\n }\n\n set_(index: number, newValue: any) {\n const values = this.values_\n if (this.legacyMode_ && index > values.length) {\n // out of bounds\n die(17, index, values.length)\n }\n if (index < values.length) {\n // update at index in range\n checkIfStateModificationsAreAllowed(this.atom_)\n const oldValue = values[index]\n if (hasInterceptors(this)) {\n const change = interceptChange<IArrayWillChange<any>>(this as any, {\n type: UPDATE,\n object: this.proxy_ as any, // since \"this\" is the real array we need to pass its proxy\n index,\n newValue\n })\n if (!change) {\n return\n }\n newValue = change.newValue\n }\n newValue = this.enhancer_(newValue, oldValue)\n const changed = newValue !== oldValue\n if (changed) {\n values[index] = newValue\n this.notifyArrayChildUpdate_(index, newValue, oldValue)\n }\n } else {\n // For out of bound index, we don't create an actual sparse array,\n // but rather fill the holes with undefined (same as setArrayLength_).\n // This could be considered a bug.\n const newItems = new Array(index + 1 - values.length)\n for (let i = 0; i < newItems.length - 1; i++) {\n newItems[i] = undefined\n } // No Array.fill everywhere...\n newItems[newItems.length - 1] = newValue\n this.spliceWithArray_(values.length, 0, newItems)\n }\n }\n}\n\nexport function createObservableArray<T>(\n initialValues: T[] | undefined,\n enhancer: IEnhancer<T>,\n name = __DEV__ ? \"ObservableArray@\" + getNextId() : \"ObservableArray\",\n owned = false\n): IObservableArray<T> {\n assertProxies()\n return initObservable(() => {\n const adm = new ObservableArrayAdministration(name, enhancer, owned, false)\n addHiddenFinalProp(adm.values_, $mobx, adm)\n const proxy = new Proxy(adm.values_, arrayTraps) as any\n adm.proxy_ = proxy\n if (initialValues && initialValues.length) {\n adm.spliceWithArray_(0, 0, initialValues)\n }\n return proxy\n })\n}\n\n// eslint-disable-next-line\nexport var arrayExtensions = {\n clear(): any[] {\n return this.splice(0)\n },\n\n replace(newItems: any[]) {\n const adm: ObservableArrayAdministration = this[$mobx]\n return adm.spliceWithArray_(0, adm.values_.length, newItems)\n },\n\n // Used by JSON.stringify\n toJSON(): any[] {\n return this.slice()\n },\n\n /*\n * functions that do alter the internal structure of the array, (based on lib.es6.d.ts)\n * since these functions alter the inner structure of the array, the have side effects.\n * Because the have side effects, they should not be used in computed function,\n * and for that reason the do not call dependencyState.notifyObserved\n */\n splice(index: number, deleteCount?: number, ...newItems: any[]): any[] {\n const adm: ObservableArrayAdministration = this[$mobx]\n switch (arguments.length) {\n case 0:\n return []\n case 1:\n return adm.spliceWithArray_(index)\n case 2:\n return adm.spliceWithArray_(index, deleteCount)\n }\n return adm.spliceWithArray_(index, deleteCount, newItems)\n },\n\n spliceWithArray(index: number, deleteCount?: number, newItems?: any[]): any[] {\n return (this[$mobx] as ObservableArrayAdministration).spliceWithArray_(\n index,\n deleteCount,\n newItems\n )\n },\n\n push(...items: any[]): number {\n const adm: ObservableArrayAdministration = this[$mobx]\n adm.spliceWithArray_(adm.values_.length, 0, items)\n return adm.values_.length\n },\n\n pop() {\n return this.splice(Math.max(this[$mobx].values_.length - 1, 0), 1)[0]\n },\n\n shift() {\n return this.splice(0, 1)[0]\n },\n\n unshift(...items: any[]): number {\n const adm: ObservableArrayAdministration = this[$mobx]\n adm.spliceWithArray_(0, 0, items)\n return adm.values_.length\n },\n\n reverse(): any[] {\n // reverse by default mutates in place before returning the result\n // which makes it both a 'derivation' and a 'mutation'.\n if (globalState.trackingDerivation) {\n die(37, \"reverse\")\n }\n this.replace(this.slice().reverse())\n return this\n },\n\n sort(): any[] {\n // sort by default mutates in place before returning the result\n // which goes against all good practices. Let's not change the array in place!\n if (globalState.trackingDerivation) {\n die(37, \"sort\")\n }\n const copy = this.slice()\n copy.sort.apply(copy, arguments)\n this.replace(copy)\n return this\n },\n\n remove(value: any): boolean {\n const adm: ObservableArrayAdministration = this[$mobx]\n const idx = adm.dehanceValues_(adm.values_).indexOf(value)\n if (idx > -1) {\n this.splice(idx, 1)\n return true\n }\n return false\n }\n}\n\n/**\n * Wrap function from prototype\n * Without this, everything works as well, but this works\n * faster as everything works on unproxied values\n */\naddArrayExtension(\"at\", simpleFunc)\naddArrayExtension(\"concat\", simpleFunc)\naddArrayExtension(\"flat\", simpleFunc)\naddArrayExtension(\"includes\", simpleFunc)\naddArrayExtension(\"indexOf\", simpleFunc)\naddArrayExtension(\"join\", simpleFunc)\naddArrayExtension(\"lastIndexOf\", simpleFunc)\naddArrayExtension(\"slice\", simpleFunc)\naddArrayExtension(\"toString\", simpleFunc)\naddArrayExtension(\"toLocaleString\", simpleFunc)\naddArrayExtension(\"toSorted\", simpleFunc)\naddArrayExtension(\"toSpliced\", simpleFunc)\naddArrayExtension(\"with\", simpleFunc)\n// map\naddArrayExtension(\"every\", mapLikeFunc)\naddArrayExtension(\"filter\", mapLikeFunc)\naddArrayExtension(\"find\", mapLikeFunc)\naddArrayExtension(\"findIndex\", mapLikeFunc)\naddArrayExtension(\"findLast\", mapLikeFunc)\naddArrayExtension(\"findLastIndex\", mapLikeFunc)\naddArrayExtension(\"flatMap\", mapLikeFunc)\naddArrayExtension(\"forEach\", mapLikeFunc)\naddArrayExtension(\"map\", mapLikeFunc)\naddArrayExtension(\"some\", mapLikeFunc)\naddArrayExtension(\"toReversed\", mapLikeFunc)\n// reduce\naddArrayExtension(\"reduce\", reduceLikeFunc)\naddArrayExtension(\"reduceRight\", reduceLikeFunc)\n\nfunction addArrayExtension(funcName, funcFactory) {\n if (typeof Array.prototype[funcName] === \"function\") {\n arrayExtensions[funcName] = funcFactory(funcName)\n }\n}\n\n// Report and delegate to dehanced array\nfunction simpleFunc(funcName) {\n return function () {\n const adm: ObservableArrayAdministration = this[$mobx]\n adm.atom_.reportObserved()\n const dehancedValues = adm.dehanceValues_(adm.values_)\n return dehancedValues[funcName].apply(dehancedValues, arguments)\n }\n}\n\n// Make sure callbacks recieve correct array arg #2326\nfunction mapLikeFunc(funcName) {\n return function (callback, thisArg) {\n const adm: ObservableArrayAdministration = this[$mobx]\n adm.atom_.reportObserved()\n const dehancedValues = adm.dehanceValues_(adm.values_)\n return dehancedValues[funcName]((element, index) => {\n return callback.call(thisArg, element, index, this)\n })\n }\n}\n\n// Make sure callbacks recieve correct array arg #2326\nfunction reduceLikeFunc(funcName) {\n return function () {\n const adm: ObservableArrayAdministration = this[$mobx]\n adm.atom_.reportObserved()\n const dehancedValues = adm.dehanceValues_(adm.values_)\n // #2432 - reduce behavior depends on arguments.length\n const callback = arguments[0]\n arguments[0] = (accumulator, currentValue, index) => {\n return callback(accumulator, currentValue, index, this)\n }\n return dehancedValues[funcName].apply(dehancedValues, arguments)\n }\n}\n\nconst isObservableArrayAdministration = createInstanceofPredicate(\n \"ObservableArrayAdministration\",\n ObservableArrayAdministration\n)\n\nexport function isObservableArray(thing): thing is IObservableArray<any> {\n return isObject(thing) && isObservableArrayAdministration(thing[$mobx])\n}\n","import { IComputedDidChange } from \"./computedvalue\"\nimport { IValueDidChange, IBoxDidChange } from \"./../types/observablevalue\"\nimport { IObjectDidChange } from \"./../types/observableobject\"\nimport { IArrayDidChange } from \"./../types/observablearray\"\nimport { Lambda, globalState, once, ISetDidChange, IMapDidChange } from \"../internal\"\n\nexport function isSpyEnabled() {\n return __DEV__ && !!globalState.spyListeners.length\n}\n\nexport type PureSpyEvent =\n | { type: \"action\"; name: string; object: unknown; arguments: unknown[] }\n | { type: \"scheduled-reaction\"; name: string }\n | { type: \"reaction\"; name: string }\n | { type: \"error\"; name: string; message: string; error: string }\n | IComputedDidChange<unknown>\n | IObjectDidChange<unknown>\n | IArrayDidChange<unknown>\n | IMapDidChange<unknown, unknown>\n | ISetDidChange<unknown>\n | IValueDidChange<unknown>\n | IBoxDidChange<unknown>\n | { type: \"report-end\"; spyReportEnd: true; time?: number }\n\ntype SpyEvent = PureSpyEvent & { spyReportStart?: true }\n\nexport function spyReport(event: SpyEvent) {\n if (!__DEV__) {\n return\n } // dead code elimination can do the rest\n if (!globalState.spyListeners.length) {\n return\n }\n const listeners = globalState.spyListeners\n for (let i = 0, l = listeners.length; i < l; i++) {\n listeners[i](event)\n }\n}\n\nexport function spyReportStart(event: PureSpyEvent) {\n if (!__DEV__) {\n return\n }\n const change = { ...event, spyReportStart: true as const }\n spyReport(change)\n}\n\nconst END_EVENT: SpyEvent = { type: \"report-end\", spyReportEnd: true }\n\nexport function spyReportEnd(change?: { time?: number }) {\n if (!__DEV__) {\n return\n }\n if (change) {\n spyReport({ ...change, type: \"report-end\", spyReportEnd: true })\n } else {\n spyReport(END_EVENT)\n }\n}\n\nexport function spy(listener: (change: SpyEvent) => void): Lambda {\n if (!__DEV__) {\n console.warn(`[mobx.spy] Is a no-op in production builds`)\n return function () {}\n } else {\n globalState.spyListeners.push(listener)\n return once(() => {\n globalState.spyListeners = globalState.spyListeners.filter(l => l !== listener)\n })\n }\n}\n","import {\n $mobx,\n IEnhancer,\n IInterceptable,\n IInterceptor,\n IListenable,\n Lambda,\n ObservableValue,\n checkIfStateModificationsAreAllowed,\n createAtom,\n createInstanceofPredicate,\n deepEnhancer,\n getNextId,\n getPlainObjectKeys,\n hasInterceptors,\n hasListeners,\n interceptChange,\n isES6Map,\n isPlainObject,\n isSpyEnabled,\n makeIterable,\n notifyListeners,\n referenceEnhancer,\n registerInterceptor,\n registerListener,\n spyReportEnd,\n spyReportStart,\n stringifyKey,\n transaction,\n untracked,\n onBecomeUnobserved,\n globalState,\n die,\n isFunction,\n UPDATE,\n IAtom,\n PureSpyEvent,\n initObservable\n} from \"../internal\"\n\nexport interface IKeyValueMap<V = any> {\n [key: string]: V\n}\n\nexport type IMapEntry<K = any, V = any> = [K, V]\nexport type IReadonlyMapEntry<K = any, V = any> = readonly [K, V]\nexport type IMapEntries<K = any, V = any> = IMapEntry<K, V>[]\nexport type IReadonlyMapEntries<K = any, V = any> = IReadonlyMapEntry<K, V>[]\n\nexport type IMapDidChange<K = any, V = any> = { observableKind: \"map\"; debugObjectName: string } & (\n | {\n object: ObservableMap<K, V>\n name: K // actual the key or index, but this is based on the ancient .observe proposal for consistency\n type: \"update\"\n newValue: V\n oldValue: V\n }\n | {\n object: ObservableMap<K, V>\n name: K\n type: \"add\"\n newValue: V\n }\n | {\n object: ObservableMap<K, V>\n name: K\n type: \"delete\"\n oldValue: V\n }\n)\n\nexport interface IMapWillChange<K = any, V = any> {\n object: ObservableMap<K, V>\n type: \"update\" | \"add\" | \"delete\"\n name: K\n newValue?: V\n}\n\nconst ObservableMapMarker = {}\n\nexport const ADD = \"add\"\nexport const DELETE = \"delete\"\n\nexport type IObservableMapInitialValues<K = any, V = any> =\n | IMapEntries<K, V>\n | IReadonlyMapEntries<K, V>\n | IKeyValueMap<V>\n | Map<K, V>\n\n// just extend Map? See also https://gist.github.com/nestharus/13b4d74f2ef4a2f4357dbd3fc23c1e54\n// But: https://github.com/mobxjs/mobx/issues/1556\nexport class ObservableMap<K = any, V = any>\n implements Map<K, V>, IInterceptable<IMapWillChange<K, V>>, IListenable\n{\n [$mobx] = ObservableMapMarker\n data_!: Map<K, ObservableValue<V>>\n hasMap_!: Map<K, ObservableValue<boolean>> // hasMap, not hashMap >-).\n keysAtom_!: IAtom\n interceptors_\n changeListeners_\n dehancer: any\n\n constructor(\n initialData?: IObservableMapInitialValues<K, V>,\n public enhancer_: IEnhancer<V> = deepEnhancer,\n public name_ = __DEV__ ? \"ObservableMap@\" + getNextId() : \"ObservableMap\"\n ) {\n if (!isFunction(Map)) {\n die(18)\n }\n initObservable(() => {\n this.keysAtom_ = createAtom(__DEV__ ? `${this.name_}.keys()` : \"ObservableMap.keys()\")\n this.data_ = new Map()\n this.hasMap_ = new Map()\n if (initialData) {\n this.merge(initialData)\n }\n })\n }\n\n private has_(key: K): boolean {\n return this.data_.has(key)\n }\n\n has(key: K): boolean {\n if (!globalState.trackingDerivation) {\n return this.has_(key)\n }\n\n let entry = this.hasMap_.get(key)\n if (!entry) {\n const newEntry = (entry = new ObservableValue(\n this.has_(key),\n referenceEnhancer,\n __DEV__ ? `${this.name_}.${stringifyKey(key)}?` : \"ObservableMap.key?\",\n false\n ))\n this.hasMap_.set(key, newEntry)\n onBecomeUnobserved(newEntry, () => this.hasMap_.delete(key))\n }\n\n return entry.get()\n }\n\n set(key: K, value: V) {\n const hasKey = this.has_(key)\n if (hasInterceptors(this)) {\n const change = interceptChange<IMapWillChange<K, V>>(this, {\n type: hasKey ? UPDATE : ADD,\n object: this,\n newValue: value,\n name: key\n })\n if (!change) {\n return this\n }\n value = change.newValue!\n }\n if (hasKey) {\n this.updateValue_(key, value)\n } else {\n this.addValue_(key, value)\n }\n return this\n }\n\n delete(key: K): boolean {\n checkIfStateModificationsAreAllowed(this.keysAtom_)\n if (hasInterceptors(this)) {\n const change = interceptChange<IMapWillChange<K, V>>(this, {\n type: DELETE,\n object: this,\n name: key\n })\n if (!change) {\n return false\n }\n }\n if (this.has_(key)) {\n const notifySpy = isSpyEnabled()\n const notify = hasListeners(this)\n const change: IMapDidChange<K, V> | null =\n notify || notifySpy\n ? {\n observableKind: \"map\",\n debugObjectName: this.name_,\n type: DELETE,\n object: this,\n oldValue: (<any>this.data_.get(key)).value_,\n name: key\n }\n : null\n\n if (__DEV__ && notifySpy) {\n spyReportStart(change! as PureSpyEvent)\n } // TODO fix type\n transaction(() => {\n this.keysAtom_.reportChanged()\n this.hasMap_.get(key)?.setNewValue_(false)\n const observable = this.data_.get(key)!\n observable.setNewValue_(undefined as any)\n this.data_.delete(key)\n })\n if (notify) {\n notifyListeners(this, change)\n }\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n return true\n }\n return false\n }\n\n private updateValue_(key: K, newValue: V | undefined) {\n const observable = this.data_.get(key)!\n newValue = (observable as any).prepareNewValue_(newValue) as V\n if (newValue !== globalState.UNCHANGED) {\n const notifySpy = isSpyEnabled()\n const notify = hasListeners(this)\n const change: IMapDidChange<K, V> | null =\n notify || notifySpy\n ? {\n observableKind: \"map\",\n debugObjectName: this.name_,\n type: UPDATE,\n object: this,\n oldValue: (observable as any).value_,\n name: key,\n newValue\n }\n : null\n if (__DEV__ && notifySpy) {\n spyReportStart(change! as PureSpyEvent)\n } // TODO fix type\n observable.setNewValue_(newValue as V)\n if (notify) {\n notifyListeners(this, change)\n }\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n }\n }\n\n private addValue_(key: K, newValue: V) {\n checkIfStateModificationsAreAllowed(this.keysAtom_)\n transaction(() => {\n const observable = new ObservableValue(\n newValue,\n this.enhancer_,\n __DEV__ ? `${this.name_}.${stringifyKey(key)}` : \"ObservableMap.key\",\n false\n )\n this.data_.set(key, observable)\n newValue = (observable as any).value_ // value might have been changed\n this.hasMap_.get(key)?.setNewValue_(true)\n this.keysAtom_.reportChanged()\n })\n const notifySpy = isSpyEnabled()\n const notify = hasListeners(this)\n const change: IMapDidChange<K, V> | null =\n notify || notifySpy\n ? {\n observableKind: \"map\",\n debugObjectName: this.name_,\n type: ADD,\n object: this,\n name: key,\n newValue\n }\n : null\n if (__DEV__ && notifySpy) {\n spyReportStart(change! as PureSpyEvent)\n } // TODO fix type\n if (notify) {\n notifyListeners(this, change)\n }\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n }\n\n get(key: K): V | undefined {\n if (this.has(key)) {\n return this.dehanceValue_(this.data_.get(key)!.get())\n }\n return this.dehanceValue_(undefined)\n }\n\n private dehanceValue_<X extends V | undefined>(value: X): X {\n if (this.dehancer !== undefined) {\n return this.dehancer(value)\n }\n return value\n }\n\n keys(): IterableIterator<K> {\n this.keysAtom_.reportObserved()\n return this.data_.keys()\n }\n\n values(): IterableIterator<V> {\n const self = this\n const keys = this.keys()\n return makeIterable({\n next() {\n const { done, value } = keys.next()\n return {\n done,\n value: done ? (undefined as any) : self.get(value)\n }\n }\n })\n }\n\n entries(): IterableIterator<IMapEntry<K, V>> {\n const self = this\n const keys = this.keys()\n return makeIterable({\n next() {\n const { done, value } = keys.next()\n return {\n done,\n value: done ? (undefined as any) : ([value, self.get(value)!] as [K, V])\n }\n }\n })\n }\n\n [Symbol.iterator]() {\n return this.entries()\n }\n\n forEach(callback: (value: V, key: K, object: Map<K, V>) => void, thisArg?) {\n for (const [key, value] of this) {\n callback.call(thisArg, value, key, this)\n }\n }\n\n /** Merge another object into this object, returns this. */\n merge(other?: IObservableMapInitialValues<K, V>): ObservableMap<K, V> {\n if (isObservableMap(other)) {\n other = new Map(other)\n }\n transaction(() => {\n if (isPlainObject(other)) {\n getPlainObjectKeys(other).forEach((key: any) =>\n this.set(key as K, (other as IKeyValueMap)[key])\n )\n } else if (Array.isArray(other)) {\n other.forEach(([key, value]) => this.set(key, value))\n } else if (isES6Map(other)) {\n if (other.constructor !== Map) {\n die(19, other)\n }\n other.forEach((value, key) => this.set(key, value))\n } else if (other !== null && other !== undefined) {\n die(20, other)\n }\n })\n return this\n }\n\n clear() {\n transaction(() => {\n untracked(() => {\n for (const key of this.keys()) {\n this.delete(key)\n }\n })\n })\n }\n\n replace(values: IObservableMapInitialValues<K, V>): ObservableMap<K, V> {\n // Implementation requirements:\n // - respect ordering of replacement map\n // - allow interceptors to run and potentially prevent individual operations\n // - don't recreate observables that already exist in original map (so we don't destroy existing subscriptions)\n // - don't _keysAtom.reportChanged if the keys of resulting map are indentical (order matters!)\n // - note that result map may differ from replacement map due to the interceptors\n transaction(() => {\n // Convert to map so we can do quick key lookups\n const replacementMap = convertToMap(values)\n const orderedData = new Map()\n // Used for optimization\n let keysReportChangedCalled = false\n // Delete keys that don't exist in replacement map\n // if the key deletion is prevented by interceptor\n // add entry at the beginning of the result map\n for (const key of this.data_.keys()) {\n // Concurrently iterating/deleting keys\n // iterator should handle this correctly\n if (!replacementMap.has(key)) {\n const deleted = this.delete(key)\n // Was the key removed?\n if (deleted) {\n // _keysAtom.reportChanged() was already called\n keysReportChangedCalled = true\n } else {\n // Delete prevented by interceptor\n const value = this.data_.get(key)\n orderedData.set(key, value)\n }\n }\n }\n // Merge entries\n for (const [key, value] of replacementMap.entries()) {\n // We will want to know whether a new key is added\n const keyExisted = this.data_.has(key)\n // Add or update value\n this.set(key, value)\n // The addition could have been prevent by interceptor\n if (this.data_.has(key)) {\n // The update could have been prevented by interceptor\n // and also we want to preserve existing values\n // so use value from _data map (instead of replacement map)\n const value = this.data_.get(key)\n orderedData.set(key, value)\n // Was a new key added?\n if (!keyExisted) {\n // _keysAtom.reportChanged() was already called\n keysReportChangedCalled = true\n }\n }\n }\n // Check for possible key order change\n if (!keysReportChangedCalled) {\n if (this.data_.size !== orderedData.size) {\n // If size differs, keys are definitely modified\n this.keysAtom_.reportChanged()\n } else {\n const iter1 = this.data_.keys()\n const iter2 = orderedData.keys()\n let next1 = iter1.next()\n let next2 = iter2.next()\n while (!next1.done) {\n if (next1.value !== next2.value) {\n this.keysAtom_.reportChanged()\n break\n }\n next1 = iter1.next()\n next2 = iter2.next()\n }\n }\n }\n // Use correctly ordered map\n this.data_ = orderedData\n })\n return this\n }\n\n get size(): number {\n this.keysAtom_.reportObserved()\n return this.data_.size\n }\n\n toString(): string {\n return \"[object ObservableMap]\"\n }\n\n toJSON(): [K, V][] {\n return Array.from(this)\n }\n\n get [Symbol.toStringTag]() {\n return \"Map\"\n }\n\n /**\n * Observes this object. Triggers for the events 'add', 'update' and 'delete'.\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe\n * for callback details\n */\n observe_(listener: (changes: IMapDidChange<K, V>) => void, fireImmediately?: boolean): Lambda {\n if (__DEV__ && fireImmediately === true) {\n die(\"`observe` doesn't support fireImmediately=true in combination with maps.\")\n }\n return registerListener(this, listener)\n }\n\n intercept_(handler: IInterceptor<IMapWillChange<K, V>>): Lambda {\n return registerInterceptor(this, handler)\n }\n}\n\n// eslint-disable-next-line\nexport var isObservableMap = createInstanceofPredicate(\"ObservableMap\", ObservableMap) as (\n thing: any\n) => thing is ObservableMap<any, any>\n\nfunction convertToMap(dataStructure: any): Map<any, any> {\n if (isES6Map(dataStructure) || isObservableMap(dataStructure)) {\n return dataStructure\n } else if (Array.isArray(dataStructure)) {\n return new Map(dataStructure)\n } else if (isPlainObject(dataStructure)) {\n const map = new Map()\n for (const key in dataStructure) {\n map.set(key, dataStructure[key])\n }\n return map\n } else {\n return die(21, dataStructure)\n }\n}\n","import {\n $mobx,\n createAtom,\n deepEnhancer,\n getNextId,\n IEnhancer,\n isSpyEnabled,\n hasListeners,\n IListenable,\n registerListener,\n Lambda,\n spyReportStart,\n notifyListeners,\n spyReportEnd,\n createInstanceofPredicate,\n hasInterceptors,\n interceptChange,\n IInterceptable,\n IInterceptor,\n registerInterceptor,\n checkIfStateModificationsAreAllowed,\n untracked,\n makeIterable,\n transaction,\n isES6Set,\n IAtom,\n DELETE,\n ADD,\n die,\n isFunction,\n initObservable\n} from \"../internal\"\n\nconst ObservableSetMarker = {}\n\nexport type IObservableSetInitialValues<T> = Set<T> | readonly T[]\n\nexport type ISetDidChange<T = any> =\n | {\n object: ObservableSet<T>\n observableKind: \"set\"\n debugObjectName: string\n type: \"add\"\n newValue: T\n }\n | {\n object: ObservableSet<T>\n observableKind: \"set\"\n debugObjectName: string\n type: \"delete\"\n oldValue: T\n }\n\nexport type ISetWillChange<T = any> =\n | {\n type: \"delete\"\n object: ObservableSet<T>\n oldValue: T\n }\n | {\n type: \"add\"\n object: ObservableSet<T>\n newValue: T\n }\n\nexport class ObservableSet<T = any> implements Set<T>, IInterceptable<ISetWillChange>, IListenable {\n [$mobx] = ObservableSetMarker\n private data_: Set<any> = new Set()\n atom_!: IAtom\n changeListeners_\n interceptors_\n dehancer: any\n enhancer_: (newV: any, oldV: any | undefined) => any\n\n constructor(\n initialData?: IObservableSetInitialValues<T>,\n enhancer: IEnhancer<T> = deepEnhancer,\n public name_ = __DEV__ ? \"ObservableSet@\" + getNextId() : \"ObservableSet\"\n ) {\n if (!isFunction(Set)) {\n die(22)\n }\n this.enhancer_ = (newV, oldV) => enhancer(newV, oldV, name_)\n initObservable(() => {\n this.atom_ = createAtom(this.name_)\n if (initialData) {\n this.replace(initialData)\n }\n })\n }\n\n private dehanceValue_<X extends T | undefined>(value: X): X {\n if (this.dehancer !== undefined) {\n return this.dehancer(value)\n }\n return value\n }\n\n clear() {\n transaction(() => {\n untracked(() => {\n for (const value of this.data_.values()) {\n this.delete(value)\n }\n })\n })\n }\n\n forEach(callbackFn: (value: T, value2: T, set: Set<T>) => void, thisArg?: any) {\n for (const value of this) {\n callbackFn.call(thisArg, value, value, this)\n }\n }\n\n get size() {\n this.atom_.reportObserved()\n return this.data_.size\n }\n\n add(value: T) {\n checkIfStateModificationsAreAllowed(this.atom_)\n if (hasInterceptors(this)) {\n const change = interceptChange<ISetWillChange<T>>(this, {\n type: ADD,\n object: this,\n newValue: value\n })\n if (!change) {\n return this\n }\n // ideally, value = change.value would be done here, so that values can be\n // changed by interceptor. Same applies for other Set and Map api's.\n }\n if (!this.has(value)) {\n transaction(() => {\n this.data_.add(this.enhancer_(value, undefined))\n this.atom_.reportChanged()\n })\n const notifySpy = __DEV__ && isSpyEnabled()\n const notify = hasListeners(this)\n const change =\n notify || notifySpy\n ? <ISetDidChange<T>>{\n observableKind: \"set\",\n debugObjectName: this.name_,\n type: ADD,\n object: this,\n newValue: value\n }\n : null\n if (notifySpy && __DEV__) {\n spyReportStart(change!)\n }\n if (notify) {\n notifyListeners(this, change)\n }\n if (notifySpy && __DEV__) {\n spyReportEnd()\n }\n }\n\n return this\n }\n\n delete(value: T) {\n if (hasInterceptors(this)) {\n const change = interceptChange<ISetWillChange<T>>(this, {\n type: DELETE,\n object: this,\n oldValue: value\n })\n if (!change) {\n return false\n }\n }\n if (this.has(value)) {\n const notifySpy = __DEV__ && isSpyEnabled()\n const notify = hasListeners(this)\n const change =\n notify || notifySpy\n ? <ISetDidChange<T>>{\n observableKind: \"set\",\n debugObjectName: this.name_,\n type: DELETE,\n object: this,\n oldValue: value\n }\n : null\n\n if (notifySpy && __DEV__) {\n spyReportStart(change!)\n }\n transaction(() => {\n this.atom_.reportChanged()\n this.data_.delete(value)\n })\n if (notify) {\n notifyListeners(this, change)\n }\n if (notifySpy && __DEV__) {\n spyReportEnd()\n }\n return true\n }\n return false\n }\n\n has(value: T) {\n this.atom_.reportObserved()\n return this.data_.has(this.dehanceValue_(value))\n }\n\n entries() {\n let nextIndex = 0\n const keys = Array.from(this.keys())\n const values = Array.from(this.values())\n return makeIterable<[T, T]>({\n next() {\n const index = nextIndex\n nextIndex += 1\n return index < values.length\n ? { value: [keys[index], values[index]], done: false }\n : { done: true }\n }\n } as any)\n }\n\n keys(): IterableIterator<T> {\n return this.values()\n }\n\n values(): IterableIterator<T> {\n this.atom_.reportObserved()\n const self = this\n let nextIndex = 0\n const observableValues = Array.from(this.data_.values())\n return makeIterable<T>({\n next() {\n return nextIndex < observableValues.length\n ? { value: self.dehanceValue_(observableValues[nextIndex++]), done: false }\n : { done: true }\n }\n } as any)\n }\n\n replace(other: ObservableSet<T> | IObservableSetInitialValues<T>): ObservableSet<T> {\n if (isObservableSet(other)) {\n other = new Set(other)\n }\n\n transaction(() => {\n if (Array.isArray(other)) {\n this.clear()\n other.forEach(value => this.add(value))\n } else if (isES6Set(other)) {\n this.clear()\n other.forEach(value => this.add(value))\n } else if (other !== null && other !== undefined) {\n die(\"Cannot initialize set from \" + other)\n }\n })\n\n return this\n }\n observe_(listener: (changes: ISetDidChange<T>) => void, fireImmediately?: boolean): Lambda {\n // ... 'fireImmediately' could also be true?\n if (__DEV__ && fireImmediately === true) {\n die(\"`observe` doesn't support fireImmediately=true in combination with sets.\")\n }\n return registerListener(this, listener)\n }\n\n intercept_(handler: IInterceptor<ISetWillChange<T>>): Lambda {\n return registerInterceptor(this, handler)\n }\n\n toJSON(): T[] {\n return Array.from(this)\n }\n\n toString(): string {\n return \"[object ObservableSet]\"\n }\n\n [Symbol.iterator]() {\n return this.values()\n }\n\n get [Symbol.toStringTag]() {\n return \"Set\"\n }\n}\n\n// eslint-disable-next-line\nexport var isObservableSet = createInstanceofPredicate(\"ObservableSet\", ObservableSet) as (\n thing: any\n) => thing is ObservableSet<any>\n","import {\n CreateObservableOptions,\n getAnnotationFromOptions,\n propagateChanged,\n isAnnotation,\n $mobx,\n Atom,\n Annotation,\n ComputedValue,\n IAtom,\n IComputedValueOptions,\n IEnhancer,\n IInterceptable,\n IListenable,\n Lambda,\n ObservableValue,\n addHiddenProp,\n createInstanceofPredicate,\n endBatch,\n getNextId,\n hasInterceptors,\n hasListeners,\n interceptChange,\n isObject,\n isPlainObject,\n isSpyEnabled,\n notifyListeners,\n referenceEnhancer,\n registerInterceptor,\n registerListener,\n spyReportEnd,\n spyReportStart,\n startBatch,\n stringifyKey,\n globalState,\n ADD,\n UPDATE,\n die,\n hasProp,\n getDescriptor,\n storedAnnotationsSymbol,\n ownKeys,\n isOverride,\n defineProperty,\n autoAnnotation,\n getAdministration,\n getDebugName,\n objectPrototype,\n MakeResult,\n checkIfStateModificationsAreAllowed\n} from \"../internal\"\n\nconst descriptorCache = Object.create(null)\n\nexport type IObjectDidChange<T = any> = {\n observableKind: \"object\"\n name: PropertyKey\n object: T\n debugObjectName: string\n} & (\n | {\n type: \"add\"\n newValue: any\n }\n | {\n type: \"update\"\n oldValue: any\n newValue: any\n }\n | {\n type: \"remove\"\n oldValue: any\n }\n)\n\nexport type IObjectWillChange<T = any> =\n | {\n object: T\n type: \"update\" | \"add\"\n name: PropertyKey\n newValue: any\n }\n | {\n object: T\n type: \"remove\"\n name: PropertyKey\n }\n\nconst REMOVE = \"remove\"\n\nexport class ObservableObjectAdministration\n implements IInterceptable<IObjectWillChange>, IListenable\n{\n keysAtom_: IAtom\n changeListeners_\n interceptors_\n proxy_: any\n isPlainObject_: boolean\n appliedAnnotations_?: object\n private pendingKeys_: undefined | Map<PropertyKey, ObservableValue<boolean>>\n\n constructor(\n public target_: any,\n public values_ = new Map<PropertyKey, ObservableValue<any> | ComputedValue<any>>(),\n public name_: string,\n // Used anytime annotation is not explicitely provided\n public defaultAnnotation_: Annotation = autoAnnotation\n ) {\n this.keysAtom_ = new Atom(__DEV__ ? `${this.name_}.keys` : \"ObservableObject.keys\")\n // Optimization: we use this frequently\n this.isPlainObject_ = isPlainObject(this.target_)\n if (__DEV__ && !isAnnotation(this.defaultAnnotation_)) {\n die(`defaultAnnotation must be valid annotation`)\n }\n if (__DEV__) {\n // Prepare structure for tracking which fields were already annotated\n this.appliedAnnotations_ = {}\n }\n }\n\n getObservablePropValue_(key: PropertyKey): any {\n return this.values_.get(key)!.get()\n }\n\n setObservablePropValue_(key: PropertyKey, newValue): boolean | null {\n const observable = this.values_.get(key)\n if (observable instanceof ComputedValue) {\n observable.set(newValue)\n return true\n }\n\n // intercept\n if (hasInterceptors(this)) {\n const change = interceptChange<IObjectWillChange>(this, {\n type: UPDATE,\n object: this.proxy_ || this.target_,\n name: key,\n newValue\n })\n if (!change) {\n return null\n }\n newValue = (change as any).newValue\n }\n newValue = (observable as any).prepareNewValue_(newValue)\n\n // notify spy & observers\n if (newValue !== globalState.UNCHANGED) {\n const notify = hasListeners(this)\n const notifySpy = __DEV__ && isSpyEnabled()\n const change: IObjectDidChange | null =\n notify || notifySpy\n ? {\n type: UPDATE,\n observableKind: \"object\",\n debugObjectName: this.name_,\n object: this.proxy_ || this.target_,\n oldValue: (observable as any).value_,\n name: key,\n newValue\n }\n : null\n\n if (__DEV__ && notifySpy) {\n spyReportStart(change!)\n }\n ;(observable as ObservableValue<any>).setNewValue_(newValue)\n if (notify) {\n notifyListeners(this, change)\n }\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n }\n return true\n }\n\n get_(key: PropertyKey): any {\n if (globalState.trackingDerivation && !hasProp(this.target_, key)) {\n // Key doesn't exist yet, subscribe for it in case it's added later\n this.has_(key)\n }\n return this.target_[key]\n }\n\n /**\n * @param {PropertyKey} key\n * @param {any} value\n * @param {Annotation|boolean} annotation true - use default annotation, false - copy as is\n * @param {boolean} proxyTrap whether it's called from proxy trap\n * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\n */\n set_(key: PropertyKey, value: any, proxyTrap: boolean = false): boolean | null {\n // Don't use .has(key) - we care about own\n if (hasProp(this.target_, key)) {\n // Existing prop\n if (this.values_.has(key)) {\n // Observable (can be intercepted)\n return this.setObservablePropValue_(key, value)\n } else if (proxyTrap) {\n // Non-observable - proxy\n return Reflect.set(this.target_, key, value)\n } else {\n // Non-observable\n this.target_[key] = value\n return true\n }\n } else {\n // New prop\n return this.extend_(\n key,\n { value, enumerable: true, writable: true, configurable: true },\n this.defaultAnnotation_,\n proxyTrap\n )\n }\n }\n\n // Trap for \"in\"\n has_(key: PropertyKey): boolean {\n if (!globalState.trackingDerivation) {\n // Skip key subscription outside derivation\n return key in this.target_\n }\n this.pendingKeys_ ||= new Map()\n let entry = this.pendingKeys_.get(key)\n if (!entry) {\n entry = new ObservableValue(\n key in this.target_,\n referenceEnhancer,\n __DEV__ ? `${this.name_}.${stringifyKey(key)}?` : \"ObservableObject.key?\",\n false\n )\n this.pendingKeys_.set(key, entry)\n }\n return entry.get()\n }\n\n /**\n * @param {PropertyKey} key\n * @param {Annotation|boolean} annotation true - use default annotation, false - ignore prop\n */\n make_(key: PropertyKey, annotation: Annotation | boolean): void {\n if (annotation === true) {\n annotation = this.defaultAnnotation_\n }\n if (annotation === false) {\n return\n }\n assertAnnotable(this, annotation, key)\n if (!(key in this.target_)) {\n // Throw on missing key, except for decorators:\n // Decorator annotations are collected from whole prototype chain.\n // When called from super() some props may not exist yet.\n // However we don't have to worry about missing prop,\n // because the decorator must have been applied to something.\n if (this.target_[storedAnnotationsSymbol]?.[key]) {\n return // will be annotated by subclass constructor\n } else {\n die(1, annotation.annotationType_, `${this.name_}.${key.toString()}`)\n }\n }\n let source = this.target_\n while (source && source !== objectPrototype) {\n const descriptor = getDescriptor(source, key)\n if (descriptor) {\n const outcome = annotation.make_(this, key, descriptor, source)\n if (outcome === MakeResult.Cancel) {\n return\n }\n if (outcome === MakeResult.Break) {\n break\n }\n }\n source = Object.getPrototypeOf(source)\n }\n recordAnnotationApplied(this, annotation, key)\n }\n\n /**\n * @param {PropertyKey} key\n * @param {PropertyDescriptor} descriptor\n * @param {Annotation|boolean} annotation true - use default annotation, false - copy as is\n * @param {boolean} proxyTrap whether it's called from proxy trap\n * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\n */\n extend_(\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n annotation: Annotation | boolean,\n proxyTrap: boolean = false\n ): boolean | null {\n if (annotation === true) {\n annotation = this.defaultAnnotation_\n }\n if (annotation === false) {\n return this.defineProperty_(key, descriptor, proxyTrap)\n }\n assertAnnotable(this, annotation, key)\n const outcome = annotation.extend_(this, key, descriptor, proxyTrap)\n if (outcome) {\n recordAnnotationApplied(this, annotation, key)\n }\n return outcome\n }\n\n /**\n * @param {PropertyKey} key\n * @param {PropertyDescriptor} descriptor\n * @param {boolean} proxyTrap whether it's called from proxy trap\n * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\n */\n defineProperty_(\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n proxyTrap: boolean = false\n ): boolean | null {\n checkIfStateModificationsAreAllowed(this.keysAtom_)\n try {\n startBatch()\n\n // Delete\n const deleteOutcome = this.delete_(key)\n if (!deleteOutcome) {\n // Failure or intercepted\n return deleteOutcome\n }\n\n // ADD interceptor\n if (hasInterceptors(this)) {\n const change = interceptChange<IObjectWillChange>(this, {\n object: this.proxy_ || this.target_,\n name: key,\n type: ADD,\n newValue: descriptor.value\n })\n if (!change) {\n return null\n }\n const { newValue } = change as any\n if (descriptor.value !== newValue) {\n descriptor = {\n ...descriptor,\n value: newValue\n }\n }\n }\n\n // Define\n if (proxyTrap) {\n if (!Reflect.defineProperty(this.target_, key, descriptor)) {\n return false\n }\n } else {\n defineProperty(this.target_, key, descriptor)\n }\n\n // Notify\n this.notifyPropertyAddition_(key, descriptor.value)\n } finally {\n endBatch()\n }\n return true\n }\n\n // If original descriptor becomes relevant, move this to annotation directly\n defineObservableProperty_(\n key: PropertyKey,\n value: any,\n enhancer: IEnhancer<any>,\n proxyTrap: boolean = false\n ): boolean | null {\n checkIfStateModificationsAreAllowed(this.keysAtom_)\n try {\n startBatch()\n\n // Delete\n const deleteOutcome = this.delete_(key)\n if (!deleteOutcome) {\n // Failure or intercepted\n return deleteOutcome\n }\n\n // ADD interceptor\n if (hasInterceptors(this)) {\n const change = interceptChange<IObjectWillChange>(this, {\n object: this.proxy_ || this.target_,\n name: key,\n type: ADD,\n newValue: value\n })\n if (!change) {\n return null\n }\n value = (change as any).newValue\n }\n\n const cachedDescriptor = getCachedObservablePropDescriptor(key)\n const descriptor = {\n configurable: globalState.safeDescriptors ? this.isPlainObject_ : true,\n enumerable: true,\n get: cachedDescriptor.get,\n set: cachedDescriptor.set\n }\n\n // Define\n if (proxyTrap) {\n if (!Reflect.defineProperty(this.target_, key, descriptor)) {\n return false\n }\n } else {\n defineProperty(this.target_, key, descriptor)\n }\n\n const observable = new ObservableValue(\n value,\n enhancer,\n __DEV__ ? `${this.name_}.${key.toString()}` : \"ObservableObject.key\",\n false\n )\n\n this.values_.set(key, observable)\n\n // Notify (value possibly changed by ObservableValue)\n this.notifyPropertyAddition_(key, observable.value_)\n } finally {\n endBatch()\n }\n return true\n }\n\n // If original descriptor becomes relevant, move this to annotation directly\n defineComputedProperty_(\n key: PropertyKey,\n options: IComputedValueOptions<any>,\n proxyTrap: boolean = false\n ): boolean | null {\n checkIfStateModificationsAreAllowed(this.keysAtom_)\n try {\n startBatch()\n\n // Delete\n const deleteOutcome = this.delete_(key)\n if (!deleteOutcome) {\n // Failure or intercepted\n return deleteOutcome\n }\n\n // ADD interceptor\n if (hasInterceptors(this)) {\n const change = interceptChange<IObjectWillChange>(this, {\n object: this.proxy_ || this.target_,\n name: key,\n type: ADD,\n newValue: undefined\n })\n if (!change) {\n return null\n }\n }\n options.name ||= __DEV__ ? `${this.name_}.${key.toString()}` : \"ObservableObject.key\"\n options.context = this.proxy_ || this.target_\n const cachedDescriptor = getCachedObservablePropDescriptor(key)\n const descriptor = {\n configurable: globalState.safeDescriptors ? this.isPlainObject_ : true,\n enumerable: false,\n get: cachedDescriptor.get,\n set: cachedDescriptor.set\n }\n\n // Define\n if (proxyTrap) {\n if (!Reflect.defineProperty(this.target_, key, descriptor)) {\n return false\n }\n } else {\n defineProperty(this.target_, key, descriptor)\n }\n\n this.values_.set(key, new ComputedValue(options))\n\n // Notify\n this.notifyPropertyAddition_(key, undefined)\n } finally {\n endBatch()\n }\n return true\n }\n\n /**\n * @param {PropertyKey} key\n * @param {PropertyDescriptor} descriptor\n * @param {boolean} proxyTrap whether it's called from proxy trap\n * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\n */\n delete_(key: PropertyKey, proxyTrap: boolean = false): boolean | null {\n checkIfStateModificationsAreAllowed(this.keysAtom_)\n // No such prop\n if (!hasProp(this.target_, key)) {\n return true\n }\n\n // Intercept\n if (hasInterceptors(this)) {\n const change = interceptChange<IObjectWillChange>(this, {\n object: this.proxy_ || this.target_,\n name: key,\n type: REMOVE\n })\n // Cancelled\n if (!change) {\n return null\n }\n }\n\n // Delete\n try {\n startBatch()\n const notify = hasListeners(this)\n const notifySpy = __DEV__ && isSpyEnabled()\n const observable = this.values_.get(key)\n // Value needed for spies/listeners\n let value = undefined\n // Optimization: don't pull the value unless we will need it\n if (!observable && (notify || notifySpy)) {\n value = getDescriptor(this.target_, key)?.value\n }\n // delete prop (do first, may fail)\n if (proxyTrap) {\n if (!Reflect.deleteProperty(this.target_, key)) {\n return false\n }\n } else {\n delete this.target_[key]\n }\n // Allow re-annotating this field\n if (__DEV__) {\n delete this.appliedAnnotations_![key]\n }\n // Clear observable\n if (observable) {\n this.values_.delete(key)\n // for computed, value is undefined\n if (observable instanceof ObservableValue) {\n value = observable.value_\n }\n // Notify: autorun(() => obj[key]), see #1796\n propagateChanged(observable)\n }\n // Notify \"keys/entries/values\" observers\n this.keysAtom_.reportChanged()\n\n // Notify \"has\" observers\n // \"in\" as it may still exist in proto\n this.pendingKeys_?.get(key)?.set(key in this.target_)\n\n // Notify spies/listeners\n if (notify || notifySpy) {\n const change: IObjectDidChange = {\n type: REMOVE,\n observableKind: \"object\",\n object: this.proxy_ || this.target_,\n debugObjectName: this.name_,\n oldValue: value,\n name: key\n }\n if (__DEV__ && notifySpy) {\n spyReportStart(change!)\n }\n if (notify) {\n notifyListeners(this, change)\n }\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n }\n } finally {\n endBatch()\n }\n return true\n }\n\n /**\n * Observes this object. Triggers for the events 'add', 'update' and 'delete'.\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe\n * for callback details\n */\n observe_(callback: (changes: IObjectDidChange) => void, fireImmediately?: boolean): Lambda {\n if (__DEV__ && fireImmediately === true) {\n die(\"`observe` doesn't support the fire immediately property for observable objects.\")\n }\n return registerListener(this, callback)\n }\n\n intercept_(handler): Lambda {\n return registerInterceptor(this, handler)\n }\n\n notifyPropertyAddition_(key: PropertyKey, value: any) {\n const notify = hasListeners(this)\n const notifySpy = __DEV__ && isSpyEnabled()\n if (notify || notifySpy) {\n const change: IObjectDidChange | null =\n notify || notifySpy\n ? ({\n type: ADD,\n observableKind: \"object\",\n debugObjectName: this.name_,\n object: this.proxy_ || this.target_,\n name: key,\n newValue: value\n } as const)\n : null\n\n if (__DEV__ && notifySpy) {\n spyReportStart(change!)\n }\n if (notify) {\n notifyListeners(this, change)\n }\n if (__DEV__ && notifySpy) {\n spyReportEnd()\n }\n }\n\n this.pendingKeys_?.get(key)?.set(true)\n\n // Notify \"keys/entries/values\" observers\n this.keysAtom_.reportChanged()\n }\n\n ownKeys_(): ArrayLike<string | symbol> {\n this.keysAtom_.reportObserved()\n return ownKeys(this.target_)\n }\n\n keys_(): PropertyKey[] {\n // Returns enumerable && own, but unfortunately keysAtom will report on ANY key change.\n // There is no way to distinguish between Object.keys(object) and Reflect.ownKeys(object) - both are handled by ownKeys trap.\n // We can either over-report in Object.keys(object) or under-report in Reflect.ownKeys(object)\n // We choose to over-report in Object.keys(object), because:\n // - typically it's used with simple data objects\n // - when symbolic/non-enumerable keys are relevant Reflect.ownKeys works as expected\n this.keysAtom_.reportObserved()\n return Object.keys(this.target_)\n }\n}\n\nexport interface IIsObservableObject {\n $mobx: ObservableObjectAdministration\n}\n\nexport function asObservableObject(\n target: any,\n options?: CreateObservableOptions\n): IIsObservableObject {\n if (__DEV__ && options && isObservableObject(target)) {\n die(`Options can't be provided for already observable objects.`)\n }\n\n if (hasProp(target, $mobx)) {\n if (__DEV__ && !(getAdministration(target) instanceof ObservableObjectAdministration)) {\n die(\n `Cannot convert '${getDebugName(target)}' into observable object:` +\n `\\nThe target is already observable of different type.` +\n `\\nExtending builtins is not supported.`\n )\n }\n return target\n }\n\n if (__DEV__ && !Object.isExtensible(target)) {\n die(\"Cannot make the designated object observable; it is not extensible\")\n }\n\n const name =\n options?.name ??\n (__DEV__\n ? `${\n isPlainObject(target) ? \"ObservableObject\" : target.constructor.name\n }@${getNextId()}`\n : \"ObservableObject\")\n\n const adm = new ObservableObjectAdministration(\n target,\n new Map(),\n String(name),\n getAnnotationFromOptions(options)\n )\n\n addHiddenProp(target, $mobx, adm)\n\n return target\n}\n\nconst isObservableObjectAdministration = createInstanceofPredicate(\n \"ObservableObjectAdministration\",\n ObservableObjectAdministration\n)\n\nfunction getCachedObservablePropDescriptor(key) {\n return (\n descriptorCache[key] ||\n (descriptorCache[key] = {\n get() {\n return this[$mobx].getObservablePropValue_(key)\n },\n set(value) {\n return this[$mobx].setObservablePropValue_(key, value)\n }\n })\n )\n}\n\nexport function isObservableObject(thing: any): boolean {\n if (isObject(thing)) {\n return isObservableObjectAdministration((thing as any)[$mobx])\n }\n return false\n}\n\nexport function recordAnnotationApplied(\n adm: ObservableObjectAdministration,\n annotation: Annotation,\n key: PropertyKey\n) {\n if (__DEV__) {\n adm.appliedAnnotations_![key] = annotation\n }\n // Remove applied decorator annotation so we don't try to apply it again in subclass constructor\n delete adm.target_[storedAnnotationsSymbol]?.[key]\n}\n\nfunction assertAnnotable(\n adm: ObservableObjectAdministration,\n annotation: Annotation,\n key: PropertyKey\n) {\n // Valid annotation\n if (__DEV__ && !isAnnotation(annotation)) {\n die(`Cannot annotate '${adm.name_}.${key.toString()}': Invalid annotation.`)\n }\n\n /*\n // Configurable, not sealed, not frozen\n // Possibly not needed, just a little better error then the one thrown by engine.\n // Cases where this would be useful the most (subclass field initializer) are not interceptable by this.\n if (__DEV__) {\n const configurable = getDescriptor(adm.target_, key)?.configurable\n const frozen = Object.isFrozen(adm.target_)\n const sealed = Object.isSealed(adm.target_)\n if (!configurable || frozen || sealed) {\n const fieldName = `${adm.name_}.${key.toString()}`\n const requestedAnnotationType = annotation.annotationType_\n let error = `Cannot apply '${requestedAnnotationType}' to '${fieldName}':`\n if (frozen) {\n error += `\\nObject is frozen.`\n }\n if (sealed) {\n error += `\\nObject is sealed.`\n }\n if (!configurable) {\n error += `\\nproperty is not configurable.`\n // Mention only if caused by us to avoid confusion\n if (hasProp(adm.appliedAnnotations!, key)) {\n error += `\\nTo prevent accidental re-definition of a field by a subclass, `\n error += `all annotated fields of non-plain objects (classes) are not configurable.`\n }\n }\n die(error)\n }\n }\n */\n\n // Not annotated\n if (__DEV__ && !isOverride(annotation) && hasProp(adm.appliedAnnotations_!, key)) {\n const fieldName = `${adm.name_}.${key.toString()}`\n const currentAnnotationType = adm.appliedAnnotations_![key].annotationType_\n const requestedAnnotationType = annotation.annotationType_\n die(\n `Cannot apply '${requestedAnnotationType}' to '${fieldName}':` +\n `\\nThe field is already annotated with '${currentAnnotationType}'.` +\n `\\nRe-annotating fields is not allowed.` +\n `\\nUse 'override' annotation for methods overridden by subclass.`\n )\n }\n}\n","import {\n getNextId,\n addHiddenFinalProp,\n makeIterable,\n addHiddenProp,\n ObservableArrayAdministration,\n $mobx,\n arrayExtensions,\n IEnhancer,\n isObservableArray,\n IObservableArray,\n defineProperty,\n initObservable\n} from \"../internal\"\n\n// Bug in safari 9.* (or iOS 9 safari mobile). See #364\nconst ENTRY_0 = createArrayEntryDescriptor(0)\n\nconst safariPrototypeSetterInheritanceBug = (() => {\n let v = false\n const p = {}\n Object.defineProperty(p, \"0\", {\n set: () => {\n v = true\n }\n })\n Object.create(p)[\"0\"] = 1\n return v === false\n})()\n\n/**\n * This array buffer contains two lists of properties, so that all arrays\n * can recycle their property definitions, which significantly improves performance of creating\n * properties on the fly.\n */\nlet OBSERVABLE_ARRAY_BUFFER_SIZE = 0\n\n// Typescript workaround to make sure ObservableArray extends Array\nclass StubArray {}\nfunction inherit(ctor, proto) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(ctor.prototype, proto)\n } else if (ctor.prototype.__proto__ !== undefined) {\n ctor.prototype.__proto__ = proto\n } else {\n ctor.prototype = proto\n }\n}\ninherit(StubArray, Array.prototype)\n\n// Weex proto freeze protection was here,\n// but it is unclear why the hack is need as MobX never changed the prototype\n// anyway, so removed it in V6\n\nexport class LegacyObservableArray<T> extends StubArray {\n constructor(\n initialValues: T[] | undefined,\n enhancer: IEnhancer<T>,\n name = __DEV__ ? \"ObservableArray@\" + getNextId() : \"ObservableArray\",\n owned = false\n ) {\n super()\n initObservable(() => {\n const adm = new ObservableArrayAdministration(name, enhancer, owned, true)\n adm.proxy_ = this as any\n addHiddenFinalProp(this, $mobx, adm)\n\n if (initialValues && initialValues.length) {\n // @ts-ignore\n this.spliceWithArray(0, 0, initialValues)\n }\n\n if (safariPrototypeSetterInheritanceBug) {\n // Seems that Safari won't use numeric prototype setter untill any * numeric property is\n // defined on the instance. After that it works fine, even if this property is deleted.\n Object.defineProperty(this, \"0\", ENTRY_0)\n }\n })\n }\n\n concat(...arrays: T[][]): T[] {\n ;(this[$mobx] as ObservableArrayAdministration).atom_.reportObserved()\n return Array.prototype.concat.apply(\n (this as any).slice(),\n //@ts-ignore\n arrays.map(a => (isObservableArray(a) ? a.slice() : a))\n )\n }\n\n get length(): number {\n return (this[$mobx] as ObservableArrayAdministration).getArrayLength_()\n }\n\n set length(newLength: number) {\n ;(this[$mobx] as ObservableArrayAdministration).setArrayLength_(newLength)\n }\n\n get [Symbol.toStringTag]() {\n return \"Array\"\n }\n\n [Symbol.iterator]() {\n const self = this\n let nextIndex = 0\n return makeIterable({\n next() {\n return nextIndex < self.length\n ? { value: self[nextIndex++], done: false }\n : { done: true, value: undefined }\n }\n })\n }\n}\n\nObject.entries(arrayExtensions).forEach(([prop, fn]) => {\n if (prop !== \"concat\") {\n addHiddenProp(LegacyObservableArray.prototype, prop, fn)\n }\n})\n\nfunction createArrayEntryDescriptor(index: number) {\n return {\n enumerable: false,\n configurable: true,\n get: function () {\n return this[$mobx].get_(index)\n },\n set: function (value) {\n this[$mobx].set_(index, value)\n }\n }\n}\n\nfunction createArrayBufferItem(index: number) {\n defineProperty(LegacyObservableArray.prototype, \"\" + index, createArrayEntryDescriptor(index))\n}\n\nexport function reserveArrayBuffer(max: number) {\n if (max > OBSERVABLE_ARRAY_BUFFER_SIZE) {\n for (let index = OBSERVABLE_ARRAY_BUFFER_SIZE; index < max + 100; index++) {\n createArrayBufferItem(index)\n }\n OBSERVABLE_ARRAY_BUFFER_SIZE = max\n }\n}\n\nreserveArrayBuffer(1000)\n\nexport function createLegacyArray<T>(\n initialValues: T[] | undefined,\n enhancer: IEnhancer<T>,\n name?: string\n): IObservableArray<T> {\n return new LegacyObservableArray(initialValues, enhancer, name) as any\n}\n","import { isAction } from \"../api/action\"\nimport {\n $mobx,\n IDepTreeNode,\n isAtom,\n isComputedValue,\n isObservableArray,\n isObservableMap,\n isObservableObject,\n isReaction,\n isObservableSet,\n die,\n isFunction,\n allowStateChangesStart,\n untrackedStart,\n allowStateChangesEnd,\n untrackedEnd,\n startBatch,\n endBatch\n} from \"../internal\"\n\nexport function getAtom(thing: any, property?: PropertyKey): IDepTreeNode {\n if (typeof thing === \"object\" && thing !== null) {\n if (isObservableArray(thing)) {\n if (property !== undefined) {\n die(23)\n }\n return (thing as any)[$mobx].atom_\n }\n if (isObservableSet(thing)) {\n return thing.atom_\n }\n if (isObservableMap(thing)) {\n if (property === undefined) {\n return thing.keysAtom_\n }\n const observable = thing.data_.get(property) || thing.hasMap_.get(property)\n if (!observable) {\n die(25, property, getDebugName(thing))\n }\n return observable\n }\n if (property && !thing[$mobx]) {\n thing[property]\n } // See #1072\n if (isObservableObject(thing)) {\n if (!property) {\n return die(26)\n }\n const observable = (thing as any)[$mobx].values_.get(property)\n if (!observable) {\n die(27, property, getDebugName(thing))\n }\n return observable\n }\n if (isAtom(thing) || isComputedValue(thing) || isReaction(thing)) {\n return thing\n }\n } else if (isFunction(thing)) {\n if (isReaction(thing[$mobx])) {\n // disposer function\n return thing[$mobx]\n }\n }\n die(28)\n}\n\nexport function getAdministration(thing: any, property?: string) {\n if (!thing) {\n die(29)\n }\n if (property !== undefined) {\n return getAdministration(getAtom(thing, property))\n }\n if (isAtom(thing) || isComputedValue(thing) || isReaction(thing)) {\n return thing\n }\n if (isObservableMap(thing) || isObservableSet(thing)) {\n return thing\n }\n if (thing[$mobx]) {\n return thing[$mobx]\n }\n die(24, thing)\n}\n\nexport function getDebugName(thing: any, property?: string): string {\n let named\n if (property !== undefined) {\n named = getAtom(thing, property)\n } else if (isAction(thing)) {\n return thing.name\n } else if (isObservableObject(thing) || isObservableMap(thing) || isObservableSet(thing)) {\n named = getAdministration(thing)\n } else {\n // valid for arrays as well\n named = getAtom(thing)\n }\n return named.name_\n}\n\n/**\n * Helper function for initializing observable structures, it applies:\n * 1. allowStateChanges so we don't violate enforceActions.\n * 2. untracked so we don't accidentaly subscribe to anything observable accessed during init in case the observable is created inside derivation.\n * 3. batch to avoid state version updates\n */\nexport function initObservable<T>(cb: () => T): T {\n const derivation = untrackedStart()\n const allowStateChanges = allowStateChangesStart(true)\n startBatch()\n try {\n return cb()\n } finally {\n endBatch()\n allowStateChangesEnd(allowStateChanges)\n untrackedEnd(derivation)\n }\n}\n","import {\n isES6Map,\n isObservableArray,\n isObservableMap,\n isES6Set,\n isObservableSet,\n hasProp,\n isFunction,\n objectPrototype\n} from \"../internal\"\n\ndeclare const Symbol\nconst toString = objectPrototype.toString\n\nexport function deepEqual(a: any, b: any, depth: number = -1): boolean {\n return eq(a, b, depth)\n}\n\n// Copied from https://github.com/jashkenas/underscore/blob/5c237a7c682fb68fd5378203f0bf22dce1624854/underscore.js#L1186-L1289\n// Internal recursive comparison function for `isEqual`.\nfunction eq(a: any, b: any, depth: number, aStack?: any[], bStack?: any[]) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) {\n return a !== 0 || 1 / a === 1 / b\n }\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) {\n return false\n }\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) {\n return b !== b\n }\n // Exhaust primitive checks\n const type = typeof a\n if (type !== \"function\" && type !== \"object\" && typeof b != \"object\") {\n return false\n }\n\n // Compare `[[Class]]` names.\n const className = toString.call(a)\n if (className !== toString.call(b)) {\n return false\n }\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case \"[object RegExp]\":\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case \"[object String]\":\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return \"\" + a === \"\" + b\n case \"[object Number]\":\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) {\n return +b !== +b\n }\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b\n case \"[object Date]\":\n case \"[object Boolean]\":\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b\n case \"[object Symbol]\":\n return (\n typeof Symbol !== \"undefined\" && Symbol.valueOf.call(a) === Symbol.valueOf.call(b)\n )\n case \"[object Map]\":\n case \"[object Set]\":\n // Maps and Sets are unwrapped to arrays of entry-pairs, adding an incidental level.\n // Hide this extra level by increasing the depth.\n if (depth >= 0) {\n depth++\n }\n break\n }\n // Unwrap any wrapped objects.\n a = unwrap(a)\n b = unwrap(b)\n\n const areArrays = className === \"[object Array]\"\n if (!areArrays) {\n if (typeof a != \"object\" || typeof b != \"object\") {\n return false\n }\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n const aCtor = a.constructor,\n bCtor = b.constructor\n if (\n aCtor !== bCtor &&\n !(\n isFunction(aCtor) &&\n aCtor instanceof aCtor &&\n isFunction(bCtor) &&\n bCtor instanceof bCtor\n ) &&\n \"constructor\" in a &&\n \"constructor\" in b\n ) {\n return false\n }\n }\n\n if (depth === 0) {\n return false\n } else if (depth < 0) {\n depth = -1\n }\n\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || []\n bStack = bStack || []\n let length = aStack.length\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) {\n return bStack[length] === b\n }\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a)\n bStack.push(b)\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length\n if (length !== b.length) {\n return false\n }\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], depth - 1, aStack, bStack)) {\n return false\n }\n }\n } else {\n // Deep compare objects.\n const keys = Object.keys(a)\n let key\n length = keys.length\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (Object.keys(b).length !== length) {\n return false\n }\n while (length--) {\n // Deep compare each member\n key = keys[length]\n if (!(hasProp(b, key) && eq(a[key], b[key], depth - 1, aStack, bStack))) {\n return false\n }\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop()\n bStack.pop()\n return true\n}\n\nfunction unwrap(a: any) {\n if (isObservableArray(a)) {\n return a.slice()\n }\n if (isES6Map(a) || isObservableMap(a)) {\n return Array.from(a.entries())\n }\n if (isES6Set(a) || isObservableSet(a)) {\n return Array.from(a.entries())\n }\n return a\n}\n","export function makeIterable<T>(iterator: Iterator<T>): IterableIterator<T> {\n iterator[Symbol.iterator] = getSelf\n return iterator as any\n}\n\nfunction getSelf() {\n return this\n}\n","/**\n * (c) Michel Weststrate 2015 - 2020\n * MIT Licensed\n *\n * Welcome to the mobx sources! To get a global overview of how MobX internally works,\n * this is a good place to start:\n * https://medium.com/@mweststrate/becoming-fully-reactive-an-in-depth-explanation-of-mobservable-55995262a254#.xvbh6qd74\n *\n * Source folders:\n * ===============\n *\n * - api/ Most of the public static methods exposed by the module can be found here.\n * - core/ Implementation of the MobX algorithm; atoms, derivations, reactions, dependency trees, optimizations. Cool stuff can be found here.\n * - types/ All the magic that is need to have observable objects, arrays and values is in this folder. Including the modifiers like `asFlat`.\n * - utils/ Utility stuff.\n *\n */\nimport { die } from \"./errors\"\nimport { getGlobal } from \"./utils/global\"\n;[\"Symbol\", \"Map\", \"Set\"].forEach(m => {\n let g = getGlobal()\n if (typeof g[m] === \"undefined\") {\n die(`MobX requires global '${m}' to be available or polyfilled`)\n }\n})\n\nimport { spy, getDebugName, $mobx } from \"./internal\"\n\nexport {\n IObservable,\n IDepTreeNode,\n Reaction,\n IReactionPublic,\n IReactionDisposer,\n untracked,\n IAtom,\n createAtom,\n spy,\n IComputedValue,\n IEqualsComparer,\n comparer,\n IEnhancer,\n IInterceptable,\n IInterceptor,\n IListenable,\n IObjectWillChange,\n IObjectDidChange,\n isObservableObject,\n IValueDidChange,\n IValueWillChange,\n IObservableValue,\n isObservableValue as isBoxedObservable,\n IObservableArray,\n IArrayWillChange,\n IArrayWillSplice,\n IArraySplice,\n IArrayUpdate,\n IArrayDidChange,\n isObservableArray,\n IKeyValueMap,\n ObservableMap,\n IMapEntries,\n IMapEntry,\n IMapWillChange,\n IMapDidChange,\n isObservableMap,\n IObservableMapInitialValues,\n ObservableSet,\n isObservableSet,\n ISetDidChange,\n ISetWillChange,\n IObservableSetInitialValues,\n transaction,\n observable,\n IObservableFactory,\n CreateObservableOptions,\n computed,\n IComputedFactory,\n isObservable,\n isObservableProp,\n isComputed,\n isComputedProp,\n extendObservable,\n observe,\n intercept,\n autorun,\n IAutorunOptions,\n reaction,\n IReactionOptions,\n when,\n IWhenOptions,\n action,\n isAction,\n runInAction,\n IActionFactory,\n keys,\n values,\n entries,\n set,\n remove,\n has,\n get,\n apiOwnKeys as ownKeys,\n apiDefineProperty as defineProperty,\n configure,\n onBecomeObserved,\n onBecomeUnobserved,\n flow,\n isFlow,\n flowResult,\n FlowCancellationError,\n isFlowCancellationError,\n toJS,\n trace,\n IObserverTree,\n IDependencyTree,\n getDependencyTree,\n getObserverTree,\n resetGlobalState as _resetGlobalState,\n getGlobalState as _getGlobalState,\n getDebugName,\n getAtom,\n getAdministration as _getAdministration,\n allowStateChanges as _allowStateChanges,\n runInAction as _allowStateChangesInsideComputed, // This has become the default behavior in Mobx 6\n Lambda,\n $mobx,\n isComputingDerivation as _isComputingDerivation,\n onReactionError,\n interceptReads as _interceptReads,\n IComputedValueOptions,\n IActionRunInfo,\n _startAction,\n _endAction,\n allowStateReadsStart as _allowStateReadsStart,\n allowStateReadsEnd as _allowStateReadsEnd,\n makeObservable,\n makeAutoObservable,\n autoAction as _autoAction,\n AnnotationsMap,\n AnnotationMapEntry,\n override\n} from \"./internal\"\n\n// Devtools support\ndeclare const __MOBX_DEVTOOLS_GLOBAL_HOOK__: { injectMobx: (any) => void }\nif (typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__ === \"object\") {\n // See: https://github.com/andykog/mobx-devtools/\n __MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({\n spy,\n extras: {\n getDebugName\n },\n $mobx\n })\n}\n","import {\n action,\n computed,\n makeObservable,\n observable\n} from 'mobx'\nimport moment from 'moment'\n\nclass CartListModel {\n static CART_LIST_TYPES = {\n DEFAULT: 'default',\n ORDER_EDIT: 'orderEdit',\n WISH_LIST: 'wishList',\n ORDER_APPROVAL: 'orderApproval',\n UNASSIGNED: 'unassigned',\n }\n\n constructor ({\n id,\n cartModel,\n title,\n emptyAllText,\n affectPricing = true,\n originalOrderFriendlyId = null,\n originalReorderOrderFriendlyId = null,\n itemsCount = null,\n exportedList = null,\n skipLoading = false,\n orderApproval = null,\n sortingDate = null,\n modificationDate = null,\n }) {\n this._cartModel = cartModel\n this._itemsCount = itemsCount\n this.loading = !skipLoading\n this.id = id\n this.title = title\n this.emptyAllText = emptyAllText\n this.affectPricing = affectPricing\n this.orderApproval = orderApproval\n this.originalOrderFriendlyId = originalOrderFriendlyId || orderApproval?.originalOrderFriendlyId\n this.originalReorderOrderFriendlyId = originalReorderOrderFriendlyId\n this.exportSuccess = exportedList ? {justLoaded: false, ...exportedList} : null\n this.exportError = false\n this.exportSuccessMessage = false\n this.sortingDate = sortingDate\n this.modificationDate = modificationDate\n // this flag is used to determine if the list was modified after export\n // it is to solve a time dilation issue between the client and the server\n this.isModified = false\n makeObservable(this, {\n _cartModel: observable,\n _itemsCount: observable,\n loading: observable,\n id: observable,\n title: observable,\n emptyAllText: observable,\n affectPricing: observable,\n originalOrderFriendlyId: observable,\n exportSuccess: observable,\n exportError: observable,\n exportSuccessMessage: observable,\n sortingDate: observable,\n modificationDate: observable,\n isModified: observable,\n items: computed,\n selected: computed,\n noPricing: computed,\n isOpen: computed,\n itemsCount: computed,\n isDefault: computed,\n isUnassigned: computed,\n isWishList: computed,\n isModifiedAfterExport: computed,\n isExported: computed,\n isOrderEdit: computed,\n isOrderApproval: computed,\n isEmpty: computed,\n isReorder: computed,\n hasItemsOffline: computed,\n hasUSAData: computed,\n isCOD: computed,\n itemsCountEligibleForDuplicate: computed,\n toggleSelectAll: action,\n emptyList: action,\n reAssign: action,\n reAssignToNew: action,\n deleteList: action,\n updateListFromApi: action,\n export: action,\n clearExportError: action,\n clearExportSuccessMessage: action,\n touchSortingDate: action,\n touchItemsCount: action,\n rename: action,\n duplicate: action,\n })\n }\n\n get items () {\n return this._cartModel.items\n .filter(\n (item) => {\n if (this.originalOrderFriendlyId) {\n return item.originalOrderFriendlyId === this.originalOrderFriendlyId && item.listId === this.id\n }\n return (this.originalReorderOrderFriendlyId !== null && this.originalReorderOrderFriendlyId === item.originalOrderFriendlyId) || item.listId === this.id\n }\n )\n .sort((a, b) => a.displayOrder - b.displayOrder)\n }\n\n get selected () {\n return this.items.filter(item => item.checked).map(item => item.orderItemId)\n }\n\n get noPricing () {\n return this.affectPricing && this.items.some(item => item.price.subtotal == null && item.checked && item.hasPricing)\n }\n\n get isOpen () {\n return this._cartModel.openedList?.id === this.id\n }\n\n get itemsCount () {\n if (this._cartModel.listOpening) {\n return this._itemsCount\n }\n if (this.isOpen || this._itemsCount == null || typeof(this._itemsCount) === 'undefined') {\n this._itemsCount = this.items.length\n }\n\n return this._itemsCount\n }\n\n get isDefault () {\n return this.id === CartListModel.CART_LIST_TYPES.DEFAULT\n }\n\n get isUnassigned () {\n return this.id === CartListModel.CART_LIST_TYPES.UNASSIGNED\n }\n\n get isWishList () {\n return this.id === CartListModel.CART_LIST_TYPES.WISH_LIST\n }\n\n get isOrderEdit() {\n return this.id === CartListModel.CART_LIST_TYPES.ORDER_EDIT\n }\n\n get isOrderApproval() {\n return this.id === CartListModel.CART_LIST_TYPES.ORDER_APPROVAL\n }\n\n get isReorder() {\n return this.id === this.originalReorderOrderFriendlyId\n }\n\n get isExported () {\n return !!this.exportSuccess\n }\n\n get isEmpty() {\n return this.items.length === 0\n }\n\n get isModifiedAfterExport () {\n if (!this.exportSuccess) {\n return false\n }\n if (this.isModified) {\n return true\n }\n const { ExportDate } = this.exportSuccess\n if (ExportDate && this.modificationDate) {\n return moment(this.modificationDate).isAfter(moment(ExportDate))\n }\n return !ExportDate\n }\n\n get hasItemsOffline() {\n return this.items.some(item => item.isOffline || item.hasItemsOffline)\n }\n\n get hasUSAData(){\n return this.items.some(item => item.hasUSAData)\n }\n\n get isCOD(){\n return this.items.some(item => item.isCOD)\n }\n\n get itemsCountEligibleForDuplicate() {\n if (this.isOpen) {\n return new Promise((resolve, reject) => {\n try {\n const eligibleItems = this.items\n .filter(item => !(item.isOffline || item.hasUSAData || item.isCOD))\n resolve(eligibleItems.reduce((acc, item) => acc + (item.subItems.length > 0 ? item.subItems.length - (item.errors?.[0]?.notAvailableCount || 0) : 1), 0))\n } catch (error) {\n reject(error)\n }\n })\n }\n return this._cartModel.updateListItemsFromApi(this.id).then(() => {\n const eligibleItems = this.items\n .filter(item => !(item.isOffline || item.hasUSAData || item.isCOD))\n return eligibleItems.reduce((acc, item) => acc + (item.subItems.length > 0 ? item.subItems.length - (item.errors?.[0]?.notAvailableCount || 0) : 1), 0) - eligibleItems.reduce((total, item) => {\n return total + (item.errors?.[0]?.notAvailableCount || 0);\n }, 0)\n })\n }\n\n async toggleSelectAll () {\n try {\n const checked = this.items.every(item => item.checked)\n await this._cartModel._cartActionsModel.toggleSelectList(this.items.map((item) => item.orderItemId), !checked)\n this.items.forEach(item => {\n item.checked = !checked\n })\n } catch (error) {\n console.error(error)\n }\n }\n\n async emptyList () {\n try {\n const orderItemIds = this.items.map(item => item.orderItemId)\n if (this.id === CartListModel.CART_LIST_TYPES.WISH_LIST\n || (this.id === CartListModel.CART_LIST_TYPES.DEFAULT && this._cartModel.affectPricingLists.length === 1)\n ) {\n await this._cartModel._cartActionsModel.emptyList(this.id, null)\n } else {\n await this._cartModel._cartActionsModel.emptyList(this.id, orderItemIds)\n }\n this._cartModel.removeItems(orderItemIds)\n this._itemsCount = 0\n if (this.isReorder) {\n this._cartModel.deleteList(this.id)\n }\n } catch (error) {\n console.error(error)\n }\n }\n\n async reAssign (listId, checkedOnly = false) {\n try {\n await this._cartModel._cartActionsModel.reAssignList(this.id, listId, checkedOnly)\n const currentList = this._cartModel.lists.find(list => list.id === listId)\n currentList.touchSortingDate()\n this._itemsCount = this.items.filter((item) => !item.checked).length\n this.items\n .filter(item => checkedOnly ? item.checked : true)\n .forEach(item => item.updateListId(listId))\n const targetList = this._cartModel.lists.find(list => list.id === listId)\n if (targetList) {\n targetList.touchSortingDate()\n targetList.touchModificationDate()\n this._cartModel.openList(targetList.id)\n }\n } catch (error) {\n console.error(error)\n }\n }\n\n async reAssignToNew (title, checkedOnly = false) {\n try {\n const { ID } = await this._cartModel._cartActionsModel.addList(title,\n this.items.filter(item => checkedOnly ? item.checked : true))\n const newList = this._cartModel.addList({ listId: ID, title, emptyAllText: null, itemsCount: 0, modificationDate: moment().utc().toISOString() })\n this.items\n .filter(item => checkedOnly ? item.checked : true)\n .forEach(item => item.updateListId(ID))\n newList.updateListFromApi({ ItemsCount: this._itemsCount })\n this._itemsCount = 0\n newList.loading = false\n await this._cartModel.updateCart({ listId: ID })\n this._cartModel.openList(ID)\n } catch (error) {\n console.error(error)\n }\n }\n\n async deleteList () {\n try {\n if (this.isUnassigned) {\n await this._cartModel._cartActionsModel.emptyList(this.id)\n this._cartModel.removeItems(this.items.map(item => item.orderItemId))\n } else {\n await this._cartModel._cartActionsModel.deleteList(this.id)\n this._cartModel.removeItems(this.items.map(item => item.orderItemId))\n this._cartModel.deleteList(this.id)\n }\n } catch (error) {\n console.error(error)\n }\n }\n\n async rename(title) {\n try {\n await this._cartModel._cartActionsModel.renameList(this.id, title)\n this.touchModificationDate()\n this.touchSortingDate()\n this._cartModel.touchLists()\n this.title = title\n } catch (error) {\n console.error(error)\n }\n }\n\n async duplicate() {\n try {\n await this._cartModel._cartActionsModel.duplicateList(this.id)\n } catch (error) {\n return error\n }\n }\n\n async export () {\n try {\n const res = await this._cartModel._cartActionsModel.exportList(this.id)\n if (res) {\n this.exportSuccess = res\n this.exportSuccessMessage = true\n this.exportError = false\n this.isModified = false\n if (res.RedirectUrl) {\n window.location.href = res.RedirectUrl\n }\n } else {\n this.exportSuccess = null\n this.exportError = true\n }\n } catch (error) {\n console.error(error)\n }\n }\n\n updateListFromApi (list) {\n this._itemsCount = list.ItemsCount\n }\n\n clearExportError () {\n this.exportError = false\n }\n\n clearExportSuccessMessage () {\n this.exportSuccessMessage = false\n }\n\n touchSortingDate () {\n if (!this.isUnassigned) {\n this.sortingDate = moment().utc().toISOString()\n this._cartModel.touchLists()\n }\n }\n\n touchModificationDate () {\n if (!this.isUnassigned) {\n this.isModified = true\n this.modificationDate = moment().utc().toISOString()\n this._cartModel.touchLists()\n }\n }\n\n touchItemsCount () {\n this._itemsCount = this.items.length\n }\n\n}\n\nexport default CartListModel\n","import {\n computed,\n makeObservable,\n observable\n} from 'mobx'\nimport CartListModel from './CartListModel'\n\nclass CartSummaryModel {\n constructor({\n cartModel,\n }) {\n this._cartModel = cartModel\n this.loading = true\n makeObservable(this, {\n _cartModel: observable,\n loading: observable,\n totalItemsCount: computed,\n selectedItemsCount: computed,\n totalWishListItemsCount: computed,\n showTax: computed,\n hasErrors: computed,\n hasWarnings: computed,\n subtotal: computed,\n tax: computed,\n total: computed,\n presentablePrices: computed,\n exportSuccess: computed,\n })\n }\n\n get exportSuccess() {\n return this._cartModel.openedList?.exportSuccess\n }\n\n get totalItemsCount() {\n return this._cartModel.items.filter((item) => item.affectsPricing).length ?? 0\n }\n\n get selectedItemsCount() {\n if (this._cartModel.isListsMode && this._cartModel.openedList?.id !== CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n return this._cartModel.openedListItems?.length ?? 0\n } else if (this._cartModel.isListsMode && this._cartModel.openedList?.id === CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n return this._cartModel[CartListModel.CART_LIST_TYPES.UNASSIGNED].items.filter((item) => item.affectsPricing && item.checked).length ?? 0\n } else if (this._cartModel.isSingleListMode) {\n return this._cartModel.items.length ?? 0\n }\n\n return this._cartModel.items.filter((item) => item.affectsPricing && item.checked).length ?? 0\n }\n\n get totalWishListItemsCount() {\n return this._cartModel[CartListModel.CART_LIST_TYPES.WISHLIST]?.items?.length ?? 0\n }\n\n get showTax() {\n return !this._cartModel.affectPricingLists.every((list) => list.items?.every?.(item => item.price.tax == null))\n }\n\n get hasErrors() {\n if (this._cartModel.isListsMode) {\n return this._cartModel.openedList?.items?.some(item => item.errors.length > 0 && (this._cartModel.openedList.isUnassigned ? item.checked : true))\n }\n return this._cartModel.affectPricingLists.some((list) => list.items.some(item => item.errors.length > 0 && item.checked))\n }\n\n get hasWarnings() {\n if (this._cartModel.isListsMode) {\n return this._cartModel.openedList?.items?.some(item => item.warnings.length > 0 && (this._cartModel.openedList.isUnassigned ? item.checked : true))\n }\n return !this.hasErrors && this._cartModel.affectPricingLists.some((list) => list.items.some(item => item.warnings.length > 0 && item.checked))\n }\n\n get subtotal() {\n if (this._cartModel.isListsMode && this._cartModel.openedList?.isUnassigned) {\n return this._cartModel.openedList?.items?.reduce((total, item) => item.checked && item.affectsPricing ? total + item.price.subtotal : total, 0)\n } else if (this._cartModel.isListsMode || this._cartModel.isSingleListMode) {\n return this._cartModel.openedList?.items?.reduce((total, item) => total + item.price.subtotal, 0)\n }\n return this._cartModel.items?.reduce((total, item) => item.checked && item.affectsPricing ? total + item.price.subtotal : total, 0)\n }\n\n get tax() {\n if (this._cartModel.isListsMode && this._cartModel.openedList?.isUnassigned) {\n return this._cartModel.openedList?.items?.reduce((total, item) => item.checked && item.affectsPricing ? total + item.price.tax : total, 0)\n } else if (this._cartModel.isListsMode || this._cartModel.isSingleListMode) {\n return this._cartModel.openedList?.items?.reduce((total, item) => total + item.price.tax, 0)\n }\n return this._cartModel.items?.reduce((total, item) => item.checked && item.affectsPricing ? total + item.price.tax : total, 0)\n }\n\n get total() {\n return this.subtotal + this.tax\n }\n\n get presentablePrices() {\n return {\n subtotal: this.subtotal?.toFixed(2),\n tax: this.tax?.toFixed(2),\n total: this.total?.toFixed(2),\n }\n }\n}\n\nexport default CartSummaryModel\n","import { makeObservable, observable } from 'mobx'\n\nclass CartErrorModel {\n static CART_ERROR_LEVELS = {\n WARNING: 1,\n ERROR: 2,\n }\n\n static CART_ERROR_TYPES = {\n InventoryExceeded: 1,\n InventoryOutOfStock: 2,\n InventoryDelayed: 3,\n ProductNotAvailable: 4,\n ProductComponentNotAvailable: 5,\n MaxUnitsExceeded: 6,\n MinUnitsNotReached: 7,\n ProductUnitChanged: 8,\n MaxUnitsExceededForOrder: 9,\n RecipientListModelInvalid: 10,\n DeliveryMethodInvalid: 11,\n GdprFilesDeleted: 12,\n ProductOptionsChanged: 13,\n // ---- Local errors ----\n ProductPriceChanged: 101,\n }\n\n constructor({\n errorLevel,\n message,\n errorType,\n notAvailableCount,\n }) {\n this.errorLevel = errorLevel\n this.message = message\n this.errorType = errorType\n this.notAvailableCount = notAvailableCount\n makeObservable(this, {\n errorLevel: observable,\n message: observable,\n errorType: observable,\n notAvailableCount: observable,\n })\n }\n}\n\nexport default CartErrorModel\n","import {\n action,\n computed,\n makeObservable,\n observable,\n} from 'mobx'\nimport { t } from '$themelocalization'\nimport CartErrorModel from './CartErrorModel'\n\nexport default class CartItemPriceModel {\n constructor({\n itemModel = null,\n isChanged = null,\n isValid = null,\n orderItemId = null,\n subtotal = null,\n tax = null,\n }) {\n this._itemModel = itemModel\n this.isChanged = isChanged\n this.isValid = isValid\n this.orderItemId = orderItemId\n this.subtotal = subtotal\n this.tax = tax\n this.errors = []\n makeObservable(this, {\n isChanged: observable,\n isValid: observable,\n orderItemId: observable,\n subtotal: observable,\n tax: observable,\n errors: observable,\n total: computed,\n updateFromApi: action,\n setIsChangedWarning: action,\n })\n\n this.setIsChangedWarning()\n }\n\n get total() {\n return this.subtotal + this.tax\n }\n\n updateFromApi(priceItem) {\n if (!priceItem) return\n this.isChanged = priceItem.IsChanged ?? null\n this.isValid = priceItem.IsValid ?? null\n this.subtotal = priceItem.Price ?? null\n this.tax = priceItem.Tax ?? null\n\n this.setIsChangedWarning()\n }\n\n setIsChangedWarning() {\n if (this.isChanged) {\n this._itemModel.warnings.push(new CartErrorModel({\n errorLevel: CartErrorModel.CART_ERROR_LEVELS.WARNING,\n message: t('Cart.WarningPriceChanged'),\n errorType: CartErrorModel.CART_ERROR_TYPES.ProductPriceChanged,\n }))\n }\n }\n}\n","import {\n action,\n computed,\n makeObservable,\n observable,\n} from 'mobx'\nimport CartErrorModel from './CartErrorModel'\nimport CartItemPriceModel from './CartItemPriceModel'\nimport CartListModel from './CartListModel'\nimport moment from 'moment'\nimport { t } from '$themelocalization'\n\nclass CartItemModel {\n constructor ({\n cartModel,\n listModel,\n orderItemId,\n originalOrderFriendlyId = null,\n listId,\n checked,\n quantity,\n thumbnailUrl,\n editUrl,\n nickname,\n quantityPerRecipient,\n numRecipients,\n catalogNumber,\n defaultQuantity,\n product,\n properties = [],\n displayOrder = 0,\n subItems = [],\n proof = {},\n attributes = [],\n }) {\n this._cartModel = cartModel\n this._listModel = listModel\n this.displayOrder = displayOrder\n this.orderItemId = orderItemId\n this.originalOrderFriendlyId = originalOrderFriendlyId\n this.listId = listId\n this.checked = checked\n this.quantity = quantity\n this.thumbnailUrl = thumbnailUrl\n this.editUrl = editUrl\n this.nickname = nickname\n this.quantityPerRecipient = quantityPerRecipient\n this.numRecipients = numRecipients\n this.catalogNumber = catalogNumber\n this.defaultQuantity = defaultQuantity\n this.product = product\n this.properties = properties\n this.errors = []\n this.warnings = []\n this.price = new CartItemPriceModel({ itemModel: this })\n this.subItems = subItems\n this.proof = proof\n this.attributes = attributes\n\n makeObservable(this, {\n _listModel: observable,\n orderItemId: observable,\n originalOrderFriendlyId: observable,\n listId: observable,\n checked: observable,\n quantity: observable,\n thumbnailUrl: observable,\n editUrl: observable,\n nickname: observable,\n quantityPerRecipient: observable,\n numRecipients: observable,\n catalogNumber: observable,\n defaultQuantity: observable,\n product: observable,\n properties: observable,\n price: observable,\n errors: observable,\n warnings: observable,\n proof: observable,\n attributes: observable,\n addValidation: action,\n updateListId: action,\n toggleSelect: action,\n delete: action,\n moveItemToWishlist: action,\n moveItemToCart: action,\n reAssign: action,\n reAssignToNew: action,\n updateNickname: action,\n updateValidations: action,\n setProofStatus: action,\n duplicate: action,\n affectsPricing: computed,\n hasPricing: computed,\n hasUSAData: computed,\n isCOD: computed,\n hasItemsOffline: computed,\n isOffline: computed,\n })\n this.setProofStatus({Status: proof?.proofStatus, ThumbnailUrl: this.thumbnailUrl})\n }\n\n addValidation (validation) {\n if (validation.Error.Level === CartErrorModel.CART_ERROR_LEVELS.ERROR) {\n this.errors.push(new CartErrorModel({\n errorLevel: validation.Error.Level,\n message: validation.Error.Message,\n errorType: validation.Error.Type,\n }))\n }\n if (validation.Error.Level === CartErrorModel.CART_ERROR_LEVELS.WARNING) {\n this.warnings.push(new CartErrorModel({\n errorLevel: validation.Error.Level,\n message: validation.Error.Message,\n errorType: validation.Error.Type,\n }))\n }\n }\n\n updateListId (listId) {\n this.listId = listId\n }\n\n async toggleSelect () {\n try {\n await this._cartModel._cartActionsModel.updateItem(this.orderItemId, {checked: !this.checked})\n this.checked = !this.checked\n } catch (error) {\n console.error(error)\n }\n }\n\n async delete () {\n try {\n await this._cartModel._cartActionsModel.deleteItem(this)\n this._cartModel.removeItems([this.orderItemId])\n this._listModel.touchItemsCount()\n const newCount = this._listModel.itemsCount\n if (newCount) {\n this._listModel.touchSortingDate()\n this._listModel.touchModificationDate()\n if (!this._listModel.isWishList && this.checked) {\n await this._cartModel.updateCart()\n }\n } else if (this._listModel.isOrderApproval) {\n this._cartModel.revertModifications()\n }\n } catch (error) {\n console.error(error)\n }\n }\n\n async moveItemToWishlist () {\n try {\n await this._cartModel._cartActionsModel.moveItemToWishlist(this.orderItemId, this.checked)\n this._cartModel.moveItemToWishList(this)\n if (this.checked) {\n await this._cartModel.updateCart()\n }\n } catch (error) {\n console.error(error)\n }\n }\n\n async moveItemToCart () {\n try {\n await this._cartModel._cartActionsModel.moveItemToCart(this.orderItemId)\n this.checked = true\n\n this._cartModel.moveItemToCart(this)\n await this._cartModel.updateCart()\n } catch (error) {\n console.error(error)\n }\n }\n\n async reAssign (listId) {\n try {\n const listIdOrNull = listId === CartListModel.CART_LIST_TYPES.UNASSIGNED ? null : listId\n await this._cartModel._cartActionsModel.reAssignItemToList(this.orderItemId, listIdOrNull)\n this.listId = listId\n this._listModel.updateListFromApi({ ItemsCount: this._listModel.itemsCount - 1 })\n this._listModel.touchSortingDate()\n this._listModel.touchModificationDate()\n const targetList = this._cartModel.lists.find(list => list.id === listId)\n if (targetList) {\n targetList.touchSortingDate()\n targetList.touchModificationDate()\n }\n this._cartModel.openList(listId)\n } catch (error) {\n console.error(error)\n }\n }\n\n async reAssignToNew (title) {\n try {\n const { ID } = await this._cartModel._cartActionsModel.reAssignItemToNewList(this.orderItemId, title)\n this.listId = ID\n this._listModel.touchModificationDate()\n this._cartModel.addList({\n listId: ID,\n title,\n itemsCount: 0,\n skipLoading: true,\n sortingDate: moment().utc().toISOString(),\n modificationDate: moment().utc().toISOString(),\n })\n this._cartModel.openList(ID)\n } catch (error) {\n console.error(error)\n }\n }\n\n edit () {\n this._cartModel._storeData.navigate(this.editUrl)\n }\n\n async updateNickname (nickname) {\n try {\n const listId = this._listModel.isUnassigned || this._listModel.isDefault || this._listModel.isWishList ? null : this._listModel.id\n await this._cartModel._cartActionsModel.updateItem(this.orderItemId, { nickname, listId} )\n this._listModel.touchModificationDate()\n this._listModel.touchSortingDate()\n this.nickname = nickname\n } catch (e) {\n console.error(e)\n }\n }\n\n updateValidations (validations) {\n this.errors =\n validations\n .filter((validation) => validation.Error.Level === CartErrorModel.CART_ERROR_LEVELS.ERROR)\n .map(validation => new CartErrorModel({\n errorLevel: validation.Error.Level,\n message: validation.Error.Message,\n errorType: validation.Error.Type,\n notAvailableCount: validation.Error.Data?.NotAvailableCount,\n }))\n const priceChangedWarning = this.warnings.filter(warning => warning.errorType === CartErrorModel.CART_ERROR_TYPES.ProductPriceChanged)\n const newValidations = validations\n .filter((validation) => validation.Error.Level === CartErrorModel.CART_ERROR_LEVELS.WARNING)\n .map(validation => new CartErrorModel({\n errorLevel: validation.Error.Level,\n message: validation.Error.Message,\n errorType: validation.Error.Type,\n }))\n this.warnings = [...priceChangedWarning, ...newValidations]\n this.setProofStatus({Status: this.proof?.proofStatus, ThumbnailUrl: this.thumbnailUrl})\n }\n\n setProofStatus (status) {\n this.proof.Status = status.Status\n if (status.Status === 2) {\n this.thumbnailUrl = status.ThumbnailUrl.startsWith('/v1') ?`${this._cartModel._storeData.storeApiUrl}/${status.ThumbnailUrl}`: status.ThumbnailUrl\n }\n if (status.Status === 3) {\n\n this.warnings = [...this.warnings.filter(w => w.errorType !== 997), new CartErrorModel({\n errorLevel: CartErrorModel.CART_ERROR_LEVELS.WARNING,\n message: t('Cart.Item.Warning.FailedProof'),\n errorType: 997,\n })]\n }\n }\n\n async duplicate () {\n try {\n await this._cartModel._cartActionsModel.duplicateItem(this.orderItemId)\n } catch (e) {\n return e\n }\n }\n\n get affectsPricing () {\n return this._listModel.affectPricing\n }\n\n get hasPricing () {\n return this.product.hasPricing\n }\n\n get hasUSAData () {\n return this.attributes.some(attribute => attribute.Name === 'HasUSADATA' && attribute.Value.toLowerCase() === 'true')\n }\n\n get isCOD () {\n return this.attributes.some(attribute => attribute.Name === 'IsCOD' && attribute.Value.toLowerCase() === 'true')\n }\n\n get hasItemsOffline () {\n return this.errors.some(err => err.errorType === CartErrorModel.CART_ERROR_TYPES.ProductComponentNotAvailable)\n }\n\n get isOffline () {\n return this.errors.some(err => err.errorType === CartErrorModel.CART_ERROR_TYPES.ProductNotAvailable)\n }\n\n get itemsCountEligibleForDuplicate() {\n return this.subItems.length - this.errors?.[0]?.notAvailableCount || 0\n }\n}\n\nexport default CartItemModel\n","class CartProductModel {\n constructor({\n productId,\n name,\n catalogNumber,\n unit,\n hasPricing = true,\n }) {\n this.productId = productId\n this.name = name\n this.catalogNumber = catalogNumber\n this.unit = unit\n this.hasPricing = hasPricing\n }\n}\n\nexport default CartProductModel\n","class CartProductUnitModel {\n constructor({\n quantity,\n singular,\n plural,\n packSingular,\n packPlural,\n }) {\n this.quantity = quantity\n this.singular = singular\n this.plural = plural\n this.packSingular = packSingular\n this.packPlural = packPlural\n }\n}\n\nexport default CartProductUnitModel\n","import { action, makeObservable, observable } from 'mobx'\nimport { UStoreProvider } from '@ustore/core'\nimport CartListModel from './CartListModel'\nimport { activityMonitor } from '$themeservices'\n\nclass CartActionsModel {\n constructor({\n cartModel,\n }) {\n this._cartModel = cartModel\n this.intervalId = null\n this.apiCallEmitted = false\n makeObservable(this, {\n _cartModel: observable,\n apiCallEmitted: observable,\n startTimer: action,\n emitApiCall: action,\n endApiCall: action,\n })\n }\n\n startTimer() {\n if (!this.intervalId) {\n this.intervalId = setInterval(() => {\n this._cartModel.loading = !!this.apiCallEmitted;\n }, 2000)\n }\n }\n\n stopTimer() {\n if (this.intervalId) {\n clearInterval(this.intervalId)\n this.intervalId = null\n }\n }\n\n emitApiCall({summaryLoader} = {summaryLoader: true}) {\n this._cartModel.summary.loading = summaryLoader\n this.apiCallEmitted = true\n this.startTimer()\n return Date.now()\n }\n\n async endApiCall(now) {\n this._cartModel.loading = false\n this._cartModel.summary.loading = false\n this._cartModel.affectPricingLists.forEach((list) => {\n list.loading = false\n })\n this.apiCallEmitted = false\n this.stopTimer()\n if (Date.now() - now < 3000) {\n await new Promise(resolve => setTimeout(() => {\n resolve()\n }, 3000 - (Date.now() - now)))\n }\n }\n\n async toggleSelectList(orderItemIds, checked) {\n try {\n this.emitApiCall()\n await Promise.all(orderItemIds.map(async orderItemId => {\n await this._cartModel._uStoreProvider.api.orders.updateCartItem(\n orderItemId,\n {\n IsChecked: checked,\n Nickname: null\n }\n )\n }))\n await this.updateCartListOnSelectionChange()\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async updateItem(orderItemId, {checked = null, nickname = null, listId = null } ) {\n try {\n this.emitApiCall()\n await this._cartModel._uStoreProvider.api.orders.updateCartItem(\n orderItemId,\n {\n ListID: listId || undefined,\n IsChecked: checked === null ? undefined : checked,\n Nickname: nickname === null ? undefined : nickname,\n }\n )\n if (checked !== null && this._cartModel.isWishListMode) {\n await this.updateCartListOnSelectionChange(!checked)\n }\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async emptyList(listId, itemsIds = null) {\n try {\n this.emitApiCall()\n if (listId === CartListModel.CART_LIST_TYPES.WISH_LIST) {\n await this._cartModel._uStoreProvider.api.orders.clearWishlist(itemsIds)\n } else if (listId === CartListModel.CART_LIST_TYPES.DEFAULT){\n await this._cartModel._uStoreProvider.api.orders.clearCart(itemsIds)\n await this._cartModel._uStoreProvider.state.store.loadCartItemsCount()\n } else {\n if (!itemsIds || itemsIds.length === 0) {\n const { Items } = await this._cartModel._uStoreProvider.api.orders.getCartInfo(listId)\n itemsIds = Items.map(item => item.OrderItemID)\n }\n if (itemsIds.length > 0) {\n await this._cartModel._uStoreProvider.api.orders.clearCart(itemsIds, listId)\n }\n await this._cartModel._uStoreProvider.state.store.loadCartItemsCount()\n }\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async deleteItem(item) {\n const now = this.emitApiCall({summaryLoader: !item.checked ? false : !item._listModel.isWishList})\n try {\n await this._cartModel._uStoreProvider.api.orders.deleteCartItem(item.orderItemId)\n await this._cartModel._uStoreProvider.state.store.loadCartItemsCount()\n } catch (error) {\n console.error(error)\n } finally {\n await this.endApiCall(now)\n }\n }\n\n async moveItemToWishlist(orderItemId, checked) {\n const now = this.emitApiCall({summaryLoader: false})\n try {\n await UStoreProvider.api.orders.saveForLater(orderItemId)\n await this._cartModel._uStoreProvider.state.store.loadCartItemsCount()\n } catch (error) {\n console.error(error)\n } finally {\n await this.endApiCall(now)\n }\n }\n\n async moveItemToCart(orderItemId) {\n const now = this.emitApiCall()\n try {\n await UStoreProvider.api.orders.addToCart(orderItemId)\n await this._cartModel._uStoreProvider.state.store.loadCartItemsCount()\n const cartValidation = await this._cartModel._uStoreProvider.api.orders.validateCart(true)\n this._cartModel.updateCartValidation(cartValidation)\n } catch (error) {\n console.error(error)\n } finally {\n await this.endApiCall(now)\n }\n }\n\n async updateCartListOnSelectionChange(recheckUnselected = false) {\n try {\n this.emitApiCall()\n const cartPricing = await this._cartModel._uStoreProvider.api.orders.getCartPricingInfo(true)\n const checkedCartValidation = await this._cartModel._uStoreProvider.api.orders.validateCart(true)\n const uncheckedCartValidation = recheckUnselected ? await this._cartModel._uStoreProvider.api.orders.validateCart(false) : []\n this._cartModel.updateCartPricing(cartPricing.Items)\n this._cartModel.updateCartValidation([...checkedCartValidation, ...uncheckedCartValidation])\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async updateCart(selectedOnly = true) {\n try {\n this.emitApiCall()\n const cartItemsFromApi = await this._cartModel._uStoreProvider.api.orders.getCartInfo()\n const wishlistItemsFromApi = await this._cartModel._uStoreProvider.api.orders.getWishListInfo()\n let items = [...cartItemsFromApi.Items, ...wishlistItemsFromApi.Items]\n if (selectedOnly) {\n items = items.filter(item => item.checked)\n }\n this._cartModel.updateCartItems(items)\n const cartPricing = await this._cartModel._uStoreProvider.api.orders.getCartPricingInfo(true)\n const wishlistPricing = await this._cartModel._uStoreProvider.api.orders.getWishListPricingInfo(true)\n\n let pricingItems = []\n if (selectedOnly) {\n pricingItems = [...cartPricing.Items, ...wishlistPricing.Items]\n } else {\n const cartPricingUnchecked = await this._cartModel._uStoreProvider.api.orders.getCartPricingInfo(false)\n const wishlistPricingUnchecked = await this._cartModel._uStoreProvider.api.orders.getWishListPricingInfo(false)\n pricingItems = [\n ...cartPricing.Items,\n ...wishlistPricing.Items,\n ...cartPricingUnchecked.Items,\n ...wishlistPricingUnchecked.Items\n ]\n }\n this._cartModel.updateCartPricing(pricingItems)\n\n const cartValidation = await this._cartModel._uStoreProvider.api.orders.validateCart(true)\n const wishlistValidation = await this._cartModel._uStoreProvider.api.orders.validateWishList(true)\n let validationItems = []\n if (selectedOnly) {\n validationItems = [...cartValidation, ...wishlistValidation]\n } else {\n const cartValidationUnchecked = await this._cartModel._uStoreProvider.api.orders.validateCart(false)\n const wishlistValidationUnchecked = await this._cartModel._uStoreProvider.api.orders.validateWishList(false)\n validationItems = [\n ...cartValidation,\n ...wishlistValidation,\n ...cartValidationUnchecked,\n ...wishlistValidationUnchecked\n ]\n }\n\n this._cartModel.updateCartValidation(validationItems)\n\n await this._cartModel._uStoreProvider.state.store.loadCartItemsCount()\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async reAssignList(oldListId, targetListId, checkedOnly = false) {\n try {\n this.emitApiCall()\n const orderItems = this._cartModel.lists\n .find((list) => list.id === oldListId)?.items\n ?.filter((item) => checkedOnly ? item.checked : true)\n ?.map((item) => ({\n OrderItemID: item.orderItemId,\n ListID: targetListId,\n Nickname: null,\n }))\n await this._cartModel._uStoreProvider.api.orders.updateCart({\n Items: orderItems,\n updateLists: true,\n })\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async deleteList(listId) {\n try {\n this.emitApiCall()\n await this._cartModel._uStoreProvider.api.orders.deleteList(listId)\n this._cartModel.removeItems(this._cartModel.lists.find(list => list.id === listId).items.map(item => item.orderItemId))\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async addList(title, items) {\n try {\n this.emitApiCall()\n const { ID } = await this._cartModel._uStoreProvider.api.orders.createCartList(title)\n await this._cartModel._uStoreProvider.api.orders.updateCart({\n Items: items.map((item) => ({\n OrderItemID: item.orderItemId,\n ListID: ID,\n }))\n })\n return { ID }\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async reAssignItemToList(orderItemId, targetListId) {\n try {\n this.emitApiCall()\n await this._cartModel._uStoreProvider.api.orders.updateCartItem(\n orderItemId,\n {\n ListID: targetListId,\n }\n )\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async reAssignItemToNewList(orderItemId, title) {\n try {\n this.emitApiCall()\n const { ID } = await this._cartModel._uStoreProvider.api.orders.createCartList(title)\n const selectedItem = this._cartModel.items.find(item => item.orderItemId === orderItemId)\n if (selectedItem?.listId) {\n const currentList = this._cartModel.lists.find(list => list.id === selectedItem.listId)\n currentList?.touchSortingDate()\n }\n await this._cartModel._uStoreProvider.api.orders.updateCartItem(\n orderItemId,\n {\n ListID: ID,\n }\n )\n return { ID }\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async exportList(listId) {\n try {\n this.emitApiCall()\n return await this._cartModel._uStoreProvider.api.orders.exportList(listId)\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async renameList(listId, title) {\n try {\n this.emitApiCall()\n return await this._cartModel._uStoreProvider.api.orders.renameList(listId, title)\n } catch (error) {\n console.error(error)\n } finally {\n this.endApiCall()\n }\n }\n\n async duplicateItem(orderItemId) {\n try {\n this.emitApiCall()\n const { ActivityID } = await this._cartModel._uStoreProvider.api.orders.duplicateItem(orderItemId)\n activityMonitor.addActivity(ActivityID, orderItemId)\n this._cartModel.setActivities({[ActivityID]: {entityId: orderItemId, activity: {ActivityID, Status: 1}}})\n } catch (error) {\n throw error\n } finally {\n this.endApiCall()\n }\n }\n\n async duplicateList(listId) {\n try {\n this.emitApiCall()\n const {ActivityID} = await this._cartModel._uStoreProvider.api.orders.duplicateList([listId])\n activityMonitor.addActivity(ActivityID, listId)\n this._cartModel.setActivities({[ActivityID]: {entityId: listId, activity: {ActivityID, Status: 1}}})\n } catch (error) {\n throw error\n } finally {\n this.endApiCall()\n }\n }\n}\n\nexport default CartActionsModel\n","export default class CartOrderApprovalModel {\n constructor({\n originalOrderFriendlyId,\n originalOrderId\n }) {\n this.originalOrderFriendlyId = originalOrderFriendlyId;\n this.originalOrderId = originalOrderId;\n }\n}","import {\n action,\n makeObservable,\n observable\n} from 'mobx'\n\nclass CartDialogsModel {\n constructor() {\n this.revertModifications = false\n\n makeObservable(this, {\n revertModifications: observable,\n setRevertModifications: action\n })\n\n }\n setRevertModifications(value){\n this.revertModifications = value\n }\n\n}\n\nexport default CartDialogsModel\n","function getLocaleDateString (lang) {\n const formats = {\n 'af': 'yyyy/MM/dd',\n 'af-za': 'yyyy/MM/dd',\n 'am': 'd/M/yyyy',\n 'am-et': 'd/M/yyyy',\n 'ar': 'dd/MM/yyyy',\n 'ar-ae': 'dd/MM/yyyy',\n 'ar-bh': 'dd/MM/yyyy',\n 'ar-dz': 'dd-MM-yyyy',\n 'ar-eg': 'dd/MM/yyyy',\n 'ar-iq': 'dd/MM/yyyy',\n 'ar-jo': 'dd/MM/yyyy',\n 'ar-kw': 'dd/MM/yyyy',\n 'ar-lb': 'dd/MM/yyyy',\n 'ar-ly': 'dd/MM/yyyy',\n 'ar-ma': 'dd-MM-yyyy',\n 'ar-om': 'dd/MM/yyyy',\n 'ar-qa': 'dd/MM/yyyy',\n 'ar-sa': 'dd/MM/yy',\n 'ar-sy': 'dd/MM/yyyy',\n 'ar-tn': 'dd-MM-yyyy',\n 'ar-ye': 'dd/MM/yyyy',\n 'arn': 'dd-MM-yyyy',\n 'arn-cl': 'dd-MM-yyyy',\n 'as': 'dd-MM-yyyy',\n 'as-in': 'dd-MM-yyyy',\n 'az': 'dd.MM.yyyy',\n 'az-cyrl-az': 'dd.MM.yyyy',\n 'az-latn-az': 'dd.MM.yyyy',\n 'ba': 'dd.MM.yy',\n 'ba-ru': 'dd.MM.yy',\n 'be': 'dd.MM.yyyy',\n 'be-by': 'dd.MM.yyyy',\n 'bg': 'dd.M.yyyy',\n 'bg-bg': 'dd.M.yyyy',\n 'bn': 'dd-MM-yy',\n 'bn-bd': 'dd-MM-yy',\n 'bn-in': 'dd-MM-yy',\n 'bo': 'yyyy/M/d',\n 'bo-cn': 'yyyy/M/d',\n 'br': 'dd/MM/yyyy',\n 'br-fr': 'dd/MM/yyyy',\n 'bs': 'd.M.yyyy',\n 'bs-cyrl-ba': 'd.M.yyyy',\n 'bs-latn-ba': 'd.M.yyyy',\n 'ca': 'dd/MM/yyyy',\n 'ca-es': 'dd/MM/yyyy',\n 'co': 'dd/MM/yyyy',\n 'co-fr': 'dd/MM/yyyy',\n 'cs': 'd.M.yyyy',\n 'cs-cz': 'd.M.yyyy',\n 'cy': 'dd/MM/yyyy',\n 'cy-gb': 'dd/MM/yyyy',\n 'da': 'dd-MM-yyyy',\n 'da-dk': 'dd-MM-yyyy',\n 'de': 'dd.MM.yyyy',\n 'de-at': 'dd.MM.yyyy',\n 'de-ch': 'dd.MM.yyyy',\n 'de-de': 'dd.MM.yyyy',\n 'de-li': 'dd.MM.yyyy',\n 'de-lu': 'dd.MM.yyyy',\n 'dsb': 'd. M. yyyy',\n 'dsb-de': 'd. M. yyyy',\n 'dv': 'dd/MM/yy',\n 'dv-mv': 'dd/MM/yy',\n 'el': 'd/M/yyyy',\n 'el-gr': 'd/M/yyyy',\n 'en': 'dd/MM/yyyy',\n 'en-029': 'MM/dd/yyyy',\n 'en-au': 'd/MM/yyyy',\n 'en-bz': 'dd/MM/yyyy',\n 'en-ca': 'yyyy-MM-dd',\n 'en-gb': 'dd/MM/yyyy',\n 'en-ie': 'dd/MM/yyyy',\n 'en-in': 'dd-MM-yyyy',\n 'en-jm': 'dd/MM/yyyy',\n 'en-my': 'd/M/yyyy',\n 'en-nz': 'd/MM/yyyy',\n 'en-ph': 'M/d/yyyy',\n 'en-sh': 'd/M/yyyy',\n 'en-tt': 'dd/MM/yyyy',\n 'en-us': 'M/d/yyyy',\n 'en-US': 'M/d/yyyy',\n 'en-za': 'yyyy/MM/dd',\n 'en-zw': 'M/d/yyyy',\n 'es': 'dd/MM/yyyy',\n 'es-ar': 'dd/MM/yyyy',\n 'es-bo': 'dd/MM/yyyy',\n 'es-cl': 'dd-MM-yyyy',\n 'es-co': 'dd/MM/yyyy',\n 'es-cr': 'dd/MM/yyyy',\n 'es-do': 'dd/MM/yyyy',\n 'es-ec': 'dd/MM/yyyy',\n 'es-es': 'dd/MM/yyyy',\n 'es-gt': 'dd/MM/yyyy',\n 'es-hn': 'dd/MM/yyyy',\n 'es-mx': 'dd/MM/yyyy',\n 'es-ni': 'dd/MM/yyyy',\n 'es-pa': 'MM/dd/yyyy',\n 'es-pe': 'dd/MM/yyyy',\n 'es-pr': 'dd/MM/yyyy',\n 'es-py': 'dd/MM/yyyy',\n 'es-sv': 'dd/MM/yyyy',\n 'es-us': 'M/d/yyyy',\n 'es-uy': 'dd/MM/yyyy',\n 'es-ve': 'dd/MM/yyyy',\n 'et': 'd.MM.yyyy',\n 'et-ee': 'd.MM.yyyy',\n 'eu': 'yyyy/MM/dd',\n 'eu-es': 'yyyy/MM/dd',\n 'fa': 'MM/dd/yyyy',\n 'fa-ir': 'MM/dd/yyyy',\n 'fi': 'd.M.yyyy',\n 'fi-fi': 'd.M.yyyy',\n 'fil': 'M/d/yyyy',\n 'fil-ph': 'M/d/yyyy',\n 'fo': 'dd-MM-yyyy',\n 'fo-fo': 'dd-MM-yyyy',\n 'fr': 'd/MM/yyyy',\n 'fr-be': 'd/MM/yyyy',\n 'fr-ca': 'yyyy-MM-dd',\n 'fr-ch': 'dd.MM.yyyy',\n 'fr-fr': 'dd/MM/yyyy',\n 'fr-lu': 'dd/MM/yyyy',\n 'fr-mc': 'dd/MM/yyyy',\n 'fy': 'd-M-yyyy',\n 'fy-nl': 'd-M-yyyy',\n 'ga': 'dd/MM/yyyy',\n 'ga-ie': 'dd/MM/yyyy',\n 'gd': 'dd/MM/yyyy',\n 'gd-gb': 'dd/MM/yyyy',\n 'gl': 'dd/MM/yy',\n 'gl-es': 'dd/MM/yy',\n 'gsw': 'dd/MM/yyyy',\n 'gsw-fr': 'dd/MM/yyyy',\n 'gu': 'dd-MM-yy',\n 'gu-in': 'dd-MM-yy',\n 'ha': 'd/M/yyyy',\n 'ha-latn-ng': 'd/M/yyyy',\n 'he': 'dd/MM/yyyy',\n 'he-il': 'dd/MM/yyyy',\n 'hi': 'dd-MM-yyyy',\n 'hi-in': 'dd-MM-yyyy',\n 'hr': 'd.M.yyyy.',\n 'hr-ba': 'd.M.yyyy.',\n 'hr-hr': 'd.M.yyyy',\n 'hsb': 'd. M. yyyy',\n 'hsb-de': 'd. M. yyyy',\n 'hu': 'yyyy. MM. dd.',\n 'hu-hu': 'yyyy. MM. dd.',\n 'hy': 'dd.MM.yyyy',\n 'hy-am': 'dd.MM.yyyy',\n 'id': 'dd/MM/yyyy',\n 'id-id': 'dd/MM/yyyy',\n 'ig': 'd/M/yyyy',\n 'ig-ng': 'd/M/yyyy',\n 'ii': 'yyyy/M/d',\n 'ii-cn': 'yyyy/M/d',\n 'is': 'd.M.yyyy',\n 'is-is': 'd.M.yyyy',\n 'it': 'dd.MM.yyyy',\n 'it-ch': 'dd.MM.yyyy',\n 'it-it': 'dd/MM/yyyy',\n 'iu': 'd/M/yyyy',\n 'iu-cans-ca': 'd/M/yyyy',\n 'iu-latn-ca': 'd/MM/yyyy',\n 'ja': 'yyyy/MM/dd',\n 'ja-jp': 'yyyy/MM/dd',\n 'ka': 'dd.MM.yyyy',\n 'ka-ge': 'dd.MM.yyyy',\n 'kk': 'dd.MM.yyyy',\n 'kk-kz': 'dd.MM.yyyy',\n 'kl': 'dd-MM-yyyy',\n 'kl-gl': 'dd-MM-yyyy',\n 'km': 'yyyy-MM-dd',\n 'km-kh': 'yyyy-MM-dd',\n 'kn': 'dd-MM-yy',\n 'kn-in': 'dd-MM-yy',\n 'ko': 'yyyy-MM-dd',\n 'ko-kr': 'yyyy-MM-dd',\n 'kok': 'dd-MM-yyyy',\n 'kok-in': 'dd-MM-yyyy',\n 'ky': 'dd.MM.yy',\n 'ky-kg': 'dd.MM.yy',\n 'lb': 'dd/MM/yyyy',\n 'lb-lu': 'dd/MM/yyyy',\n 'lo': 'dd/MM/yyyy',\n 'lo-la': 'dd/MM/yyyy',\n 'lt': 'yyyy.MM.dd',\n 'lt-lt': 'yyyy.MM.dd',\n 'lv': 'yyyy.MM.dd.',\n 'lv-lv': 'yyyy.MM.dd.',\n 'mi': 'dd/MM/yyyy',\n 'mi-nz': 'dd/MM/yyyy',\n 'mk': 'dd.MM.yyyy',\n 'mk-mk': 'dd.MM.yyyy',\n 'ml': 'dd-MM-yy',\n 'ml-in': 'dd-MM-yy',\n 'mn': 'yy.MM.dd',\n 'mn-mn': 'yy.MM.dd',\n 'mn-mong-cn': 'yyyy/M/d',\n 'moh': 'M/d/yyyy',\n 'moh-ca': 'M/d/yyyy',\n 'mr': 'dd-MM-yyyy',\n 'mr-in': 'dd-MM-yyyy',\n 'ms': 'dd/MM/yyyy',\n 'ms-bn': 'dd/MM/yyyy',\n 'ms-my': 'dd/MM/yyyy',\n 'mt': 'dd/MM/yyyy',\n 'mt-mt': 'dd/MM/yyyy',\n 'nb': 'dd.MM.yyyy',\n 'nb-no': 'dd.MM.yyyy',\n 'ne': 'M/d/yyyy',\n 'ne-np': 'M/d/yyyy',\n 'nl': 'dd-MM-yyyy',\n 'nl-be': 'dd-MM-yyyy',\n 'nl-nl': 'dd-MM-yyyy',\n 'nn': 'dd.MM.yyyy',\n 'nn-no': 'dd.MM.yyyy',\n 'nso': 'yyyy/MM/dd',\n 'nso-za': 'yyyy/MM/dd',\n 'oc': 'dd/MM/yyyy',\n 'oc-fr': 'dd/MM/yyyy',\n 'or': 'dd-MM-yy',\n 'or-in': 'dd-MM-yy',\n 'pa': 'dd-MM-yy',\n 'pa-in': 'dd-MM-yy',\n 'pl': 'yyyy-MM-dd',\n 'pl-pl': 'yyyy-MM-dd',\n 'prs': 'dd/MM/yy',\n 'prs-af': 'dd/MM/yy',\n 'ps': 'dd/MM/yy',\n 'ps-af': 'dd/MM/yy',\n 'pt': 'd/M/yyyy',\n 'pt-br': 'd/M/yyyy',\n 'pt-pt': 'dd-MM-yyyy',\n 'qut': 'dd/MM/yyyy',\n 'qut-gt': 'dd/MM/yyyy',\n 'quz': 'dd/MM/yyyy',\n 'quz-bo': 'dd/MM/yyyy',\n 'quz-ec': 'dd/MM/yyyy',\n 'quz-pe': 'dd/MM/yyyy',\n 'rm': 'dd/MM/yyyy',\n 'rm-ch': 'dd/MM/yyyy',\n 'ro': 'dd.MM.yyyy',\n 'ro-ro': 'dd.MM.yyyy',\n 'ru': 'dd.MM.yyyy',\n 'ru-ru': 'dd.MM.yyyy',\n 'rw': 'M/d/yyyy',\n 'rw-rw': 'M/d/yyyy',\n 'sa': 'dd-MM-yyyy',\n 'sa-in': 'dd-MM-yyyy',\n 'sah': 'MM.dd.yyyy',\n 'sah-ru': 'MM.dd.yyyy',\n 'se': 'd.M.yyyy',\n 'se-fi': 'd.M.yyyy',\n 'se-no': 'dd.MM.yyyy',\n 'se-se': 'yyyy-MM-dd',\n 'si': 'yyyy-MM-dd',\n 'si-lk': 'yyyy-MM-dd',\n 'sk': 'd. M. yyyy',\n 'sk-sk': 'd. M. yyyy',\n 'sl': 'd.M.yyyy',\n 'sl-si': 'd.M.yyyy',\n 'sma': 'dd.MM.yyyy',\n 'sma-no': 'dd.MM.yyyy',\n 'sma-se': 'yyyy-MM-dd',\n 'smj': 'dd.MM.yyyy',\n 'smj-no': 'dd.MM.yyyy',\n 'smj-se': 'yyyy-MM-dd',\n 'smn': 'd.M.yyyy',\n 'smn-fi': 'd.M.yyyy',\n 'sms': 'd.M.yyyy',\n 'sms-fi': 'd.M.yyyy',\n 'sq': 'yyyy-MM-dd',\n 'sq-al': 'yyyy-MM-dd',\n 'sr': 'd.M.yyyy',\n 'sr-cyrl-ba': 'd.M.yyyy',\n 'sr-cyrl-cs': 'd.M.yyyy',\n 'sr-cyrl-me': 'd.M.yyyy',\n 'sr-cyrl-rs': 'd.M.yyyy',\n 'sr-latn-ba': 'd.M.yyyy',\n 'sr-latn-cs': 'd.M.yyyy',\n 'sr-latn-me': 'd.M.yyyy',\n 'sr-latn-rs': 'd.M.yyyy',\n 'sv': 'yyyy-MM-dd',\n 'sv-fi': 'd.M.yyyy',\n 'sv-se': 'yyyy-MM-dd',\n 'sw': 'M/d/yyyy',\n 'sw-ke': 'M/d/yyyy',\n 'syr': 'dd/MM/yyyy',\n 'syr-sy': 'dd/MM/yyyy',\n 'ta': 'dd-MM-yyyy',\n 'ta-in': 'dd-MM-yyyy',\n 'te': 'dd-MM-yy',\n 'te-in': 'dd-MM-yy',\n 'tg': 'dd.MM.yy',\n 'tg-cyrl-tj': 'dd.MM.yy',\n 'th': 'd/M/yyyy',\n 'th-th': 'd/M/yyyy',\n 'tk': 'dd.MM.yy',\n 'tk-tm': 'dd.MM.yy',\n 'tn': 'yyyy/MM/dd',\n 'tn-za': 'yyyy/MM/dd',\n 'tr': 'dd.MM.yyyy',\n 'tr-tr': 'dd.MM.yyyy',\n 'tt': 'dd.MM.yyyy',\n 'tt-ru': 'dd.MM.yyyy',\n 'tzm': 'dd-MM-yyyy',\n 'tzm-lLatn-dz': 'dd-MM-yyyy',\n 'ug': 'yyyy-M-d',\n 'ug-cn': 'yyyy-M-d',\n 'uk': 'dd.MM.yyyy',\n 'uk-ua': 'dd.MM.yyyy',\n 'ur': 'dd/MM/yyyy',\n 'ur-pk': 'dd/MM/yyyy',\n 'uz': 'dd.MM.yyyy',\n 'uz-cyrl-uz': 'dd.MM.yyyy',\n 'uz-latn-uz': 'dd/MM yyyy',\n 'vi': 'dd/MM/yyyy',\n 'vi-vn': 'dd/MM/yyyy',\n 'wo': 'dd/MM/yyyy',\n 'wo-sn': 'dd/MM/yyyy',\n 'xh': 'yyyy/MM/dd',\n 'xh-za': 'yyyy/MM/dd',\n 'yo': 'd/M/yyyy',\n 'yo-ng': 'd/M/yyyy',\n 'zh': 'yyyy/M/d',\n 'zh-cn': 'yyyy/M/d',\n 'zh-cht': 'yyyy/M/d',\n 'zh-hk': 'd/M/yyyy',\n 'zh-mo': 'd/M/yyyy',\n 'zh-sg': 'd/M/yyyy',\n 'zh-tw': 'yyyy/M/d',\n 'zu': 'yyyy/MM/dd',\n 'zu-za': 'yyyy/MM/dd'\n }\n\n return lang ? formats[lang.toLowerCase()].toUpperCase() : 'DD/MM/YYYY'\n}\n\nconst getLocaleTimeString = (lang) => {\n const timeFormat = {\n 'af': 'HH:mm',\n 'ar-dz': 'HH:mm',\n 'ar-kw': 'HH:mm',\n 'ar-ly': 'HH:mm',\n 'ar-ma': 'HH:mm',\n 'ar-sa': 'HH:mm',\n 'ar-tn': 'HH:mm',\n 'ar': 'HH:mm',\n 'az': 'HH:mm',\n 'be': 'HH:mm',\n 'bg': 'H:mm',\n 'bm': 'HH:mm',\n 'bn-bd': 'A h:mm',\n 'bn': 'A h:mm',\n 'bo': 'A h:mm',\n 'br': 'HH:mm',\n 'bs': 'H:mm',\n 'ca': 'H:mm',\n 'cs': 'H:mm',\n 'cv': 'HH:mm',\n 'cy': 'HH:mm',\n 'da': 'HH:mm',\n 'de-at': 'HH:mm',\n 'de-ch': 'HH:mm',\n 'de': 'HH:mm',\n 'dv': 'HH:mm',\n 'el': 'h:mm A',\n 'en': 'h:mm A',\n 'en-us': 'h:mm A',\n 'en-au': 'h:mm A',\n 'en-ca': 'h:mm A',\n 'en-gb': 'HH:mm',\n 'en-ie': 'HH:mm',\n 'en-il': 'HH:mm',\n 'en-in': 'h:mm A',\n 'en-nz': 'h:mm A',\n 'en-sg': 'HH:mm',\n 'eo': 'HH:mm',\n 'es-do': 'h:mm A',\n 'es-mx': 'H:mm',\n 'es-us': 'h:mm A',\n 'es': 'H:mm',\n 'et': 'H:mm',\n 'eu': 'HH:mm',\n 'fa': 'HH:mm',\n 'fi': 'HH.mm',\n 'fil': 'h:mm A',\n 'fo': 'HH:mm',\n 'fr-ca': 'HH:mm',\n 'fr-ch': 'HH:mm',\n 'fr': 'HH:mm',\n 'fy': 'HH:mm',\n 'ga': 'HH:mm',\n 'gd': 'HH:mm',\n 'gl': 'H:mm',\n 'gom-deva': 'A h:mm',\n 'gom-latn': 'A h:mm',\n 'gu': 'A h:mm',\n 'he': 'HH:mm',\n 'hi': 'A h:mm',\n 'hr': 'H:mm',\n 'hu': 'H:mm',\n 'hy-am': 'HH:mm',\n 'id': 'HH.mm',\n 'is': 'H:mm',\n 'it-ch': 'HH:mm',\n 'it': 'HH:mm',\n 'ja': 'HH:mm',\n 'jv': 'HH.mm',\n 'ka': 'HH:mm',\n 'kk': 'HH:mm',\n 'km': 'HH:mm',\n 'kn': 'A h:mm',\n 'ko': 'A h:mm',\n 'ku': 'HH:mm',\n 'ky': 'HH:mm',\n 'lb': 'H:mm',\n 'lo': 'HH:mm',\n 'lt': 'HH:mm',\n 'lv': 'HH:mm',\n 'me': 'H:mm',\n 'mi': 'HH:mm',\n 'mk': 'H:mm',\n 'ml': 'A h:mm',\n 'mn': 'HH:mm',\n 'mr': 'A h:mm',\n 'ms-my': 'HH.mm',\n 'ms': 'HH.mm',\n 'mt': 'HH:mm',\n 'my': 'HH:mm',\n 'nb': 'HH:mm',\n 'ne': 'h:mm',\n 'nl-be': 'HH:mm',\n 'nl': 'HH:mm',\n 'nn': 'HH:mm',\n 'oc-lnc': 'H:mm',\n 'pa-in': 'A h:mm',\n 'pl': 'HH:mm',\n 'pt-br': 'HH:mm',\n 'pt': 'HH:mm',\n 'ro': 'H:mm',\n 'ru': 'H:mm',\n 'sd': 'HH:mm',\n 'se': 'HH:mm',\n 'si': 'a h:mm',\n 'sk': 'H:mm',\n 'sl': 'H:mm',\n 'sq': 'HH:mm',\n 'sr-cyrl': 'H:mm',\n 'sr': 'H:mm',\n 'ss': 'h:mm A',\n 'sv': 'HH:mm',\n 'sw': 'hh:mm A',\n 'ta': 'HH:mm',\n 'te': 'A h:mm',\n 'tet': 'HH:mm',\n 'tg': 'HH:mm',\n 'th': 'H:mm',\n 'tk': 'HH:mm',\n 'tl-ph': 'HH:mm',\n 'tlh': 'HH:mm',\n 'tr': 'HH:mm',\n 'tzl': 'HH.mm',\n 'tzm-latn': 'HH:mm',\n 'tzm': 'HH:mm',\n 'ug-cn': 'HH:mm',\n 'uk': 'HH:mm',\n 'ur': 'HH:mm',\n 'uz-latn': 'HH:mm',\n 'uz': 'HH:mm',\n 'vi': 'HH:mm',\n 'x-pseudo': 'HH:mm',\n 'yo': 'h:mm A',\n 'zh-cn': 'HH:mm',\n 'zh-hk': 'HH:mm',\n 'zh-mo': 'HH:mm',\n 'zh-tw': 'HH:mm',\n }\n\n return timeFormat[lang.toLowerCase()] || 'HH:mm'\n}\n\n\nexport { getLocaleDateString, getLocaleTimeString }\n","import { formatNumByLocale } from '$ustoreinternal/services/utils'\nimport moment from 'moment'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport {getLocaleDateString, getLocaleTimeString} from '$ustoreinternal/services/locale'\n\nexport const formatForCurrencyAndCulture = (amount, formatParams) => {\n const { currencyFormat, symbol, decimalPlaces, decimalSeparator } = formatParams\n // split the amount to Integer and floating, apply toFixed(decimalPlaces) to get correct amount of digits.\n const [intAmount, floating] = amount.toFixed(decimalPlaces).toString().split('.') // in case of decimalPlaces == 0, the 'floating' const will be undefined.\n\n return currencyFormat\n .replace(/{Symbol}/g, symbol)\n // format the given amount to a string according to passed culture definitions\n // apply the formatNumByLocale function only on the Integer part of the amount, and add the floating part only if exist.\n // only show decimalSeparator if floating exist (in case of decimalPlaces == 0, the 'floating' const will be undefined)\n .replace(/{Amount}/g, formatNumByLocale(intAmount, formatParams.languageCode) + (floating ? decimalSeparator + floating : ''))\n}\n\nexport const formatDate = (dateStr) => {\n const locale = themeContext.get('languageCode')\n return dateStr ? moment(dateStr).format(`${getLocaleDateString(locale)} ${getLocaleTimeString(locale)}`): null\n}\n","import {\n action,\n computed,\n makeObservable,\n observable\n} from 'mobx'\nimport moment from 'moment'\nimport { t } from '$themelocalization'\nimport { UStoreProvider } from '@ustore/core'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport CartSummaryModel from './CartSummaryModel'\nimport CartItemModel from './CartItemModel'\nimport CartProductModel from './CartProductModel'\nimport CartListModel from './CartListModel'\nimport CartItemPriceModel from './CartItemPriceModel'\nimport CartErrorModel from './CartErrorModel'\nimport CartProductUnitModel from './CartProductUnitModel'\nimport CartActionsModel from './CartActionsModel'\nimport CartOrderApprovalModel from './CartOrderApprovalModel'\nimport {proofThumbnailUpdater,activityMonitor, ActivityType, CART_MODE} from '$themeservices'\nimport CartDialogsModel from './CartDialogsModel'\nimport {formatDate} from './utils';\n\nclass CartModel {\n static CART_ACTIONS = {\n INIT: 'init',\n TOGGLE_SELECT_ALL: 'toggleSelectAll',\n TOGGLE_SELECT_ITEM: 'toggleSelectItem',\n EMPTY_LIST: 'emptyList',\n MOVE_ITEM_TO_WISH_LIST: 'moveItemToWishlist',\n MOVE_ITEM_TO_CART: 'moveItemToCart',\n DELETE_ITEM_FROM_CART: 'deleteItemFromCart',\n EDIT_CART_ITEM: 'editCartItem',\n CHANGE_NICKNAME: 'changeNickname',\n }\n\n static CART_MODELS = {\n CART: 'cart',\n WISH_LIST: 'wishList',\n CART_VALIDATION: 'cartValidation',\n WISH_LIST_VALIDATION: 'wishListValidation',\n PRICING: 'pricing',\n PRICING_NO_API: 'pricingNoApi',\n }\n\n static CART_SORT_BY = {\n DATE : 'date',\n NAME_ASC : 'nameAsc',\n NAME_DESC : 'nameDesc',\n }\n\n constructor ({\n cartMode = CART_MODE.Aspx,\n UStoreProvider,\n storeBaseUrl,\n storeLanguageCode,\n storeApiUrl,\n navigate,\n searchParams,\n }) {\n this._uStoreProvider = UStoreProvider\n this._cartActionsModel = new CartActionsModel({\n cartModel: this,\n })\n this._storeData = {\n navigate,\n storeBaseUrl,\n storeLanguageCode,\n storeApiUrl,\n }\n this._cartMode = cartMode\n this._openedListId = CartListModel.CART_LIST_TYPES.UNASSIGNED\n this._lists = []\n this.shoppingCartText = ''\n this.checkoutUrl = ''\n this.items = []\n this.summary = new CartSummaryModel({\n cartModel: this,\n })\n this.initiated = false\n this.loading = false\n this.errors = []\n this.listOpening = false\n this.sorting = this._uStoreProvider.state.get()?.currentUser?.Preferences?.cartSorting || CartModel.CART_SORT_BY.DATE\n this.activities = {}\n this.searchParams = searchParams\n this._cartDialogs = new CartDialogsModel({})\n\n makeObservable(this, {\n _uStoreProvider: observable,\n _openedListId: observable,\n initiated: observable,\n _lists: observable,\n shoppingCartText: observable,\n checkoutUrl: observable,\n items: observable,\n summary: observable,\n loading: observable,\n errors: observable,\n listOpening: observable,\n sorting: observable,\n activities: observable,\n initialLoadItemsFromApi: action,\n loadListsItemsFromApi: action,\n loadSingleListItemsFromApi: action,\n loadCartItemsFromApi: action,\n updateListItemsFromApi: action,\n updateLists: action,\n createCartList: action,\n loadPricingFromApi: action,\n loadWishListItemsFromApi: action,\n updateCartItems: action,\n updateCartPricing: action,\n updateCartValidation: action,\n addList: action,\n createList: action,\n addCartError: action,\n removeItems: action,\n moveItemToCart: action,\n touchLists:action,\n openList: action,\n deleteList: action,\n revertModifications: action,\n setSorting: action,\n setActivities: action,\n clearActivities: action,\n lists: computed,\n selected: computed,\n storeBaseUrl: computed,\n languageCode: computed,\n storeApiUrl: computed,\n noPricing: computed,\n hasEditOrApproval: computed,\n hasReorder: computed,\n affectPricingItems: computed,\n isListsMode: computed,\n isWishListMode: computed,\n isSingleListMode: computed,\n openedListItems: computed,\n openedList: computed,\n listsItemsCount: computed,\n [CartListModel.CART_LIST_TYPES.DEFAULT]: computed,\n [CartListModel.CART_LIST_TYPES.WISH_LIST]: computed,\n [CartListModel.CART_LIST_TYPES.UNASSIGNED]: computed,\n }, {autoBind: true})\n }\n\n async init () {\n // Load cart items count - doesn't need to wait for it\n UStoreProvider.state.store.loadCartItemsCount()\n\n if (this.isWishListMode) {\n // Load cart items\n await this.initialLoadCartModeWishList()\n\n // Load cart items pricing\n const cartPricingFromApiChecked = await this._uStoreProvider.api.orders.getCartPricingInfo(true, null)\n this.loadPricingFromApi(cartPricingFromApiChecked)\n const cartPricingFromApiUnchecked = await this._uStoreProvider.api.orders.getCartPricingInfo(false, null)\n this.loadPricingFromApi(cartPricingFromApiUnchecked)\n\n // Load cart items validation\n const cartValidationFromApiChecked = await this._uStoreProvider.api.orders.validateCart(true, null)\n this.loadValidationFromApi(cartValidationFromApiChecked)\n const cartValidationFromApiUnchecked = await this._uStoreProvider.api.orders.validateCart(false, null)\n this.loadValidationFromApi(cartValidationFromApiUnchecked)\n } else if (this.isListsMode) {\n // Load unassigned items\n await this.initialLoadCartModeLists()\n\n } else if (this.isSingleListMode) {\n // Load single list items\n await this.initialLoadCartModeSingleList()\n\n // Load single list items pricing\n const cartPricingFromApiChecked = await this._uStoreProvider.api.orders.getCartPricingInfo(null, null)\n this.loadPricingFromApi(cartPricingFromApiChecked)\n\n // Load single list items validation\n const cartValidationFromApiChecked = await this._uStoreProvider.api.orders.validateCart(null, null)\n this.loadValidationFromApi(cartValidationFromApiChecked)\n }\n\n this._lists.forEach(list => {\n list.loading = false\n })\n this.summary.loading = false\n\n // Load wishlist\n if (this.isWishListMode) {\n await this.initialLoadWishlist()\n }\n\n proofThumbnailUpdater.init(this)\n this.initiated = true\n }\n\n async initialLoadCartModeLists () {\n // load unassigned items\n await this.loadListsItemsFromApi()\n }\n\n async initialLoadCartModeSingleList () {\n // load single list items\n await this.loadSingleListItemsFromApi()\n }\n\n async initialLoadCartModeWishList () {\n // load cart items\n await this.loadCartItemsFromApi()\n }\n\n async initialLoadWishlist () {\n // Load wish list items\n const wishlistItems = await this.loadWishListItemsFromApi()\n if (wishlistItems.length === 0) {\n return\n }\n // Load wish list validation\n const wishListValidationFromApi = await this._uStoreProvider.api.orders.validateWishList()\n this.loadValidationFromApi(wishListValidationFromApi)\n\n // Load wish list pricing\n const wishListPricingFromApi = await this._uStoreProvider.api.orders.getWishListPricingInfo()\n this.loadPricingFromApi(wishListPricingFromApi)\n }\n\n async initialLoadItemsFromApi () {\n if (this._cartMode === CART_MODE.Lists) {\n await this.initialLoadCartModeLists()\n } else if (this._cartMode === CART_MODE.WishList) {\n await this.initialLoadCartModeWishList()\n }\n }\n\n async loadListsItemsFromApi () {\n const lists = await this._uStoreProvider.api.orders.getLists()\n lists.forEach((list) => this._lists.push(this.createList({\n listId: list.ID || CartListModel.CART_LIST_TYPES.UNASSIGNED,\n title: list.Name || t('Cart.UnassignedItemsListTitle'),\n emptyAllText: null,\n originalOrderFriendlyId: list.OriginalOrderFriendlyID,\n itemsCount: list.ItemsCount || 0,\n sortingDate: list?.SortingDate,\n modificationDate: list?.ModificationDate,\n exportedList: list.ExportDate ? {\n ExternalUrl: list.ExternalUrl,\n ExportDate: list.ExportDate\n } : null\n })))\n this.listOpening = true\n if (this.searchParams.has('ListID')) {\n this.openList(this.searchParams.get('ListID'))\n return\n }\n const openListId = lists.reduce((acc, list) => {\n return moment(list.SortingDate).isAfter(moment(acc.sortingDate)) ?\n {id: list.ID || CartListModel.CART_LIST_TYPES.UNASSIGNED, sortingDate: list.SortingDate} : acc\n }, {id: CartListModel.CART_LIST_TYPES.UNASSIGNED, sortingDate: moment({y: 1970, month:1, d:1})}).id\n this.openList(openListId)\n }\n\n async loadSingleListItemsFromApi () {\n const { Items, Activities: activities } = await this._uStoreProvider.api.orders.getCartInfo()\n const list = (await this._uStoreProvider.api.orders.getLists())[0]\n this._openedListId = list.ID\n const singleList = this.createList({\n listId: list.ID,\n title: list.Name,\n emptyAllText: null,\n originalOrderFriendlyId: list.OriginalOrderFriendlyID,\n itemsCount: list.ItemsCount,\n sortingDate: list.SortingDate,\n modificationDate: list.ModificationDate,\n exportedList: list.ExportDate ? {\n ExternalUrl: list.ExternalUrl,\n ExportDate: list.ExportDate\n } : null,\n activities,\n })\n this._lists.push(singleList)\n this.items = this.convertItemsToCartItemsObject(Items, [singleList], list.ID)\n }\n\n async loadCartItemsFromApi() {\n let req = await this._uStoreProvider.api.orders.getCartInfo()\n let { Items, Description, CheckoutUrl, OrderApproval, Activities } = req\n this.shoppingCartText = Description\n if (CheckoutUrl) {\n const qs = CheckoutUrl.split('?')[1]\n this.checkoutUrl = `${urlGenerator.get({ page: 'checkout-final' })}?${qs}`\n }\n const orderApproval = OrderApproval\n ? new CartOrderApprovalModel({\n originalOrderFriendlyId: OrderApproval.OriginalOrderFriendlyID,\n originalOrderId: OrderApproval.OriginalOrderID,\n })\n : null\n if (orderApproval) {\n Items = Items.map(item => ({ ...item, OriginalOrderFriendlyID: orderApproval.originalOrderFriendlyId }))\n }\n const editSections = new Set(Items.filter(item => {\n if (orderApproval?.originalOrderFriendlyId) {\n return item.OriginalOrderFriendlyID != null && item.OriginalOrderFriendlyID !== orderApproval?.originalOrderFriendlyId\n }\n return false\n }).map(item => item.OriginalOrderFriendlyID || orderApproval?.originalOrderFriendlyId))\n\n const listIds = orderApproval ? [] :\n Array.from(Items.reduce((acc, item) => {\n if (item.OriginalOrderFriendlyID && !acc.has(item.OriginalOrderFriendlyID)) {\n acc.set(item.OriginalOrderFriendlyID, 1)\n } else if (!item.OriginalOrderFriendlyID && !acc.has(CartListModel.CART_LIST_TYPES.DEFAULT)) {\n acc.set(CartListModel.CART_LIST_TYPES.DEFAULT, 1)\n }\n return acc\n },new Map()).keys())\n .filter(originalOrderFriendlyId => !editSections.has(originalOrderFriendlyId)\n )\n\n if (!listIds.includes(CartListModel.CART_LIST_TYPES.DEFAULT)) {\n listIds.push(CartListModel.CART_LIST_TYPES.DEFAULT)\n }\n const cartList = this.createCartList([...editSections], orderApproval, listIds, Activities)\n this.items = this.convertItemsToCartItemsObject(Items, cartList, null)\n this._lists.push(...cartList)\n }\n\n async updateListItemsFromApi (listId, list = null) {\n const listIdOrNull = listId === CartListModel.CART_LIST_TYPES.UNASSIGNED || listId === CartListModel.CART_LIST_TYPES.DEFAULT || list?.isReorder ? null : listId\n let { Items, Activities } = await this._uStoreProvider.api.orders.getCartInfo(listIdOrNull)\n\n //for update after duplicate item we filter our items with originalOrderFriendlyId\n if (list?.isReorder || list?.isDefault) {\n Items = Items.filter(item => !item.OriginalOrderFriendlyID)\n }\n\n // collect items that have not been loaded from the api\n const selectedListItems = Items.reduce((acc, item) => ({ ...acc, [item.OrderItemID]: item }), {})\n const itemsNotInList = this.items.filter(item => !selectedListItems[item.orderItemId])\n\n // add activities to activity monitor\n activityMonitor.addActivityList(Activities)\n\n // update the list of items + convert new items that were just loaded\n this.items = [...itemsNotInList, ...this.convertItemsToCartItemsObject(Items, this._lists, list?.isReorder ? CartListModel.CART_LIST_TYPES.DEFAULT : listId)]\n\n // for default list we need to update the items count\n if (list?.isDefault) {\n list.touchItemsCount()\n }\n\n // if we are duplicating an item on a reorder list we need to update the items count, sorting date and\n // modification date of the default list and put the default list at the top of the lists array\n if (list?.isReorder) {\n const defaultList = this._lists.find(list => list.isDefault)\n defaultList.touchItemsCount()\n defaultList.touchSortingDate()\n defaultList.touchModificationDate()\n\n this._lists = [defaultList, ...this._lists.filter(notDefaultList => !notDefaultList.isDefault)]\n }\n\n if (this.isWishListMode) {\n const { Items: checkedPricingInfo } = await this._uStoreProvider.api.orders.getCartPricingInfo(true, listIdOrNull)\n const { Items: uncheckedPricingInfo } = await this._uStoreProvider.api.orders.getCartPricingInfo(false, listIdOrNull)\n const pricingInfo = [...checkedPricingInfo, ...uncheckedPricingInfo]\n this.updateCartPricing(pricingInfo)\n const checkedValidationInfo = await this._uStoreProvider.api.orders.validateCart(true, listIdOrNull)\n const uncheckedValidationInfo = await this._uStoreProvider.api.orders.validateCart(false, listIdOrNull)\n const validationInfo = [...checkedValidationInfo, ...uncheckedValidationInfo]\n this.updateCartValidation(validationInfo)\n } else {\n if (list && this.isListsMode) {\n list.touchSortingDate()\n list.touchModificationDate()\n list.touchItemsCount()\n }\n const { Items: pricingInfo } = await this._uStoreProvider.api.orders.getCartPricingInfo(null, listIdOrNull)\n this.updateCartPricing(pricingInfo, true)\n const validationInfo = await this._uStoreProvider.api.orders.validateCart(null, listIdOrNull)\n this.updateCartValidation(validationInfo)\n }\n }\n\n async updateLists () {\n const lists = await this._uStoreProvider.api.orders.getLists()\n if (lists.length === 0) {\n this._lists = []\n return\n }\n this._lists.forEach((list) => {\n const updatedList = lists.find((updatedList) => updatedList.ID === list.id)\n if (updatedList) {\n list.updateListFromApi(updatedList)\n }\n })\n }\n\n createCartList (editSections, orderApproval, listIds, activities = []) {\n const cartList = []\n const defaultList = this.createList({\n listId: CartListModel.CART_LIST_TYPES.DEFAULT,\n title: t('Cart.SelectAllLabel'),\n emptyAllText: t('Cart.EmptyCartButton'),\n activities,\n })\n\n listIds.forEach((originalOrderId) => cartList.push(\n originalOrderId === CartListModel.CART_LIST_TYPES.DEFAULT ?\n defaultList :\n this.createList(\n {\n listId: originalOrderId,\n title: t('Cart.EditOrderSectionTitle', { orderNumber: originalOrderId }),\n emptyAllText: '',\n originalReorderOrderFriendlyId: originalOrderId,\n }))\n )\n\n if (orderApproval) {\n cartList.push(this.createList(\n {\n listId: CartListModel.CART_LIST_TYPES.ORDER_APPROVAL,\n title: t('Cart.OrderApprovalSectionTitle', { orderNumber: orderApproval.originalOrderFriendlyId }),\n emptyAllText: t('Cart.OrderApprovalEmptyCartTitle'),\n orderApproval\n }))\n }\n if (editSections) {\n editSections.forEach(originalOrderFriendlyId => {\n cartList.push(this.createList({\n listId: CartListModel.CART_LIST_TYPES.ORDER_EDIT,\n title: t('Cart.EditOrderSectionTitle', { orderNumber: originalOrderFriendlyId }),\n emptyAllText: '',\n originalOrderFriendlyId\n }))\n })\n }\n return cartList\n }\n\n loadPricingFromApi (pricingItems) {\n pricingItems.Items.forEach(priceItem => {\n const cartItem = this.items.find(cartItem => cartItem.orderItemId === priceItem.OrderItemID)\n if (cartItem) {\n cartItem.price = new CartItemPriceModel({\n itemModel: cartItem,\n isChanged: priceItem.IsChanged,\n isValid: priceItem.IsValid,\n orderItemId: priceItem.OrderItemID,\n subtotal: priceItem.Price,\n tax: priceItem.Tax,\n })\n }\n })\n }\n\n loadValidationFromApi (validation) {\n validation.forEach(validationItem => {\n const item = this.items.find(item => item.orderItemId === validationItem.OrderItemID)\n // In case orderItemId in error response is null, the error is a cart-level error\n if (item instanceof CartItemModel) {\n item.addValidation(validationItem)\n } else if (item === undefined) {\n this.addCartError(validationItem)\n }\n })\n }\n\n convertItemToCartItemObject (item, list, displayOrder = 0) {\n return new CartItemModel({\n cartModel: this,\n listModel: list,\n displayOrder,\n orderItemId: item.OrderItemID,\n originalOrderFriendlyId: item.OriginalOrderFriendlyID,\n listId: item.ListID ?? list.id,\n checked: item.Checked,\n quantity: item.Quantity,\n thumbnailUrl: item.Thumbnail?.Url ? `${this._storeData.storeApiUrl}/${item.Thumbnail.Url}` : null,\n editUrl: urlGenerator.get({ page: 'products' }).replace('/products', item.EditUrl),\n nickname: item.Nickname,\n quantityPerRecipient: item.QuantityPerRecipient,\n numRecipients: item.NumRecipients,\n proof: {\n proofStatus: item.ProofStatus,\n },\n product: new CartProductModel({\n productId: item.ProductID,\n name: item.Product.Name,\n catalogNumber: item.Product.CatalogNumber,\n unit: new CartProductUnitModel({\n quantity: item.Product.Unit.ItemQuantity,\n singular: item.Product.Unit.ItemType.Name,\n plural: item.Product.Unit.ItemType.PluralName,\n packSingular: item.Product.Unit.PackType?.Name,\n packPlural: item.Product.Unit.PackType?.PluralName,\n }),\n hasPricing: item.Product.HasPricing,\n }),\n properties: item.Properties.map(property => ({\n name: property.Name,\n value: property.ConvertToClientTimeZone ? formatDate(property.Value) : property.Value,\n })),\n subItems: item.SubItems,\n attributes: item.Attributes,\n })\n }\n\n convertItemsToCartItemsObject (items, lists, listId = null) {\n const listById = lists.reduce((acc, list) => ({ ...acc, [list.id]: list }), {})\n const listByOriginalOrderFriendlyId = lists.reduce((acc, list) => ({ ...acc, [list.originalOrderFriendlyId]: list }), {})\n const listByOriginalReorderOrderFriendlyId = lists.reduce((acc, list) => ({ ...acc, [list.originalReorderOrderFriendlyId]: list }), {})\n\n return items.map((item, index) => {\n let list = listById[item.ListID] ||\n listByOriginalOrderFriendlyId[item.OriginalOrderFriendlyID] ||\n listById[listId] ||\n listByOriginalReorderOrderFriendlyId[item.OriginalOrderFriendlyID]\n\n if (!list) {\n list = this.isWishListMode ? listById[CartListModel.CART_LIST_TYPES.DEFAULT] : listById[CartListModel.CART_LIST_TYPES.UNASSIGNED]\n }\n return this.convertItemToCartItemObject(item, list, index)\n })\n }\n\n convertItemsToWishlistItemsObject (items, list) {\n return items.map(item => this.convertItemToCartItemObject(item, list))\n }\n\n async loadWishListItemsFromApi () {\n const { Items } = await this._uStoreProvider.api.orders.getWishListInfo()\n const wishList = this.createList({\n listId: CartListModel.CART_LIST_TYPES.WISH_LIST,\n title: t('Cart.Wishlist.WishListTitle'),\n emptyAllText: t('Cart.EmptyCartButton'),\n affectPricing: false,\n })\n this._lists.push(wishList)\n const wishListItems = this.convertItemsToWishlistItemsObject(Items, wishList)\n\n this.items.push(...wishListItems)\n return wishListItems\n }\n\n /**\n * Wishlist mode - Update cart should be called in the following events:\n * 1. Before checkout - selected only\n * 2. Selecting/unselecting items - selected only\n * 3. Moving and item to/from wish list - selected only\n * 4. Deleting an item/emptying the cart - selected only\n *\n * Lists mode - update cart should be called in the following events:\n * 1. Selecting/unselecting items - unassigned only\n * 2. Moving an item to another list/to a new list\n * 3. Deleting an item\n */\n async updateCart ({ selectedOnly, listId , updateLists } = {selectedOnly :true, listId : null, updateLists: false}) {\n try {\n if (this.isWishListMode) {\n await this._cartActionsModel.updateCart(selectedOnly)\n } else if (this.isListsMode) {\n await this.updateListItemsFromApi(listId || this.openedList?.id)\n updateLists && await this.updateLists()\n }\n } catch (error) {\n console.error(error)\n }\n }\n\n updateCartItems (itemsFromApi) {\n this.items = this.items.map((item) => {\n const itemFromApi = itemsFromApi.find(itemFromApi => itemFromApi.OrderItemID === item.orderItemId)\n return itemFromApi ? this.convertItemToCartItemObject(itemFromApi, this[CartListModel.CART_LIST_TYPES.DEFAULT]) : item\n })\n }\n\n updateCartPricing (priceItems) {\n this.items.forEach(item => {\n const priceItem = priceItems.find(priceItem => priceItem.OrderItemID === item.orderItemId)\n priceItem && item.price.updateFromApi(priceItem)\n })\n }\n\n updateCartValidation (validations) {\n this.errors = []\n const cartValidations = validations.filter(validation => validation.OrderItemId == null)\n cartValidations.forEach(validation => this.addCartError(validation))\n\n this.items.forEach(item => {\n const itemValidations = validations.filter(validation => validation.OrderItemID === item.orderItemId)\n itemValidations && item.updateValidations(itemValidations)\n })\n }\n\n addList(options) {\n const list = this.createList(options)\n const unassignedListIndex = this._lists.findIndex(list => list.id === CartListModel.CART_LIST_TYPES.UNASSIGNED)\n if (this.isListsMode && unassignedListIndex > -1) {\n this._lists.splice(unassignedListIndex + 1, 0, list)\n } else {\n this._lists.unshift(list)\n }\n return list\n }\n\n createList ({\n listId, title, emptyAllText, affectPricing = true, originalOrderFriendlyId = null, itemsCount = null,\n exportedList = null, skipLoading = false, orderApproval = null, sortingDate = null, modificationDate = null, activities = [],\n originalReorderOrderFriendlyId = null\n }) {\n const list = new CartListModel({\n cartModel: this,\n id: listId,\n title,\n emptyAllText,\n affectPricing,\n originalOrderFriendlyId,\n itemsCount,\n exportedList,\n skipLoading,\n orderApproval,\n sortingDate,\n modificationDate,\n originalReorderOrderFriendlyId\n })\n activityMonitor.addActivityList(activities)\n return list\n }\n\n addCartError (error) {\n if (this.errors.some(err => err.errorType === error.Error.Type)) return\n this.errors.push(new CartErrorModel({\n errorLevel: error.Error.Level,\n message: error.Error.Message,\n errorType: error.Error.Type,\n }))\n }\n\n removeItems (orderItemIds) {\n this.items = this.items.filter(item => !orderItemIds.includes(item.orderItemId))\n }\n\n moveItemToCart (item) {\n const cartList = this[CartListModel.CART_LIST_TYPES.DEFAULT]\n cartList.items.forEach(cartItem => cartItem.displayOrder++)\n const originalList = item._listModel\n const list =\n item.originalOrderFriendlyId\n ? this._lists.find(list => list.originalOrderFriendlyId === item.originalOrderFriendlyId)\n : cartList\n item.listId = list.id\n item._listModel = list\n item.displayOrder = 0\n cartList.touchItemsCount()\n originalList.touchItemsCount()\n }\n\n moveItemToWishList (item) {\n const wishList = this[CartListModel.CART_LIST_TYPES.WISH_LIST]\n wishList.items.forEach(cartItem => cartItem.displayOrder++)\n const originalList = item._listModel\n item.displayOrder = 0\n item.updateValidations([])\n item.listId = wishList.id\n item._listModel = wishList\n item.originalOrderFriendlyId = null\n if (originalList.items.length === 0 && !originalList.isWishList && !originalList.isDefault) {\n this.deleteList(originalList.id)\n }\n wishList.touchItemsCount()\n originalList.touchItemsCount()\n }\n\n deleteList (listId) {\n this._lists = this._lists.filter(list => list.id !== listId)\n }\n\n async openList (listId) {\n try {\n this.listOpening = true\n this._openedListId = listId\n if (listId !== null) {\n await this.updateListItemsFromApi(listId)\n }\n } catch (e) {\n console.error(e)\n } finally {\n this.listOpening = false\n }\n }\n\n get lists () {\n if (!this.isListsMode) {\n return this._lists\n }\n const sorted = [...this._lists].sort((a, b) => {\n if (a.id === CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n return -1\n } else if (b.id === CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n return 1\n }\n\n if (this.sorting === CartModel.CART_SORT_BY.NAME_ASC) {\n return a.title.toLowerCase().localeCompare(b.title.toLowerCase())\n }\n\n if (this.sorting === CartModel.CART_SORT_BY.NAME_DESC) {\n return b.title.toLowerCase().localeCompare(a.title.toLowerCase())\n }\n\n return moment(b.sortingDate).toDate().valueOf() - moment(a.sortingDate).toDate().valueOf()\n }\n )\n\n return sorted\n }\n\n get selected () {\n return this.items.filter(item => item.checked)\n }\n\n get storeBaseUrl () {\n return this._storeData.storeBaseUrl\n }\n\n get languageCode () {\n return this._storeData.storeLanguageCode\n }\n\n get storeApiUrl () {\n return this._storeData.storeApiUrl\n }\n\n get noPricing () {\n return this.affectPricingLists.some((list) => list.noPricing)\n }\n\n get hasEditOrApproval () {\n return this._lists.some(list => list.originalOrderFriendlyId != null)\n }\n\n get hasReorder () {\n return this._lists.some(list => list.isReorder)\n }\n\n get affectPricingItems () {\n return this.items.filter(item => item.affectsPricing)\n }\n\n get affectPricingLists () {\n return this.lists.filter(list => list?.affectPricing)\n }\n\n get isListsMode () {\n return this._cartMode === CART_MODE.Lists || localStorage.getItem('features.CartLists') === 'true'\n }\n\n get isWishListMode () {\n return this._cartMode === CART_MODE.WishList\n }\n\n get isSingleListMode () {\n return this._cartMode === CART_MODE.SingleList\n }\n\n get openedListItems () {\n if (this._openedListId === null) return null\n return this.items.filter(item => item.listId === this._openedListId)\n }\n\n get openedList () {\n return this._lists.find(list => list.id === this._openedListId) ?? null\n }\n\n get listsItemsCount () {\n return this._lists.reduce((total, list) => total + list.itemsCount, 0)\n }\n\n get [CartListModel.CART_LIST_TYPES.DEFAULT] () {\n return this._lists.find(list => list.id === CartListModel.CART_LIST_TYPES.DEFAULT) ?? null\n }\n\n get [CartListModel.CART_LIST_TYPES.WISH_LIST] () {\n return this._lists.find(list => list.id === CartListModel.CART_LIST_TYPES.WISH_LIST) ?? null\n }\n\n get [CartListModel.CART_LIST_TYPES.UNASSIGNED] () {\n return this._lists.find(list => list.id === CartListModel.CART_LIST_TYPES.UNASSIGNED) ?? null\n }\n\n async checkout () {\n await this.updateCart()\n if (this.summary.hasErrors) {\n return\n }\n this._storeData.navigate(this.checkoutUrl)\n }\n\n async revertModifications () {\n await this._uStoreProvider.api.orders.revertModifications()\n this.items = this.items.filter(item => item._listModel.id !== CartListModel.CART_LIST_TYPES.ORDER_APPROVAL)\n this._uStoreProvider.state.store.loadCartItemsCount()\n this._lists = this._lists.filter(list => list.id !== CartListModel.CART_LIST_TYPES.ORDER_APPROVAL)\n this._cartDialogs.setRevertModifications(true)\n }\n\n touchLists() {\n this._lists = [...this._lists]\n }\n\n async setSorting(sorting) {\n this.sorting = sorting\n await this._uStoreProvider.state.store.updateUserPreferences({ cartSorting: sorting })\n }\n\n setActivities(activities) {\n Object.entries(activities).forEach(([key, value]) => {\n if (this.activities[key]) {\n this.activities[key].activity = value.activity\n } else {\n this.activities[key] = value\n }\n })\n }\n\n clearActivities() {\n this.activities = {}\n }\n\n async reloadAfterDuplicate(activityId) {\n const activity = this.activities[activityId]\n if (activity) {\n this.clearActivities()\n if ([ActivityType.OrderItemDuplication, ActivityType.KitOrderItemDuplication].includes(activity.activity.Type) && this.isListsMode) {\n const duplicatedItem = this.items.find(item => item.orderItemId === activity.entityId)\n if (duplicatedItem) {\n await this.updateListItemsFromApi(duplicatedItem._listModel.id, duplicatedItem._listModel)\n UStoreProvider.state.store.loadCartItemsCount()\n }\n } else {\n this._lists = []\n await this.init()\n }\n }\n }\n}\n\nexport default CartModel\n","import { makeObservable } from \"mobx\"\nimport { useState } from \"react\"\n\nif (!useState) {\n throw new Error(\"mobx-react-lite requires React with Hooks support\")\n}\nif (!makeObservable) {\n throw new Error(\"mobx-react-lite@3 requires mobx at least version 6 to be available\")\n}\n","import { configure } from \"mobx\"\n\nexport function defaultNoopBatch(callback: () => void) {\n callback()\n}\n\nexport function observerBatching(reactionScheduler: any) {\n if (!reactionScheduler) {\n reactionScheduler = defaultNoopBatch\n if (\"production\" !== process.env.NODE_ENV) {\n console.warn(\n \"[MobX] Failed to get unstable_batched updates from react-dom / react-native\"\n )\n }\n }\n configure({ reactionScheduler })\n}\n\nexport const isObserverBatched = () => {\n if (\"production\" !== process.env.NODE_ENV) {\n console.warn(\"[MobX] Deprecated\")\n }\n\n return true\n}\n","import { getDependencyTree, Reaction } from \"mobx\"\n\nexport function printDebugValue(v: Reaction) {\n return getDependencyTree(v)\n}\n","let globalIsUsingStaticRendering = false\n\nexport function enableStaticRendering(enable: boolean) {\n globalIsUsingStaticRendering = enable\n}\n\nexport function isUsingStaticRendering(): boolean {\n return globalIsUsingStaticRendering\n}\n","export declare class FinalizationRegistryType<T> {\n constructor(finalize: (value: T) => void)\n register(target: object, value: T, token?: object): void\n unregister(token: object): void\n}\n\ndeclare const FinalizationRegistry: typeof FinalizationRegistryType | undefined\n\nexport const REGISTRY_FINALIZE_AFTER = 10_000\nexport const REGISTRY_SWEEP_INTERVAL = 10_000\n\nexport class TimerBasedFinalizationRegistry<T> implements FinalizationRegistryType<T> {\n private registrations: Map<unknown, { value: T; registeredAt: number }> = new Map()\n private sweepTimeout: ReturnType<typeof setTimeout> | undefined\n\n constructor(private readonly finalize: (value: T) => void) {}\n\n // Token is actually required with this impl\n register(target: object, value: T, token?: object) {\n this.registrations.set(token, {\n value,\n registeredAt: Date.now()\n })\n this.scheduleSweep()\n }\n\n unregister(token: unknown) {\n this.registrations.delete(token)\n }\n\n // Bound so it can be used directly as setTimeout callback.\n sweep = (maxAge = REGISTRY_FINALIZE_AFTER) => {\n // cancel timeout so we can force sweep anytime\n clearTimeout(this.sweepTimeout)\n this.sweepTimeout = undefined\n\n const now = Date.now()\n this.registrations.forEach((registration, token) => {\n if (now - registration.registeredAt >= maxAge) {\n this.finalize(registration.value)\n this.registrations.delete(token)\n }\n })\n\n if (this.registrations.size > 0) {\n this.scheduleSweep()\n }\n }\n\n // Bound so it can be exported directly as clearTimers test utility.\n finalizeAllImmediately = () => {\n this.sweep(0)\n }\n\n private scheduleSweep() {\n if (this.sweepTimeout === undefined) {\n this.sweepTimeout = setTimeout(this.sweep, REGISTRY_SWEEP_INTERVAL)\n }\n }\n}\n\nexport const UniversalFinalizationRegistry =\n typeof FinalizationRegistry !== \"undefined\"\n ? FinalizationRegistry\n : TimerBasedFinalizationRegistry\n","import { Reaction } from \"mobx\"\nimport { UniversalFinalizationRegistry } from \"./UniversalFinalizationRegistry\"\n\nexport const observerFinalizationRegistry = new UniversalFinalizationRegistry(\n (adm: { reaction: Reaction | null }) => {\n adm.reaction?.dispose()\n adm.reaction = null\n }\n)\n","import { Reaction } from \"mobx\"\nimport React from \"react\"\nimport { printDebugValue } from \"./utils/printDebugValue\"\nimport { isUsingStaticRendering } from \"./staticRendering\"\nimport { observerFinalizationRegistry } from \"./utils/observerFinalizationRegistry\"\nimport { useSyncExternalStore } from \"use-sync-external-store/shim\"\n\n// Required by SSR when hydrating #3669\nconst getServerSnapshot = () => {}\n\n// Do not store `admRef` (even as part of a closure!) on this object,\n// otherwise it will prevent GC and therefore reaction disposal via FinalizationRegistry.\ntype ObserverAdministration = {\n reaction: Reaction | null // also serves as disposed flag\n onStoreChange: Function | null // also serves as mounted flag\n // BC: we will use local state version if global isn't available.\n // It should behave as previous implementation - tearing is still present,\n // because there is no cross component synchronization,\n // but we can use `useSyncExternalStore` API.\n stateVersion: any\n name: string\n // These don't depend on state/props, therefore we can keep them here instead of `useCallback`\n subscribe: Parameters<typeof React.useSyncExternalStore>[0]\n getSnapshot: Parameters<typeof React.useSyncExternalStore>[1]\n}\n\nfunction createReaction(adm: ObserverAdministration) {\n adm.reaction = new Reaction(`observer${adm.name}`, () => {\n adm.stateVersion = Symbol()\n // onStoreChange won't be available until the component \"mounts\".\n // If state changes in between initial render and mount,\n // `useSyncExternalStore` should handle that by checking the state version and issuing update.\n adm.onStoreChange?.()\n })\n}\n\nexport function useObserver<T>(render: () => T, baseComponentName: string = \"observed\"): T {\n if (isUsingStaticRendering()) {\n return render()\n }\n\n const admRef = React.useRef<ObserverAdministration | null>(null)\n\n if (!admRef.current) {\n // First render\n const adm: ObserverAdministration = {\n reaction: null,\n onStoreChange: null,\n stateVersion: Symbol(),\n name: baseComponentName,\n subscribe(onStoreChange: () => void) {\n // Do NOT access admRef here!\n observerFinalizationRegistry.unregister(adm)\n adm.onStoreChange = onStoreChange\n if (!adm.reaction) {\n // We've lost our reaction and therefore all subscriptions, occurs when:\n // 1. Timer based finalization registry disposed reaction before component mounted.\n // 2. React \"re-mounts\" same component without calling render in between (typically <StrictMode>).\n // We have to recreate reaction and schedule re-render to recreate subscriptions,\n // even if state did not change.\n createReaction(adm)\n // `onStoreChange` won't force update if subsequent `getSnapshot` returns same value.\n // So we make sure that is not the case\n adm.stateVersion = Symbol()\n }\n\n return () => {\n // Do NOT access admRef here!\n adm.onStoreChange = null\n adm.reaction?.dispose()\n adm.reaction = null\n }\n },\n getSnapshot() {\n // Do NOT access admRef here!\n return adm.stateVersion\n }\n }\n\n admRef.current = adm\n }\n\n const adm = admRef.current!\n\n if (!adm.reaction) {\n // First render or reaction was disposed by registry before subscribe\n createReaction(adm)\n // StrictMode/ConcurrentMode/Suspense may mean that our component is\n // rendered and abandoned multiple times, so we need to track leaked\n // Reactions.\n observerFinalizationRegistry.register(admRef, adm, adm)\n }\n\n React.useDebugValue(adm.reaction!, printDebugValue)\n\n useSyncExternalStore(\n // Both of these must be stable, otherwise it would keep resubscribing every render.\n adm.subscribe,\n adm.getSnapshot,\n getServerSnapshot\n )\n\n // render the original component, but have the\n // reaction track the observables, so that rendering\n // can be invalidated (see above) once a dependency changes\n let renderResult!: T\n let exception\n adm.reaction!.track(() => {\n try {\n renderResult = render()\n } catch (e) {\n exception = e\n }\n })\n\n if (exception) {\n throw exception // re-throw any exceptions caught during rendering\n }\n\n return renderResult\n}\n","import { forwardRef, memo } from \"react\"\n\nimport { isUsingStaticRendering } from \"./staticRendering\"\nimport { useObserver } from \"./useObserver\"\n\nlet warnObserverOptionsDeprecated = true\n\nconst hasSymbol = typeof Symbol === \"function\" && Symbol.for\n// Using react-is had some issues (and operates on elements, not on types), see #608 / #609\nconst ReactForwardRefSymbol = hasSymbol\n ? Symbol.for(\"react.forward_ref\")\n : typeof forwardRef === \"function\" && forwardRef((props: any) => null)[\"$$typeof\"]\n\nconst ReactMemoSymbol = hasSymbol\n ? Symbol.for(\"react.memo\")\n : typeof memo === \"function\" && memo((props: any) => null)[\"$$typeof\"]\n\nexport interface IObserverOptions {\n readonly forwardRef?: boolean\n}\n\nexport function observer<P extends object, TRef = {}>(\n baseComponent: React.ForwardRefRenderFunction<TRef, P>,\n options: IObserverOptions & { forwardRef: true }\n): React.MemoExoticComponent<\n React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<TRef>>\n>\n\nexport function observer<P extends object, TRef = {}>(\n baseComponent: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<P> & React.RefAttributes<TRef>\n >\n): React.MemoExoticComponent<\n React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<TRef>>\n>\n\nexport function observer<P extends object>(\n baseComponent: React.FunctionComponent<P>,\n options?: IObserverOptions\n): React.FunctionComponent<P>\n\nexport function observer<\n C extends React.FunctionComponent<any> | React.ForwardRefRenderFunction<any>,\n Options extends IObserverOptions\n>(\n baseComponent: C,\n options?: Options\n): Options extends { forwardRef: true }\n ? C extends React.ForwardRefRenderFunction<infer TRef, infer P>\n ? C &\n React.MemoExoticComponent<\n React.ForwardRefExoticComponent<\n React.PropsWithoutRef<P> & React.RefAttributes<TRef>\n >\n >\n : never /* forwardRef set for a non forwarding component */\n : C & { displayName: string }\n\n// n.b. base case is not used for actual typings or exported in the typing files\nexport function observer<P extends object, TRef = {}>(\n baseComponent:\n | React.ForwardRefRenderFunction<TRef, P>\n | React.FunctionComponent<P>\n | React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<TRef>>,\n // TODO remove in next major\n options?: IObserverOptions\n) {\n if (process.env.NODE_ENV !== \"production\" && warnObserverOptionsDeprecated && options) {\n warnObserverOptionsDeprecated = false\n console.warn(\n `[mobx-react-lite] \\`observer(fn, { forwardRef: true })\\` is deprecated, use \\`observer(React.forwardRef(fn))\\``\n )\n }\n\n if (ReactMemoSymbol && baseComponent[\"$$typeof\"] === ReactMemoSymbol) {\n throw new Error(\n `[mobx-react-lite] You are trying to use \\`observer\\` on a function component wrapped in either another \\`observer\\` or \\`React.memo\\`. The observer already applies 'React.memo' for you.`\n )\n }\n\n // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307\n if (isUsingStaticRendering()) {\n return baseComponent\n }\n\n let useForwardRef = options?.forwardRef ?? false\n let render = baseComponent\n\n const baseComponentName = baseComponent.displayName || baseComponent.name\n\n // If already wrapped with forwardRef, unwrap,\n // so we can patch render and apply memo\n if (ReactForwardRefSymbol && baseComponent[\"$$typeof\"] === ReactForwardRefSymbol) {\n useForwardRef = true\n render = baseComponent[\"render\"]\n if (typeof render !== \"function\") {\n throw new Error(\n `[mobx-react-lite] \\`render\\` property of ForwardRef was not a function`\n )\n }\n }\n\n let observerComponent = (props: any, ref: React.Ref<TRef>) => {\n return useObserver(() => render(props, ref), baseComponentName)\n }\n\n // Inherit original name and displayName, see #3438\n ;(observerComponent as React.FunctionComponent).displayName = baseComponent.displayName\n Object.defineProperty(observerComponent, \"name\", {\n value: baseComponent.name,\n writable: true,\n configurable: true\n })\n\n // Support legacy context: `contextTypes` must be applied before `memo`\n if ((baseComponent as any).contextTypes) {\n ;(observerComponent as React.FunctionComponent).contextTypes = (\n baseComponent as any\n ).contextTypes\n }\n\n if (useForwardRef) {\n // `forwardRef` must be applied prior `memo`\n // `forwardRef(observer(cmp))` throws:\n // \"forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))\"\n observerComponent = forwardRef(observerComponent)\n }\n\n // memo; we are not interested in deep updates\n // in props; we assume that if deep objects are changed,\n // this is in observables, which would have been tracked anyway\n observerComponent = memo(observerComponent)\n\n copyStaticProperties(baseComponent, observerComponent)\n\n if (\"production\" !== process.env.NODE_ENV) {\n Object.defineProperty(observerComponent, \"contextTypes\", {\n set() {\n throw new Error(\n `[mobx-react-lite] \\`${\n this.displayName || this.type?.displayName || this.type?.name || \"Component\"\n }.contextTypes\\` must be set before applying \\`observer\\`.`\n )\n }\n })\n }\n\n return observerComponent\n}\n\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nconst hoistBlackList: any = {\n $$typeof: true,\n render: true,\n compare: true,\n type: true,\n // Don't redefine `displayName`,\n // it's defined as getter-setter pair on `memo` (see #3192).\n displayName: true\n}\n\nfunction copyStaticProperties(base: any, target: any) {\n Object.keys(base).forEach(key => {\n if (!hoistBlackList[key]) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)\n }\n })\n}\n","import \"./utils/assertEnvironment\"\n\nimport { unstable_batchedUpdates as batch } from \"./utils/reactBatchedUpdates\"\nimport { observerBatching } from \"./utils/observerBatching\"\nimport { useDeprecated } from \"./utils/utils\"\nimport { useObserver as useObserverOriginal } from \"./useObserver\"\nimport { enableStaticRendering } from \"./staticRendering\"\nimport { observerFinalizationRegistry } from \"./utils/observerFinalizationRegistry\"\n\nobserverBatching(batch)\n\nexport { isUsingStaticRendering, enableStaticRendering } from \"./staticRendering\"\nexport { observer, IObserverOptions } from \"./observer\"\nexport { Observer } from \"./ObserverComponent\"\nexport { useLocalObservable } from \"./useLocalObservable\"\nexport { useLocalStore } from \"./useLocalStore\"\nexport { useAsObservableSource } from \"./useAsObservableSource\"\n\nexport { observerFinalizationRegistry as _observerFinalizationRegistry }\nexport const clearTimers = observerFinalizationRegistry[\"finalizeAllImmediately\"] ?? (() => {})\n\nexport function useObserver<T>(fn: () => T, baseComponentName: string = \"observed\"): T {\n if (\"production\" !== process.env.NODE_ENV) {\n useDeprecated(\n \"[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`.\"\n )\n }\n return useObserverOriginal(fn, baseComponentName)\n}\n\nexport { isObserverBatched, observerBatching } from \"./utils/observerBatching\"\n\nexport function useStaticRendering(enable: boolean) {\n if (\"production\" !== process.env.NODE_ENV) {\n console.warn(\n \"[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead\"\n )\n }\n enableStaticRendering(enable)\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { LoadingDots } from '$core-components'\nimport './CartSummaryPriceBlock.scss'\n\nconst CartSummaryPriceBlock = ({\n price,\n loading,\n currencyState,\n total,\n title,\n}) => {\n return (\n <div className={'cart-summary-block' + (\n total ? ' block-total' : ''\n )}>\n <div className=\"block-title\">{title}</div>\n <div className=\"block-value\">\n {loading ?\n <LoadingDots className=\"summary-price-loader\"/> : (\n <>\n {price}\n {currencyState?.showCurrencyCode && <span className=\"cart-ng-summary-currency-code\"> {currencyState?.currencyCode}</span>}\n </>\n )\n }\n </div>\n </div>\n )\n}\n\nexport default observer(CartSummaryPriceBlock)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\nimport CartSummaryPriceBlock from './CartSummaryPriceBlock'\nimport { formatForCurrencyAndCulture } from '../model/utils'\nimport { Slot } from '$core-components'\nimport './CartSummaryContent.scss'\n\nconst SummaryTitle = observer(({ model }) => {\n const getSummaryTitle = () => {\n if (model?.isListsMode || model?.isSingleListMode) {\n if (model?.openedList?.id == null) {\n return (\n <div className=\"cart-summary-lists-subtitle\">\n {t('Cart.Summary.NoListSelected')}\n </div>\n )\n }\n return (\n <>\n <div className=\"cart-summary-lists-title\">\n {t('Cart.Summary.ListsTitle')}\n </div>\n <div className=\"cart-summary-lists-subtitle\">\n {model?.openedList?.title}\n </div>\n </>\n )\n } else if (model?.isWishListMode) {\n return t('Cart.Summary.Title')\n }\n }\n\n return (\n <div className=\"cart-summary-title\">{getSummaryTitle()}</div>\n )\n})\n\nconst CartSummaryContent = ({\n currencyState,\n model,\n loading\n}) => {\n const getSummaryTitle = () => {\n if (model?.summary?.totalItemsCount - model?.summary?.totalWishListItemsCount === 0) {\n return t('Cart.Summary.EmptyCartSummaryText')\n }\n if (model?.isWishListMode && model?.summary?.selectedItemsCount === 0) {\n return t('Cart.Summary.NoItemsSelected')\n }\n return t('Cart.Summary.Title')\n }\n let formatParams = {\n taxFormat: currencyState?.taxFormat,\n symbol: currencyState?.currencySymbol,\n code: currencyState?.currencyCode,\n currencyFormat: currencyState?.currencyFormat,\n decimalSeparator: currencyState?.decimalSeparator,\n decimalPlaces: currencyState?.decimalPlaces,\n languageCode: currencyState?.languageCode\n }\n\n const convertedPrice = !loading ? UStoreProvider.state.culture.getConvertedPrices({\n Price: parseFloat(model?.summary?.presentablePrices?.subtotal),\n Tax: parseFloat(model?.summary?.presentablePrices?.tax)\n }) : { price: 0, tax: 0, priceIncludingTax: 0 }\n\n if (!loading && formatParams.currencyFormat ) {\n convertedPrice.price = formatForCurrencyAndCulture(convertedPrice.price, formatParams)\n convertedPrice.tax = formatForCurrencyAndCulture(convertedPrice.tax, formatParams)\n convertedPrice.priceIncludingTax = formatForCurrencyAndCulture(convertedPrice.priceIncludingTax, formatParams)\n }\n\n return (\n model?.noPricing && !loading\n ? <div className=\"cart-summary-no-price\">{t('Cart.Summary.CountSelected', { count: model?.summary?.selectedItemsCount })}</div>\n : (\n <div className=\"cart-summary-content-container\">\n <SummaryTitle model={model} />\n <Slot name=\"cart_below_summary_title\" data={model} />\n {model?.isWishListMode && !loading && (model?.summary?.totalItemsCount === 0 || model?.summary?.selectedItemsCount === 0)\n ? <h4 className=\"no-items\">{getSummaryTitle()}</h4>\n : ((model?.isWishListMode && !model?.noPricing) || (model?.openedList != null && model.openedList.items.filter(item => item.checked).length > 0) ||\n (!model?.openedList?.isUnassigned && model?.openedList?.items.length > 0) || loading) && (\n <>\n <CartSummaryPriceBlock\n price={convertedPrice.price}\n loading={loading}\n currencyState={currencyState}\n title={t('Cart.Summary.Subtotal')}\n />\n {(model?.summary?.showTax ?? true) &&\n <>\n <CartSummaryPriceBlock\n price={convertedPrice.tax}\n loading={loading}\n currencyState={currencyState}\n title={t('Cart.Summary.Tax')}\n />\n <div className=\"cart-summary-block cart-summary-line\"/>\n <CartSummaryPriceBlock\n price={convertedPrice.priceIncludingTax}\n loading={loading}\n currencyState={currencyState}\n title={`${t('Cart.Summary.Total')}${model?.summary?.showTax ? ` (${t('Cart.IncludingTax')})` : ''}`}\n total\n />\n </>\n }\n </>\n )\n }\n {model?.openedList?.items.filter(item => item.checked).length === 0 && model?.openedList?.isUnassigned && <div class=\"cart-summary-lists-no-items-selected\">{ t('Cart.Summary.NoItemsSelected')}</div>}\n </div>\n )\n )\n}\n\nexport default observer(CartSummaryContent)\n","import React from 'react'\nimport { ReactComponent as ErrorIcon } from '$assets/icons/error.svg'\nimport { Icon } from '$core-components'\nimport { t } from '$themelocalization'\nimport './CartSummaryTooltip.scss'\n\nconst CartSummaryTooltip = ({ type, show, onOk, onCancel, isListModel }) => show ? (\n <div className=\"cart-tooltip\">\n {type === 'error'\n ? (\n <div className=\"cart-tooltip-inner\">\n <button className=\"close\" onClick={() => onCancel()}>\n <Icon name=\"close_black.svg\" width=\"10px\" height=\"10px\"/>\n </button>\n <div className=\"cart-error-message\">\n <ErrorIcon width=\"15px\" height=\"15px\"/>\n {isListModel ? <span>{t('Cart.Summary.Warning.ExportErrorMessage')}</span> :\n <span>{t('Cart.Summary.Warning.ErrorMessage')}</span>}\n </div>\n </div>\n ) : (\n <div className=\"cart-tooltip-inner\">\n <div className=\"warn-message\">\n <span>{t('Cart.Summary.Warning.WarningMessage')}</span>\n <span> {t('Cart.Summary.Warning.ConfirmQuestion')}</span>\n </div>\n <div className=\"tooltip-btn-container\">\n <div className=\"tooltip-btn cancel-btn\" onClick={() => onCancel()}><span>{t('Cart.Summary.Warning.RejectMessage')}</span>\n </div>\n <div\n className=\"tooltip-btn continue-btn\"\n onClick={() => onOk()}>\n <span>{t('Cart.Summary.Warning.ConfirmMessage')}</span>\n </div>\n </div>\n </div>\n )\n }\n </div>\n) : null\n\nexport default CartSummaryTooltip\n","import React, { useEffect, useState } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport { Button, LoadingDots } from '$core-components'\nimport CartListModel from '../model/CartListModel'\nimport CartSummaryTooltip from './CartSummaryTooltip'\n\nconst CartSummaryButton = ({ model, loading, setShowAssignToListModal }) => {\n const [isWarningShown, setIsWarningShown] = useState(false)\n const [isErrorShown, setIsErrorShown] = useState(true)\n\n useEffect(() => {\n setIsErrorShown(model?.summary?.hasErrors)\n }, [model?.openedList, model?.summary?.hasErrors, model?.summary?.hasWarnings])\n\n const getCheckoutButtonText = () => {\n if (loading) {\n return <LoadingDots className=\"summary-checkout-loader\"/>\n }\n if (model?.isListsMode && model?.openedList?.id === CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n return t('Cart.Summary.ListsCheckoutButton', {count: model?.summary?.selectedItemsCount})\n }\n if ((model?.isListsMode || model?.isSingleListMode) && model?.openedList?.id !== CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n return t('Cart.Summary.ExportButton', { count: model?.summary?.selectedItemsCount })\n }\n return t('Cart.Summary.CheckoutButtonText', { count: model?.summary?.selectedItemsCount })\n }\n const disabledStatus = model?.summary?.selectedItemsCount === 0 ||\n model?.summary?.totalItemsCount === 0 ||\n model?.summary?.hasErrors ||\n (model?.isListsMode && !model?.openedList?.isUnassigned && !model?.openedList?.isModifiedAfterExport && model?.openedList?.isExported) ||\n (model?.isSingleListMode && !model?.openedList?.isModifiedAfterExport && model?.openedList?.isExported)\n\n return (\n <div className=\"summary-btn-container\">\n <Button\n className=\"button-primary checkout-btn\"\n disabled={disabledStatus}\n text={getCheckoutButtonText()}\n onClick={async () => {\n if (model?.isListsMode && model?.openedList?.id === CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n setShowAssignToListModal(true)\n } else if ((model?.isListsMode || model?.isSingleListMode) && model?.openedList?.id !== CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n if (model?.summary?.hasWarnings) {\n setIsWarningShown(true)\n return\n }\n await model.openedList.export()\n } else if (model?.isWishListMode) {\n if ((model?.summary?.selectedItemsCount === 0 || model?.summary?.hasErrors || model?.summary?.totalItemsCount === 0)) {\n return\n }\n if (model?.summary?.hasWarnings) {\n setIsWarningShown(true)\n return\n }\n if (!model?.summary?.hasErrors) {\n model.checkout()\n }\n }\n }}\n />\n <CartSummaryTooltip\n onOk={() => {\n if (model?.isListsMode && model?.openedList?.id !== CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n setIsWarningShown(false)\n model.openedList.export()\n return\n }\n if (model?.summary?.hasWarnings) {\n model.checkout()\n }\n }}\n show={isWarningShown || isErrorShown}\n type={model?.summary?.hasErrors ? 'error' : 'warning'}\n onCancel={() => {\n setIsWarningShown(false)\n setIsErrorShown(false)\n }}\n isListModel= {model?.isListsMode}\n />\n </div>\n )\n}\n\nexport default observer(CartSummaryButton)\n","import React from 'react'\nimport { Icon } from '$core-components'\n\nexport const CartSummaryError = ({ message }) => {\n if (!message) return null\n\n return (\n <div className=\"cart-summary-payment-info\">\n <Icon name=\"info2.svg\" width=\"16px\" height=\"16px\" className=\"info-icon\"/>\n {message}\n </div>\n )\n}\n","import React, { useEffect } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { Icon } from '$core-components'\nimport { t } from '$themelocalization'\nimport './CartSummaryExportSuccess.scss'\nimport {formatDate} from '../model/utils';\n\nconst CartSummaryExportSuccess = observer(({list}) => {\n const exportSuccess = list?.exportSuccess\n const exportDate = formatDate(exportSuccess?.ExportDate)\n const modifiedDate = formatDate(list.modificationDate)\n\n useEffect(() => {\n setTimeout(() => {\n list?.clearExportSuccessMessage()\n }, 3000)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [list?.exportSuccessMessage])\n\n return (\n <>\n <div className=\"cart-summary-success-export-info\">\n {list.isModifiedAfterExport && <div className=\"cart-summary-success-export-modified-warn\">\n {t('Cart.Summary.ModificationWarning', {date: modifiedDate})}</div>}\n {exportDate && <div>{t('Cart.Summary.ExportedOn', {date: exportDate})}</div>}\n <a href={exportSuccess?.ExternalUrl} target=\"_blank\" rel=\"noopener noreferrer\">{t('Cart.ListBar.ViewExported')}</a>\n </div>\n {list?.exportSuccessMessage && <div className=\"cart-summary-success-export\">\n {t('Cart.Summary.SuccessExport')}\n <Icon name=\"checkmark_green.svg\" width=\"16px\" height=\"16px\" className=\"success-icon\"/>\n </div>}\n </>\n )\n})\n\nexport default CartSummaryExportSuccess\n","import React, {useEffect} from 'react'\nimport { Icon } from '$core-components'\nimport './CartSummaryExportError.scss'\n\n\nconst CartSummaryExportError = ({model, message }) => {\n useEffect(() => {\n setTimeout(() => {\n model?.openedList?.clearExportError()\n }, 5000)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n\n return (\n <div className=\"cart-summary-export-error\">\n <Icon name=\"warning.svg\" width=\"12px\" height=\"12px\"/>{message}\n </div>\n )\n}\n\nexport default CartSummaryExportError\n","import React, { useEffect, useState } from 'react'\nimport { Input, Modal, ModalBody } from 'reactstrap'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport { Icon, Button, Dropdown } from '$core-components'\n\nimport './AssignToListModal.scss'\nimport { useRef } from 'react'\n\nexport const ASSIGN_LIST_TYPE = {\n EXISTING: 'existing',\n NEW: 'new'\n}\n\nconst AssignToListModal = ({ onClose, onSave, model, list, count }) => {\n const [selectedListType, setSelectedListType] = useState(ASSIGN_LIST_TYPE.EXISTING)\n const [newValue, setNewValue] = useState('');\n const [selectedList, setSelectedList] = useState(null);\n const newListInputRef = useRef(null)\n\n useEffect(() => {\n if (model.lists.length === 1 && list.isUnassigned) {\n setSelectedListType(ASSIGN_LIST_TYPE.NEW)\n setTimeout(() => newListInputRef.current.focus(), 0);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [model])\n\n useEffect(() => {\n if (model.lists.length > 0) {\n const firstValue = model.lists.filter((l) => l.id !== list.id && !l.isUnassigned)[0]\n if (firstValue) {\n setSelectedList({ name: firstValue.title, value: firstValue.id })\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const noCustomLists = model.lists.length === 1 && (!model.openedList || model.openedList?.isUnassigned)\n const moreThan100Error = model.lists.length > 100\n const sameNameError = model.lists.some((l) => l.title.trim().toLowerCase() === newValue.trim().toLowerCase())\n const assignToButtonDisabled = (!newValue && selectedListType === ASSIGN_LIST_TYPE.NEW) ||\n (!selectedList && selectedListType === ASSIGN_LIST_TYPE.EXISTING) ||\n sameNameError\n const onTypeChange = (e) => {\n setSelectedListType(e.target.value)\n setNewValue('')\n }\n\n return (\n <Modal isOpen={true} modalClassName=\"assign-to-list-dialog\">\n <div className=\"close-modal\">\n <p className=\"title\">{t('Cart.Dialog.AssignToList.Title',{count})}</p>\n <button className=\"close-button\" onClick={onClose}>\n <Icon name=\"close_black.svg\" width=\"14px\" height=\"14px\"/>\n </button>\n </div>\n <ModalBody>\n {noCustomLists\n ? <div className=\"assign-to-list-dialog-no-lists\">\n <p className=\"label\">{t('Cart.Dialog.AssignToList.Label')}</p>\n <Input type=\"text\" value={newValue} onChange={(e) => setNewValue(e.target.value)} innerRef={newListInputRef}/>\n </div>\n : <div className=\"radio-group\">\n <div className=\"assign-to-list-dialog-existing-list\">\n <label className=\"radio-button\">\n <input\n type=\"radio\"\n name=\"assign-to-list\"\n value={ASSIGN_LIST_TYPE.EXISTING}\n onChange={onTypeChange}\n checked={selectedListType === ASSIGN_LIST_TYPE.EXISTING}\n />\n {t('Cart.Dialog.AssignToList.ExistingList')}\n <span className='radio-checkmark' />\n </label>\n <Dropdown\n items={\n model.lists\n .filter((l) => l.id !== list.id)\n .map((l) => ({ name: l.title, value: l.id }))\n }\n selectedValue={selectedList}\n onChange={setSelectedList}\n disabled={selectedListType !== ASSIGN_LIST_TYPE.EXISTING}\n searchable\n className=\"assign-to-list-dialog-existing-list-dropdown\"\n searchPlaceholder={t('Cart.Dialog.AssignToList.SearchPlaceholder')}\n />\n </div>\n <div className=\"assign-to-list-dialog-existing-new\">\n <label className=\"radio-button\">\n <input\n type=\"radio\"\n name=\"assign-to-list\"\n value={ASSIGN_LIST_TYPE.NEW}\n onChange={onTypeChange}\n checked={selectedListType === ASSIGN_LIST_TYPE.NEW}\n disabled={moreThan100Error}\n />\n {t('Cart.Dialog.AssignToList.NewList')}\n <span className='radio-checkmark' />\n </label>\n <Input\n type=\"text\"\n value={newValue}\n onChange={(e) => setNewValue(e.target.value)}\n disabled={selectedListType !== ASSIGN_LIST_TYPE.NEW}\n className={sameNameError || moreThan100Error ? 'assign-to-list-dialog-new-input-error' : ''}\n />\n {sameNameError && <div className=\"assign-to-list-dialog-new-error\">{t('Cart.Dialog.AssignToList.NameExistsError')}</div>}\n {moreThan100Error && <div className=\"assign-to-list-dialog-new-error\">{t('Cart.Dialog.AssignToList.NotMoreThan100Error')}</div>}\n </div>\n </div>\n }\n <div className=\"action-buttons\">\n <Button\n text={t('Cart.Dialog.AssignToList.Cancel')}\n className=\"button button-secondary\"\n onClick={onClose}\n />\n <Button\n disabled={assignToButtonDisabled}\n text={t('Cart.Dialog.AssignToList.Assign')}\n className=\"button button-primary\"\n onClick={() => {\n onSave({listType: selectedListType, value: selectedListType === ASSIGN_LIST_TYPE.NEW ? newValue : selectedList.value})\n }}\n />\n </div>\n </ModalBody>\n </Modal>\n )\n}\n\nexport default observer(AssignToListModal)\n","import React, { useEffect, useRef, useState } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport CartSummaryContent from './CartSummaryContent'\nimport CartSummaryButton from './CartSummaryButton'\nimport { CartSummaryError } from './CartSummaryError'\nimport CartSummaryExportSuccess from './CartSummaryExportSuccess'\nimport CartSummaryExportError from './CartSummaryExportError'\nimport AssignToListModal, { ASSIGN_LIST_TYPE } from '../CartList/AssignToListModal'\nimport { Slot } from '$core-components'\nimport './index.scss'\nimport CartListModel from '../model/CartListModel'\n\n\n\nconst CartSummary = ({\n currencyState,\n model,\n loading,\n withSticky = false\n}) => {\n const summaryRef = useRef(null)\n const footerObserver = useRef(null)\n const [showAssignToListModal, setShowAssignToListModal] = useState(false)\n\n const observeCallback = (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n summaryRef.current.style.position = 'relative'\n summaryRef.current.style.marginTop = document.querySelector('.header').getBoundingClientRect().height + 'px'\n } else {\n summaryRef.current.style.position = 'fixed'\n summaryRef.current.style.marginTop = ''\n }\n })\n }\n\n useEffect(() => {\n if (withSticky) {\n const footerElement = document.querySelector('.footer')\n footerObserver.current = new IntersectionObserver(observeCallback, {\n root: null,\n rootMargin: '0px',\n threshold: 0.3,\n })\n if (footerElement) {\n footerObserver.current?.observe(document.querySelector('.footer'))\n }\n }\n return () => {\n if (withSticky) {\n footerObserver.current?.disconnect()\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n\n const handleAssignToListSave = async (value) => {\n setShowAssignToListModal(false)\n if (value.listType === ASSIGN_LIST_TYPE.EXISTING) {\n await model.openedList.reAssign(value.value, true)\n } else if (value.listType === ASSIGN_LIST_TYPE.NEW) {\n await model.openedList.reAssignToNew(value.value, true)\n }\n }\n\n const isExportErrorClass = model?.openedList?.exportError ? 'cart-summary-button-export-error' : ''\n\n const assignToItemCount = () => {\n if (model?.isListsMode && model?.openedList?.id === CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n return model?.summary?.selectedItemsCount\n }\n return 0\n }\n\n return (\n <div className={`cart-summary ${isExportErrorClass}`} ref={summaryRef}>\n <CartSummaryContent\n currencyState={currencyState}\n model={model}\n loading={loading}\n />\n <Slot name=\"cart_above_checkout_button\" data={model}/>\n {model?.isListsMode && model?.openedList == null ? null : (\n <CartSummaryButton model={model} loading={loading} setShowAssignToListModal={setShowAssignToListModal}/>\n )}\n <Slot name=\"cart_below_checkout_button\" data={model}/>\n {model?.openedList?.exportSuccess\n && <CartSummaryExportSuccess list={model?.openedList}/>}\n {model?.openedList?.exportError &&\n <CartSummaryExportError model={model} message={t('Cart.Summary.ExportError')}/>}\n {currencyState.isSecondaryCurrency && <CartSummaryError message={t('Cart.Summary.Warning.PaymentInfo', { currency: currencyState.primaryCurrencyName })}/>}\n {model?.isWishListMode && model?.errors.filter(error => error.errorType === 15).map((error) => {\n return <CartSummaryError key={error} message={error.message}/>\n })}\n {showAssignToListModal &&\n <AssignToListModal\n onClose={() => setShowAssignToListModal(false)}\n onSave={handleAssignToListSave}\n model={model}\n list={model?.openedList}\n count={assignToItemCount()}\n />\n }\n </div>\n )\n}\n\nexport default observer(CartSummary)\n","import React, { useState } from 'react'\nimport { LoadingDots, Icon } from '$core-components'\nimport CartSummaryContent from './CartSummaryContent'\nimport CartSummaryButton from './CartSummaryButton'\nimport './CartSummaryStickyBlock.scss'\n\nconst CartSummaryStickyBlock = ({\n price,\n showCurrencyCode,\n currencyCode,\n currencySymbol,\n show,\n model,\n onAction,\n loading\n}) => {\n const [showAll, setShowAll] = useState(false)\n\n const toggleArrow = () => {\n setShowAll(!showAll)\n }\n\n return (\n <>\n <div className={`sticky-cart-summary${show ? '' : ' hide'}`}>\n <div className=\"cart-summary-sticky-block\">\n <div className={\"sticky-summary-more-part\" + (showAll ? \" open\" : \"\")}>\n {showAll &&\n <button className=\"close\" onClick={() => toggleArrow()}>\n <Icon name=\"close_black.svg\" width=\"10px\" height=\"10px\"/>\n </button>\n }\n <CartSummaryContent\n showCurrencyCode={showCurrencyCode}\n currencyCode={currencyCode}\n currencySymbol={currencySymbol}\n model={model}\n loading={loading}\n />\n <div className=\"bottom-line\"/>\n </div>\n <div className=\"sticky-summary-less-part\">\n <div className=\"sticky-total-price\">\n {loading ?\n <LoadingDots className=\"summary-price-loader sticky-price-loader\"/> : (\n <>\n {price}\n {showCurrencyCode && <span className=\"cart-ng-summary-currency-code\"> {currencyCode}</span>}\n <span onClick={toggleArrow}>\n <Icon name={showAll ? 'cart_view_more.svg' : 'cart_view_less.svg'} width=\"13px\" height=\"13px\"/>\n </span>\n </>\n )\n }\n </div>\n <CartSummaryButton loading={loading} model={model} onAction={onAction}/>\n </div>\n </div>\n </div>\n {showAll && <div className=\"sticky-output-layout\" onClick={toggleArrow}/>}\n </>\n\n )\n}\n\nexport default CartSummaryStickyBlock\n","import React, {\n useEffect,\n useRef,\n useState\n} from 'react'\nimport { observer } from 'mobx-react-lite'\nimport CartSummary from './index'\nimport CartSummaryStickyBlock from './CartSummaryStickyBlock'\nimport { useSticky } from '../../products/static/useSticky'\nimport './CartSummaryContainer.scss'\n\nconst CartSummaryContainer = ({\n currencyState,\n model,\n loading,\n withSticky = false\n}) => {\n const [showSticky, setShowSticky] = useState(false)\n const refContainer = useRef(null)\n const { showStickyPrice, stickyConnect, stickyDisconnect} = useSticky(refContainer)\n\n useEffect(() => {\n stickyConnect()\n\n return () => {\n stickyDisconnect()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n setShowSticky(showStickyPrice)\n }, [showStickyPrice])\n\n return (\n <div className={`cart-summary-main-container ${model?.isListsMode ? 'cart-summary-lists-mode' : ''}`} ref={refContainer}>\n <div ref={refContainer}>\n <CartSummary\n model={model}\n loading={loading}\n currencyState={currencyState}\n withSticky={withSticky}\n />\n </div>\n <CartSummaryStickyBlock\n price={model?.summary?.presentablePrices?.total}\n currencyState={currencyState}\n show={showSticky}\n model={model}\n loading={loading}\n />\n </div>\n )\n}\n\nexport default observer(CartSummaryContainer)\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link, NavLink } from 'react-router-dom';\n\nlet hashFragment = '';\nlet observer = null;\nlet asyncTimerId = null;\nlet scrollFunction = null;\n\nfunction reset() {\n hashFragment = '';\n if (observer !== null) observer.disconnect();\n if (asyncTimerId !== null) {\n window.clearTimeout(asyncTimerId);\n asyncTimerId = null;\n }\n}\n\nfunction isInteractiveElement(element) {\n const formTags = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA'];\n const linkTags = ['A', 'AREA'];\n return (\n (formTags.includes(element.tagName) && !element.hasAttribute('disabled')) ||\n (linkTags.includes(element.tagName) && element.hasAttribute('href'))\n );\n}\n\nfunction getElAndScroll() {\n let element = null;\n if (hashFragment === '#') {\n // use document.body instead of document.documentElement because of a bug in smoothscroll-polyfill in safari\n // see https://github.com/iamdustan/smoothscroll/issues/138\n // while smoothscroll-polyfill is not included, it is the recommended way to implement smoothscroll\n // in browsers that don't natively support el.scrollIntoView({ behavior: 'smooth' })\n element = document.body;\n } else {\n // check for element with matching id before assume '#top' is the top of the document\n // see https://html.spec.whatwg.org/multipage/browsing-the-web.html#target-element\n const id = hashFragment.replace('#', '');\n element = document.getElementById(id);\n if (element === null && hashFragment === '#top') {\n // see above comment for why document.body instead of document.documentElement\n element = document.body;\n }\n }\n\n if (element !== null) {\n scrollFunction(element);\n\n // update focus to where the page is scrolled to\n // unfortunately this doesn't work in safari (desktop and iOS) when blur() is called\n let originalTabIndex = element.getAttribute('tabindex');\n if (originalTabIndex === null && !isInteractiveElement(element)) {\n element.setAttribute('tabindex', -1);\n }\n element.focus({ preventScroll: true });\n if (originalTabIndex === null && !isInteractiveElement(element)) {\n // for some reason calling blur() in safari resets the focus region to where it was previously,\n // if blur() is not called it works in safari, but then are stuck with default focus styles\n // on an element that otherwise might never had focus styles applied, so not an option\n element.blur();\n element.removeAttribute('tabindex');\n }\n\n reset();\n return true;\n }\n return false;\n}\n\nfunction hashLinkScroll(timeout) {\n // Push onto callback queue so it runs after the DOM is updated\n window.setTimeout(() => {\n if (getElAndScroll() === false) {\n if (observer === null) {\n observer = new MutationObserver(getElAndScroll);\n }\n observer.observe(document, {\n attributes: true,\n childList: true,\n subtree: true,\n });\n // if the element doesn't show up in specified timeout or 10 seconds, stop checking\n asyncTimerId = window.setTimeout(() => {\n reset();\n }, timeout || 10000);\n }\n }, 0);\n}\n\nexport function genericHashLink(As) {\n return React.forwardRef((props, ref) => {\n let linkHash = '';\n if (typeof props.to === 'string' && props.to.includes('#')) {\n linkHash = `#${props.to.split('#').slice(1).join('#')}`;\n } else if (\n typeof props.to === 'object' &&\n typeof props.to.hash === 'string'\n ) {\n linkHash = props.to.hash;\n }\n\n const passDownProps = {};\n if (As === NavLink) {\n passDownProps.isActive = (match, location) =>\n match && match.isExact && location.hash === linkHash;\n }\n\n function handleClick(e) {\n reset();\n hashFragment = props.elementId ? `#${props.elementId}` : linkHash;\n if (props.onClick) props.onClick(e);\n if (\n hashFragment !== '' &&\n // ignore non-vanilla click events, same as react-router\n // below logic adapted from react-router: https://github.com/ReactTraining/react-router/blob/fc91700e08df8147bd2bb1be19a299cbb14dbcaa/packages/react-router-dom/modules/Link.js#L43-L48\n !e.defaultPrevented && // onClick prevented default\n e.button === 0 && // ignore everything but left clicks\n (!props.target || props.target === '_self') && // let browser handle \"target=_blank\" etc\n !(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) // ignore clicks with modifier keys\n ) {\n scrollFunction =\n props.scroll ||\n ((el) =>\n props.smooth\n ? el.scrollIntoView({ behavior: 'smooth' })\n : el.scrollIntoView());\n hashLinkScroll(props.timeout);\n }\n }\n const { scroll, smooth, timeout, elementId, ...filteredProps } = props;\n return (\n <As {...passDownProps} {...filteredProps} onClick={handleClick} ref={ref}>\n {props.children}\n </As>\n );\n });\n}\n\nexport const HashLink = genericHashLink(Link);\n\nexport const NavHashLink = genericHashLink(NavLink);\n\nif (process.env.NODE_ENV !== 'production') {\n HashLink.displayName = 'HashLink';\n NavHashLink.displayName = 'NavHashLink';\n\n const propTypes = {\n onClick: PropTypes.func,\n children: PropTypes.node,\n scroll: PropTypes.func,\n timeout: PropTypes.number,\n elementId: PropTypes.string,\n to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n };\n\n HashLink.propTypes = propTypes;\n NavHashLink.propTypes = propTypes;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { Icon } from '$core-components'\nimport './CartCheckbox.scss'\n\nconst CartCheckbox = ({ name, id, checked, label, onSelect }) => (\n <div className=\"cart-ng-checkbox-container\">\n <input onClick={onSelect} type=\"checkbox\" id={id} name={name}/>\n <label htmlFor={id}>\n <div className=\"cart-ng-checked-icon-container\" style={{ display: checked ? 'inline-flex' : 'none' }}>\n <Icon\n width=\"22px\"\n height=\"22px\"\n name=\"check.svg\"\n />\n </div>\n <span className=\"cart-list-label\">{label}</span>\n </label>\n </div>\n)\n\nexport default observer(CartCheckbox)\n","import React, { useEffect, useRef, useState } from 'react'\nimport { Input, Modal, ModalBody } from 'reactstrap'\nimport { t } from '$themelocalization'\nimport { Icon, Button } from '$core-components'\nimport './EditListNameModal.scss'\n\nconst EditListNameModal = ({onClose, onSave, value, model, list}) => {\n const [newValue, setNewValue] = useState(value);\n const [hasDuplicateName, setHasDuplicateName] = useState(false);\n const [disabledSave, setDisabledSave] = useState(false);\n const inputRef = useRef(null)\n\n useEffect(() => {\n setTimeout(() => inputRef.current.focus(), 0);\n }, [])\n\n const onNameChange = (e) => {\n setNewValue(e.target.value)\n\n const newValue = e.target.value.trim()\n\n if (model?.lists.filter(l => l.title !== list.title).some(l => l.title.toLowerCase() === newValue.toLowerCase())) {\n setHasDuplicateName(true)\n setDisabledSave(true)\n return\n }\n\n if (newValue === '') {\n setDisabledSave(true)\n return\n }\n\n setHasDuplicateName(false)\n setDisabledSave(false)\n }\n\n\n return (\n <Modal isOpen={true} modalClassName=\"edit-list-name-dialog\">\n <div className=\"close-modal\">\n <p className=\"title\">{t('Cart.Dialog.EditListName.Title')}</p>\n <button className=\"close-button\" onClick={onClose}>\n <Icon name=\"close_black.svg\" width=\"14px\" height=\"14px\"/>\n </button>\n </div>\n <ModalBody>\n <p className=\"label\">{t('Cart.Dialog.EditListName.ListNameTitle')}</p>\n <Input type=\"text\" value={newValue} onChange={onNameChange} innerRef={inputRef}/>\n {hasDuplicateName && <p className=\"error\">{t('Cart.Dialog.EditListName.DuplicateName')}</p>}\n <div className=\"action-buttons\">\n <Button\n text={t('Cart.Dialog.EditListName.Cancel')}\n className=\"button button-secondary\"\n onClick={onClose}\n />\n <Button\n text={t('Cart.Dialog.EditListName.Save')}\n className=\"button button-primary\"\n onClick={() => onSave(newValue)}\n disabled={disabledSave}\n />\n </div>\n </ModalBody>\n </Modal>\n )\n}\n\nexport default EditListNameModal\n","import React, { useState } from 'react'\nimport { Modal, ModalBody } from 'reactstrap'\nimport { Button, Icon }from '$core-components'\nimport './ConfirmationDialog.scss'\n\nconst ConfirmationDialog = ({\n open,\n confirmationText,\n confirmButtonText,\n rejectButtonText,\n onReject,\n onConfirm,\n itemThumbnail\n}) => {\n const [save, setSave] = useState(false)\n return (\n <Modal isOpen={open} className=\"cart-ng-confirmation-dialog\"\n backdropClassName={save ? 'cart-ng-confirmation-dialog-backdrop' : ''}>\n <div className=\"modal-close\">\n <button className=\"close-btn\" onClick={() => onReject()}>\n <Icon name=\"close_black.svg\" width=\"14px\" height=\"14px\"/>\n </button>\n </div>\n <ModalBody className=\"cart-ng-dialog-body\">\n {itemThumbnail && (\n <div className=\"thumbnail-wrapper\">\n <img src={itemThumbnail} alt=\"item-thumbnail\" className=\"cart-ng-confirmation-thumbnail\"/>\n </div>\n )}\n <div className=\"cart-ng-confirmation-text\">\n {confirmationText}\n </div>\n <div className=\"buttons-container\">\n <Button\n className=\"button button-primary confirmation-button\"\n onClick={() => {\n setSave(true)\n onConfirm()\n }}\n text={confirmButtonText}\n />\n <Button\n className=\"button button-secondary confirmation-button\"\n onClick={() => onReject()}\n text={rejectButtonText}\n />\n </div>\n </ModalBody>\n </Modal>\n )\n}\n\nexport default ConfirmationDialog\n","import React, { useEffect, useState } from 'react'\nimport { Modal, ModalBody } from 'reactstrap'\nimport { t, mt } from '$themelocalization'\nimport { Icon, Button } from '$core-components'\nimport './ConfirmDuplicationModal.scss'\n\nconst getDuplicationMessage = (entity) => {\n let messageKey = 'MayTakeAWhile'\n if (entity.hasUSAData || entity.isCOD) {\n messageKey = 'HasUSADataOrCOD'\n } else if (entity.hasItemsOffline) {\n messageKey = 'HasItemsOffline'\n }\n return mt(`Cart.Dialog.DuplicateConfirmation.${messageKey}`)\n}\n\nconst ConfirmDuplicationModal = ({ onClose, entity, onDuplicate }) => {\n const [duplicateButtonText, setDuplicateButtonText] = useState(null)\n useEffect(() => {\n (async () => {\n setDuplicateButtonText(t('Cart.Dialog.DuplicateConfirmation.Duplicate', { count: await entity.itemsCountEligibleForDuplicate }))\n })()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[])\n\n const duplicationMessage = getDuplicationMessage(entity)\n\n if (!duplicateButtonText) return null\n\n return (\n <Modal isOpen={true} modalClassName=\"confirm-list-duplication-modal\">\n <div className=\"close-modal\">\n <button className=\"close-button\" onClick={onClose}>\n <Icon name=\"close_black.svg\" width=\"14px\" height=\"14px\"/>\n </button>\n </div>\n <ModalBody>\n <p className=\"label\">{duplicationMessage}</p>\n <p className=\"label\">{t('Cart.Dialog.DuplicateConfirmation.Label2')}</p>\n <div className=\"action-buttons\">\n <Button\n text={duplicateButtonText}\n className=\"button button-primary confirm-list-duplication-modal-mobile-confirm\"\n onClick={() => onDuplicate(true)}\n />\n <Button\n text={duplicateButtonText}\n className=\"button button-primary confirm-list-duplication-modal-desktop-confirm\"\n onClick={() => onDuplicate(false)}\n />\n <Button\n text={t('Cart.Dialog.DuplicateConfirmation.Cancel')}\n className=\"button button-secondary\"\n onClick={onClose}\n />\n </div>\n </ModalBody>\n </Modal>\n )\n}\n\nexport default ConfirmDuplicationModal\n","import React, {useRef, useEffect} from 'react'\nimport { ReactComponent as ErrorIcon } from '$assets/icons/error.svg'\nimport './ItemDuplicateTooltip.scss'\n\nconst ItemDuplicateTooltip = ({ onClickOutside, desktopDuplicateButtonRef, message, isList }) => {\n const tooltipRef = useRef(null)\n\n const handleClickOutside = (e) => {\n if (tooltipRef.current && !tooltipRef.current.contains(e.target)) {\n onClickOutside()\n }\n }\n\n const handleScroll = (e) => {\n const {height, top, left} = desktopDuplicateButtonRef.current.getBoundingClientRect()\n const offset = isList ? 7 : 0\n tooltipRef.current.style.top = `${top + height + 15}px`\n tooltipRef.current.style.left = `${left + offset}px`\n }\n\n useEffect(() => {\n document.addEventListener('mousedown', handleClickOutside)\n document.addEventListener('scroll', handleScroll)\n window.addEventListener('resize', handleScroll)\n handleScroll()\n\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n document.removeEventListener('scroll', handleScroll)\n window.removeEventListener('resize', handleScroll)\n }\n })\n\n return (\n <div ref={tooltipRef} className=\"cart-item-duplicate-tooltip\">\n <div className=\"cart-item-duplicate-tooltip-inner\">\n <div className=\"cart-error-message\">\n <ErrorIcon width=\"15px\" height=\"15px\"/>\n <span>{message}</span>\n </div>\n </div>\n </div>\n )\n}\n\nexport default ItemDuplicateTooltip\n","import React from 'react'\nimport { Modal, ModalBody } from 'reactstrap'\nimport { t } from '$themelocalization'\nimport { Icon, Button } from '$core-components'\n\nimport './DuplicateItemsDialogError.scss'\n\nconst DuplicateItemsDialogError = ({ onClose, message }) => {\n\n\n return (\n <Modal isOpen={true} className=\"prompt-dialog\" modalClassName=\"max-duplicate-items-dialog-container\">\n <div className=\"close-modal\">\n <button className=\"close-button\" onClick={onClose}>\n <Icon name=\"close_black.svg\" width=\"14px\" height=\"14px\"/>\n </button>\n </div>\n <ModalBody>\n <div className=\"body-content\">\n <Icon name=\"error.svg\" size=\"15px\" wrapperClassName=\"duplicate-items-dialog-error-icon-desktop\"/>\n <Icon name=\"error.svg\" size=\"30px\" wrapperClassName=\"duplicate-items-dialog-error-icon-mobile\"/>\n <span className=\"label\">{message}</span>\n </div>\n <div className=\"action-buttons\">\n <Button\n text={t('Cart.Dialog.MaxDuplicateItems.Close')}\n className=\"button button-primary\"\n onClick={onClose}\n />\n </div>\n </ModalBody>\n </Modal>\n )\n}\n\nexport default DuplicateItemsDialogError\n","import React, {forwardRef} from 'react'\nimport {Icon} from '$core-components'\nimport {t} from '$themelocalization'\n\nimport './DuplicateButton.scss'\n\nconst DuplicateButton = forwardRef((props, ref) => {\n const { className, onClick, disabled, showLargeIcon } = props\n return (\n <button\n ref={ref}\n className={className}\n onClick={onClick}\n disabled={disabled}\n >\n <Icon\n name=\"duplicate_cart.svg\"\n size={showLargeIcon ? \"20px\" : \"15px\"}\n wrapperClassName=\"cart-list-bar-link-icon\"\n title={t('Cart.ListBar.Duplicate')}\n />\n </button>\n )\n})\n\nDuplicateButton.defaultProps = {\n className: '',\n};\n\nexport default DuplicateButton","import React, { useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { observer } from 'mobx-react-lite'\nimport ItemDuplicateTooltip from './ItemDuplicateTooltip'\nimport DuplicateItemsDialogError from './DuplicateItemsDialogError'\nimport ConfirmDuplicationModal from './ConfirmDuplicationModal'\nimport DuplicateButton from './DuplicateButton.js'\n\nimport './DuplicateAction.scss'\nimport CartErrorModel from '../model/CartErrorModel'\n\n\nconst DuplicateAction = ({ item, list, showLargeIcon = false }) => {\n const entity = item || list\n const [duplicateTooltipMessage, setDuplicateTooltipMessage] = useState(null)\n const [duplicateDialogMessage, setDuplicateDialogMessage] = useState(null)\n const desktopDuplicateButtonRef = React.useRef(null)\n const [showDuplicateListModal, setShowDuplicateListModal] = useState(false)\n\n const duplicate = async (isMobile) => {\n const res = await entity.duplicate()\n if ([CartErrorModel.CART_ERROR_TYPES.ProductComponentNotAvailable, CartErrorModel.CART_ERROR_TYPES.ProductNotAvailable ].includes(res?.Type)) {\n if (isMobile) {\n setDuplicateDialogMessage(res.Message)\n } else {\n setDuplicateTooltipMessage(res.Message)\n }\n }\n }\n const onDuplicate = async (isMobile) => {\n if (list || (item?.subItems.length > 0 && (item?.hasUSAData || item?.isCOD || item?.hasItemsOffline))) {\n setShowDuplicateListModal(true)\n return\n }\n await duplicate(isMobile)\n }\n\n return <div className=\"cart-entity-duplicate-action-container\">\n <DuplicateButton\n ref={desktopDuplicateButtonRef}\n className=\"action desktop-duplicate-button\"\n onClick={async () => await onDuplicate(false)}\n disabled={list?.itemsCount === 0}\n showLargeIcon={showLargeIcon}\n />\n\n <DuplicateButton\n className=\"action mobile-duplicate-button\"\n onClick={async () => await onDuplicate(true)}\n disabled={list?.itemsCount === 0}\n showLargeIcon={showLargeIcon}\n />\n\n {duplicateTooltipMessage &&\n createPortal(\n <ItemDuplicateTooltip message={duplicateTooltipMessage}\n isList={!!list}\n desktopDuplicateButtonRef={desktopDuplicateButtonRef}\n onClickOutside={() => setDuplicateTooltipMessage(null)}/>, document.body)}\n {duplicateDialogMessage && <DuplicateItemsDialogError message={duplicateDialogMessage} onClose={() => setDuplicateDialogMessage(null)} />}\n {showDuplicateListModal &&\n <ConfirmDuplicationModal\n onClose={() => setShowDuplicateListModal(false)}\n onDuplicate={async (isMobile) => {\n setShowDuplicateListModal(false)\n await duplicate(isMobile)\n }}\n entity={entity}\n />\n }\n\n </div>\n}\n\nexport default observer(DuplicateAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport { Dropdown, Icon } from '$core-components'\nimport DuplicateAction from '../duplucate/DuplicateAction'\n\nconst showDeleteAction = (list) => !list.isSingleListMode && (!list.isUnassigned || (list.isUnassigned && list.itemsCount > 0))\nconst showAssignTo = (list) => list.isUnassigned && list.itemsCount > 0\nconst showRename = (list) => !list.isUnassigned\nconst showDuplicate = (list) => !list.isUnassigned && !list._cartModel.isSingleListMode\n\nexport const MobileCustomListActions = observer((props) => {\n const { showItemsCount, list} = props\n const hasExportedItems = list.isExported\n\n const items = [\n showRename(list) && { name: t('Cart.ListBar.Rename'), value: 'onTitleEdit', icon: 'edit.svg' },\n showDuplicate(list) && { name: t('Cart.ListBar.Duplicate'), value: 'onDuplicateList', icon: 'duplicate_cart.svg', disabled: list.allItemsOffline || list.itemsCount === 0 },\n showAssignTo(list) && { name: t('Cart.ListBar.AssignTo'), value: 'onAssignToList', icon: 'link.svg', width:'16px', height:'16px'},\n hasExportedItems && { value: 'onViewExported', component: () =>\n <div className=\"exported-list\"><Icon name=\"exported_list.svg\" width=\"18px\" height=\"18px\"\n wrapperClassName=\"cart-list-bar-export-icon\" title={''}/>\n <a href={list.exportSuccess?.ExternalUrl} target=\"_blank\" rel=\"noreferrer\">{t('Cart.ListBar.ViewExported')}</a></div>\n },\n showDeleteAction(list) && (showAssignTo(list) || hasExportedItems) && { divider: true },\n showDeleteAction(list) && { name: t('Cart.ListBar.Delete'), value: 'onDelete', icon: 'delete.svg' },\n ].filter(i => !!i )\n\n const onChange = (selected) => {\n props[selected.value]()\n }\n\n const dropDownToggle = <Icon name=\"menu_2.svg\" width=\"13px\" height=\"16px\"/>\n return <>\n {list.isModifiedAfterExport && <div className=\"cart-list-bar-mobile-export-icon-container\">\n <Icon name=\"info.svg\" width=\"18px\" height=\"18px\" wrapperClassName=\"cart-list-bar-export-icon\" title={''}/>\n </div>}\n <div className=\"cart-list-bar-mobile-actions-drop-down\">\n <span className=\"cart-items-count\">{showItemsCount && `(${list.itemsCount})`}</span>\n <Dropdown {...{ items, onChange, dropDownToggle }} end disabled={list.isEmpty && list.isUnassigned}/>\n </div>\n </>\n})\n\nexport const DesktopCustomListActions = observer(({ showItemsCount, list, onAssignToList, onDelete }) => {\n const hasExportedItems = list.isExported\n\n return <div className=\"cart-list-bar-desktop-actions-drop-down\">\n {hasExportedItems &&\n <>\n {list.isModifiedAfterExport && <div className=\"cart-list-bar-export-icon-container\">\n <Icon name=\"info.svg\" width=\"18px\" height=\"18px\" wrapperClassName=\"cart-list-bar-export-icon\" title={''}/>\n <div className=\"cart-list-bar-export-tooltip\"> {t('Cart.ListBar.ThereWereChanges')}</div>\n </div>}\n <a className=\"exported-list\" href={list?.exportSuccess.ExternalUrl} target=\"_blank\"\n rel=\"noreferrer\">{t('Cart.ListBar.ViewExported')}</a>\n </>\n }\n {showAssignTo(list) && <Icon name=\"link.svg\" size=\"15px\" wrapperClassName=\"cart-list-bar-link-icon\"\n onClick={onAssignToList} title={t('Cart.Dialog.AssignToList.Label')} />}\n {!list.isUnassigned && <DuplicateAction list={list} />}\n {showDeleteAction(list) && (\n <button className={`empty-custom-list-button`} onClick={onDelete}>\n <Icon wrapperClassName=\"empty-cart-button-icon\" name=\"delete.svg\" width=\"14px\" height=\"16px\" title={t('Cart.DeleteTooltip')}/>\n <span className=\"cart-items-count\">{showItemsCount && `(${list.itemsCount})`}</span>\n </button>\n )}\n </div>\n})\n","import React, { useState } from 'react'\nimport { t } from '$themelocalization'\nimport { observer } from 'mobx-react-lite'\nimport { Icon } from '$core-components'\nimport CartCheckbox from './CartCheckbox'\nimport EditListNameModal from './EditListNameModal'\nimport ConfirmationDialog from '../ConfirmationDialog'\nimport AssignToListModal, { ASSIGN_LIST_TYPE } from './AssignToListModal'\nimport ConfirmDuplicationModal from '../duplucate/ConfirmDuplicationModal'\nimport {MobileCustomListActions, DesktopCustomListActions} from './CustomListActions'\nimport './ListBar.scss'\nimport CartListModel from '../model/CartListModel'\nimport DuplicateItemsDialogError from '../duplucate/DuplicateItemsDialogError'\nimport CartErrorModel from '../model/CartErrorModel'\n\nconst CustomListTitle = ({ listTitle, onEdit, list, model }) => {\n return (\n <div className=\"cart-list-bar-custom-title\">\n {!model.isSingleListMode && <Icon name=\"arrowDown.svg\" width=\"13px\" height=\"8px\" className=\"cart-list-bar-arrow-down\"/>}\n {listTitle}\n {!list.isUnassigned &&\n <div className=\"cart-list-bar-edit\" onClick={onEdit}><Icon name=\"edit.svg\" width=\"13px\" height=\"13px\" /></div>}\n </div>\n )\n}\n\nconst CustomListActions = observer(({\n model,\n list,\n setShowDeleteAllConfirmation,\n setDeleteConfirmationText,\n showItemsCount,\n onAssignToList,\n onDeleteWithNoConfirmation,\n onTitleEdit,\n onDuplicateList,\n}) => {\n const onDelete = () => {\n if (!list.isUnassigned && list.itemsCount === 0) {\n onDeleteWithNoConfirmation()\n return\n }\n setDeleteConfirmationText(list.isUnassigned ? t('Cart.Dialog.Delete.ConfirmEmptyUnassignedList') : t('Cart.Dialog.Delete.ConfirmDeleteList'))\n setShowDeleteAllConfirmation(true)\n }\n\n if (!model.isListsMode)\n return null\n\n return <div className=\"cart-list-bar-custom-list-actions\">\n <DesktopCustomListActions {...{showItemsCount, list, onAssignToList, onDelete}}/>\n <MobileCustomListActions onViewExported={() => {}} {...{onDelete, showItemsCount, list, onAssignToList, onTitleEdit, onDuplicateList}}/>\n </div>\n})\n\nconst ListBar = ({\n model,\n list,\n listTitle,\n emptyAllText,\n showItemsCount = true,\n onTitleClick,\n}) => {\n const [showDeleteAllConfirmation, setShowDeleteAllConfirmation] = useState(false)\n const [showAssignToListModal, setShowAssignToListModal] = useState(false)\n const [showDuplicateListModal, setShowDuplicateListModal] = useState(false)\n const [showListNameEdit, setShowListNameEdit] = useState(false)\n const [deleteConfirmationText, setDeleteConfirmationText] = useState(t('Cart.Dialog.Delete.ConfirmDeleteAllCart'))\n const [duplicateDialogMessage, setDuplicateDialogMessage] = useState('')\n\n if (!model) return (<div className=\"cart-list-bar list-is-open\">\n <div/>\n <div className=\"empty-cart-button\">\n <span className=\"empty-all-text\">{emptyAllText} </span>\n <span className=\"cart-items-count\">{showItemsCount && `(${list.itemsCount})`}</span>\n </div>\n </div>)\n\n const onTitleEdit = (e) => {\n e?.stopPropagation()\n setShowListNameEdit(true)\n }\n\n const onAssignToList = () => {\n setShowAssignToListModal(true)\n }\n\n const onDuplicateList = () => {\n setShowDuplicateListModal(true)\n }\n\n const onListNameSave = async (newName) => {\n setShowListNameEdit(false)\n await list.rename(newName)\n }\n\n const onAssignToListSave = async (value) => {\n setShowAssignToListModal(false)\n if (value.listType === ASSIGN_LIST_TYPE.EXISTING) {\n await list.reAssign(value.value)\n } else if (value.listType === ASSIGN_LIST_TYPE.NEW) {\n await list.reAssignToNew(value.value)\n }\n }\n\n const onDuplicateListSave = async () => {\n setShowDuplicateListModal(false)\n const res = await list.duplicate()\n if ([CartErrorModel.CART_ERROR_TYPES.ProductComponentNotAvailable, CartErrorModel.CART_ERROR_TYPES.ProductNotAvailable ].includes(res?.Type)) {\n setDuplicateDialogMessage(res.Message)\n }\n }\n\n const handleDeleteAllDialogConfirm = async () => {\n setShowDeleteAllConfirmation(false)\n if (model.isWishListMode || (model.isListsMode && list.isUnassigned)) {\n await list.emptyList()\n } else if (model.isListsMode) {\n await list.emptyList()\n if (!list.isUnassigned) {\n await list.deleteList()\n }\n }\n }\n\n const handleRevertModification = async () => {\n if (list.isWishList) {\n setDeleteConfirmationText(t('Cart.Dialog.Delete.ConfirmDeleteAllWishlist'))\n setShowDeleteAllConfirmation(true)\n return\n }\n if (list.isOrderEdit || (list.isDefault && model.hasEditOrApproval)) {\n setDeleteConfirmationText(t('Cart.Dialog.Delete.ConfirmDeleteAllLists'))\n setShowDeleteAllConfirmation(true)\n return\n }\n await model.revertModifications()\n }\n\n const getContainerClassList = () => {\n const classes = ['cart-list-bar']\n if (model.openedList?.id === list.id && (model.isListsMode || model.isSingleListMode)) {\n classes.push('list-open')\n }\n if (model?.hasEditOrApproval || model.isSingleListMode) {\n classes.push('highlight-bottom-border')\n }\n if (model.isSingleListMode) {\n classes.push('single-list-mode')\n }\n\n return classes.join(' ')\n }\n\n return (\n <>\n <div className={getContainerClassList()}>\n {list.isWishList ? <p className=\"wish-list-label\">{listTitle}</p> :\n (\n model.loading === false ? <div\n className={`${model.isListsMode ? 'cart-list-bar-clickable' : ''}`}\n onClick={() => model.isListsMode && onTitleClick()}\n >\n {model.isListsMode || model.isSingleListMode ?\n <CustomListTitle model={model} listTitle={listTitle} onEdit={onTitleEdit} list={list}/>\n :\n <CartCheckbox\n name={`cart-list-bar-checkbox-${list.originalOrderFriendlyId ?? list.id}`}\n id={`cart-list-bar-checkbox-${list.originalOrderFriendlyId ?? list.id}`}\n onSelect={() => list.toggleSelectAll()}\n checked={list?.items?.length === list?.selected?.length && list?.items?.length > 0}\n className=\"cart-list-bar-checkbox-wrapper\"\n label={listTitle}\n />\n }\n </div> : <div/>\n )}\n {model.isListsMode || model.isSingleListMode\n ? <CustomListActions\n {...{\n model,\n list,\n setShowDeleteAllConfirmation,\n setDeleteConfirmationText,\n showItemsCount,\n onAssignToList,\n onDuplicateList,\n onTitleEdit,\n }}\n onDeleteWithNoConfirmation={handleDeleteAllDialogConfirm}\n />\n : <div>\n {model.hasEditOrApproval ?\n <button\n className={`empty-cart-button ${list.isOrderEdit ? 'empty-cart-order-approval-icon' : ''}`}\n onClick={handleRevertModification}\n >\n {!list.isOrderApproval && <Icon wrapperClassName=\"empty-cart-button-icon\" name=\"delete.svg\" width=\"14px\" height=\"16px\" title={t('Cart.DeleteTooltip')}/>}\n {list?.id !== CartListModel.CART_LIST_TYPES.DEFAULT && <span className=\"empty-all-text\">{emptyAllText} </span>}\n {!list.isOrderApproval && <> <span className=\"cart-items-count\">{showItemsCount && `(${list.items.length})`}</span></>}\n </button>\n :\n <button\n className={`empty-cart-button ${list.isReorder ? '' : 'empty-cart-hide-icon'}`}\n onClick={() => {\n if (list.isWishList) {\n setDeleteConfirmationText(t('Cart.Dialog.Delete.ConfirmDeleteAllWishlist'))\n } else {\n setDeleteConfirmationText(t('Cart.Dialog.Delete.ConfirmDeleteAllCart'))\n }\n setShowDeleteAllConfirmation(true)\n }}\n >\n <Icon wrapperClassName=\"empty-cart-button-icon\" name=\"delete.svg\" width=\"14px\" height=\"16px\" title={t('Cart.DeleteTooltip')}/>\n <span className=\"empty-all-text\">{emptyAllText} </span>\n <span className=\"cart-items-count\">{showItemsCount && `(${list.itemsCount})`}</span>\n </button>}\n </div>\n }\n </div>\n <ConfirmationDialog\n confirmationText={deleteConfirmationText}\n confirmButtonText={`${t('Cart.Dialog.Delete.ConfirmDeleteButtonText')} (${list.itemsCount})`}\n rejectButtonText={t('Cart.Dialog.Delete.RejectButtonText')}\n onConfirm={handleDeleteAllDialogConfirm}\n onReject={() => setShowDeleteAllConfirmation(false)}\n open={showDeleteAllConfirmation}\n />\n {showListNameEdit &&\n <EditListNameModal\n onClose={() => setShowListNameEdit(false)}\n onSave={onListNameSave}\n value={list.title}\n model={model}\n list={list}\n />\n }\n {showAssignToListModal &&\n <AssignToListModal\n onClose={() => setShowAssignToListModal(false)}\n onSave={onAssignToListSave}\n model={model}\n list={list}\n count={list.itemsCount}\n />\n }\n {showDuplicateListModal &&\n <ConfirmDuplicationModal\n onClose={() => setShowDuplicateListModal(false)}\n onDuplicate={onDuplicateListSave}\n entity={list}\n />\n }\n {duplicateDialogMessage && <DuplicateItemsDialogError message={duplicateDialogMessage} onClose={() => setDuplicateDialogMessage(null)} />}\n </>\n )\n}\n\nexport default observer(ListBar)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { UStoreProvider } from '@ustore/core'\nimport { formatForCurrencyAndCulture } from '../model/utils'\nimport './DisplayPrice.scss'\n\nconst DisplayPrice = ({\n price,\n hasPricing,\n isHighlighted,\n currencyState,\n customPriceFormat\n}) => {\n if (\n price.subtotal == null\n || !hasPricing\n || !currencyState\n || Number.isNaN(price?.subtotal)\n || Number.isNaN(price?.tax)\n )\n return ''\n\n let formatParams = {\n taxFormat: customPriceFormat || currencyState.taxFormat,\n symbol: currencyState.currencySymbol,\n code: currencyState.currencyCode,\n currencyFormat: currencyState.currencyFormat,\n decimalSeparator: currencyState.decimalSeparator,\n decimalPlaces: currencyState.decimalPlaces,\n languageCode: currencyState.languageCode\n }\n\n const { price: itemPrice, tax, priceIncludingTax } = UStoreProvider.state.culture.getConvertedPrices({\n Price: price?.subtotal,\n Tax: price?.tax\n })\n\n if (Number.isNaN(itemPrice) || Number.isNaN(tax) || Number.isNaN(priceIncludingTax))\n return ''\n\n // format the given price and tax amount to a string according to the tax, culture and currency definitions of models in state\n const priceDisplayString = formatParams.taxFormat\n .replace(/{Price}/g, formatForCurrencyAndCulture(itemPrice, formatParams))\n .replace(/{Tax}/g, formatForCurrencyAndCulture(tax, formatParams))\n .replace(/{PriceIncludingTax}/g, formatForCurrencyAndCulture(priceIncludingTax, formatParams))\n\n return (\n <p className={`price${isHighlighted ? ' highlight' : ''}`}>\n {priceDisplayString}\n {currencyState.showCurrencyCode && <span className=\"cart-ng-item-currency-code\"> {formatParams.code}</span>}\n </p>\n )\n}\n\nexport default observer(DisplayPrice)\n","import React, { useState } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { Icon } from '$core-components'\nimport { t } from '$themelocalization'\nimport ConfirmationDialog from '../ConfirmationDialog'\nimport AssignToListModal, { ASSIGN_LIST_TYPE } from '../CartList/AssignToListModal'\nimport DuplicateAction from '../duplucate/DuplicateAction'\n\nimport './CartItemActions.scss'\n\nconst CartItemActions = ({\n editDisabled,\n item,\n setAlertMessage,\n}) => {\n const [showConfirmationDialog, setShowConfirmationDialog] = useState(false)\n const [showAssignToListModal, setShowAssignToListModal] = useState(false)\n\n\n\n const { _cartModel, _listModel } = item\n const isListsMode = _cartModel.isListsMode\n const isWishList = _listModel.isWishList\n const isSingleListMode = _cartModel.isSingleListMode\n const isDuplicateAllowed = !item.isUnassigned && !isWishList\n\n const onAssignToListSave = async (value) => {\n setShowAssignToListModal(false)\n if (value.listType === ASSIGN_LIST_TYPE.EXISTING) {\n await item.reAssign(value.value)\n } else if (value.listType === ASSIGN_LIST_TYPE.NEW) {\n await item.reAssignToNew(value.value)\n }\n setShowAssignToListModal(false)\n }\n\n return (\n <div className=\"actions-list\">\n {item.affectsPricing &&\n <button\n className=\"action\"\n disabled={editDisabled}\n onClick={() => item.edit()}\n >\n <Icon name=\"edit.svg\" width=\"20px\" height=\"20px\" title={t('Cart.EditTooltip')}/>\n </button>\n }\n {isListsMode &&\n <button\n className=\"action\"\n onClick={() => setShowAssignToListModal(true)}\n >\n <Icon name=\"link.svg\" width=\"20px\" height=\"20px\" wrapperClassName=\"cart-list-bar-link-icon\" title={t('Cart.Dialog.AssignToList.Label')}/>\n </button>\n }\n {isDuplicateAllowed && <DuplicateAction item={item} showLargeIcon={true}/>}\n {item.affectsPricing && !isListsMode && !isSingleListMode &&\n <button\n className=\"action\"\n onClick={() => {\n setAlertMessage(t('Cart.CartItemMoveToWishList'))\n item.moveItemToWishlist()\n }}\n >\n <Icon name=\"move_to_wish_list.svg\" width=\"20px\" height=\"20px\" title={t('Cart.MoveToWishList')}/>\n </button>}\n {isWishList &&\n <button className=\"action\" onClick={() => {\n setAlertMessage(t('Cart.WishListItemMoveToCart'))\n item.moveItemToCart()\n }}>\n <Icon name=\"move_to_cart.svg\" width=\"20px\" height=\"20px\" title={t('Cart.MoveToCart')}/>\n </button>\n }\n <div className=\"divider\"/>\n <button\n className=\"action\"\n onClick={() => {\n if (!isWishList) {\n setShowConfirmationDialog(true)\n } else {\n setAlertMessage(t('Cart.CartItemDeleted'))\n item.delete()\n }\n }}>\n <Icon name=\"delete.svg\" width=\"20px\" height=\"20px\" title={t('Cart.DeleteTooltip')}/>\n </button>\n <ConfirmationDialog\n open={showConfirmationDialog}\n itemThumbnail={item.thumbnailUrl}\n confirmationText={t('Cart.Dialog.Delete.ConfirmDeleteItem')}\n confirmButtonText={t('Cart.Dialog.Delete.ConfirmDeleteButtonText')}\n rejectButtonText={t('Cart.Dialog.Delete.RejectButtonText')}\n onReject={() => setShowConfirmationDialog(false)}\n onConfirm={() => {\n setShowConfirmationDialog(false)\n }}\n />\n {showAssignToListModal &&\n <AssignToListModal\n onClose={() => setShowAssignToListModal(false)}\n onSave={onAssignToListSave}\n model={item._cartModel}\n list={item._listModel}\n assignSingleItem={true}\n count={1}\n />\n }\n </div>\n )\n}\n\nexport default observer(CartItemActions)\n","import React, { useState } from 'react'\nimport { Modal, ModalBody } from 'reactstrap'\nimport { t } from '$themelocalization'\nimport { Icon , Button} from '$core-components'\n\nimport './PromptDialog.scss'\n\nexport const PromptDialog = ({ onClose, nickname, onChange }) => {\n const [newValue, setNewValue] = useState(nickname);\n\n const onSave = () => {\n onChange(newValue?.trim());\n onClose();\n }\n\n return (\n <Modal isOpen={true} className=\"prompt-dialog\" modalClassName=\"nickname-dialog-container\">\n <div className=\"close-modal\">\n <p className=\"title\">{t('Cart.Item.Dialog.Edit')}</p>\n <button className=\"close-button\" onClick={onClose}>\n <Icon name=\"close_black.svg\" width=\"14px\" height=\"14px\"/>\n </button>\n </div>\n <ModalBody>\n <p className=\"label\">{t('Cart.Item.Dialog.Title')}</p>\n <input\n className=\"input\"\n placeholder={t('Cart.NicknamePlaceholder')}\n value={newValue}\n onChange={(e) => setNewValue(e.target.value)}\n />\n <div className=\"action-buttons\">\n <Button\n text={t('Cart.Dialog.EditNickname.Cancel')}\n className=\"button button-secondary\"\n onClick={onClose}\n />\n <Button\n text={t('Cart.Dialog.EditNickname.Save')}\n className=\"button button-primary\"\n onClick={onSave}\n />\n </div>\n </ModalBody>\n </Modal>\n )\n}\n","import React, { useState, useRef, useEffect } from 'react'\nimport { t } from '$themelocalization'\nimport { Icon, ClickOutside } from '$core-components'\nimport { PromptDialog } from './PromptDialog'\nimport './Nickname.scss'\n\nexport const Nickname = ({ nickname, setNickname, onEditStart, onEditEnd }) => {\n const [nicknameInput, setNicknameInput] = useState(nickname)\n const [isEditing, setIsEditing] = useState(false)\n const [isDialogOpen, setIsDialogOpen] = useState(false)\n const inputRef = useRef(null)\n\n useEffect(() => {\n if (isEditing) {\n inputRef.current.focus()\n }\n }, [isEditing])\n\n useEffect(() => {\n setNicknameInput(nickname)\n }, [nickname])\n\n const save = () => {\n setIsEditing(false)\n setNickname(nicknameInput)\n onEditEnd && onEditEnd()\n }\n\n const onClickOutside = (e) => {\n e.stopPropagation()\n if (e.target.id !== 'Shape' && e.target.tagName !== 'svg') {\n save()\n }\n }\n const onEnter = (e) => {\n if (e.key === 'Enter') {\n save()\n }\n }\n\n const handleEditNickname = () => {\n setIsEditing(true)\n onEditStart && onEditStart()\n }\n\n const onDelete = () => {\n setNicknameInput('')\n setIsEditing(false)\n setNickname('')\n onEditEnd && onEditEnd()\n }\n\n return (\n <>\n {nickname === '' && !isEditing &&\n <>\n <div onClick={handleEditNickname} className=\"nickname-edit-desktop\">\n <Icon id=\"nickname-edit-button-icon\" name=\"nickname.svg\" width=\"20px\" height=\"20px\" title={t('Cart.Dialog.Nickname.Add')}/>\n </div>\n <div className=\"nickname-edit-mobile\" onClick={() => setIsDialogOpen(true)}>\n <Icon id=\"nickname-edit-button-icon\" name=\"nickname.svg\" width=\"20px\" height=\"20px\"/>\n </div>\n </>\n }\n {isEditing && (\n <ClickOutside trigger={onClickOutside} className=\"nickname-box\">\n <input\n ref={inputRef}\n className=\"nickname-input\"\n placeholder={t('Cart.NicknamePlaceholder')}\n value={nicknameInput}\n onChange={(e) => setNicknameInput(e.target.value)}\n onKeyDown={onEnter}\n />\n <div className=\"nickname-delete-desktop\" onClick={onDelete}>\n <Icon name=\"delete.svg\" width=\"14px\" height=\"14px\" title={t('Cart.Dialog.Nickname.Delete')}/>\n </div>\n </ClickOutside>\n )}\n {!isEditing && nickname && (\n <div className=\"nickname-box\">\n <p className=\"nickname\" onDoubleClick={handleEditNickname}>{nickname}</p>\n <div className=\"nickname-edit-desktop\" onClick={handleEditNickname}>\n <Icon name=\"edit.svg\" width=\"14px\" height=\"14px\" title={t('Cart.Dialog.Nickname.Edit')}/>\n </div>\n <div className=\"nickname-edit-mobile\" onClick={() => setIsDialogOpen(true)}>\n <Icon name=\"edit.svg\" width=\"14px\" height=\"14px\"/>\n </div>\n </div>\n )}\n {isDialogOpen && <PromptDialog\n onClose={() => {\n setIsDialogOpen(false)\n }}\n nickname={nicknameInput}\n onChange={(newNickname) => {\n setNickname(newNickname)\n }}/>}\n </>\n )\n}\n","import React, { useState, useRef, useEffect } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { Tooltip } from 'reactstrap'\nimport { debounce } from 'throttle-debounce'\nimport { Nickname } from './Nickname'\nimport './ProductName.scss'\n\nconst ProductName = ({ item }) => {\n const [showTooltip, setShowTooltip] = useState(false)\n const [isTooltipOpen, setIsTooltipOpen] = useState(false)\n const [isEditingNickname, setIsEditingNickname] = useState(false)\n const contentRef = useRef(null)\n const rootRef = useRef(null)\n\n const toggle = () => setIsTooltipOpen(!isTooltipOpen)\n\n useEffect(() => {\n const onResize = debounce(250, () => {\n const element = contentRef?.current\n if (!element) return\n const originalOverflow = element.style.overflow;\n const originalTextOverflow = element.style.textOverflow;\n const originalWhiteSpace = element.style.whiteSpace;\n const originalWidth = element.clientWidth;\n\n // Set styles to what would be needed for an ellipsis\n element.style.overflow = 'hidden';\n element.style.textOverflow = 'ellipsis';\n element.style.whiteSpace = 'nowrap';\n\n // Check if the content overflows\n const isOverflowing = element.scrollWidth > originalWidth;\n\n // // Restore the original values\n element.style.overflow = originalOverflow;\n element.style.textOverflow = originalTextOverflow;\n element.style.whiteSpace = originalWhiteSpace;\n\n setShowTooltip(isOverflowing)\n })\n onResize()\n window.addEventListener('resize', onResize)\n return () => window.removeEventListener('resize', onResize)\n }, [])\n\n const handleNicknameChange = (nickname) => {\n item.updateNickname(nickname ?? null)\n }\n\n if (!item) return null\n\n return (\n <div className={`title-box ${item.nickname || isEditingNickname? 'has-value': ''}`} ref={rootRef}>\n <div className=\"title-wrapper\">\n <div className=\"item-title\">\n <h3 className={`title-content wrap`} ref={contentRef} id={`tooltip-${item.orderItemId}`} style={{\n overflow: 'hidden',\n }}>\n {item.product.name}\n {item.product.catalogNumber && ` / ${item.product.catalogNumber}`}\n </h3>\n </div>\n </div>\n <Nickname\n nickname={item.nickname}\n setNickname={handleNicknameChange}\n onEditStart={() => setIsEditingNickname(true)}\n onEditEnd={() => setIsEditingNickname(false)}\n />\n {showTooltip &&\n <Tooltip\n className=\"product-name-tooltip\"\n placement=\"bottom\"\n isOpen={isTooltipOpen}\n target={contentRef.current}\n toggle={toggle}\n container=\"cart-list\"\n modifiers={[\n {\n name: 'offset',\n options: {\n offset: ({placement}) => {\n if (placement === 'top') {\n return [0, 30];\n } else {\n return [];\n }\n },\n }\n },\n ]}\n\n >\n {item.product.name}\n </Tooltip>\n }\n </div>\n )\n}\n\nexport default observer(ProductName)\n","import React, { useState } from 'react'\nimport {t} from '$themelocalization'\nimport { Icon } from '$core-components'\n\nimport './ExpandableList.scss'\n\nexport const ExpandableList = ({ properties }) => {\n const [showAll, setShowAll] = useState(properties.length <= 3)\n const visibleItems = showAll ? properties : properties.slice(0, 2)\n\n const toggleList = () => {\n setShowAll(!showAll)\n }\n\n return (\n <div>\n <ul className=\"expandable-list\">\n {visibleItems.map((property) => (\n <li className=\"property\" key={property}>{property.name}: {property.value}</li>\n ))}\n </ul>\n {properties?.length > 3 && <button className=\"expandable-list-toggler\" onClick={toggleList}>\n {t(`Cart.Item.ExpandedList.${showAll ? 'ViewLess' : 'ViewMore'}`)}\n <Icon name={showAll ? 'cart_view_less.svg' : 'cart_view_more.svg'} width=\"10px\" height=\"10px\"/>\n </button>}\n </div>\n )\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport { ExpandableList } from './ExpandableList'\nimport './ProductProperties.scss'\n\nconst ProductProperties = ({ item, product }) => {\n const getPackSize = () =>\n `${product.unit.quantity} ${product.unit.quantity > 1 ? product.unit.plural : product.unit.singular} / ${product.unit.packSingular}`\n\n return (\n <div className=\"cart-item-properties\">\n {item.properties.length > 0 ? <ExpandableList properties={item.properties}/> : null}\n {product.packSingular && <div className=\"property\">({getPackSize()})</div>}\n {item.numRecipients > 1 && item.quantityPerRecipient && (\n // the condition numRecipients > 1 is there because we can't distinguish between product types\n // it was decided between @Nachman and @Oleksii 07/04/23\n <div className=\"recipients\">\n <div className=\"property\">{t('Cart.Item.Recipients')}: {item.numRecipients}</div>\n <div className=\"property\">{t('Cart.Item.Quantity')}: {item.quantityPerRecipient}</div>\n </div>\n )}\n </div>\n )\n}\n\nexport default observer(ProductProperties)\n","var h = Object.defineProperty;\nvar u = (n, t, e) => t in n ? h(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;\nvar c = (n, t, e) => (u(n, typeof t != \"symbol\" ? t + \"\" : t, e), e);\nimport f, { Component as m, createElement as v, Children as b } from \"react\";\nconst p = (n, t) => typeof getComputedStyle < \"u\" ? getComputedStyle(n, null).getPropertyValue(t) : n.style.getPropertyValue(t), y = (n) => p(n, \"overflow\") + p(n, \"overflow-y\") + p(n, \"overflow-x\"), w = (n) => {\n if (!(n instanceof HTMLElement))\n return window;\n let t = n;\n for (; t && !(t === document.body || t === document.documentElement || !t.parentNode); ) {\n if (/(scroll|auto)/.test(y(t)))\n return t;\n t = t.parentNode;\n }\n return window;\n};\nclass g extends m {\n constructor(e) {\n super(e);\n c(this, \"elementObserver\");\n c(this, \"wrapper\");\n c(this, \"lazyLoadHandler\", (e) => {\n var o, i;\n const {\n onContentVisible: s\n } = this.props, [r] = e, {\n isIntersecting: l\n } = r;\n if (l) {\n this.setState({\n visible: !0\n }, () => {\n s && s();\n });\n const a = (o = this.wrapper) == null ? void 0 : o.current;\n a && a instanceof HTMLElement && ((i = this.elementObserver) == null || i.unobserve(a));\n }\n });\n this.elementObserver = null, this.wrapper = f.createRef(), this.state = {\n visible: !1\n };\n }\n componentDidMount() {\n var o;\n this.getEventNode();\n const {\n offset: e,\n threshold: s\n } = this.props, r = {\n rootMargin: typeof e == \"number\" ? `${e}px` : e || \"0px\",\n threshold: s || 0\n };\n this.elementObserver = new IntersectionObserver(this.lazyLoadHandler, r);\n const l = (o = this.wrapper) == null ? void 0 : o.current;\n l instanceof HTMLElement && this.elementObserver.observe(l);\n }\n shouldComponentUpdate(e, s) {\n return s.visible;\n }\n componentWillUnmount() {\n var s, r;\n const e = (s = this.wrapper) == null ? void 0 : s.current;\n e && e instanceof HTMLElement && ((r = this.elementObserver) == null || r.unobserve(e));\n }\n getEventNode() {\n var e;\n return w((e = this.wrapper) == null ? void 0 : e.current);\n }\n render() {\n const {\n children: e,\n className: s,\n height: r,\n width: l,\n elementType: o\n } = this.props, {\n visible: i\n } = this.state, a = {\n height: r,\n width: l\n }, d = `LazyLoad${i ? \" is-visible\" : \"\"}${s ? ` ${s}` : \"\"}`;\n return v(o || \"div\", {\n className: d,\n style: a,\n ref: this.wrapper\n }, i && b.only(e));\n }\n}\nc(g, \"defaultProps\", {\n elementType: \"div\",\n className: \"\",\n offset: 0,\n threshold: 0,\n width: null,\n onContentVisible: null,\n height: null\n});\nexport {\n g as default\n};\n","'use client';\nimport React from 'react';\n\n/**\n * @internal\n */\nconst SkeletonThemeContext = React.createContext({});\n\n/* eslint-disable react/no-array-index-key */\nconst defaultEnableAnimation = true;\n// For performance & cleanliness, don't add any inline styles unless we have to\nfunction styleOptionsToCssProperties({ baseColor, highlightColor, width, height, borderRadius, circle, direction, duration, enableAnimation = defaultEnableAnimation, }) {\n const style = {};\n if (direction === 'rtl')\n style['--animation-direction'] = 'reverse';\n if (typeof duration === 'number')\n style['--animation-duration'] = `${duration}s`;\n if (!enableAnimation)\n style['--pseudo-element-display'] = 'none';\n if (typeof width === 'string' || typeof width === 'number')\n style.width = width;\n if (typeof height === 'string' || typeof height === 'number')\n style.height = height;\n if (typeof borderRadius === 'string' || typeof borderRadius === 'number')\n style.borderRadius = borderRadius;\n if (circle)\n style.borderRadius = '50%';\n if (typeof baseColor !== 'undefined')\n style['--base-color'] = baseColor;\n if (typeof highlightColor !== 'undefined')\n style['--highlight-color'] = highlightColor;\n return style;\n}\nfunction Skeleton({ count = 1, wrapper: Wrapper, className: customClassName, containerClassName, containerTestId, circle = false, style: styleProp, ...originalPropsStyleOptions }) {\n var _a, _b, _c;\n const contextStyleOptions = React.useContext(SkeletonThemeContext);\n const propsStyleOptions = { ...originalPropsStyleOptions };\n // DO NOT overwrite style options from the context if `propsStyleOptions`\n // has properties explicity set to undefined\n for (const [key, value] of Object.entries(originalPropsStyleOptions)) {\n if (typeof value === 'undefined') {\n delete propsStyleOptions[key];\n }\n }\n // Props take priority over context\n const styleOptions = {\n ...contextStyleOptions,\n ...propsStyleOptions,\n circle,\n };\n // `styleProp` has the least priority out of everything\n const style = {\n ...styleProp,\n ...styleOptionsToCssProperties(styleOptions),\n };\n let className = 'react-loading-skeleton';\n if (customClassName)\n className += ` ${customClassName}`;\n const inline = (_a = styleOptions.inline) !== null && _a !== void 0 ? _a : false;\n const elements = [];\n const countCeil = Math.ceil(count);\n for (let i = 0; i < countCeil; i++) {\n let thisStyle = style;\n if (countCeil > count && i === countCeil - 1) {\n // count is not an integer and we've reached the last iteration of\n // the loop, so add a \"fractional\" skeleton.\n //\n // For example, if count is 3.5, we've already added 3 full\n // skeletons, so now we add one more skeleton that is 0.5 times the\n // original width.\n const width = (_b = thisStyle.width) !== null && _b !== void 0 ? _b : '100%'; // 100% is the default since that's what's in the CSS\n const fractionalPart = count % 1;\n const fractionalWidth = typeof width === 'number'\n ? width * fractionalPart\n : `calc(${width} * ${fractionalPart})`;\n thisStyle = { ...thisStyle, width: fractionalWidth };\n }\n const skeletonSpan = (React.createElement(\"span\", { className: className, style: thisStyle, key: i }, \"\\u200C\"));\n if (inline) {\n elements.push(skeletonSpan);\n }\n else {\n // Without the <br />, the skeleton lines will all run together if\n // `width` is specified\n elements.push(React.createElement(React.Fragment, { key: i },\n skeletonSpan,\n React.createElement(\"br\", null)));\n }\n }\n return (React.createElement(\"span\", { className: containerClassName, \"data-testid\": containerTestId, \"aria-live\": \"polite\", \"aria-busy\": (_c = styleOptions.enableAnimation) !== null && _c !== void 0 ? _c : defaultEnableAnimation }, Wrapper\n ? elements.map((el, i) => React.createElement(Wrapper, { key: i }, el))\n : elements));\n}\n\nfunction SkeletonTheme({ children, ...styleOptions }) {\n return (React.createElement(SkeletonThemeContext.Provider, { value: styleOptions }, children));\n}\n\nexport { SkeletonTheme, Skeleton as default };\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React, { useState, useRef } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport LazyLoad from 'react-lazy-load'\nimport Skeleton from 'react-loading-skeleton'\nimport './CartItemThumbnail.scss'\n\nconst CartItemThumbnail = ({ onThumbnailClick, src, orderItemId, editDisabled, proofInProgress, proofWarning, proofFailedMessage = ''}) => {\n const [thumbnailLoading, setThumbnailLoading] = useState(true);\n const thumbnailRef = useRef();\n const [isImageVertical, setIsImageVertical] = useState(false)\n\n const defineImageOrientation = () => {\n const parentRect = thumbnailRef?.current?.closest('.product-image-container')?.getBoundingClientRect();\n if (parentRect && thumbnailRef?.current?.width/parentRect.width < thumbnailRef?.current?.height/parentRect.height) {\n setIsImageVertical(true)\n }\n setThumbnailLoading(false)\n }\n return (\n <div className=\"product-image-container\">\n {src && <LazyLoad className={`loadWrapper ${proofInProgress ? 'proof-in-progress' :''} ${proofWarning? 'proof-failed' :''}`}>\n <img\n style={{ height: `${isImageVertical ? '100%' : 'auto'}`, width: `${isImageVertical ? 'auto' : '100%'}` }}\n alt=\"product_image\"\n src={src}\n ref={thumbnailRef}\n onClick={(e) => !editDisabled && onThumbnailClick(e)}\n onLoad={() => defineImageOrientation()}\n className={`product-image ${thumbnailLoading && 'hide'} ${editDisabled && 'disabled'}`}\n />\n </LazyLoad>}\n {thumbnailLoading && src && (\n <Skeleton className=\"skeleton thumbnail-loader\" width={100} height={100} />\n )}\n </div>\n )\n}\n\nexport default observer(CartItemThumbnail)\n","import React from 'react'\nimport { Icon } from '$core-components'\nimport './CartItemAlert.scss'\n\nconst CartItemAlert = ({ message, className }) => (\n <div className={`delete-cart-item ${className}`}>\n <div className=\"content\">\n <div className=\"cart-delete-icon\">\n <Icon name=\"close_black.svg\" width=\"14px\" height=\"14px\" />\n </div>\n <div className=\"text\">{message}</div>\n </div>\n </div>\n);\n\nexport default CartItemAlert\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { Icon } from '$core-components'\nimport './InfoMessage.scss'\n\nconst InfoMessage = ({ type, messages }) => messages?.map?.(({ message }) => (\n <div className=\"cart-item-message\">\n <Icon name={`${type}.svg`} width=\"12px\" height=\"12px\"/>\n <p className={type}>{message}</p>\n </div>\n))\n\nexport default observer(InfoMessage)\n","import React from 'react';\nimport './ItemQuantity.scss'\n\nconst ItemQuantity = ({ numRecipients, quantityPerRecipient, quantity, product }) => {\n const totalQuantity = numRecipients && quantityPerRecipient ? numRecipients * quantityPerRecipient : quantity;\n\n return (\n <span className=\"item-quantity\">\n {\n product.unit.packSingular ? (\n <>\n <span className=\"total-quantity\">{totalQuantity}</span>\n <span className=\"quantity-units\">{quantity > 1 ? product.unit.packPlural : product.unit.packSingular}</span>\n <span className=\"bracket-open\">(</span>\n <span className=\"quantity\">{product.unit.quantity}</span>\n <span className=\"quantity-base\">{product.unit.quantity > 1 ? product.unit.plural : product.unit.singular}</span>\n <span className=\"dividing-slash\">/</span>\n <span className=\"pack-singular\">{product.unit.packSingular}</span>\n <span className=\"bracket-close\">)</span>\n </>\n ) : (\n totalQuantity > 1 ? (\n <>\n <span className=\"total-quantity\">{totalQuantity}</span>\n <span className=\"product-units-plural\">{product.unit.plural}</span>\n </>\n ) : (\n <>\n <span className=\"total-quantity\">{totalQuantity}</span>\n <span className=\"product-units-singular\">{product.unit.singular}</span>\n </>\n )\n )\n }\n </span>\n );\n};\n\nexport default ItemQuantity;\n","import React, {useRef, useState} from 'react'\nimport {observer} from 'mobx-react-lite'\nimport { useClickOutside } from '$themehooks'\nimport { t } from '$themelocalization'\nimport './ProductProperties.scss'\nimport './IncludedProductsDetails.scss'\n\n\nconst IncludedProductsDetails = ({includedProducts}) => {\n\n const [isDetailseOpened, setIsDetailseOpened] = useState(false)\n const details = useRef(null)\n\n useClickOutside(details, () => setIsDetailseOpened(false))\n\n const getProductQuantity = (item) => {\n let productQuantity = item.Quantity\n if (productQuantity > 1) {\n productQuantity += ` ${item.Product.Unit.PackType ? item.Product.Unit.PackType.PluralName : item.Product.Unit.ItemType.PluralName}`\n } else {\n productQuantity += ` ${item.Product.Unit.PackType ? item.Product.Unit.PackType.Name : item.Product.Unit.ItemType.Name}`\n }\n if (item.Product.Unit.PackType) {\n productQuantity += ` (${item.Product.Unit.ItemQuantity} ${item.Product.Unit.ItemType.PluralName} / ${item.Product.Unit.PackType.Name})`\n }\n return productQuantity\n }\n const titleClickHandler = (e) => {\n setIsDetailseOpened(!isDetailseOpened)\n e.stopPropagation()\n }\n\n return (\n <>\n {\n includedProducts.length > 0 && <div className=\"included-products-details\">\n <span className=\"mobile title\" onClick={titleClickHandler}>{t('Cart.Item.IncludedProducts', { count: includedProducts.length })}</span>\n <span className=\"desktop title\"> {t('Cart.Item.IncludedProducts', { count: includedProducts.length })}</span>\n <div ref={details} className={`details ${isDetailseOpened ? 'show' : ''}`}>\n <div className={`scroll-wrapper ${includedProducts.length > 3 ? 'scroll-able' : ''}`}>\n {includedProducts.map((item, index) =>\n <div className=\"product-detail\" key={index}>\n <div className=\"product-name\">{item.Product.Name}</div>\n <div className=\"product-quantity\">{getProductQuantity(item)}</div>\n </div>\n )}\n </div>\n </div>\n </div>\n }\n </>\n )\n}\n\nexport default observer(IncludedProductsDetails)\n","import React, { useState } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport { LoadingDots } from '$core-components'\nimport CartCheckbox from '../CartList/CartCheckbox'\nimport CartErrorModel from '../model/CartErrorModel'\nimport DisplayPrice from './DisplayPrice'\nimport CartItemActions from './CartItemActions'\nimport ProductName from './ProductName'\nimport ProductProperties from './ProductProperties'\nimport CartItemThumbnail from './CartItemThumbnail'\nimport CartItemAlert from './CartItemAlert'\nimport InfoMessage from './InfoMessage'\nimport './index.scss'\nimport { Nickname } from './Nickname'\nimport ItemQuantity from './ItemQuantity'\nimport IncludedProductsDetails from \"./IncludedProductsDetails\";\n\nconst Price = observer(({ currencyState, price, hasPricing }) =>\n price\n ? (<DisplayPrice\n price={price}\n hasPricing={hasPricing}\n isHighlighted\n currencyState={currencyState}\n />)\n : (\n <LoadingDots className=\"loading-dots\"/>\n )\n)\n\nconst CartItem = ({\n currencyState,\n item,\n showSelection = true,\n}) => {\n const {\n orderItemId,\n checked,\n quantity,\n thumbnailUrl,\n quantityPerRecipient,\n numRecipients,\n product,\n errors,\n warnings,\n price,\n _listModel,\n _cartModel,\n } = item\n const [alertMessage, setAlertMessage] = useState('')\n\n const onDelete = () => {\n setAlertMessage(t('Cart.CartItemDeleted'))\n item.delete()\n }\n\n const handleTransitionEnd = (e) => {\n if (e.target.classList.contains('cart-ng-confirmation-dialog-backdrop') && e.target.classList.contains('fade') && !e.target.classList.contains('show')) {\n onDelete()\n }\n }\n\n const editDisabled = item == null || errors.some(({ errorType }) => errorType === CartErrorModel.CART_ERROR_TYPES.ProductNotAvailable)\n const itemInListMode = !_listModel.isUnassigned && _cartModel.isListsMode\n\n return (\n <div\n className={`item-box-container ${_listModel.isOrderEdit ? 'item-order-edit' : ''} ${alertMessage ? 'close-item' : ''}`}\n onTransitionEnd={handleTransitionEnd}>\n <CartItemAlert message={alertMessage} className={alertMessage ? 'move-right' : ''}/>\n <div className={`item-box ${alertMessage ? 'move-right' : ''} ${showSelection ? 'has-selection' : ''} `}>\n <div className=\"mobile-title-container\">\n <div className=\"mobile-product-name\">\n {showSelection && (\n <div className=\"cart-item-checkbox-cell\">\n <CartCheckbox\n id={orderItemId}\n name={orderItemId}\n className=\"item-checkbox\"\n checked={checked}\n onSelect={() => item.toggleSelect()}\n />\n </div>\n )}\n <ProductName item={item}/>\n </div>\n <div className=\"mobile-nickname\">\n {item.nickname && <Nickname\n nickname={item.nickname}\n setNickname={(newNickname) => item.updateNickname(newNickname)}\n />}\n </div>\n </div>\n {showSelection && (\n <div className=\"cart-item-checkbox-cell\">\n <CartCheckbox\n id={orderItemId}\n name={orderItemId}\n className=\"item-checkbox\"\n checked={checked}\n onSelect={() => item.toggleSelect()}\n />\n </div>\n )}\n <CartItemThumbnail src={thumbnailUrl} onThumbnailClick={() => item.edit()} orderItemId={orderItemId}\n editDisabled={editDisabled} proofInProgress={item.proof.Status === 1}\n proofWarning={item.proof.Status === 3}\n proofFailedMessage={warnings.find(warning => warning.errorType === 997)?.message}\n />\n <div className=\"item-description\">\n <ProductName item={item}/>\n <Price\n price={price}\n hasPricing={product.hasPricing}\n currencyState={currencyState}\n />\n <IncludedProductsDetails includedProducts={item.subItems}/>\n <ProductProperties product={product} item={item}/>\n <div className=\"total\"><span className=\"total-label\">{t('Cart.Item.Total')}:</span>\n <ItemQuantity {...{product, numRecipients, quantityPerRecipient, quantity}} />\n </div>\n </div>\n <div className=\"item-actions\">\n <Price\n price={price}\n currencyState={currencyState}\n hasPricing={product.hasPricing}\n />\n <div className=\"total\"><span className=\"total-label\">{t('Cart.Item.Total')}:</span>\n <ItemQuantity {...{ product, numRecipients, quantityPerRecipient, quantity }} />\n </div>\n <CartItemActions {...{ editDisabled, item, setAlertMessage }}\n />\n </div>\n {errors?.length || warnings?.length ? <div className={`cart-item-warning-error-messages ${itemInListMode ? 'warning-in-list-mode':''}`}>\n {errors?.length ? <InfoMessage type=\"error\" messages={errors}/> : null}\n {warnings?.length ? <InfoMessage type=\"warning\" messages={warnings}/> : null}\n </div> : null}\n </div>\n </div>\n )\n}\n\nexport default observer(CartItem)\n","import React, { useState } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport CartSummaryContent from './CartSummaryContent'\nimport CartSummaryButton from './CartSummaryButton'\nimport { CartSummaryError } from './CartSummaryError'\nimport CartSummaryExportSuccess from './CartSummaryExportSuccess'\nimport AssignToListModal, { ASSIGN_LIST_TYPE } from '../CartList/AssignToListModal'\nimport './InListsCartSummary.scss'\nimport CartSummaryExportError from './CartSummaryExportError'\nimport CartListModel from '../model/CartListModel'\n\nconst InListCartSummary = ({\n currencyState,\n model,\n loading,\n list\n}) => {\n const [showAssignToListModal, setShowAssignToListModal] = useState(false)\n\n const handleAssignToListSave = async (value) => {\n setShowAssignToListModal(false)\n if (value.listType === ASSIGN_LIST_TYPE.EXISTING) {\n await list.reAssign(value.value, true)\n } else if (value.listType === ASSIGN_LIST_TYPE.NEW) {\n await list.reAssignToNew(value.value, true)\n }\n }\n\n const isEmptyListClass = list?.items?.length === 0 ? 'in-list-cart-summary-empty-list': ''\n const assignToItemCount = () => {\n if (model?.isListsMode && model?.openedList?.id === CartListModel.CART_LIST_TYPES.UNASSIGNED) {\n return model?.summary?.selectedItemsCount\n }\n return 0\n }\n\n return (\n <div className={`in-lists-cart-summary ${isEmptyListClass}`}>\n <CartSummaryContent\n currencyState={currencyState}\n model={model}\n loading={loading}\n />\n <CartSummaryButton model={model} loading={loading} setShowAssignToListModal={setShowAssignToListModal}/>\n {model?.openedList?.exportSuccess\n && <CartSummaryExportSuccess list={list}/>}\n {currencyState.isSecondaryCurrency && <CartSummaryError message={t('Cart.Summary.Warning.PaymentInfo')} />}\n {model?.openedList?.exportError && <CartSummaryExportError model={model} message={t('Cart.Summary.ExportError')} />}\n {showAssignToListModal &&\n <AssignToListModal\n onClose={() => setShowAssignToListModal(false)}\n onSave={handleAssignToListSave}\n model={model}\n list={list}\n count={assignToItemCount()}\n />\n }\n </div>\n )\n}\n\nexport default observer(InListCartSummary)\n","import React, { useEffect, useState, useRef } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { debounce } from 'throttle-debounce'\nimport { t } from '$themelocalization'\nimport CartListModel from '../model/CartListModel'\nimport ListBar from './ListBar'\nimport CartItem from '../CartItem'\nimport { CART_MODE, proofThumbnailUpdater } from '$themeservices'\nimport InListsCartSummary from '../CartSummary/InListsCartSummary'\n\nconst getItemsCountForLoad = () => {\n const cartItemHeight = 165\n return Math.floor(window.innerHeight / cartItemHeight)\n}\n\nconst getListTitle = (list) => {\n if (list.id === CartListModel.CART_LIST_TYPES.DEFAULT && (list._cartModel.hasEditOrApproval || list._cartModel.hasReorder)) return t('Cart.CartSectionTitle')\n return list.title\n}\n\nconst List = ({ model, list, currencyState }) => {\n const [loadedItems, setLoadedItems] = useState(list?.items.slice(0, getItemsCountForLoad()))\n const [listOpen, setListOpen] = useState(model.openedList?.id === list.id || !model.isListsMode)\n const listContentRef = useRef(null)\n const showSummary = model.isListsMode\n const isEmptyList = list.itemsCount === 0 && (model.isListsMode || model.isSingleListMode)\n\n useEffect(() => {\n if (list.items) {\n setLoadedItems(list.items)\n const itemsToProofCheck = list.items.filter(item => item.proof.Status === 1).map(item => item.orderItemId)\n if (itemsToProofCheck.length) {\n proofThumbnailUpdater.run(itemsToProofCheck)\n }\n setTimeout(() => setMaxHeight(), 0)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [list.items])\n\n const setMaxHeight = () => {\n if (model.isListsMode && listContentRef.current) {\n if (model.openedList?.id === list.id) {\n setListOpen(true)\n listContentRef.current.style.maxHeight = listContentRef.current.scrollHeight + 'px'\n } else {\n setListOpen(false)\n listContentRef.current.style.maxHeight = '0px'\n }\n }\n }\n\n\n useEffect(() => {\n const setMaxHeightDebounced = debounce(100, setMaxHeight)\n if (model.isListsMode) {\n window.addEventListener('resize', setMaxHeightDebounced)\n const contentObserver = new MutationObserver(setMaxHeightDebounced)\n contentObserver.observe(listContentRef.current, { childList: true, subtree: true, attributes: true })\n return () => {\n window.removeEventListener('resize', setMaxHeightDebounced)\n contentObserver.disconnect()\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n if (model._cartMode === CART_MODE.WishList && list.items.length === 0) return null\n\n const onTitleClick = () => {\n if (!model.isListsMode) {\n return\n }\n model.openList(list.id === model.openedList?.id ? null : list.id)\n }\n\n const getListClasses = () => {\n if (model?.isListsMode) {\n const classes = ['cart-lists-mode']\n if (list.id === CartListModel.CART_LIST_TYPES.UNASSIGNED){\n classes.push('unassigned-list')\n }\n if (list.id === model?.openedList?.id) {\n classes.push('list-is-open')\n }\n if (isEmptyList) {\n classes.push('empty-list')\n }\n return classes.join(' ')\n }\n if (list.id === CartListModel.CART_LIST_TYPES.DEFAULT || CartListModel.CART_LIST_TYPES.ORDER_APPROVAL) {\n return 'list-is-open'\n }\n\n return ''\n }\n\n const getListContentClasses = () => {\n const classes = ['list-content']\n if (!listOpen) {\n classes.push('closed-list')\n }\n return classes.join(' ')\n }\n\n const onTransitionEnd = (e) => {\n if (e.target !== listContentRef.current) return\n setMaxHeight()\n }\n\n return (\n <div className={getListClasses()}>\n <ListBar\n key={`list-bar-${list.id}`}\n model={model}\n list={list}\n emptyAllText={list.emptyAllText}\n listTitle={getListTitle(list)}\n onTitleClick={model.isListsMode ? onTitleClick : null}\n />\n <div className={getListContentClasses()} ref={listContentRef} onTransitionEnd={onTransitionEnd}>\n {\n isEmptyList\n ? <div className=\"cart-lists-empty-list\">{t('Cart.EmptyListText')}</div>\n : loadedItems.map((item) => (\n <CartItem\n key={item.orderItemId}\n currencyState={currencyState}\n item={item}\n showSelection={model.isListsMode ?\n list.isUnassigned :\n (list.isDefault || list.isOrderApproval || list.isOrderEdit || list.isReorder)\n }\n />\n ))\n }\n {showSummary && <InListsCartSummary\n currencyState={currencyState}\n model={model ?? null}\n loading={!model || model?.summary?.loading}\n list={list}\n />}\n </div>\n </div>\n )\n}\n\nexport default observer(List)\n","import React, { useRef, useState } from 'react'\nimport { NavHashLink } from 'react-router-hash-link'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport { Icon, Dropdown } from '$core-components'\nimport List from './List'\nimport CartListModel from '../model/CartListModel'\nimport { Slot } from '$core-components'\nimport './List.scss'\nimport themeVariables from '$styles/_theme.scss'\nimport CartModel from '../model/CartModel'\n\nconst CartList = ({ model, currencyState }) => {\n const sortDropDownItems = [\n { name: t('Cart.Sorting.SortByDefault'), value: CartModel.CART_SORT_BY.DATE, icon: 'check.svg' },\n { name: t('Cart.Sorting.NameAscending'), value: CartModel.CART_SORT_BY.NAME_ASC, icon: 'check.svg' },\n { name: t('Cart.Sorting.NameDescending'), value: CartModel.CART_SORT_BY.NAME_DESC, icon: 'check.svg' },\n ]\n\n const navHashLinkRef = useRef()\n const headerHeightDesktop = getComputedStyle(document.documentElement).getPropertyValue('--header-height-desktop')\n const [selectedSort, setSelectedSort] = useState(sortDropDownItems.find(item => item.value === model.sorting))\n\n const getHeaderOffset = () => {\n return window.innerWidth < parseInt(themeVariables.lg) && headerHeightDesktop ? 0 : parseInt(headerHeightDesktop)\n }\n\n const scrollWidthOffset = (el) => {\n window.scrollTo({ top: el.getBoundingClientRect().top + window.scrollY - getHeaderOffset(), behavior: 'smooth' })\n }\n\n const setSorting = (newSorting) => {\n model.setSorting(newSorting.value)\n setSelectedSort(newSorting)\n }\n\n if (!model) return null\n\n return (\n <div className={`list-container ${model.isListsMode ? 'cart-lists-mode' : ''}`} id=\"cart-list\">\n <div className=\"cart-header\">\n <div className=\"list-title\">\n {t('Cart.ShoppingCartTitle')} {model.affectPricingItems.length && model.isWishListMode ? `(${model.affectPricingItems.length})` : null}\n </div>\n {\n model.lists.some((list) => list.id === CartListModel.CART_LIST_TYPES.WISH_LIST) &&\n (\n <NavHashLink ref={navHashLinkRef} to={`#wish-list-${CartListModel.CART_LIST_TYPES.WISH_LIST}`}\n scroll={el => scrollWidthOffset(el)}>\n <Icon name=\"go_to_wish_list.svg\" width=\"20px\" height=\"20px\" title={t('Cart.GoToWishList')}/>\n </NavHashLink>\n )\n }\n </div>\n {model.isListsMode && <div className=\"sort-list-container\">\n <div className=\"sort-list-inner-container\">\n <div className=\"sort-list-sort-by\">\n {t('Cart.Sorting.SortBy')}\n </div>\n <Dropdown items={sortDropDownItems} onChange={(item) => {setSorting(item)}} selectedValue={selectedSort}/>\n </div>\n </div>}\n <Slot name=\"cart_under_title\" data={model}/>\n {\n model.shoppingCartText &&\n <div className=\"list-text\" dangerouslySetInnerHTML={{ __html: model.shoppingCartText }}/>\n }\n {\n model.affectPricingItems.length === 0 && model.isWishListMode &&\n <div className=\"list-empty\">\n <div className=\"list-empty-title\">{t('Cart.Wishlist.EmptyCartListText')}</div>\n <div className=\"list-empty-divider\"/>\n </div>\n }\n {\n model.affectPricingLists.map((list) => (\n <List\n key={`list-${list.originalOrderFriendlyId ?? list.id}`}\n model={model}\n list={list}\n currencyState={currencyState}\n />\n ))\n }\n </div>\n )\n}\n\nexport default observer(CartList)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport ListBar from './ListBar'\nimport CartItem from '../CartItem'\nimport CartListModel from '../model/CartListModel'\nimport './List.scss'\nimport './WishList.scss'\n\nconst WishList = ({ model, list }) => (\n <div className=\"list-container wish-list\" id={`wish-list-${CartListModel.CART_LIST_TYPES.WISH_LIST}`}>\n <div className={`cart-header ${list?.items.length === 0 ? 'list-is-empty' : ''}`}>\n <div className=\"list-title\">\n {list.title} ({list.items.length})\n </div>\n </div>\n {list.items.length === 0 ? (\n <div className=\"list-empty\">\n <div className=\"list-empty-title\">{t('Cart.Wishlist.EmptyWishListText')}</div>\n </div>\n ) : (\n <>\n <ListBar\n key={`list-bar-${list.id}`}\n model={model}\n list={list}\n listTitle={t('Cart.Wishlist.ListBarTitle')}\n emptyAllText={t('Cart.Wishlist.EmptyButtonText')}\n sectionTitle={t('Cart.Wishlist.ListBarTitle')}\n />\n <div>\n {list.items.filter((item) => item.listId === list.id).map((item) => (\n <CartItem\n key={item.orderItemId}\n item={item}\n showSelection={false}\n />\n )\n )}\n </div>\n </>\n )}\n </div>\n)\n\nexport default observer(WishList)\n","import React from 'react'\nimport Skeleton from 'react-loading-skeleton'\n\nimport 'react-loading-skeleton/dist/skeleton.css'\nimport './CartItemSkeleton.scss'\n\nexport const CartItemSkeleton = () => (\n <div className=\"cart-item-skeleton\">\n <Skeleton className=\"skeleton thumbnail\"/>\n\n <div className=\"description\">\n <Skeleton className=\"skeleton name\"/>\n <Skeleton className=\"skeleton description-1\"/>\n <Skeleton className=\"skeleton description-2\"/>\n <Skeleton className=\"skeleton description-3\"/>\n </div>\n </div>\n)\n\n","import React from 'react'\nimport { t } from '$themelocalization'\nimport ListBar from './ListBar'\nimport { CartItemSkeleton } from '../CartItem/CartItemSkeleton'\nimport './List.scss'\n\nconst ListContainerSkeleton = ({ itemsCount, title }) => {\n return (\n <div className=\"list-container\">\n <div className=\"cart-list-container\">\n <div className=\"cart-header\">\n <div className=\"list-title\">\n {`${title} `}\n </div>\n </div>\n <ListBar\n list={{ loading: true, items: new Array(itemsCount) , itemsCount}}\n emptyAllText={t('Cart.EmptyCartButton')}\n />\n {(new Array(itemsCount)).fill(1).map((_, index) => {\n return <CartItemSkeleton key={`item-skeleton-${index}`} />\n })}\n </div>\n </div>\n )\n}\n\nexport default ListContainerSkeleton\n","import React from 'react'\nimport { Modal, ModalBody } from 'reactstrap'\nimport { t } from '$themelocalization'\nimport { Icon } from '$core-components'\nimport './RevertModificationDialog.scss'\n\nconst RevertModificationDialog = ({ closeDialog }) => (\n <Modal isOpen={true} className=\"cart-ng-revert-modification-dialog\"\n modalClassName=\"cart-ng-revert-modification-dialog-container\"\n backdropClassName=\"cart-ng-revert-modification-modal-backdrop\"\n wrapClassName=\"cart-ng-revert-modification-progress-dialog-wrapper\">\n\n <button className=\"cart-ng-revert-modification-process-close\" onClick={() => closeDialog()}>\n <Icon name=\"close_black.svg\" width=\"14px\" height=\"14px\"/>\n </button>\n\n <ModalBody className=\"dialog-content\">\n <div className=\"cart-ng-revert-modification-success\">\n <Icon name=\"success.svg\" height=\"30px\" width=\"33px\"\n wrapperClassName=\"cart-ng-revert-modification-success-icon\"/>\n <div className=\"dialog-text\">\n {t('Cart.OrderApprovalRevertMessage')}\n </div>\n </div>\n </ModalBody>\n </Modal>\n)\n\nexport default RevertModificationDialog\n\n","import React from 'react'\nimport { Modal, ModalBody } from 'reactstrap'\nimport { t } from '$themelocalization'\nimport { LoadingDots } from '$core-components'\nimport './LoadingDots.scss'\n\nconst LoadingDialog = ({ open }) => {\n return (\n <Modal isOpen={open} className=\"cart-ng-loading-dialog\" modalClassName=\"loading-dialog-container\" backdropClassName=\"loading-dialog-modal-backdrop\" wrapClassName=\"cart-ng-loading-dialog-wrapper\">\n <ModalBody className=\"dialog-content\">\n <div className=\"hour-glass-icon\">\n <svg width=\"44px\" height=\"70px\" viewBox=\"0 0 44 70\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" >\n <title>Icon button/20px/process</title>\n <g id=\"Icon-button/20px/process\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\" opacity=\"0.588438488\">\n <g id=\"hourglass\" transform=\"translate(0.000000, 0.000000)\" fill=\"#000000\" fillRule=\"nonzero\">\n <path d=\"M40.8332422,0 L3.5,0 C1.57035156,0 0,1.57035156 0,3.5 C0,5.42964844 1.57035156,7 3.5,7 L40.8333789,7 C42.7630273,7 44.3333789,5.42964844 44.3333789,3.5 C44.3333789,1.57035156 42.7628906,0 40.8332422,0 Z M40.8332422,4.66662109 L3.5,4.66662109 C2.85714844,4.66662109 2.33337891,4.14394531 2.33337891,3.5 C2.33337891,2.85605469 2.85714844,2.33337891 3.5,2.33337891 L40.8333789,2.33337891 C41.4762305,2.33337891 42,2.85605469 42,3.5 C42,4.14394531 41.4760938,4.66662109 40.8332422,4.66662109 Z\" id=\"Shape\"></path>\n <path d=\"M40.8332422,63 L3.5,63 C1.57035156,63 0,64.5703516 0,66.5 C0,68.4296484 1.57035156,70 3.5,70 L40.8333789,70 C42.7630273,70 44.3333789,68.4296484 44.3333789,66.5 C44.3333789,64.5703516 42.7628906,63 40.8332422,63 Z M40.8332422,67.6666211 L3.5,67.6666211 C2.85714844,67.6666211 2.33337891,67.1439453 2.33337891,66.5 C2.33337891,65.8560547 2.85714844,65.3333789 3.5,65.3333789 L40.8333789,65.3333789 C41.4762305,65.3333789 42,65.8560547 42,66.5 C42,67.1439453 41.4760938,67.6666211 40.8332422,67.6666211 Z\" id=\"Shape\"></path>\n <path d=\"M30.4803516,30.6692969 C36.4046484,24.745 39.6666211,16.8687695 39.6666211,8.49214844 L39.6666211,5.83337891 C39.6666211,5.18820313 39.1439453,4.66675781 38.5,4.66675781 L5.83324219,4.66675781 C5.18929688,4.66675781 4.66662109,5.18820313 4.66662109,5.83337891 L4.66662109,8.49214844 C4.66662109,16.87 7.92859375,24.745 13.8517969,30.6692969 L15.0242969,31.8417969 C15.8560938,32.6735938 16.3332422,33.8239453 16.3332422,35 C16.3332422,36.1760547 15.8560938,37.3264062 15.0253906,38.1582031 L13.8528906,39.3307031 C7.92859375,45.255 4.66662109,53.13 4.66662109,61.5078516 L4.66662109,64.1666211 C4.66662109,64.8117969 5.18929688,65.3332422 5.83324219,65.3332422 L38.4998633,65.3332422 C39.1438086,65.3332422 39.6666211,64.8117969 39.6666211,64.1666211 L39.6666211,61.5078516 C39.6666211,53.1312305 36.4045117,45.255 30.4802148,39.3307031 L29.3077148,38.1582031 C28.4641602,37.3146484 27.9998633,36.1935547 27.9998633,35 C27.9998633,33.8064453 28.4641602,32.6853516 29.3077148,31.8417969 L30.4803516,30.6692969 Z M27.6580664,30.1921484 C26.3735938,31.4755273 25.6666211,33.1823242 25.6666211,35 C25.6666211,36.8176758 26.3735938,38.5244727 27.6580664,39.8078516 L28.8305664,40.9803516 C34.3139453,46.4637305 37.3333789,53.7541211 37.3333789,61.5078516 L37.3333789,63 L7,63 L7,61.5078516 C7,53.7530273 10.0192969,46.4637305 15.5014453,40.9803516 L16.6739453,39.8078516 C17.9596484,38.5244727 18.6666211,36.8164453 18.6666211,35 C18.6666211,33.1835547 17.9596484,31.4755273 16.6751758,30.1921484 L15.5026758,29.0196484 C10.0192969,23.5362695 7,16.2457422 7,8.49214844 L7,7 L37.3333789,7 L37.3333789,8.49214844 C37.3333789,16.2458789 34.314082,23.5362695 28.8307031,29.0196484 L27.6580664,30.1921484 Z\" id=\"Shape\"></path>\n <path d=\"M32.0260938,19.6548242 C31.9082422,19.3585547 31.5069727,18.6666211 30.3332422,18.6666211 C24.2712695,18.6666211 21.5703906,17.3680664 20.4993359,16.593418 C19.163457,15.6262695 17.4496875,15.3730664 15.9107813,15.9178906 C14.4420117,16.4370117 13.3663086,17.5920117 12.9614844,19.0853906 C12.8564844,19.4739453 12.8377539,19.725918 12.8377539,19.725918 C12.8202539,19.9557422 12.8704297,20.2042969 12.9836328,20.4060938 C14.0768359,22.3439453 15.3379297,24.3878906 17.1532813,26.2032422 L18.3245508,27.3757422 C20.0500781,29.0989453 20.9997266,31.3925391 20.9997266,33.8332422 C20.9997266,34.478418 21.5224023,34.9998633 22.1663477,34.9998633 C22.810293,34.9998633 23.3329688,34.478418 23.3329688,33.8332422 C23.3329688,31.3937695 24.2826172,29.1000391 26.0069141,27.3757422 L27.1806445,26.2020117 C27.4688477,25.9150391 27.8444141,25.5603906 28.2574414,25.1730664 C31.2735938,22.3369727 32.5417969,20.9567969 32.0260938,19.6548242 Z M26.6571484,23.4733789 C26.2255273,23.8805273 25.8310938,24.251582 25.5301758,24.5525 L24.3564453,25.7262305 C23.45,26.631582 22.715,27.6628516 22.1653906,28.7805273 C21.615918,27.6628516 20.880918,26.631582 19.9743359,25.7262305 L18.8029297,24.5537305 C17.3702539,23.1199609 16.3214844,21.5414063 15.2306055,19.6385547 C15.5188086,18.6644336 16.2654297,18.2676758 16.6889844,18.1171484 C17.5032813,17.8289453 18.4168359,17.9655273 19.1307813,18.4835547 C20.6170508,19.5592578 23.5477539,20.8273242 29.1618359,20.9837305 C28.440918,21.7957031 27.3092969,22.8608789 26.6571484,23.4733789 Z\" id=\"Shape\"></path>\n <path d=\"M34.9194727,59.4089453 C34.6266211,55.6266211 33.11,54.0562695 31.3553516,52.2362695 C31.1185547,51.9900391 30.8712305,51.7346484 30.6180273,51.4639453 C29.1526758,49.8982422 27.0830273,49 24.9375,49 L19.3946484,49 C17.2503516,49 15.1794727,49.8983789 13.7141211,51.4639453 C13.460918,51.7346484 13.2148242,51.9889453 12.9778906,52.2351758 C11.2220117,54.0551758 9.70539063,55.6266211 9.41376953,59.4101758 C9.38806641,59.7344727 9.50003906,60.0541211 9.72056641,60.2933789 C9.9421875,60.5314063 10.2514453,60.6667578 10.5768359,60.6667578 L33.7561328,60.6667578 C34.0804297,60.6667578 34.3907813,60.5314063 34.6124023,60.2922852 C34.8330664,60.0530273 34.9439453,59.7321484 34.9194727,59.4089453 Z M11.9057422,58.3333789 C12.3012695,56.2964063 13.2439453,55.3210547 14.6578906,53.8557031 C14.9028906,53.6014063 15.1571875,53.336582 15.4185938,53.0576758 C16.4441211,51.9610547 17.8930664,51.3333789 19.3946484,51.3333789 L24.9375,51.3333789 C26.4401758,51.3333789 27.8891211,51.9621484 28.9146484,53.056582 C29.1771484,53.3389063 29.4314453,53.6014063 29.6776758,53.8569336 C31.0905273,55.3222852 32.0319727,56.2976367 32.4287305,58.3333789 L11.9057422,58.3333789 Z\" id=\"Shape\"></path>\n <path d=\"M22.1316211,37.3333789 C21.4876758,37.3333789 20.965,37.8548242 20.965,38.5 L20.965,39.6666211 C20.965,40.3117969 21.4876758,40.8332422 22.1316211,40.8332422 C22.7755664,40.8332422 23.2982422,40.3117969 23.2982422,39.6666211 L23.2982422,38.5 C23.2982422,37.8548242 22.7755664,37.3333789 22.1316211,37.3333789 Z\" id=\"Path\"></path>\n <path d=\"M22.1316211,43.1666211 C21.4876758,43.1666211 20.965,43.6880664 20.965,44.3332422 L20.965,45.4998633 C20.965,46.1450391 21.4876758,46.6664844 22.1316211,46.6664844 C22.7755664,46.6664844 23.2982422,46.1450391 23.2982422,45.4998633 L23.2982422,44.3332422 C23.2982422,43.6882031 22.7755664,43.1666211 22.1316211,43.1666211 Z\" id=\"Path\"></path>\n </g>\n </g>\n </svg>\n </div>\n <div className=\"dialog-text\">\n {t('Cart.Dialog.Loading.LoadingDialogText')}\n </div>\n <div>\n <LoadingDots className=\"loading-dots\"/>\n </div>\n </ModalBody>\n </Modal>\n )\n}\n\nexport default LoadingDialog\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { Modal, ModalBody } from 'reactstrap'\nimport { t,mt } from '$themelocalization'\nimport { LoadingDots, Icon } from '$core-components'\nimport './DuplicateProgressDialog.scss'\nimport {activityMonitor, ActivityStatus, ActivityType } from '$themeservices'\n\nconst CLOSE_DIALOG_TIMEOUT = 2000\n\nconst DuplicateProgressDialog = ({ model }) => {\n\n let showDuplicateDialog = false\n let hasFailed = false\n let hasPartialFailed = false\n let hasSuccess = false\n let selectedActivity = null\n\n const closeDialog = (activityId) => {\n activityMonitor.clearActivities()\n model.reloadAfterDuplicate(activityId)\n }\n\n for (const activity in model?.activities) {\n selectedActivity = model.activities[activity].activity\n showDuplicateDialog = !!selectedActivity?.Status\n\n hasPartialFailed = selectedActivity?.Status === ActivityStatus.PartiallyFailed\n hasFailed = selectedActivity?.Status === ActivityStatus.Failed || hasPartialFailed\n hasSuccess = selectedActivity?.Status === ActivityStatus.Success\n\n if (hasSuccess) {\n break\n }\n }\n\n if (hasSuccess) {\n setTimeout(() => closeDialog(selectedActivity?.ActivityID), CLOSE_DIALOG_TIMEOUT)\n }\n\n return (\n <Modal isOpen={showDuplicateDialog} className=\"cart-ng-duplicate-progress-dialog\"\n modalClassName=\"duplicate-progress-dialog-container\" backdropClassName=\"duplicate-progress-modal-backdrop\"\n wrapClassName=\"cart-ng-duplicate-progress-dialog-wrapper\">\n {hasFailed &&\n <button className=\"cart-ng-duplicate-process-close\" onClick={() => closeDialog(selectedActivity?.ActivityID)}>\n <Icon name=\"close_black.svg\" width=\"14px\" height=\"14px\"/>\n </button>\n }\n <ModalBody className=\"dialog-content\">\n <Progress selectedActivity={selectedActivity}/>\n <Success selectedActivity={selectedActivity}/>\n <Failed selectedActivity={selectedActivity}/>\n </ModalBody>\n </Modal>\n )\n}\n\nexport default observer(DuplicateProgressDialog)\n\nfunction Progress ({ selectedActivity }) {\n if (selectedActivity?.Status !== ActivityStatus.Progress) {\n return null\n }\n const typeToMessage = {\n [ActivityType.OrderItemDuplication]: 'Cart.Dialog.DuplicateInProgress.DuplicatingItemPleaseWait',\n [ActivityType.KitOrderItemDuplication]: 'Cart.Dialog.DuplicateInProgress.DuplicatingKitItemProgress',\n [ActivityType.CartListDuplication]: 'Cart.Dialog.DuplicateInProgress.DuplicatingKitItemProgress',\n [ActivityType.OrderReordering]: 'Cart.Dialog.DuplicateInProgress.ReorderingOrderProgress',\n [ActivityType.KitOrderItemReordering]: 'Cart.Dialog.DuplicateInProgress.ReorderingOrderProgress',\n [ActivityType.OrderItemReordering]: 'Cart.Dialog.DuplicateInProgress.DuplicatingItemPleaseWait'\n }\n\n if (!typeToMessage[selectedActivity?.Type]) {\n return null\n }\n return (\n <div className=\"cart-ng-duplicate-progress\">\n <HourGlass/>\n <div className=\"dialog-text\">\n {mt(typeToMessage[selectedActivity?.Type], {\n name: selectedActivity?.Name,\n num: selectedActivity?.Progress || 1,\n total: selectedActivity?.Total\n })}\n </div>\n <div>\n <LoadingDots className=\"loading-dots\"/>\n </div>\n </div>\n )\n}\n\n\nfunction Success ({ selectedActivity }) {\n if (selectedActivity?.Status !== ActivityStatus.Success) {\n return null\n }\n\n const typeToMessage = {\n [ActivityType.OrderItemDuplication]: ['Cart.Dialog.DuplicateSuccess.Duplicating','Cart.Dialog.DuplicateSuccess.DuplicatedSuccessfully' ],\n [ActivityType.KitOrderItemDuplication]: ['Cart.Dialog.DuplicateSuccess.Duplicating','Cart.Dialog.DuplicateSuccess.DuplicatedSuccessfully'],\n [ActivityType.CartListDuplication]: ['Cart.Dialog.DuplicateSuccess.Duplicating','Cart.Dialog.DuplicateSuccess.DuplicatedSuccessfully'],\n [ActivityType.KitOrderItemReordering]: ['Cart.Dialog.DuplicateSuccess.ReorderingOrderCompleted','Cart.Dialog.DuplicateSuccess.ReorderingOrderSuccessfully'],\n [ActivityType.OrderReordering]: ['Cart.Dialog.DuplicateSuccess.ReorderingOrderCompleted', 'Cart.Dialog.DuplicateSuccess.ReorderingOrderSuccessfully'],\n [ActivityType.OrderItemReordering]: ['Cart.Dialog.DuplicateSuccess.ReorderingOrderCompleted', 'Cart.Dialog.DuplicateSuccess.ReorderingOrderSuccessfully']\n }\n\n return <div className=\"cart-ng-duplicate-success\">\n <Icon name=\"success.svg\" height=\"30px\" width=\"33px\" wrapperClassName=\"cart-ng-duplicate-success-icon\"/>\n <div className=\"dialog-text\">\n <div>{mt(typeToMessage[selectedActivity?.Type][0], { name: selectedActivity?.Name })}</div>\n <div className=\"success-text\"> {mt(typeToMessage[selectedActivity?.Type][1], { name: selectedActivity?.Name })}</div>\n </div>\n </div>\n}\n\n\nfunction Failed ({ selectedActivity }) {\n if (![ActivityStatus.Failed,ActivityStatus.PartiallyFailed].includes(selectedActivity?.Status)){\n return null\n }\n\n let hasPartialFailed = selectedActivity?.Status === ActivityStatus.PartiallyFailed\n const typeToMessage = {\n [ActivityType.OrderItemDuplication]: ['Cart.Dialog.DuplicateSuccess.Duplicating','Cart.Dialog.DuplicateFailed.DuplicationFailed'],\n [ActivityType.KitOrderItemDuplication]: ['Cart.Dialog.DuplicateSuccess.Duplicating', 'Cart.Dialog.DuplicateFailed.DuplicationFailed'],\n [ActivityType.CartListDuplication]: ['Cart.Dialog.DuplicateSuccess.Duplicating','Cart.Dialog.DuplicateFailed.DuplicationFailed', 'Cart.Dialog.DuplicateFailed.SomeItemsCouldNotDuplicate'],\n [ActivityType.KitOrderItemReordering]: ['Cart.Dialog.DuplicateFailed.ReorderingOrder','Cart.Dialog.DuplicateFailed.ReorderingOrder'],\n [ActivityType.OrderReordering]: ['Cart.Dialog.DuplicateFailed.ReorderingOrder','Cart.Dialog.DuplicateFailed.ReorderingOrder'],\n [ActivityType.OrderItemReordering]: ['Cart.Dialog.DuplicateFailed.ReorderingOrder', 'Cart.Dialog.DuplicateFailed.ReorderingOrder']\n\n }\n\n return <div className=\"cart-ng-duplicate-failed\">\n <Icon name=\"warning.svg\" height=\"30px\" width=\"33px\"\n wrapperClassName={`cart-ng-duplicate-${hasPartialFailed ? 'partial-failed' : 'failed'}-icon `}/>\n <div className=\"dialog-text\">\n <div>{t(typeToMessage[selectedActivity?.Type][0], { name: selectedActivity?.Name })}</div>\n {hasPartialFailed ?\n <div className=\"partial-failed-text\">\n {mt(typeToMessage[selectedActivity?.Type][2], {\n num: selectedActivity?.Output?.CompletedCount,\n total: selectedActivity?.Total\n })}</div> :\n <div className=\"failed-text\"> {mt(typeToMessage[selectedActivity?.Type][1])}</div>}\n </div>\n </div>\n}\n\nfunction HourGlass () {\n return (<div className=\"hour-glass-icon\">\n <svg width=\"44px\" height=\"70px\" viewBox=\"0 0 44 70\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n <title>Icon button/20px/process</title>\n <g id=\"Icon-button/20px/process\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\"\n opacity=\"0.588438488\">\n <g id=\"hourglass\" transform=\"translate(0.000000, 0.000000)\" fill=\"#000000\" fillRule=\"nonzero\">\n <path\n d=\"M40.8332422,0 L3.5,0 C1.57035156,0 0,1.57035156 0,3.5 C0,5.42964844 1.57035156,7 3.5,7 L40.8333789,7 C42.7630273,7 44.3333789,5.42964844 44.3333789,3.5 C44.3333789,1.57035156 42.7628906,0 40.8332422,0 Z M40.8332422,4.66662109 L3.5,4.66662109 C2.85714844,4.66662109 2.33337891,4.14394531 2.33337891,3.5 C2.33337891,2.85605469 2.85714844,2.33337891 3.5,2.33337891 L40.8333789,2.33337891 C41.4762305,2.33337891 42,2.85605469 42,3.5 C42,4.14394531 41.4760938,4.66662109 40.8332422,4.66662109 Z\" id=\"Shape\"></path>\n <path d=\"M40.8332422,63 L3.5,63 C1.57035156,63 0,64.5703516 0,66.5 C0,68.4296484 1.57035156,70 3.5,70 L40.8333789,70 C42.7630273,70 44.3333789,68.4296484 44.3333789,66.5 C44.3333789,64.5703516 42.7628906,63 40.8332422,63 Z M40.8332422,67.6666211 L3.5,67.6666211 C2.85714844,67.6666211 2.33337891,67.1439453 2.33337891,66.5 C2.33337891,65.8560547 2.85714844,65.3333789 3.5,65.3333789 L40.8333789,65.3333789 C41.4762305,65.3333789 42,65.8560547 42,66.5 C42,67.1439453 41.4760938,67.6666211 40.8332422,67.6666211 Z\" id=\"Shape\"></path>\n <path d=\"M30.4803516,30.6692969 C36.4046484,24.745 39.6666211,16.8687695 39.6666211,8.49214844 L39.6666211,5.83337891 C39.6666211,5.18820313 39.1439453,4.66675781 38.5,4.66675781 L5.83324219,4.66675781 C5.18929688,4.66675781 4.66662109,5.18820313 4.66662109,5.83337891 L4.66662109,8.49214844 C4.66662109,16.87 7.92859375,24.745 13.8517969,30.6692969 L15.0242969,31.8417969 C15.8560938,32.6735938 16.3332422,33.8239453 16.3332422,35 C16.3332422,36.1760547 15.8560938,37.3264062 15.0253906,38.1582031 L13.8528906,39.3307031 C7.92859375,45.255 4.66662109,53.13 4.66662109,61.5078516 L4.66662109,64.1666211 C4.66662109,64.8117969 5.18929688,65.3332422 5.83324219,65.3332422 L38.4998633,65.3332422 C39.1438086,65.3332422 39.6666211,64.8117969 39.6666211,64.1666211 L39.6666211,61.5078516 C39.6666211,53.1312305 36.4045117,45.255 30.4802148,39.3307031 L29.3077148,38.1582031 C28.4641602,37.3146484 27.9998633,36.1935547 27.9998633,35 C27.9998633,33.8064453 28.4641602,32.6853516 29.3077148,31.8417969 L30.4803516,30.6692969 Z M27.6580664,30.1921484 C26.3735938,31.4755273 25.6666211,33.1823242 25.6666211,35 C25.6666211,36.8176758 26.3735938,38.5244727 27.6580664,39.8078516 L28.8305664,40.9803516 C34.3139453,46.4637305 37.3333789,53.7541211 37.3333789,61.5078516 L37.3333789,63 L7,63 L7,61.5078516 C7,53.7530273 10.0192969,46.4637305 15.5014453,40.9803516 L16.6739453,39.8078516 C17.9596484,38.5244727 18.6666211,36.8164453 18.6666211,35 C18.6666211,33.1835547 17.9596484,31.4755273 16.6751758,30.1921484 L15.5026758,29.0196484 C10.0192969,23.5362695 7,16.2457422 7,8.49214844 L7,7 L37.3333789,7 L37.3333789,8.49214844 C37.3333789,16.2458789 34.314082,23.5362695 28.8307031,29.0196484 L27.6580664,30.1921484 Z\" id=\"Shape\"></path>\n <path d=\"M32.0260938,19.6548242 C31.9082422,19.3585547 31.5069727,18.6666211 30.3332422,18.6666211 C24.2712695,18.6666211 21.5703906,17.3680664 20.4993359,16.593418 C19.163457,15.6262695 17.4496875,15.3730664 15.9107813,15.9178906 C14.4420117,16.4370117 13.3663086,17.5920117 12.9614844,19.0853906 C12.8564844,19.4739453 12.8377539,19.725918 12.8377539,19.725918 C12.8202539,19.9557422 12.8704297,20.2042969 12.9836328,20.4060938 C14.0768359,22.3439453 15.3379297,24.3878906 17.1532813,26.2032422 L18.3245508,27.3757422 C20.0500781,29.0989453 20.9997266,31.3925391 20.9997266,33.8332422 C20.9997266,34.478418 21.5224023,34.9998633 22.1663477,34.9998633 C22.810293,34.9998633 23.3329688,34.478418 23.3329688,33.8332422 C23.3329688,31.3937695 24.2826172,29.1000391 26.0069141,27.3757422 L27.1806445,26.2020117 C27.4688477,25.9150391 27.8444141,25.5603906 28.2574414,25.1730664 C31.2735938,22.3369727 32.5417969,20.9567969 32.0260938,19.6548242 Z M26.6571484,23.4733789 C26.2255273,23.8805273 25.8310938,24.251582 25.5301758,24.5525 L24.3564453,25.7262305 C23.45,26.631582 22.715,27.6628516 22.1653906,28.7805273 C21.615918,27.6628516 20.880918,26.631582 19.9743359,25.7262305 L18.8029297,24.5537305 C17.3702539,23.1199609 16.3214844,21.5414063 15.2306055,19.6385547 C15.5188086,18.6644336 16.2654297,18.2676758 16.6889844,18.1171484 C17.5032813,17.8289453 18.4168359,17.9655273 19.1307813,18.4835547 C20.6170508,19.5592578 23.5477539,20.8273242 29.1618359,20.9837305 C28.440918,21.7957031 27.3092969,22.8608789 26.6571484,23.4733789 Z\" id=\"Shape\"></path>\n <path d=\"M34.9194727,59.4089453 C34.6266211,55.6266211 33.11,54.0562695 31.3553516,52.2362695 C31.1185547,51.9900391 30.8712305,51.7346484 30.6180273,51.4639453 C29.1526758,49.8982422 27.0830273,49 24.9375,49 L19.3946484,49 C17.2503516,49 15.1794727,49.8983789 13.7141211,51.4639453 C13.460918,51.7346484 13.2148242,51.9889453 12.9778906,52.2351758 C11.2220117,54.0551758 9.70539063,55.6266211 9.41376953,59.4101758 C9.38806641,59.7344727 9.50003906,60.0541211 9.72056641,60.2933789 C9.9421875,60.5314063 10.2514453,60.6667578 10.5768359,60.6667578 L33.7561328,60.6667578 C34.0804297,60.6667578 34.3907813,60.5314063 34.6124023,60.2922852 C34.8330664,60.0530273 34.9439453,59.7321484 34.9194727,59.4089453 Z M11.9057422,58.3333789 C12.3012695,56.2964063 13.2439453,55.3210547 14.6578906,53.8557031 C14.9028906,53.6014063 15.1571875,53.336582 15.4185938,53.0576758 C16.4441211,51.9610547 17.8930664,51.3333789 19.3946484,51.3333789 L24.9375,51.3333789 C26.4401758,51.3333789 27.8891211,51.9621484 28.9146484,53.056582 C29.1771484,53.3389063 29.4314453,53.6014063 29.6776758,53.8569336 C31.0905273,55.3222852 32.0319727,56.2976367 32.4287305,58.3333789 L11.9057422,58.3333789 Z\" id=\"Shape\"></path>\n <path d=\"M22.1316211,37.3333789 C21.4876758,37.3333789 20.965,37.8548242 20.965,38.5 L20.965,39.6666211 C20.965,40.3117969 21.4876758,40.8332422 22.1316211,40.8332422 C22.7755664,40.8332422 23.2982422,40.3117969 23.2982422,39.6666211 L23.2982422,38.5 C23.2982422,37.8548242 22.7755664,37.3333789 22.1316211,37.3333789 Z\" id=\"Path\"></path>\n <path d=\"M22.1316211,43.1666211 C21.4876758,43.1666211 20.965,43.6880664 20.965,44.3332422 L20.965,45.4998633 C20.965,46.1450391 21.4876758,46.6664844 22.1316211,46.6664844 C22.7755664,46.6664844 23.2982422,46.1450391 23.2982422,45.4998633 L23.2982422,44.3332422 C23.2982422,43.6882031 22.7755664,43.1666211 22.1316211,43.1666211 Z\" id=\"Path\"></path>\n </g>\n </g>\n </svg>\n </div>)\n}\n","import React from 'react'\nimport {observer} from 'mobx-react-lite'\nimport RevertModificationDialog from './RevertModificationDialog'\nimport LoadingDialog from '../LoadingDialog'\nimport DuplicateProgressDialog from '../duplucate/DuplicateProgressDialog'\n\n\nconst CartDialogs = ({model}) => {\n\n if (!model) return null\n\n return (\n <>\n <LoadingDialog open={model?.loading ?? false}/>\n <DuplicateProgressDialog model={model}/>\n {model._cartDialogs.revertModifications && <RevertModificationDialog closeDialog={() => model._cartDialogs.setRevertModifications(false)}/>}\n </>\n )\n}\n\n\nexport default observer(CartDialogs)\n\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport CartListModel from '../model/CartListModel'\nimport CartSummaryContainer from '../CartSummary/CartSummaryContainer'\nimport { Slot } from '$core-components'\nimport CartList from './index'\nimport WishList from './WishList'\nimport ListContainerSkeleton from './ListContainerSkeleton'\nimport './ListContainer.scss'\nimport CartDialogs from '../global-cart-dialogs'\n\nconst ListContainer = ({\n currencyState,\n model,\n}) => {\n if (\n !model\n || (model.isWishListMode && !model[CartListModel.CART_LIST_TYPES.DEFAULT])\n || (model.isListsMode && !model[CartListModel.CART_LIST_TYPES.UNASSIGNED])\n || model.affectPricingLists.some((list) => list.loading)\n ) {\n return (<div className=\"skelaton-cart-list-container\">\n <ListContainerSkeleton itemsCount={5} title={t('Cart.ShoppingCartTitle')}/>\n <ListContainerSkeleton itemsCount={5} title={t('Cart.Wishlist.WishListTitle')}/>\n </div>)\n }\n\n return (\n <div className=\"cart-list-container\">\n <CartList currencyState={currencyState} model={model}/>\n {model.affectPricingItems.length > 0 && (\n <div className=\"cart-summary-mobile\">\n <CartSummaryContainer\n model={model ?? null}\n loading={!model || model.loading.summary}\n currencyState={currencyState}\n />\n </div>\n )}\n {model.isWishListMode ? (\n <>\n <Slot name=\"cart_above_wishlist_section\" data={model} />\n {model[CartListModel.CART_LIST_TYPES.WISH_LIST]\n ? <WishList\n key={CartListModel.CART_LIST_TYPES.WISH_LIST}\n currencyState={currencyState}\n model={model}\n list={model[CartListModel.CART_LIST_TYPES.WISH_LIST]}\n />\n : <ListContainerSkeleton itemsCount={0} title={t('Cart.Wishlist.WishListTitle')}/>\n }\n </>\n ) : null}\n <CartDialogs model={model}/>\n </div>\n )\n}\n\nexport default observer(ListContainer)\n","import React from 'react'\nimport { useNavigate } from 'react-router-dom'\nimport { Button } from '$core-components'\nimport './EmptyPage.scss'\n\nconst EmptyPage = ({\n title,\n text,\n buttonText = '',\n buttonUrl = '',\n shoppingCartText = '',\n}) => {\n const navigate = useNavigate();\n\n return (\n <div className=\"no-results\">\n <div className=\"top-section\">\n <div className=\"title no-results-title\">{title}</div>\n <div className=\"no-results-subtitle\">{text}</div>\n {buttonText && buttonUrl ? (\n <Button className=\"cart-ng-empty-cart-button\" text={buttonText} onClick={() => navigate('/')}/>\n ) : null}\n {shoppingCartText ? (\n <div className=\"shopping-cart-text\" dangerouslySetInnerHTML={{__html: shoppingCartText}}/>\n ) : null}\n </div>\n </div>\n );\n};\n\nexport default EmptyPage;\n","import React, { useEffect } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { t } from '$themelocalization'\nimport ListContainer from './CartList/ListContainer'\nimport EmptyPage from './EmptyPage'\nimport CartSummaryContainer from './CartSummary/CartSummaryContainer'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport './CartNG.scss'\nimport CartDialogs from './global-cart-dialogs'\nimport { proofThumbnailUpdater } from '$themeservices'\n\nconst CartNG = ({\n currencyState,\n model,\n}) => {\n useEffect(() => {\n window.scrollTo({ top: 0, behavior: 'instant' })\n return () => proofThumbnailUpdater.stop()\n }, []);\n\n if (\n model?.initiated\n && ((model?.isWishListMode && model.items.length === 0 && model.affectPricingLists.length > 0)\n || (model?.isListsMode && model.listsItemsCount === 0 && model.lists.length === 1))\n && model.affectPricingLists.every((list) => !list.loading)\n ) {\n return <>\n <EmptyPage\n title={t('Cart.EmptyCartTitle')}\n text={t('Cart.EmptyCartText')}\n buttonText={t('Cart.EmptyCartButtonText')}\n buttonUrl={urlGenerator.get({ page: 'home' })}\n shoppingCartText={model?.shoppingCartText}\n />\n <CartDialogs model={model}/>\n </>\n }\n\n return (\n <div className=\"cart-container\">\n <ListContainer\n currencyState={currencyState}\n model={model ?? null}\n />\n <div className=\"cart-summary-desktop\">\n <CartSummaryContainer\n currencyState={currencyState}\n model={model ?? null}\n loading={!model || model?.summary?.loading}\n withSticky={true}\n />\n </div>\n <CartDialogs model={model}/>\n </div>\n )\n}\n\nexport default observer(CartNG)\n","import React, { useEffect, useRef, useState } from 'react'\nimport { useNavigate, useSearchParams } from 'react-router-dom'\nimport { UStoreProvider } from '@ustore/core'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport CartModel from '../components/cart/model/CartModel'\nimport CartNG from '../components/cart/CartNG'\nimport Layout from '../components/layout'\nimport { Slot } from '$core-components'\nimport Legacy from './Legacy'\nimport './Cart.scss'\nimport { activityMonitor, getCartMode, CART_MODE } from '$themeservices'\n\n\nconst Cart = (props) => {\n const { state: { currentStore, currentCurrency, currentCulture, currencies } } = props\n const [currencyState, setCurrencyState] = useState(() => ({\n isSecondaryCurrency: currentCurrency.ID !== currentStore.PrimaryCurrencyID,\n showCurrencyCode: currentStore.ShowCurrencyCode,\n currencyCode: currentCurrency.Code,\n currencySymbol: currentCurrency.Symbol,\n primaryCurrencyName: currencies.find((currency) => currency.ID === currentStore.PrimaryCurrencyID).Name\n }))\n const { storeBaseUrl, languageCode, apiUrl } = themeContext.get()\n const [cartItemsCount, setCartItemsCount] = useState()\n const navigate = useNavigate()\n const cartModel = useRef()\n const [searchParams] = useSearchParams()\n\n useEffect(() => {\n setCurrencyState({\n isSecondaryCurrency: currentCurrency.ID !== currentStore.PrimaryCurrencyID,\n showCurrencyCode: currentStore.ShowCurrencyCode,\n currencyCode: currentCurrency.Code,\n currencySymbol: currentCurrency.Symbol,\n taxFormat: currentStore.TaxFormat,\n currencyFormat: currentCulture.CurrencyFormat,\n decimalSeparator: currentCulture.DecimalSeparator,\n decimalPlaces: currentCulture.DecimalPlaces,\n languageCode: currentCulture.LanguageCode,\n primaryCurrencyName: currencies.find((currency) => currency.ID === currentStore.PrimaryCurrencyID).Name\n })\n }, [\n currentCurrency.Code,\n currentCurrency.ID,\n currentCurrency.Symbol,\n currentStore.ShowCurrencyCode,\n currentStore.PrimaryCurrencyID,\n currentCulture.CurrencyFormat,\n currentCulture.DecimalSeparator,\n currentCulture.DecimalPlaces,\n currentCulture.LanguageCode,\n currentStore.TaxFormat,\n currencies\n ]);\n\n\n const loadData = async () => {\n cartModel.current = new CartModel({\n cartMode: getCartMode(currentStore),\n UStoreProvider: UStoreProvider,\n storeBaseUrl,\n storeLanguageCode: languageCode,\n storeApiUrl: apiUrl,\n navigate,\n searchParams,\n })\n\n cartModel.current.init()\n\n }\n\n\n\n useEffect(() => {\n const setActivities = (activities) => cartModel.current.setActivities(activities)\n activityMonitor.subscribe(setActivities)\n\n if (getCartMode(currentStore) !== CART_MODE.Aspx) {\n loadData()\n }\n\n return () => {\n activityMonitor.unsubscribe(setActivities)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n useEffect(() => {\n setCartItemsCount(props.state.cartItemsCount?.ItemsCount)\n }, [props.state.cartItemsCount?.ItemsCount])\n\n if (getCartMode(currentStore) !== CART_MODE.Aspx)\n return (\n <Layout className=\"cart-ng\" {...props}>\n <Slot name=\"cart_under_header\" data={cartModel} />\n <CartNG\n currencyState={currencyState}\n model={cartModel.current ?? null}\n itemsCount={\n !cartModel.current\n ? Math.min(props.state.cartItemsCount?.ItemsCount ?? 0, 10)\n : cartItemsCount\n }\n />\n </Layout>\n )\n\n return <Legacy {...props}/>\n}\n\nexport default Cart\n","import React, { useEffect } from 'react'\nimport Legacy from './Legacy'\nimport {UStoreProvider} from '@ustore/core'\n\n\n\nconst CheckoutComplete = (props) => {\n useEffect(() => {\n UStoreProvider.state.store.loadCartItemsCount()\n }, [])\n\n return <Legacy {...props}/>\n}\n\n\nexport default CheckoutComplete\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst CheckoutFinal = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default CheckoutFinal\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst FileSubmission = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default FileSubmission\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst CheckoutPaymentSubmission = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default CheckoutPaymentSubmission\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst MyRecipientLists = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default MyRecipientLists\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst OrderHistory = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default OrderHistory\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst PersonalInformation = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default PersonalInformation\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst Customization = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default Customization\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst uEditCustomization = (props) => {\n return <Legacy {...props} />\n}\n\nexport default uEditCustomization\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst SplitShippingAddresses = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default SplitShippingAddresses","import React from 'react'\nimport Legacy from './Legacy'\n\nconst OrderDetails = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default OrderDetails\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst SplitShippingItems = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default SplitShippingItems\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst Recipient = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default Recipient\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst ProductUnavailable = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default ProductUnavailable\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst Drafts = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default Drafts\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst EmptyPage = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default EmptyPage\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst ErrorPage = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default ErrorPage\n","import React, { useEffect, useState } from 'react'\nimport { useParams } from 'react-router-dom'\n\nimport { t } from '$themelocalization'\nimport { Slider, ScrollableGallery } from '$core-components'\nimport { UStoreProvider } from '@ustore/core'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { decodeStringForURL } from '$ustoreinternal/services/utils'\nimport Layout from '../components/layout'\nimport { getIsNGProduct } from '$themeservices'\nimport ProductItem from '../components/products/ProductItem'\nimport CategoryItem from '../components/category/CategoryItem'\n\nimport './Search.scss'\n\nconst PRODUCTS_PAGE_SIZE = 8\n\n/**\n * This is the Search page\n * URL : http://<store-domain>/{language-code}/search/{search text}/\n *\n * @param {object} state - the state of the store\n */\n\nconst Search = (props) => {\n const searchValue = useParams().id\n const categories = props.customState?.categories\n const [searchResults, setSearchResults] = useState(null)\n const [searchResultsCount, setSearchResultsCount] = useState()\n const galleryTitle = searchResultsCount ? t('SearchResults.Count_products', { count: searchResultsCount }) : ''\n\n useEffect(() => {\n (async () => {\n const { Products: searchResults, Count: searchResultsCount } = await UStoreProvider.api.products.search(searchValue, 1, PRODUCTS_PAGE_SIZE)\n setSearchResults(searchResults)\n setSearchResultsCount(searchResultsCount)\n // Load more products if the page doesn't have a scrollbar but has more products to show\n if (searchResultsCount > searchResults?.length && document.body.scrollHeight === window.innerHeight) {\n const { Products: page2SearchResults } = await UStoreProvider.api.products.search(searchValue, 2, PRODUCTS_PAGE_SIZE)\n setSearchResults([...searchResults, ...page2SearchResults])\n }\n })()\n }, [searchValue])\n\n const loadProducts = async () => {\n if (props.customState.searchResults?.length === searchResultsCount) return\n\n const nextPage = Math.ceil(searchResults.length / PRODUCTS_PAGE_SIZE) + 1\n const { Products: products } = await UStoreProvider.api.products.search(searchValue, nextPage, PRODUCTS_PAGE_SIZE)\n const joinedProducts = searchResults.concat(products)\n\n UStoreProvider.state.customState.set('searchResults', joinedProducts)\n setSearchResults(joinedProducts)\n }\n\n if (!props.state || !props.state.currentStore || !props.customState || !searchResults) {\n return null\n }\n\n return <Layout {...props} className='search-ng'>\n {searchResults && searchResultsCount > 0\n ? <div className=\"search-results\">\n <div className=\"title main-title\">{t('SearchResults.Title')}</div>\n <ScrollableGallery title={galleryTitle} hasMoreItems={true} onScroll={loadProducts}>\n {searchResults.map((model) => (\n <ProductItem\n key={model.ID}\n model={model} detailed\n productNameLines=\"2\"\n descriptionLines=\"4\"\n url={getIsNGProduct(model)\n ? urlGenerator.get({ page: 'products', id: model.FriendlyID, name: decodeStringForURL(model.Name) })\n : urlGenerator.get({ page: 'product', id: model.FriendlyID, name: decodeStringForURL(model.Name) })\n }\n />\n ))}\n </ScrollableGallery>\n </div>\n : (searchResults && !searchResults.length)\n ? <div className=\"no-results\">\n <div className=\"top-section\">\n <div className=\"title no-results-title\">{t('SearchResults.No_results_title')}</div>\n <div className=\"no-results-subtitle\">{t('SearchResults.No_results_subtitle')}</div>\n </div>\n {categories && categories.length > 0 &&\n <div className=\"bottom-section\">\n <div className=\"divider\"></div>\n <div className=\"title bottom-section-title\">{t('SearchResults.No_results_bottom_section_title')}</div>\n <div className=\"categories-wrapper\">\n <Slider multi>\n {\n categories.map((model) => {\n return <CategoryItem\n key={model.ID}\n model={model}\n url={urlGenerator.get({ page: 'category', id: model.FriendlyID, name: decodeStringForURL(model.Name) })} />\n })\n }\n </Slider>\n </div>\n </div>\n }\n </div>\n : null\n }\n </Layout>\n}\n\nexport default Search\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst OrderApprovalList = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default OrderApprovalList\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst CustomMain = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default CustomMain\n","import React from 'react'\nimport Legacy from './Legacy'\n\nconst ClearingUnknownOrder = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default ClearingUnknownOrder","import React from 'react'\nimport Legacy from './Legacy'\n\nconst ProductDetails = (props) => {\n return <Legacy {...props}/>\n}\n\nexport default ProductDetails\n","import themeContext from '$ustoreinternal/services/themeContext'\n\nconst HIDDEN = 1\nconst SUFFIX = 2\nconst PREFIX = 3\n\nconst PRODUCT = 'product'\nconst PRODUCTS = 'products'\nconst CATEGORY = 'category'\nconst HOME = 'home'\n\nconst getSEO = (data, defaults) => {\n const { title, description } = defaults\n\n if (!data) {\n return { title, description }\n }\n\n return { title: data.Title, description: data.Description }\n}\n\n/**\n @param {string} string - capitalize first letter\n */\nconst capitalize = (string) => {\n return string ? string.charAt(0).toUpperCase() + string.slice(1) : ''\n}\n\n/**\n *\n * @param {string} pageTitle\n * @param {string} storeTitle\n * @param {number} type\n */\nconst concatenate = (pageTitle, storeTitle, type = SUFFIX) => {\n if (!pageTitle || !storeTitle) {\n return\n }\n\n switch (type) {\n case HIDDEN:\n return pageTitle\n case PREFIX:\n return `${storeTitle} ${pageTitle}`\n case SUFFIX:\n return `${pageTitle} ${storeTitle}`\n default:\n return ''\n }\n}\n\nconst HeadSEO = ({ currentStore, customState }) => {\n if (!currentStore || !customState) {\n return null\n }\n\n const { Name: storeTitle, Description: storeDescription, SeoConfiguration } = currentStore\n const { page } = themeContext.get()\n\n let titleAdditionFormat = SUFFIX\n let titleAdditionText = storeTitle\n if (SeoConfiguration) {\n titleAdditionFormat = SeoConfiguration.TitleTagType\n titleAdditionText = SeoConfiguration.TitleTag\n }\n\n let title = storeTitle\n let description = ''\n let data\n\n switch (page) {\n case HOME:\n data = getSEO(\n SeoConfiguration,\n { title: storeTitle, description: storeDescription }\n )\n\n title = data.title\n description = data.description\n break\n case CATEGORY:\n const { currentCategory } = customState\n\n if (currentCategory) {\n data = getSEO(\n currentCategory.SeoConfiguration,\n { title: currentCategory.Name, description: currentCategory.Description }\n )\n\n title = concatenate(data.title, titleAdditionText, titleAdditionFormat)\n description = data.description\n }\n\n break\n\n case PRODUCTS:\n case PRODUCT:\n const { currentProduct } = customState\n\n if (currentProduct) {\n data = getSEO(\n currentProduct.SeoConfiguration,\n { title: currentProduct.Name, description: currentProduct.Description }\n )\n\n title = concatenate(data.title, titleAdditionText, titleAdditionFormat)\n description = data.description\n }\n\n break\n default:\n title = concatenate(capitalize(page), titleAdditionText, titleAdditionFormat)\n }\n\n document.title = title.replace(/<[^>]*>?/gm, '') || ''\n if (description) {\n const metaTag = document.head.querySelector(`[name='description']`)\n if (metaTag) metaTag.setAttribute('content', description)\n }\n return null\n}\n\nexport default HeadSEO\n","/**\n * Wrapper component for flag image\n *\n * @param {object} props - all the properties we would like to pass to the flag image tag including:\n * @param {string} name - the flag file name\n * @param {number} width - the flag image width\n * @param {number} height - the flag image height\n * @param {string} [className] - a class to place on flag image element\n */\nimport React from 'react'\nimport themeContext from '$ustoreinternal/services/themeContext'\n\nconst Flag = (props) => {\n const assetPrefix = (themeContext && themeContext.get().hasOwnProperty('assetPrefix')) ? themeContext.get().assetPrefix : props.assetPrefix\n const { name } = props\n\n if (!name) {\n return null\n }\n\n const src = (`${assetPrefix}/static-internal/images/flags/${name.toLowerCase()}`)\n return (\n <img\n {...props}\n alt=''\n src={src}\n style={{ display: 'inline-block' }}\n />\n )\n}\n\nexport default Flag\n","import { UStoreProvider } from '@ustore/core'\nimport legacyIframeHandler from '$ustoreinternal/services/legacyIframeHandler'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\n\nexport const switchCurrency= (selectedCurrency) => {\n UStoreProvider.state.culture.setCurrentCurrency(selectedCurrency)\n themeContext.set('currencyFriendlyID', selectedCurrency.FriendlyID)\n CookiesManager.setCookie({ key: storefrontCookies.currencyID, value: selectedCurrency.FriendlyID, days: 30 })\n CookiesManager.setCookie({ key: storefrontCookies.currencyGUID, value: selectedCurrency.ID, days: 30 })\n legacyIframeHandler.postMessage({\n type: '@CHANGE_CURRENCY',\n data: selectedCurrency.FriendlyID\n })\n\n}\n\nexport const switchCulture = (selectedCulture, params) => {\n CookiesManager.setCookie({ key: storefrontCookies.language, value: selectedCulture.LanguageCode, days: 30 })\n const newURL = urlGenerator.get({\n ...params,\n languageCode: selectedCulture.LanguageCode\n }) + window.location.search + window.location.hash\n window.location.replace(newURL)\n\n}\n\nexport const getMobileMenuItems = (categoriesTree, cultures, currencies, currentCurrency, currentCulture) =>{\n\n const convertCategories = (categories, parent, depth) => {\n return categories.map((category) => {\n const id = `${!depth ? 'T' : ''}CT_${category.Category.FriendlyID}`\n const item = {\n id,\n value: id,\n name: category.Category.Name,\n parent,\n depth,\n hasProducts: category.Category.HasProducts\n }\n item.children = category ? convertCategories(category.SubCategories, item, depth + 1) : []\n return item\n })\n }\n\n const menuTree = []\n if (currencies) {\n menuTree.push({\n id: `TCR_${currentCurrency.ID}`,\n name: currentCurrency.Code,\n value: `TCR_${currentCurrency.ID}`,\n parent: null,\n depth: 0,\n sign: currentCurrency.Symbol,\n children: currencies?.map((model) => {\n const { ID, Symbol, Code } = model\n return ({\n id: `CR_${ID}`, sign: Symbol, name: Code, value: `CR_${ID}`, parent: menuTree, children: [], depth: 1, model\n })\n })\n })\n }\n\n if (cultures) {\n menuTree.push({\n id: `TCL_${currentCulture.ID}`,\n name: currentCulture.Name,\n value: `TCL_${currentCulture.ID}`,\n icon: `${currentCulture.CountryCode}.svg`,\n parent: null,\n depth: 0,\n children: cultures?.map((model) => {\n const { LanguageCode, CountryCode, Name } = model\n return ({\n id: `CL_${LanguageCode}`,\n icon: `${CountryCode}.svg`,\n name: Name,\n value: `CL_${LanguageCode}`,\n parent: menuTree,\n children: [],\n depth: 1,\n model,\n })\n })\n })\n }\n\n if (categoriesTree) {\n menuTree.push(...convertCategories(categoriesTree, menuTree, 0))\n }\n\n return [{\n id: 'menu',\n value: 'menu',\n children: menuTree\n }]\n}\n","import { Switcher } from '$core-components'\nimport Flag from './Flag'\nimport React, { useEffect, useState } from 'react'\nimport { t } from '$themelocalization'\nimport { useParams } from 'react-router-dom'\nimport { switchCulture } from './utils'\n\nexport const CultureSwitcher = ({currentCulture,cultures }) => {\n const params = useParams()\n const [isVisible, setIsVisible] = useState(true)\n\n useEffect(() => {\n const onResize = () => {\n const cultureSwitcher = document.querySelector('.switcher.culture')\n if (cultureSwitcher && window.getComputedStyle(cultureSwitcher).display === 'none') {\n setIsVisible(false)\n } else {\n setIsVisible(true)\n }\n }\n window.addEventListener('resize',onResize)\n onResize()\n return () => {\n window.removeEventListener('resize',onResize)\n }\n }, [])\n\n const culturesViewModel = cultures?.map(({ ID, CountryCode, Name }) => ({\n id: ID, icon: `${CountryCode}.svg`, name: Name, value: Name\n })) || []\n\n const cultureSelected = (selected) => {\n const selectedCulture = cultures.find(i => i.ID === selected)\n switchCulture(selectedCulture, params)\n }\n\n if (!isVisible) {\n return null\n }\n\n return <Switcher\n className=\"culture\"\n items={culturesViewModel}\n selected={currentCulture && culturesViewModel.find((element) => { return currentCulture.ID === element.id })}\n label={t('Header.Language')}\n onSelected={cultureSelected}\n renderSelection={(selected) => <>\n <Flag name={selected.icon} width=\"29\" height=\"19\" className=\"icon\"/>\n <span className=\"switcher-selected\">{selected.value}</span>\n </>}\n renderItem={(item) => <>\n <Flag name={item.icon} width=\"29\" height=\"19\" className=\"icon\"/>\n <span className=\"name\">{item.value}</span>\n </>}\n />\n}\n","import { Switcher } from '$core-components'\nimport React, {useEffect, useState} from 'react'\nimport { t } from '$themelocalization'\nimport { switchCurrency } from './utils'\n\nexport const CurrencySwitcher = ({ currentCurrency, currencies }) => {\n const [isVisible, setIsVisible] = useState(true)\n\n useEffect(() => {\n const onResize = () => {\n const currencySwitcher = document.querySelector('.switcher.currency')\n if (currencySwitcher && window.getComputedStyle(currencySwitcher).display === 'none') {\n setIsVisible(false)\n } else {\n setIsVisible(true)\n }\n }\n window.addEventListener('resize',onResize)\n onResize()\n return () => {\n window.removeEventListener('resize',onResize)\n }\n }, [])\n\n\n const currenciesViewModel = currencies?.map(({ ID, Symbol, Code }) => ({\n id: ID, sign: Symbol, name: Code, value: Code\n })) || []\n\n const currencySelected = (selected) => {\n const selectedCurrency = currencies.find(i => i.ID === selected)\n switchCurrency(selectedCurrency)\n }\n\n if (!isVisible) {\n return null\n }\n\n return <Switcher\n className=\"currency\"\n items={currenciesViewModel}\n selected={currentCurrency && currenciesViewModel.find((element) => { return currentCurrency.ID === element.id })}\n label={t('Header.Currency')}\n onSelected={currencySelected}\n renderSelection={(selected) => <span className=\"sign\">{selected.value}</span>}\n renderItem={(item) => <>\n <span className=\"sign\">{item.sign}</span>\n <span className=\"name\">{item.value}</span>\n </>}\n />\n}\n\n","import './SignIn.scss'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\nimport { useEffect, useRef } from 'react'\n\nconst SignIn = ({ showTitle = true }) => {\n const signInRef = useRef(null)\n\n useEffect(() => {\n setTimeout(() => signInRef.current?.focus())\n },[])\n\n const goToUrl = () => {\n const { storeID, classicUrl, securityToken, storeFriendlyID, languageCode, userID, showThemeAsDraft } = themeContext.get()\n const showRibbon = UStoreProvider.state.customState.get('showCookieRibbon')\n\n const userIDfromStore = UStoreProvider.state.get().currentUser.ID\n\n const tempUserId = (!userID || (userIDfromStore && userIDfromStore !== userID)) ? userIDfromStore : userID\n\n const isDraft = showThemeAsDraft && showThemeAsDraft.toLowerCase() === 'true'\n\n const pageURL = window.location.href\n\n CookiesManager.deleteCookie(storefrontCookies.token)\n window.location.href = `${classicUrl}/logout.aspx?SecurityToken=${securityToken}&StoreGuid=${storeID}&storeid=${storeFriendlyID}&NgLanguageCode=${languageCode}&forceLogin=true&SignIn=true&ShowRibbon=${showRibbon}${isDraft ? '&showThemeAsDraft=true' : ''}&tempUserId=${tempUserId}&returnNGURL=/${encodeURIComponent(pageURL.slice(pageURL.indexOf(languageCode)))}`\n }\n\n const enterHandler = (e) => {\n if (e.key === \"Enter\") goToUrl();\n }\n\n return (\n <div className=\"signin\">\n <div className=\"signin-info\">\n {showTitle && <div className=\"signin-title\">{t('Profile.My_Account')}</div>}\n </div>\n <div className=\"btn-container d-flex align-items-center\">\n <span role=\"button\" tabIndex=\"0\" onKeyDown={enterHandler} onClick={goToUrl} className='button-secondary signin-button' ref={signInRef}>{t('SignIn.SignIn')}</span>\n </div>\n </div>\n )\n}\nexport default SignIn\n","import './SignOut.scss'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport { t } from '$themelocalization'\nimport { UStoreProvider } from '@ustore/core'\nimport { storefrontCookies, CookiesManager } from '$ustoreinternal/services/cookies'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport {useNavigate} from 'react-router-dom'\nimport { useRef } from 'react'\n\nconst getAttribute = (name) => {\n return UStoreProvider.state.get().currentStore.Attributes.find(attr => attr.Name === name)?.Value\n}\n\n/**\n * This component represents the signout icon in the header\n * When clicking - the store redirects to the login page\n *\n * @param {object} currentUser - the current user connected to the store\n */\nconst SignOut = (props) => {\n const navigate = useNavigate()\n const connectEnterpriseLogoutURL = useRef(false)\n\n if (!props.currentUser) {\n return null\n }\n\n const { currentUser: { FirstName } } = props\n\n const { showThemeAsDraft, securityToken, storeID, classicUrl, languageCode, logoutUrl } = themeContext.get()\n const showRibbon = UStoreProvider.state.customState.get('showCookieRibbon')\n const deleteCookies = () => [storefrontCookies.token, storefrontCookies.storeID, storefrontCookies.language].forEach(cn => CookiesManager.deleteCookie(cn))\n const onLogoutClicked = () => {\n if (connectEnterpriseLogoutURL.current) {\n const connectEnterpriseLogoutURL = urlGenerator.get({page:'connect-logged-out'}) + `?message=${t('SignOut.LoggedOut')}`;\n deleteCookies()\n navigate(connectEnterpriseLogoutURL)\n } else {\n deleteCookies()\n }\n }\n\n const isDraft = showThemeAsDraft && showThemeAsDraft.toLowerCase() === 'true'\n\n const storeType = UStoreProvider && UStoreProvider.state && UStoreProvider.state.get().currentStore && UStoreProvider.state.get().currentStore.StoreType\n\n let sLogoutUrl = `${classicUrl}/logout.aspx?SecurityToken=${securityToken}&StoreGuid=${storeID}&NgLanguageCode=${languageCode}&ShowRibbon=${showRibbon}&forceLogin=true${isDraft ? '&showThemeAsDraft=true' : ''}`\n\n // uStore Connect\n if (storeType === 3 && logoutUrl) {\n sLogoutUrl = decodeURIComponent(logoutUrl)\n // uStore Connect Enterprise\n } else if (getAttribute('HomepageToCart') === 'True') {\n // eslint-disable-next-line\n sLogoutUrl = getAttribute('LogoutUrl') ? decodeURIComponent(getAttribute('LogoutUrl')) : 'javascript:void(0)'\n connectEnterpriseLogoutURL.current = true\n }\n\n return (\n <div className=\"signout\">\n <div className=\"info\">\n <div className=\"title\">{t('Profile.My_Account')}</div>\n <div className=\"greeting truncate\">{t('SignOut.Hello_Message', { FirstName })}</div>\n </div>\n <div className=\"btn-container d-flex align-items-center\">\n <a onClick={onLogoutClicked} href={sLogoutUrl} className=\"button-secondary signout-button\">{t('SignOut.SignOut')}</a>\n </div>\n </div>\n )\n}\nexport default SignOut\n","import React, { useEffect, useRef, useState } from 'react'\nimport { useNavigate } from 'react-router-dom'\nimport { Button, Label, ListBox, ListBoxItem, Popover, Select } from 'react-aria-components'\nimport { Icon } from '$core-components'\nimport { useClickOutside } from '$themehooks'\nimport { t } from '$themelocalization'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { redirectToLegacy } from '$ustoreinternal/services/redirect'\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport { CART_MODE, getCartMode } from '$themeservices'\nimport { UStoreProvider } from '@ustore/core'\nimport SignIn from '../SignIn'\nimport SignOut from '../SignOut'\nimport { Slot } from '$core-components'\nimport './ProfileSwitcher.scss'\n\nexport const ProfileSwitcher = ({ currentUser, userOrdersSummary }) => {\n const navigate = useNavigate()\n const [isOpen, setIsOpen] = useState(false)\n const containerRef = useRef(null)\n\n useClickOutside(containerRef, () => setIsOpen(false))\n\n useEffect(() => {\n if (isOpen) {\n containerRef.current.style.position = 'fixed'\n document.documentElement.style.overflow = ''\n document.documentElement.style.paddingRight = ''\n }\n }, [isOpen])\n\n const pendingApprovalOrderCount = (userOrdersSummary) ? userOrdersSummary.PendingApprovalOrderCount : null\n const items = getItemList({ userOrdersSummary, currentUser, pendingApprovalOrderCount })\n\n const onSelectionChange = (key) => {\n const { IsAnonymous, loginPage, pageTitle, additional } = items.find(item => item.id === key)\n if (IsAnonymous) {\n CookiesManager.deleteCookie(storefrontCookies.token)\n redirectToLegacy(createLink(IsAnonymous, loginPage, pageTitle, additional))\n return\n }\n navigate(createLink(IsAnonymous, loginPage, pageTitle, additional))\n }\n\n return (\n <Select className=\"profile-switcher\" onSelectionChange={onSelectionChange} isOpen={isOpen} onOpenChange={setIsOpen}\n onBlur={(e) => e.target.parentNode.parentNode.querySelector('.button-secondary')?.focus()}>\n <Label>{t('ProfileDropDownMenuLabel')}</Label>\n <Button>\n <Icon name=\"user.svg\" width=\"20px\" height=\"20px\" className=\"profile-icon\"/>\n {\n pendingApprovalOrderCount > 0 &&\n <div className=\"pending-approval-notification-icon\">\n <Icon name=\"profile-notification.svg\" width=\"20px\" height=\"20px\" className=\"profile-icon\"/>\n </div>\n }\n </Button>\n <Popover className=\"profile-switcher-popup\" shouldCloseOnInteractOutside={() => false} ref={containerRef}>\n {\n currentUser.IsAnonymous\n ? <SignIn/>\n : <SignOut currentUser={currentUser}/>\n }\n <Slot name=\"user_menu_top\" />\n <ListBox selectionMode=\"single\" items={items}>\n {(item) => <ListBoxItem key={item.id} value={item.value}>\n {item.pageName}\n </ListBoxItem>}\n </ListBox>\n <Slot name=\"user_menu_bottom\" />\n </Popover>\n </Select>\n )\n}\n\nfunction createLink (anonymous, loginURL, pageTitle, additional) {\n const { languageCode } = themeContext.get()\n const pageURL = urlGenerator.get({ page: pageTitle })\n\n if (anonymous) {\n return `${loginURL}&returnNGURL=/${encodeURIComponent(pageURL.slice(pageURL.indexOf(languageCode)))}${additional ? '?' + additional : ''}`\n }\n\n return `${pageURL}${additional ? '?' + additional : ''}`\n}\n\nfunction getItemList ({ userOrdersSummary, currentUser, pendingApprovalOrderCount }) {\n const { userID, storeID, securityToken, storeFriendlyID, languageCode } = themeContext.get()\n const { currentStore } = UStoreProvider.state.get()\n const tempUserId = userID && currentUser.ID === userID ? userID : currentUser.ID\n const isSingleList = getCartMode(currentStore) === CART_MODE.SingleList\n const rejectedOrderCount = userOrdersSummary?.RejectedOrderCount || 0\n const loginPage = `/logout.aspx?tempUserId=${tempUserId}&SecurityToken=${securityToken}&StoreGuid=${storeID}&storeid=${storeFriendlyID}&NgLanguageCode=${languageCode}&forceLogin=true&ShowRibbon=false&SignIn=true`\n const isUStoreConnectEnterprise = currentStore.Attributes.find(attr => attr.Name === 'HomepageToCart')?.Value === 'True'\n\n const baseItem = {\n IsAnonymous: currentUser.IsAnonymous,\n loginPage\n }\n\n return [\n !isSingleList && {\n id: 'my-orders',\n pageName: t('Profile.My_orders'),\n pageTitle: 'order-history',\n additional: 'filter=0',\n ...baseItem,\n },\r\n {\r\n id: 'advanced-order-report',\r\n pageName: t('xmpieAdvancedOrderReport'),\r\n pageTitle: 'advanced-order-report',\r\n ...baseItem,\r\n },\n userOrdersSummary && currentUser.Roles.Shopper && {\n id: 'rejected-orders',\n pageName: t('Profile.Rejected_orders', { rejectedOrderCount }),\n pageTitle: 'order-history',\n additional: 'filter=2',\n ...baseItem,\n },\n userOrdersSummary && currentUser.Roles.Approver && {\n id: 'orders-to-approve',\n pageName: t('Profile.Orders_to_approve', { pendingApprovalOrderCount }),\n pageTitle: 'order-approval-list',\n ...baseItem,\n },\n {\n id: 'draft-orders',\n pageName: t('Profile.Draft_orders'),\n pageTitle: 'drafts',\n ...baseItem,\n },\n {\n id: 'recipient-list',\n pageName: t('Profile.Recipient_lists'),\n pageTitle: 'my-recipient-lists',\n ...baseItem,\n },\n !isUStoreConnectEnterprise && {\n id: 'addresses',\n pageName: t('Profile.Addresses'),\n pageTitle: 'addresses',\n ...baseItem,\n },\n !isUStoreConnectEnterprise && {\n id: 'personal-information',\n pageName: t('Profile.Personal_information'),\n pageTitle: 'personal-information',\n ...baseItem,\n }\n ].filter(Boolean).map(item => ({ ...item, value: item.id }))\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"xs\":\"319px\",\"sm\":\"575px\",\"md\":\"767px\",\"lg\":\"1199px\",\"xl\":\"1919px\"};","import React, { useEffect, useRef, useState } from 'react'\nimport { useNavigate, useParams } from 'react-router-dom'\nimport { ListBox, ListBoxItem, Select } from 'react-aria-components'\nimport { useButton } from 'react-aria'\nimport { Icon } from '$core-components'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { t } from '$themelocalization'\nimport Flag from './Flag'\nimport { switchCurrency, switchCulture } from './utils'\n\nimport './MobileMenuSwitcher.scss'\n\nexport const MobileMenuSwitcher = ({ items, onClose, onTopLevelSelected }) => {\n const [currentItems, setCurrentItems] = useState(items)\n const [selected, setSelected] = useState(null)\n const [isListChanged, setIsListChanged] = useState(false)\n const selectorListRef = useRef()\n const navigate = useNavigate()\n const params = useParams()\n\n useEffect(() => {\n setCurrentItems(items)\n }, [items])\n\n useEffect(() => {\n if (currentItems) {\n setIsListChanged(true)\n }\n }, [currentItems])\n\n useEffect(() => {\n if (isListChanged) {\n document.querySelector('.mobile-menu-switcher [role=\"option\"]')?.focus()\n setIsListChanged(false)\n }\n }, [isListChanged])\n\n const onPress = (e) => {\n if (e.key === 'Escape') {\n if (e.target.getAttribute('role') === 'listbox') {\n onClose && onClose()\n return\n }\n onBack(e.target.getAttribute('data-key'))\n }\n }\n\n const onSelectionChanged = (key) => {\n const selectedItem = currentItems.find(i => i.value === key)\n if (selectedItem?.children.length) {\n onTopLevelSelected && onTopLevelSelected(false)\n setSelected(selectedItem)\n if (selectedItem?.hasProducts){\n const featuredProducts = {\n id: `FP_${selectedItem.id.slice(4)}`,\n value: `FP_${selectedItem.id.slice(4)}`,\n name: t('General.FeaturedProducts'),\n children: []\n }\n setCurrentItems([featuredProducts, ...selectedItem.children])\n } else {\n setCurrentItems(selectedItem.children)\n }\n return\n }\n\n if (selectedItem?.value.startsWith('TCT') || selectedItem?.value.startsWith('CT') || selectedItem?.value.startsWith('FP')) {\n setSelected(null)\n setCurrentItems(items)\n onTopLevelSelected && onTopLevelSelected(true)\n onClose && onClose()\n navigate(urlGenerator.get({ page: 'category', id: selectedItem.value.slice(selectedItem?.value.startsWith('TCT') ? 4 : 3) }))\n return\n }\n\n if (selectedItem?.value.startsWith('CL')) {\n switchCulture(selectedItem.model, params)\n return\n }\n\n if (selectedItem?.value.startsWith('CR')) {\n switchCurrency(selectedItem.model)\n setSelected(null)\n setCurrentItems(items)\n onClose && onClose()\n onTopLevelSelected && onTopLevelSelected(true)\n }\n }\n\n const onBack = (currentSelected) => {\n if (/^TC[TRL]_/.test(currentSelected)) {\n onClose && onClose()\n }\n const current = currentItems.find(i => i.value === currentSelected)\n if (current?.parent?.value?.startsWith('C')) {\n setCurrentItems(current?.parent?.children)\n setSelected(current?.parent)\n return\n }\n onTopLevelSelected && onTopLevelSelected(true)\n setCurrentItems(items)\n setSelected(null)\n }\n\n if (!items) {\n return <div/>\n }\n\n return (\n <Select className=\"mobile-menu-switcher\" onSelectionChange={onSelectionChanged} isOpen={true}>\n <div className=\"mobile-menu-switcher-list\" ref={selectorListRef} onKeyUp={onPress}>\n {selected && <BackButton onPress={() => onBack()} label={selected.name}/>}\n <ListBox items={currentItems} selectionMode=\"single\">\n {(item) => {\n return <ListBoxItem key={item.id} value={item.value}\n className={({ isFocused, isSelected }) => isFocused || isSelected ? 'selected' : ''}>\n <CategoryItem item={item}/>\n <CurrencyItem item={item}/>\n <CultureItem item={item}/>\n </ListBoxItem>\n }}\n </ListBox>\n </div>\n </Select>\n )\n}\n\nfunction BackButton (props) {\n const ref = useRef()\n const { buttonProps } = useButton(props, ref)\n\n return (\n <button {...{ ...buttonProps, className: 'mobile-menu-switcher-back' }} ref={ref}>\n <Icon name=\"back.svg\" height=\"19px\" width=\"9px\"/>\n <div className=\"mobile-submenu-title\">{props.label}</div>\n </button>\n )\n}\n\nfunction CategoryItem ({ item }) {\n return /^T?CT|FP/.test(item.id) && <div>{item.name}</div>\n}\n\nfunction CurrencyItem ({ item }) {\n return /^T?CR/.test(item.id) && <div>\n {item.depth > 0 && <span className=\"currency-sign\">{item.sign}</span>}\n <span className=\"currency-name\">{item.name}</span>\n {item.depth === 0 && <span>{t('Header.Currency')}</span>}\n </div>\n}\n\nfunction CultureItem ({ item }) {\n return /^T?CL/.test(item.id) && <div>\n <Flag name={item.icon} width=\"29\" height=\"19\" className=\"icon\"/>\n <span className=\"culture-name\">{item.name}</span>\n </div>\n}\n","import { useEffect, useState } from 'react'\nimport { Link } from 'react-aria-components'\nimport { UStoreProvider } from '@ustore/core'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { getCartMode, CART_MODE } from '$themeservices'\nimport { Icon } from '$core-components'\n\nimport './Cart.scss'\n\nconst Cart = ({ connectCartUrl = '' }) => {\n const storeItemsCount = UStoreProvider.state.get().cartItemsCount?.ItemsCount\n const [cartItemsCount, setCartItemsCount] = useState(storeItemsCount)\n const isCartLists = getCartMode(UStoreProvider.state.get().currentStore) === CART_MODE.Lists\n\n useEffect(() => {\n setCartItemsCount(UStoreProvider.state.get().cartItemsCount?.ItemsCount)\n }, [storeItemsCount])\n\n const getBadge = () => {\n if (isCartLists && cartItemsCount) {\n return <div className=\"cart-badge\"/>\n }\n if (cartItemsCount) {\n return <div className=\"cart-badge\">{cartItemsCount >= 100 ? '∞' : cartItemsCount}</div>\n }\n return null\n }\n\n const cartUrl = connectCartUrl ? decodeURIComponent(connectCartUrl) : urlGenerator.get({ page: 'cart' })\n\n return (\n <div className=\"cart\">\n <Link href={cartUrl} className=\"cart-icon-container\">\n <Icon name=\"cart.svg\" width=\"23px\" height=\"21px\" className=\"cart-icon\"/>\n {getBadge()}\n </Link>\n </div>\n )\n}\n\nexport default Cart\n","/**\n * A menu popover allowing navigation of categories in the system according to the given categories tree\n *\n * @param {object} categoriesTree - a list of CategoryTreeNodeModel, each element denotes a tree node in the categories tree structure.\n * @param {object} [selectedCategory] - the selected category to show in right panel (in all categories view this will be null and first category will show)\n * @param {boolean} [viewShowAll] - true if the menu should show the all categories view, false if the single category view\n */\n\nimport React, { Component } from 'react'\nimport './NavigationMenu.scss'\nimport { Link } from 'react-router-dom'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { t } from '$themelocalization'\nimport { Scrollbars } from 'react-custom-scrollbars-2'\nimport { decodeStringForURL } from '$ustoreinternal/services/utils'\n\nconst DIV_VIEW_COLUMNS_HEIGHT = 270\nconst DIV_CATEGORY_ROW_HEIGHT = 27\nconst NUMBER_OF_COLUMNS = 3\n\nclass NavigationMenu extends Component {\n constructor (props) {\n super(props)\n\n const { categoriesTree, selectedCategory } = props\n\n if (categoriesTree && categoriesTree.length) {\n const selected = selectedCategory && categoriesTree.find(node => node.Category.ID === selectedCategory.ID) ? selectedCategory : categoriesTree[0].Category\n this.state = {\n selectedCategory: selected\n }\n }\n }\n\n getSubCategoriesMapped (categoryTreeNode, countInColumn) {\n const { Category: category, SubCategories: subCategories } = categoryTreeNode\n let subCategoriesMapped = []\n\n if (category.HasSubCategories && subCategories) {\n let count = 0\n let countAll = 0\n\n subCategoriesMapped = subCategories.map((categoryTreeNodeL2) => {\n const { Category: categoryL2, SubCategories: subCategoriesL2 } = categoryTreeNodeL2\n\n // save the size of the entire group - category L2 and all its L3 categories plus featured products link if exist\n const groupSize = subCategoriesL2.length + ((categoryL2.HasProducts && categoryL2.HasSubCategories) ? 2 : 1)\n let countBlankSpaces = 0\n if (categoryL2.HasSubCategories && subCategoriesL2) {\n const indexInColumn = count\n count += groupSize\n if (count > countInColumn) {\n countBlankSpaces = groupSize - (count - countInColumn) // count the blank spaces to fill in this column\n count = groupSize % countInColumn // set count as the number of items from this group in the next column\n\n // handle the a case when a large group is the first group in the column - its already starting a new column no need to move\n if (indexInColumn === 0) {\n countBlankSpaces = 0 // no need for blank spaces\n count = (groupSize % countInColumn) // set count as the number of items from this group in the next column\n }\n }\n } else {\n count++\n if (count > countInColumn) {\n count = 1 // set count as the number of items from this group in the next column (which is 1)\n }\n }\n\n countAll += groupSize + countBlankSpaces\n\n return {\n ...categoryL2,\n showFeaturedProducts: categoryL2.HasProducts && categoryL2.HasSubCategories,\n subCategories: subCategoriesL2.map(categoryL3Node => categoryL3Node.Category),\n countBlankSpaces,\n countAll\n }\n })\n }\n\n return subCategoriesMapped\n }\n\n componentDidUpdate (prevProps, prevState, snapshot) {\n const { categoriesTree, selectedCategory } = this.props\n\n if (selectedCategory?.FriendlyID === 0) {\n return\n }\n if (categoriesTree && categoriesTree.length && selectedCategory && selectedCategory.ID !== this.state.selectedCategory.ID) {\n const selected = categoriesTree.find(node => node.Category.ID === selectedCategory.ID) ? selectedCategory : categoriesTree[0].Category\n this.setState({ selectedCategory: selected })\n }\n }\n\n render () {\n const { categoriesTree, viewShowAll } = this.props\n\n if (!(categoriesTree && categoriesTree.length)) {\n return null\n }\n\n const selectedCategory = this.state.selectedCategory\n const viewShowOnlyAllPanel = !selectedCategory.HasSubCategories\n const subCategoriesTreeNode = categoriesTree.filter(node => node.Category.ID === selectedCategory.ID)[0]\n\n const countInColumn = Math.floor(DIV_VIEW_COLUMNS_HEIGHT / DIV_CATEGORY_ROW_HEIGHT)\n\n const subCategoriesMapped = !viewShowOnlyAllPanel && this.getSubCategoriesMapped(subCategoriesTreeNode, countInColumn)\n const countAll = subCategoriesMapped && subCategoriesMapped.length && subCategoriesMapped[subCategoriesMapped.length - 1].countAll\n\n return (\n <div className={`navigation-menu ${(viewShowAll ? 'view-show-all' : '')} ${(viewShowOnlyAllPanel ? 'hide-category-panel' : '')}`}>\n {\n viewShowAll &&\n <div className=\"show-all-panel\">\n {\n <Scrollbars className=\"scrollbar\" universal hideTracksWhenNotNeeded autoHeight autoHeightMax=\"350\"\n renderThumbVertical={props => <div {...props} className=\"thumb-vertical\" />}>\n <div className=\"content\">\n {\n categoriesTree.map(({ Category }, i) => {\n const { ID, FriendlyID, Name } = Category\n return <div key={i} className={`category-l1-menu ${(selectedCategory.ID === ID ? 'selected' : '')}`}\n onMouseOver={() => this.setState({ selectedCategory: Category })}>\n <Link className=\"category-name truncate\" dangerouslySetInnerHTML={{ __html: Name }} key={i} to={urlGenerator.get({ page: 'category', id: FriendlyID, name: decodeStringForURL(Name) })} />\n </div>\n })\n }\n </div>\n </Scrollbars>\n }\n </div>\n }\n <div className=\"category-panel\">\n <div className=\"category-l1-title\">\n <span className=\"category-l1\">\n <Link dangerouslySetInnerHTML={{ __html: selectedCategory.Name }} to={urlGenerator.get({ page: 'category', id: selectedCategory.FriendlyID, name: decodeStringForURL(selectedCategory.Name) })} />\n </span>\n {\n selectedCategory.HasProducts &&\n <span className=\"featured-products\">\n <Link className=\"featured-products-link\" to={urlGenerator.get({ page: 'category', id: selectedCategory.FriendlyID, name: decodeStringForURL(selectedCategory.Name) })}>\n {t('NavigationMenu.See_featured_products')}\n </Link>\n </span>\n }\n </div>\n <div className=\"view-columns\">\n {\n subCategoriesMapped && subCategoriesMapped.map((categoryL2, i) => {\n const { FriendlyID, Name, showFeaturedProducts, subCategories, countBlankSpaces } = categoryL2\n return <React.Fragment key={i}>\n {\n // if this categoryL2 and its sub rows will span more than the place in this column it should move to next column - fill with blank rows\n countBlankSpaces > 0 &&\n [...Array(countBlankSpaces)].map((x, i) => <div key={i} className=\"column category\"></div>)\n }\n <div key={i} className=\"column category\">\n <Link className=\"category-l2 truncate\" dangerouslySetInnerHTML={{ __html: Name }} key={i} to={urlGenerator.get({ page: 'category', id: FriendlyID, name: decodeStringForURL(Name) })} />\n </div>\n {\n showFeaturedProducts &&\n <div key=\"featured-products\" className=\"column category featured-products-category-item\">\n <Link className=\"category-l3 truncate\" key=\"key-featured-products\" to={urlGenerator.get({ page: 'category', id: FriendlyID, name: decodeStringForURL(Name) })}>\n {t('General.FeaturedProducts')}\n </Link>\n </div>\n }\n {\n subCategories && subCategories.map((categoryL3, i) => {\n const { FriendlyID, Name } = categoryL3\n\n return <div key={i} className=\"column category\">\n <Link className=\"category-l3 truncate\" dangerouslySetInnerHTML={{ __html: Name }} key={i} to={urlGenerator.get({ page: 'category', id: FriendlyID, name: decodeStringForURL(Name) })} />\n </div>\n })\n }\n </React.Fragment>\n })\n }\n {\n // if there are categories only in first column, fill up another column of blank rows for pushing the category image to the right\n (countAll <= countInColumn)\n ? [...Array(countInColumn)].map((x, i) => <div key={i} className=\"column category\" />) : ''\n }\n {\n selectedCategory.ImageUrl &&\n <div className=\"column category-image-column\">\n <div className=\"category-image-wrapper\"><img src={selectedCategory.ImageUrl} className=\"category-image\" alt={`${selectedCategory.Name} Category`} /></div>\n </div>\n }\n </div>\n {\n // if the total count of the rows (categories, subcategories, etc) are more than the span of the designated columns - show a link to see more\n (countAll > countInColumn * NUMBER_OF_COLUMNS)\n ? <div className=\"see-more\">\n <Link className=\"see-more-link\" to={urlGenerator.get({ page: 'category', id: selectedCategory.FriendlyID, name: decodeStringForURL(selectedCategory.Name) })}>{t('NavigationMenu.See_More')}</Link>\n </div> : null\n }\n </div>\n </div>\n )\n }\n}\n\nexport default NavigationMenu\n","import React, { useState } from 'react'\nimport { Link } from 'react-router-dom'\nimport { Popover, PopoverBody } from 'reactstrap'\nimport NavigationMenu from './NavigationMenu'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { decodeStringForURL } from '$ustoreinternal/services/utils'\nimport { t } from '$themelocalization'\nimport './CategoriesNavbar.scss'\n\nconst CategoriesNavbar = ({ categoriesTree }) => {\n const [hoveredItem, setHoveredItem] = useState(null)\n const [selectedCategory, setSelectedCategory] = useState(null)\n\n if (!(categoriesTree && categoriesTree.length > 0)) {\n return null\n }\n\n const onMouseEnter = (category, target) => {\n queueMicrotask(() => {\n setSelectedCategory(category)\n setHoveredItem(document.getElementById(`id-${category}`))\n })\n }\n\n const onMouseLeave = () => {\n setSelectedCategory(null)\n setHoveredItem(null)\n }\n\n return (<div className=\"categories-navbar\">\n <div className=\"category-title-wrapper view-show-all\" onMouseEnter={(e) => onMouseEnter(0, e.target)} onMouseLeave={onMouseLeave}>\n <span className={`category-title ${selectedCategory === 0 ? 'highlight' : ''}`} id=\"id-0\">\n {t('Header.All_Categories')}\n </span>\n <span className=\"category-spacer\"></span>\n {\n hoveredItem && selectedCategory === 0 &&\n <Popover className=\"\" fade={false} isOpen={true} placement=\"bottom-start\"\n target={hoveredItem} container={hoveredItem} popperClassName=\"categories-navbar-popper\">\n <PopoverBody>\n <NavigationMenu categoriesTree={categoriesTree} viewShowAll={true} selectedCategory={null}/>\n </PopoverBody>\n </Popover>\n }\n </div>\n {\n categoriesTree.map(({ Category, SubCategories }, i) => {\n const { FriendlyID, Name } = Category\n return <Link className=\"category-title-wrapper\"\n onMouseEnter={(e) => onMouseEnter(FriendlyID)}\n onMouseLeave={onMouseLeave}\n key={i}\n to={urlGenerator.get({ page: 'category', id: FriendlyID, name: decodeStringForURL(Name) })}>\n <span className={`category-title ${selectedCategory === FriendlyID ? 'highlight' : ''}`}\n key={i} id={`id-${FriendlyID}`}>\n <span className=\"link\" key={i} dangerouslySetInnerHTML={{ __html: Name }}/>\n </span>\n {\n hoveredItem && selectedCategory === FriendlyID && SubCategories?.length > 0 &&\n <Popover fade={false} isOpen={true} placement=\"bottom-start\"\n target={hoveredItem} container={document.body} popperClassName=\"categories-navbar-popper\">\n <PopoverBody>\n <NavigationMenu categoriesTree={categoriesTree} viewShowAll={false} selectedCategory={Category}/>\n </PopoverBody>\n </Popover>\n }\n </Link>\n })\n }\n </div>)\n}\n\nexport default CategoriesNavbar\n","import React, { useEffect, useRef, useState } from 'react'\nimport { Button, MenuTrigger } from 'react-aria-components'\nimport { Icon } from '$core-components'\nimport { MobileMenuSwitcher, getMobileMenuItems } from './switchers'\nimport './MobileMenu.scss'\n\nexport const MobileMenu = ({\n currentCulture,\n currentCurrency,\n currentUser,\n categoriesTree,\n cultures,\n currencies,\n}) => {\n const drawerRef = useRef()\n const [isOpen, setIsOpen] = useState(false)\n const [slideOut, setSlideOut] = useState(false)\n const [menuItems, setMenuItems] = useState(getMobileMenuItems(categoriesTree, cultures, currencies, currentCurrency, currentCulture))\n\n useEffect(() => {\n const onKeyUp = (e) => {\n if (e.key === 'Escape' && e.target.tagName === 'BODY') {\n closeDrawer()\n }\n }\n\n window.addEventListener('keyup', onKeyUp)\n return () => {\n window.removeEventListener('keyup', onKeyUp)\n }\n }, [])\n\n useEffect(() => {\n setMenuItems(getMobileMenuItems(categoriesTree, cultures, currencies, currentCurrency, currentCulture))\n }, [categoriesTree, cultures, currencies, currentCurrency, currentCulture])\n\n useEffect(() => {\n if (drawerRef.current) {\n let options = { threshold: [0, 0.25, 0.5, 0.75, 1] }\n const callback = (entries) => {\n if (!entries[0].isIntersecting) {\n setIsOpen(false)\n setSlideOut(false)\n observer.disconnect()\n }\n }\n let observer = new IntersectionObserver(callback, options)\n observer.observe(drawerRef.current)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [drawerRef.current])\n\n const openDrawer = () => setIsOpen(true)\n const closeDrawer = () => setSlideOut(true)\n const closeFromSignInAndOut = (e) => {\n if (e.key === 'Escape' &&\n (e.target.classList.contains('signin-button') || e.target.classList.contains('signout-button'))) {\n closeDrawer()\n }\n }\n\n const onAnimationEnd = (e) => e.target.querySelector('[role=\"option\"]').focus()\n\n return <>\n <MenuTrigger onOpenChange={(isOpen) => isOpen && openDrawer()} isOpen={isOpen}>\n <Button aria-label=\"Menu\" className=\"menu-button\">\n <Icon name=\"menu.svg\" width=\"23px\" height=\"20px\" className=\"menu-icon\"\n wrapperClassName=\"menu-icon-container\"/>\n </Button>\n </MenuTrigger>\n {isOpen && <div className=\"mobile-menu\" onKeyUp={(e) => {\n if (e.key === 'Escape' && e.target.classList.contains('react-aria-Button')) {\n closeDrawer()\n }\n }}>\n <div className=\"drawer-overlay\" onMouseDown={closeDrawer}/>\n <div onAnimationEnd={onAnimationEnd} className={`drawer-wrapper ${slideOut ? 'slide-out' : ''}`} ref={drawerRef} onKeyUp={closeFromSignInAndOut}\n onBlur={(e) => {\n if (!drawerRef.current.contains(e.relatedTarget)) {\n e.target.focus()\n }\n }}\n >\n <MobileMenuSwitcher items={menuItems[0].children} onClose={closeDrawer}/>\n </div>\n </div>}\n </>\n}\n","import React, { useEffect, useState, useRef } from 'react';\nimport { useNavigate, useLocation, useParams } from 'react-router-dom'\n// import { InputGroup } from 'reactstrap'\nimport { Button, Input } from 'react-aria-components'\nimport { Icon } from '$core-components'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { useUStoreState } from '$ustoreinternal/services/hooks';\nimport { UStoreProvider } from '@ustore/core'\nimport { t } from '$themelocalization'\nimport './Search.scss'\n\nconst escapeValue = (value) => value ? value.replace(/[&:<>'\"+*?\\\\/.%#|]/g, \" \").trim() : ''\n\nconst Search = ({className, onClose}) => {\n const containerRef = useRef()\n const params = useParams()\n const { customState } = useUStoreState()\n const [searchValue, setSearchValue] = useState(params.page === 'search' ? params.id : '')\n const navigate = useNavigate()\n const location = useLocation()\n\n useEffect(() => {\n if (window.ga) {\n window.ga('send', 'pageview', location.pathname);\n }\n }, [location])\n\n useEffect(() => {\n if (className.endsWith('search-visible')) {\n containerRef?.current?.querySelector('input').focus()\n }\n },[className])\n\n const onSearchClicked = () => {\n let value = escapeValue(searchValue)\n if (value.length > 0) {\n UStoreProvider.state.customState.set('searchValue', value)\n navigate(urlGenerator.get({page: 'search', id: decodeURIComponent(value)}))\n }\n }\n\n const onKeyPress = (event) => {\n if (event.key === 'Enter') {\n onSearchClicked()\n event.preventDefault();\n }\n if (event.key === 'Escape') {\n UStoreProvider.state.customState.delete('searchValue')\n onClose && onClose()\n }\n }\n\n const onChange = (e) => {\n UStoreProvider.state.customState.delete('searchValue')\n setSearchValue(e.target.value)\n }\n\n return customState && <div className={`search ${className || ''}`} ref={containerRef}>\n <Input type=\"text\" className=\"search-input form-control\"\n value={searchValue}\n placeholder={t('Search.Search_Products')}\n onChange={onChange}\n onKeyUp={onKeyPress}\n />\n <Button className=\"search-button\" onPress={onSearchClicked}>\n <div className=\"search-icon-container\">\n <Icon name=\"search.svg\" width=\"21px\" height=\"21px\" className=\"search-icon\"/>\n </div>\n </Button>\n </div>\n\n}\n\nexport default Search\n","import React, { useEffect, useState, useRef } from 'react'\nimport { Link } from 'react-router-dom'\nimport { Button } from 'react-aria-components'\nimport { Icon } from '$core-components'\nimport { getVariableValue } from '$ustoreinternal/services/cssVariables'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\nimport { Slot } from '$core-components'\nimport { CultureSwitcher, CurrencySwitcher, ProfileSwitcher } from './switchers'\nimport Cart from './Cart'\nimport CategoriesNavbar from './CategoriesNavbar'\nimport { MobileMenu } from './MobileMenu'\nimport Search from './Search'\nimport theme from '$styles/_theme.scss'\nimport './Header.scss'\n\nconst getCartUrl = (currentStore) => {\n const { cartUrl } = themeContext.get()\n return (currentStore && currentStore.StoreType === 3 && cartUrl) ? cartUrl : ''\n}\n\nconst Header = ({ customState, currencies, cultures, currentCulture, currentUser, currentCurrency, currentStore }) => {\n const [mobileSearchVisible, setMobileSearchVisible] = useState(false)\n const [connectCartUrl, setConnectCartUrl] = useState(getCartUrl(currentStore))\n const searchButtonRef = useRef()\n\n useEffect(() => {\n setConnectCartUrl(getCartUrl(currentStore))\n }, [currentStore])\n\n if (!customState || !currentCulture || !currentCurrency) {\n return null\n }\n\n const { categoriesTree, userOrdersSummary } = customState\n\n const variableForLogoImg = window.matchMedia(`(min-width: ${theme.lg})`).matches ? '--logo-image' : '--logo-image-mobile'\n const currentLogo = getVariableValue(variableForLogoImg, require(`$assets/images/logo.png`), true)\n\n return (<div className=\"header\">\n <Slot name=\"header_above\"/>\n <div className=\"header-stripe\">\n <div className=\"logo-wrapper\">\n <MobileMenu {...{\n currentCulture,\n currentCurrency,\n currentUser,\n categoriesTree,\n userOrdersSummary,\n cultures,\n currencies,\n }}/>\n <Link to={urlGenerator.get({ page: 'home' })} reloadDocument={false}>{currentLogo &&\n <img className=\"logo\" src={currentLogo} alt=\"logo\"/>}</Link>\n </div>\n {categoriesTree?.length > 0 && <CategoriesNavbar categoriesTree={categoriesTree}/>}\n <Search className={mobileSearchVisible ? 'search-visible' : 'search-hidden'} onClose={() => {\n setMobileSearchVisible(false)\n searchButtonRef.current?.focus()\n }}/>\n <div className=\"right-icons\">\n <Button className=\"header-mobile-search-button\"\n onPress={() => setMobileSearchVisible(!mobileSearchVisible)}\n ref={searchButtonRef}\n >\n <Icon name=\"search.svg\" width=\"20px\" height=\"20px\"/>\n </Button>\n <CultureSwitcher {...{ currentCulture, cultures }}/>\n <CurrencySwitcher {...{ currentCurrency, currencies }}/>\n {currentUser && <ProfileSwitcher {...{ currentUser, userOrdersSummary }}/>}\n <Cart connectCartUrl={connectCartUrl}/>\n </div>\n </div>\n <Slot name=\"header_below\"/>\n </div>\n )\n}\n\nexport default Header\n","import React from 'react'\nimport './Footer.scss'\nimport { Slot } from '$core-components'\n\n/**\n * This component represents the footer in the store\n */\nconst Footer = () => {\n return (\n <div className=\"footer\">\n <Slot name=\"footer\" />\n </div>\n )\n}\n\nexport default Footer\n","import React from 'react'\nimport Icon from '$core-components/Icon'\n\nimport './CrossCloseButton.scss'\n\nconst CrossCloseButton = ({ onPress, className }) => {\n return (\n <div onClick={onPress} onKeyDown={(e) => e.key === 'Enter' && onPress(e)} tabIndex=\"0\" role=\"button\" aria-label=\"Close\"\n className={`cross-close-button-container ${className || ''}`}>\n <Icon name=\"close_black.svg\" width=\"15px\" height=\"15px\" className=\"cross-close-button\" role=\"presentation\"/>\n </div>\n )\n}\n\nexport default CrossCloseButton\n","import React from 'react'\n\nimport { t } from '$themelocalization'\nimport CrossCloseButton from './CrossCloseButton'\nimport './CookiesConsent.scss'\n\nconst CookiesConsent = ({ onCookiesPolicyClicked, onCloseCookiesConsentClicked }) => {\n const localizeCookiesConsent = () => {\n const localizationString = t('GdprRibbon.Cookies_consent')\n const stringArray = localizationString.split('%{0}')\n stringArray.splice(1, 0, <span onClick={onCookiesPolicyClicked} onKeyDown={(e)=> e.key === 'Enter' && onCookiesPolicyClicked(e)} key=\"content-policy\" tabIndex=\"0\">{t('GdprRibbon.Cookie_policy')}</span>)\n return stringArray\n }\n\n return (\n <>\n <div role=\"dialog\" className=\"cookies-consent-container\">\n <div className=\"cookies-consent-title\">{t('GdprRibbon.This_website_uses_cookies')}<span style={{opacity:'0'}}>.</span></div>\n <div className=\"cookies-consent-description\">\n {localizeCookiesConsent()}\n </div>\n <CrossCloseButton className=\"consent\" onPress={onCloseCookiesConsentClicked}/>\n </div>\n\n </>\n )\n}\n\nexport default CookiesConsent\n","import React from 'react'\n\nimport { t } from '$themelocalization'\nimport CrossCloseButton from './CrossCloseButton'\nimport { getCookiesForRibbon } from '$ustoreinternal/services/cookies'\nimport './CookiesPolicy.scss'\n\nconst CookiesPolicy = ({ onCloseCookiesPolicyClicked }) => {\n return (\n <div className=\"cookies-policy-container\">\n <CrossCloseButton className=\"policy\"\n onPress={onCloseCookiesPolicyClicked}/>\n <div className=\"cookies-policy-title\">{t('GdprRibbon.Cookie_policy')}</div>\n <div className=\"cookies-policy-description\">\n <div className=\"cookies-explanation-title\">\n {t('GdprRibbon.CookieExplanationHeader1')}\n </div>\n <div className=\"cookies-explanation-description\">\n {t('GdprRibbon.CookieExplanationParagraph1_1')}\n <br/>\n {t('GdprRibbon.CookieExplanationParagraph1_2')}\n </div>\n <div className=\"cookies-necessary-title\">\n {t('GdprRibbon.CookieExplanationHeader2')}\n </div>\n <div className=\"cookies-necessary-description\">\n {t('GdprRibbon.CookieExplanationParagraph2_1')}\n </div>\n <div className=\"cookies-table-title\">\n {t('GdprRibbon.Table_title')}\n </div>\n <div className=\"cookies-table\">\n <table>\n <thead className=\"table-head\">\n <tr className=\"cookie-row\">\n <td><div>{t('lblName')}</div></td>\n <td><div>{t('lblDomain')}</div></td>\n <td><div>{t('lblExpiration')}</div></td>\n <td><div>{t('lblDescription')}</div></td>\n </tr>\n </thead>\n <tbody>\n {getCookiesForRibbon().map((cookie) => {\n const { name, expiration: { amount, units }, description } = cookie\n return (\n <tr key={name} className=\"cookie-row\">\n <td><div>{name}</div></td>\n <td><div>{window.location.hostname}</div></td>\n <td><div>{amount && `${amount}`}{t(units)}</div></td>\n <td><div>{t(description)}</div></td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n </div>\n </div>\n )\n}\n\nexport default CookiesPolicy\n","import React from 'react'\nimport { UStoreProvider } from '@ustore/core'\n\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport CookiesConsent from \"./CookiesConsent\";\nimport CookiesPolicy from \"./CookiesPolicy\";\nimport './CookiesRibbon.scss'\n\nconst CookieRibbon = ({ showRibbon }) => {\n const [showCookiesPolicy, setShowCookiesPolicy] = React.useState(false)\n\n if (!showRibbon) {\n return null\n }\n\n const closeCookiesRibbon = () => {\n UStoreProvider.state.customState.set('showCookieRibbon', false)\n CookiesManager.setCookie({ key: storefrontCookies.cookieRibbonNotShownYet, value: 'false' })\n }\n const openCookiesPolicy = () => setShowCookiesPolicy(true)\n const closeCookiesPolicy = () => setShowCookiesPolicy(false)\n\n return (\n <div className=\"cookies-ribbon\">\n {showCookiesPolicy\n ? <CookiesPolicy onCloseCookiesPolicyClicked={closeCookiesPolicy}/>\n : <CookiesConsent onCloseCookiesConsentClicked={closeCookiesRibbon}\n onCookiesPolicyClicked={openCookiesPolicy}/>}\n </div>\n )\n}\n\nexport default CookieRibbon\n","import { useEffect } from 'react'\nimport { useLocation } from 'react-router-dom'\nimport { getCssSelector } from 'css-selector-generator'\nimport legacyIframeHandler from '$ustoreinternal/services/legacyIframeHandler'\n\nlet lastSelectedNode\n\nfunction RouteChangeListener () {\n const location = useLocation()\n\n useEffect(() => {\n document.body.addEventListener('focusin', (e) => {\n lastSelectedNode = getCssSelector(e.target)\n })\n }, [])\n\n useEffect(() => {\n // This callback will be invoked every time the location (route) changes\n legacyIframeHandler.handleRoute(location.pathname + location.search)\n\n if (lastSelectedNode) {\n document.querySelector(lastSelectedNode)?.focus()\n }\n }, [location]) // The effect will re-run when the location changes\n\n return null // This component doesn't render anything\n}\n\nexport default RouteChangeListener\n","import React, { Component, createRef } from 'react'\nimport HeadSEO from './HeadSEO'\nimport Header from './Header'\nimport Footer from './Footer'\nimport './Layout.scss'\nimport CookiesRibbon from \"./CookiesRibbon\";\nimport ResizeObserver from \"resize-observer-polyfill\"\nimport RouteChangeListener from './RouteChangeListener'\n/**\n * The main page wrapper - contains the Header and Footer and gets children as the main content\n *\n * @param {object} state - state of store\n * @param {component} children - React components to be presented between header and footer\n * @param {string} [className] - class name to append to the container div\n */\n\nclass Layout extends Component {\n constructor() {\n super();\n\n this.isConnectStore = false\n this.resizeObserver = null;\n this.resizeElement = createRef()\n }\n\n static currentHeight = 0\n\n _debounce = function (ms, fn) {\n var timer;\n return function () {\n clearTimeout(timer)\n var args = Array.prototype.slice.call(arguments)\n args.unshift(this)\n timer = setTimeout(fn.bind.apply(fn, args), ms)\n };\n };\n\n componentWillUnmount() {\n if (this.resizeObserver) this.resizeObserver.disconnect();\n }\n\n render() {\n const { state, children, className } = this.props\n\n const storeType = (state && state.currentStore) ? state.currentStore.StoreType : null\n if (storeType === 3) {\n // connect store - hide header and footer.\n this.isConnectStore = true\n }\n\n if (this.isConnectStore) {\n if (this.resizeObserver) this.resizeObserver.disconnect();\n\n this.resizeObserver = new ResizeObserver(this._debounce(300, function (entries) {\n entries.forEach(entry => {\n if (Layout.currentHeight !== entry.contentRect.height) {\n Layout.currentHeight = entry.contentRect.height\n console.log('USTORE_CONNECT_RESIZE height: ' + entry.contentRect.height)\n window.parent.postMessage({\n type: '@USTORE_CONNECT_RESIZE',\n data: {\n height: entry.contentRect.height,\n width: entry.contentRect.width\n }\n }, '*')\n }\n })\n }))\n\n if (this.resizeElement.current) this.resizeObserver.observe(this.resizeElement.current);\n }\n\n let isPreviewMode = false\n let url = ''\n try {\n // wrapping in try catch so that in cross-domain (connect store) it will be ignored.\n url = window.top.location.href\n } catch (error) { }\n\n if (url && (url.includes('MobilePreview.aspx') || url.includes('ThemeCustomization.aspx')))\n isPreviewMode = true\n\n const showHeaderFooter = storeType === 4 ?\n state.currentStore.Attributes.find(attr => attr.Name === 'ShowHeaderAndFooter' && attr.Value === 'True') :\n (!this.isConnectStore || isPreviewMode)\n\n return (\n <div>\n <HeadSEO {...state} />\n <div className={`layout ${className ? className : ''} ${isPreviewMode ? 'preview' : ''} ${!showHeaderFooter ? 'connect' : ''}`}>\n {showHeaderFooter && <Header {...state} />}\n <div className=\"main-content\" ref={this.resizeElement}>\n {children}\n </div>\n {showHeaderFooter && <Footer />}\n {state.customState && state.currentStore && <CookiesRibbon showRibbon={state.customState.showCookieRibbon} />}\n </div>\n <RouteChangeListener/>\n </div>\n )\n }\n}\n\nexport default Layout\n","import Layout from '../../components/Layout'\r\nimport React, { Component } from 'react'\r\nimport './styles.scss'\r\nimport Icon from '$core-components/Icon'\r\nimport ImageLoader from '$core-components/ImageLoader'\r\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\r\nimport { Link } from '$routes'\r\nimport { t } from '$themelocalization'\r\n\r\nclass DatePicker extends Component {\r\n currentDate = new Date();\r\n constructor (props) {\r\n super(props)\r\n\r\n this.state = {\r\n currentMonth: this.currentDate.getMonth(),\r\n currentYear: this.currentDate.getFullYear()\r\n }\r\n }\r\n\r\n changeDate = (par, type) => {\r\n const cy = this.state.currentYear;\r\n const cm = this.state.currentMonth;\r\n let newCy, newCm;\r\n \r\n if(type == 'year') {\r\n newCy = par ? cy + 1 : cy - 1;\r\n\r\n this.setState({\r\n currentYear: newCy\r\n });\r\n }\r\n\r\n if(type == 'month') {\r\n\r\n newCm = par ? cm + 1 : cm - 1;\r\n newCy = cy;\r\n\r\n if ( cm >= 11 & par) {\r\n newCm = 0;\r\n newCy = cy + 1;\r\n }\r\n\r\n if ( cm <= 0 & !par ) { \r\n newCm = 11;\r\n newCy = cy - 1;\r\n }\r\n\r\n this.setState({\r\n currentMonth: newCm,\r\n currentYear: newCy\r\n });\r\n \r\n }\r\n\r\n }\r\n\r\n componentDidMount () {\r\n }\r\n\r\n render () {\r\n const cells = [];\r\n const d = new Date(this.state.currentYear, this.state.currentMonth);\r\n\r\n function getDay(date) {\r\n var day = date.getDay();\r\n if (day == 0) day = 7;\r\n return day - 1;\r\n }\r\n\r\n for (var i = 0; i < getDay(d); i++) {\r\n cells.push(0);\r\n }\r\n\r\n while (d.getMonth() == this.state.currentMonth) {\r\n cells.push(d.getDate())\r\n d.setDate(d.getDate() + 1);\r\n }\r\n\r\n const dispMonth = this.state.currentMonth >= 9 ? this.state.currentMonth + 1 : '0' + String(this.state.currentMonth + 1);\r\n\r\n return (\r\n <div className={`datepicker ${this.props.show ? 'dp-show' : ''}`}>\r\n <div className=\"dp-head\">\r\n <div className=\"dp-year\">\r\n <div className=\"dpy-prev dpy-arrow\" onClick={() => this.changeDate(false, 'year')}>\r\n <Icon name=\"more_in.svg\" width=\"22px\" height=\"22px\"/>\r\n </div>\r\n <div className=\"dp-year-num\">{this.state.currentYear}</div>\r\n <div className=\"dpy-next dpy-arrow\" onClick={() => this.changeDate(true, 'year')}>\r\n <Icon name=\"more_in.svg\" width=\"22px\" height=\"22px\"/>\r\n </div>\r\n </div>\r\n <div className=\"dp-year\">\r\n <div className=\"dpy-prev dpy-arrow\" onClick={() => this.changeDate(false, 'month')}>\r\n <Icon name=\"more_in.svg\" width=\"22px\" height=\"22px\"/>\r\n </div>\r\n <div className=\"dp-year-num\">{dispMonth}</div>\r\n <div className=\"dpy-next dpy-arrow\" onClick={() => this.changeDate(true, 'month')}>\r\n <Icon name=\"more_in.svg\" width=\"22px\" height=\"22px\"/>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"dp-week dp-grid\">\r\n <div>{t('xmpieAdvancedOrderReport.monday')}</div>\r\n <div>{t('xmpieAdvancedOrderReport.tuesday')}</div>\r\n <div>{t('xmpieAdvancedOrderReport.wednesday')}</div>\r\n <div>{t('xmpieAdvancedOrderReport.thuesday')}</div>\r\n <div>{t('xmpieAdvancedOrderReport.friday')}</div>\r\n <div>{t('xmpieAdvancedOrderReport.saturday')}</div>\r\n <div>{t('xmpieAdvancedOrderReport.sunday')}</div>\r\n </div>\r\n <div className=\"dp-cells dp-grid\">\r\n {\r\n cells.map((item, i) => {\r\n const num = item ? item : '';\r\n\r\n return(\r\n <div \r\n key={i} \r\n onClick={item ? () => this.props.change({\r\n type: 'data',\r\n name: this.props.name,\r\n year: this.state.currentYear,\r\n month: this.state.currentMonth + 1,\r\n day: num\r\n }) : () => false }\r\n\r\n className={item ? 'clickable' : ''}\r\n >{num}</div>\r\n )\r\n })\r\n }\r\n </div>\r\n <div className=\"hidder-field\" onClick={() => this.props.change({type: 'hidden', name: this.props.name})}></div>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default DatePicker\r\n","import Layout from '../../components/layout/'\r\nimport React, { Component } from 'react'\r\nimport './styles.scss'\r\nimport Icon from '$core-components/Icon'\r\nimport ImageLoader from '$core-components/ImageLoader'\r\n//import urlGenerator from '$ustoreinternal/services/urlGenerator'\r\n//import { Link } from '$routes'\r\nimport { t } from '$themelocalization'\r\nimport { UStoreProvider } from '@ustore/core'\r\nimport DatePicker from './DatePicker.js'\r\n\r\nclass AdvancedOrderReport extends Component {\r\n constructor (props) {\r\n super(props)\r\n\r\n this.orderIdInput = React.createRef();\r\n this.searchValueInput = React.createRef();\r\n \r\n\r\n this.state = {\r\n hiddenFields: true,\r\n sort: 'date',\r\n sortType: 'D',\r\n showDPFrom: false,\r\n showDPTill: false,\r\n load: [],\r\n fields: {\r\n orderid: '',\r\n searchValue: '',\r\n searchProductPropertyMode: 'OR',\r\n status: {\r\n more: false,\r\n val: '',\r\n option: ''\r\n },\r\n type: {\r\n more: false,\r\n val: '',\r\n option: ''\r\n },\r\n user: {\r\n more: false,\r\n val: '',\r\n option: ''\r\n },\r\n group: {\r\n more: false,\r\n val: '',\r\n option: ''\r\n },\r\n product: {\r\n more: false,\r\n val: '',\r\n option: '',\r\n filter: false\r\n },\r\n datepicker: {\r\n from: '',\r\n till: ''\r\n },\r\n price: {\r\n more: false,\r\n from: '',\r\n to: ''\r\n },\r\n productProperty: { \r\n more: false,\r\n val: '',\r\n option: '',\r\n filter: false\r\n }\r\n },\r\n api: {\r\n statuses: false,\r\n types: false,\r\n groups: false,\r\n users: false,\r\n search: false,\r\n details: [false],\r\n products: false,\r\n reorderDetails: false,\r\n createReorder: false,\r\n productProperties: false\r\n\r\n },\r\n detailsPage: 1,\r\n detailsData: [false],\r\n detailsOrderId: 0,\r\n first: {},\r\n searchData: [false],\r\n searchPage: 1,\r\n productsList: {},\r\n kitShow: false,\r\n reorderDetailsData: {},\r\n createReorderData: {}, \r\n productPropertyFilters: [],\r\n\r\n }\r\n }\r\n\r\n API = async function(method, body, first) {\r\n\r\n const load = this.state.load\r\n load.push(true);\r\n\r\n this.setState({\r\n load\r\n })\r\n\r\n if( first && this.state.first[method] ) {\r\n return false;\r\n }\r\n\r\n try {\r\n const response = await fetch(this.props.customState.API_URL + 'ustore/advancedorderhistory/AOHservice.svc/' + method, {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(body)\r\n });\r\n\r\n\tconst result = await response.json();\r\n\r\n if(result.Error){\r\n console.log(result.ErrorMessage); \r\n //alert(esult.ErrorMessage); \r\n return;\r\n }\r\n\r\n \r\n const api = this.state.api;\r\n const data = JSON.parse(result.Data);\r\n //console.log('method', method);\r\n //console.log('data', data);\r\n\r\n api[method] = data;\r\n this.setState({\r\n api\r\n });\r\n\r\n if ( method === 'search' && data.Page ) {\r\n const searchData = this.state.searchData;\r\n if ( searchData[data.Page.Number] ) {\r\n searchData[data.Page.Number] = data.Orders;\r\n } else {\r\n searchData.push( data.Orders );\r\n }\r\n this.setState({\r\n searchData\r\n });\r\n } \r\n\r\n switch (method) {\r\n case 'search':\r\n const searchData = this.state.searchData;\r\n if ( searchData[data.Page.Number] ) {\r\n searchData[data.Page.Number] = data.Orders;\r\n } else {\r\n searchData.push( data.Orders );\r\n }\r\n this.setState({\r\n searchData\r\n });\r\n\r\n break;\r\n\r\n case 'users':\r\n this.search(true);\r\n\r\n break;\r\n\r\n case 'details':\r\n const details = this.state.detailsData\r\n if ( details[data.Page.Number] ) {\r\n details[data.Page.Number] = data.Products;\r\n } else {\r\n details.push( data.Products );\r\n }\r\n this.setState({\r\n detailsData: details\r\n });\r\n break;\r\n\r\n case 'reorderdetails':\r\n this.setState({\r\n reorderDetailsData: data\r\n });\r\n //console.log('reorderdetails', data)\r\n \r\n break;\r\n\r\n case 'createreorder':\r\n this.setState({\r\n createReorderData: data\r\n });\r\n //console.log('createReorderData request', data)\r\n \r\n break;\r\n\r\n case 'GetProductProperties':\r\n this.setState({\r\n api: {\r\n ...this.state.api,\r\n productProperties: data\r\n }\r\n });\r\n console.log('GetProductProperties', data);\r\n break;\r\n\r\n\r\n default: break;\r\n }\r\n\r\n load.pop();\r\n this.setState({\r\n load, \r\n })\r\n\r\n //this.state.first[method] = true;\r\n this.setState(prevState => ({\r\n first: {\r\n ...prevState.first,\r\n [method]: true\r\n }\r\n }));\r\n \r\n \r\n } catch (error) {\r\n load.pop();\r\n this.setState({\r\n load\r\n })\r\n console.log('Error:', error);\r\n }\r\n } \r\n\r\n hiddenFieldsChange = () => {\r\n this.setState({\r\n hiddenFields: !this.state.hiddenFields\r\n })\r\n\r\n }\r\n\r\n fieldChange = e => {\r\n const field = e.target.getAttribute('data-field'), \r\n val = e.target.value, \r\n fields = this.state.fields;\r\n\r\n fields[field].val = val;\r\n fields[field].more = val.length > 0 ? true : false;\r\n \r\n this.setState({\r\n fields\r\n })\r\n }\r\n\r\n fieldFilteredChange = e => {\r\n const field = e.target.getAttribute('data-field'), \r\n val = e.target.value, \r\n fields = this.state.fields;\r\n\r\n fields[field].val = val;\r\n fields[field].more = val.length > 0 ? true : false;\r\n \r\n if(val){\r\n fields[field].filter = true;\r\n }else{\r\n fields[field].filter = false;\r\n }\r\n\r\n this.setState({\r\n fields\r\n })\r\n }\r\n\r\n fieldChangePrice = e => {\r\n const field = e.target.getAttribute('data-field');\r\n const fields = this.state.fields;\r\n const val = e.target.value;\r\n const regEx = /[^\\d+]/g;\r\n\r\n fields.price[field] = val.replace(regEx, '');\r\n\r\n this.setState({\r\n fields\r\n })\r\n }\r\n\r\n fieldHandlerInt = e => {\r\n\r\n const fields = this.state.fields;\r\n fields[e.target.name] = e.target.value;\r\n\r\n this.setState({\r\n fields\r\n })\r\n }\r\n\r\n handleKeyPress = (event) => {\r\n if (!/[0-9]/.test(event.key)) {\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n fieldMore = (field, flag) => {\r\n const fields = this.state.fields;\r\n fields[field].more = flag ? flag : !fields[field].more;\r\n\r\n if(fields[field].filter){\r\n fields[field].filter = false;\r\n }\r\n \r\n this.setState({\r\n fields\r\n })\r\n }\r\n\r\n setField = (field, val, option) => {\r\n const fields = this.state.fields;\r\n\r\n fields[field].val = val;\r\n fields[field].option = option;\r\n fields[field].more = !fields[field].more;\r\n \r\n this.setState({\r\n fields\r\n })\r\n }\r\n\r\n clearSearch = () => {\r\n const newSearchData = [false];\r\n this.setState({\r\n searchData: newSearchData,\r\n searchPage: 1\r\n })\r\n }\r\n\r\n sort = (param) => {\r\n const sort = this.state.sort;\r\n\r\n if (sort === param) {\r\n if ( this.state.sortType === 'D' ) {\r\n this.setState({\r\n sortType: 'A'\r\n })\r\n } else {\r\n this.setState({\r\n sortType: 'D'\r\n })\r\n }\r\n } else {\r\n this.setState({\r\n sortType: 'A'\r\n })\r\n }\r\n\r\n this.setState({\r\n sort: param\r\n })\r\n\r\n this.clearSearch();\r\n setTimeout(() => {\r\n this.search();\r\n }, 100);\r\n }\r\n\r\n goLink = (link) => {\r\n const url = this.props.customState.API_URL + link,\r\n newWin = window.open('/', 'example', 'width=900,height=1100');\r\n newWin.location.href = url;\r\n }\r\n\r\n StartReorder = async (orderId, storeName) => {\r\n const params = {\r\n \"UserId\" : this.props.customState.currentUserId,\r\n \"CultureId\" : this.props.customState.currentCultureId,\r\n \"OrderId\" : orderId \r\n }\r\n\r\n const result = await this.API('reorderdetails', params);\r\n\r\n //console.log('result',result)\r\n //console.log('reorderDetailsData',this.state.reorderDetailsData)\r\n if (this.state.reorderDetailsData.ErrorText)\r\n {\r\n alert (this.state.reorderDetailsData.ErrorText)\r\n return;\r\n }\r\n const formattedMessage = this.state.reorderDetailsData.Message.replace(/<br\\s*\\/?>/gi, '\\n');\r\n const isConfirmed = window.confirm(formattedMessage);\r\n \r\n if (isConfirmed) {\r\n //await this.CreateReorder(orderId);\r\n const res = await this.API('createreorder', params);\r\n\r\n if (this.state.createReorderData.ErrorText)\r\n {\r\n alert (this.state.createReorderData.ErrorText)\r\n return;\r\n }\r\n\r\n if (this.state.createReorderData.IsCurrentStore)\r\n {\r\n const url = this.state.createReorderData.Url\r\n console.log('redirect URL + path =',url)\r\n \r\n window.location.href = url;\r\n return;\r\n }\r\n\r\n //order placed to onother store no need redirect!\r\n alert(t('xmpieAdvancedOrderReport.ReorderInOtherStore') + '\\n`' + storeName + '`')\r\n \r\n }\r\n }\r\n \r\n\r\n moreOrders = () => {\r\n const current = this.state.searchPage;\r\n const total = this.state.api.search.Page.TotalPages;\r\n\r\n if( total > current ){\r\n this.setState({\r\n searchPage: current + 1\r\n })\r\n\r\n setTimeout(() => {\r\n this.search();\r\n }, 100);\r\n }\r\n }\r\n\r\n moreProducts = (orderid) => {\r\n const current = this.state.detailsPage;\r\n const total = this.state.api.details.Page.TotalPages;\r\n \r\n if( total > current ){\r\n this.setState({\r\n detailsPage: current + 1\r\n })\r\n\r\n setTimeout(() => {\r\n this.getProducts(orderid);\r\n }, 100);\r\n }\r\n }\r\n\r\n searchBut = () => {\r\n this.clearSearch();\r\n setTimeout(() => {\r\n this.search();\r\n }, 100);\r\n }\r\n\r\n cancelBut = () => {\r\n window.location.reload();\r\n }\r\n\r\n search = (first) => {\r\n const users = []; \r\n\r\n this.state.api.users.forEach((item) => {\r\n users.push(item.Id);\r\n }); \r\n\r\n const params = {\r\n \"UserId\" : this.props.customState.currentUserId,\r\n \"CultureId\" : this.props.customState.currentCultureId,\r\n \"Search\": { \r\n \"Dates\": {},\r\n \"Price\": {},\r\n \"SearchProductPropertyMode\": this.state.fields.searchProductPropertyMode\r\n },\r\n \"Page\" : {\r\n \"Number\" : this.state.searchPage,\r\n \"Size\" : 10\r\n },\r\n \"Sorting\" : [{\r\n \"ColumnName\" : this.state.sort,\r\n \"Type\" : this.state.sortType\r\n }]\r\n }\r\n\r\n if (this.state.fields.user.option) {\r\n params.Search['Users'] = [this.state.fields.user.option]\r\n }\r\n if ( this.state.fields.status.option ) { \r\n params.Search['Statuses'] = [this.state.fields.status.option] \r\n }\r\n if ( this.state.fields.group.option ) { \r\n params.Search['Groups'] = [this.state.fields.group.option] \r\n }\r\n if ( this.state.fields.type.option ) {\r\n params.Search['DocTypes'] = [this.state.fields.type.option];\r\n }\r\n if ( this.state.fields.orderid ) {\r\n const orderid = +this.state.fields.orderid;\r\n params.Search['OrderId'] = orderid;\r\n }\r\n if ( this.state.fields.product.option && this.state.fields.product.val.length !== 0 ) {\r\n params.Search['Products'] = [this.state.fields.product.option];\r\n }\r\n if ( this.state.fields.datepicker.from ) {\r\n params.Search['Dates']['Start'] = this.state.fields.datepicker.from + 'T00:00:00'\r\n }\r\n\r\n if ( this.state.fields.datepicker.till ) {\r\n params.Search['Dates']['End'] = this.state.fields.datepicker.till + 'T23:59:59'\r\n }\r\n\r\n if ( this.state.fields.price.from ) {\r\n params.Search['Price']['From'] = this.state.fields.price.from\r\n }\r\n\r\n if ( this.state.fields.price.to ) {\r\n params.Search['Price']['To'] = this.state.fields.price.to\r\n }\r\n\r\n if ( this.state.productPropertyFilters && this.state.productPropertyFilters.length > 0 ) {\r\n\r\n const productProperties = this.state.productPropertyFilters.map(filter => ({\r\n DialName: filter.Name,\r\n SearchValue: filter.SearchValue\r\n }));\r\n\r\n params.Search['ProductProperties'] = productProperties\r\n }\r\n\r\n \r\n \r\n this.API('search', params, first);\r\n }\r\n\r\n getProducts = (orderid, first) => {\r\n const productsList = {};\r\n\r\n // console.log('orderid',orderid);\r\n // console.log('this.state.productsList[item.OrderId]',this.state.productsList[orderid]);\r\n // console.log('this.state.api.details',this.state.api.details);\r\n\r\n if(this.state.detailsOrderId === orderid && first)\r\n {\r\n const api = this.state.api;\r\n api.details = [false];\r\n this.setState({\r\n productsList\r\n })\r\n\r\n productsList[orderid] = false; \r\n this.setState({\r\n detailsPage: 1,\r\n detailsData: [false],\r\n api,\r\n detailsOrderId: 0,\r\n productsList\r\n })\r\n return;\r\n }\r\n\r\n productsList[orderid] = true; \r\n\r\n this.setState({\r\n productsList\r\n }) \r\n\r\n if (first) {\r\n const api = this.state.api;\r\n api.details = [false]; \r\n \r\n this.setState({\r\n detailsPage: 1,\r\n detailsData: [false],\r\n api,\r\n detailsOrderId: orderid\r\n })\r\n } \r\n\r\n const params = {\r\n \"UserId\" : this.props.customState.currentUserId,\r\n \"CultureId\" : this.props.customState.currentCultureId,\r\n \"OrderId\": orderid,\r\n \"Page\" : {\r\n \"Number\" : first ? 1 : this.state.detailsPage,\r\n \"Size\" : 10\r\n }\r\n }\r\n\r\n\r\n this.API('details', params);\r\n }\r\n\r\n DatePickerChanger = (data) => {\r\n if (data.type === 'hidden') {\r\n if( data.name === 'from' ) {\r\n this.setState({ showDPFrom: !this.state.showDPFrom });\r\n }\r\n \r\n if( data.name === 'till' ) {\r\n this.setState({ showDPTill: !this.state.showDPTill });\r\n }\r\n }\r\n\r\n if ( data.type === 'data' ) {\r\n function st(num){\r\n const nNum = String(num);\r\n return nNum.length === 1 ? '0' + nNum : nNum;\r\n }\r\n\r\n const date = data.year + '-' + st(data.month) + '-' + st(data.day);\r\n \r\n const dp = this.state.fields.datepicker;\r\n dp[data.name] = date;\r\n\r\n this.setState({\r\n datepicker: dp\r\n });\r\n\r\n this.DatePickerChanger({ name: data.name, type: 'hidden' });\r\n }\r\n }\r\n\r\n clearDate = (field) => {\r\n const fields = this.state.fields;\r\n fields.datepicker[field] = '';\r\n\r\n this.setState({\r\n fields\r\n })\r\n }\r\n\r\n inInitial = () => {\r\n let status = true;\r\n if ( this.props.customState.API_URL && this.props.customState.currentUserId && this.props.customState.currentCultureId ) {\r\n if ( !this.state.api.statuses ) {\r\n this.API('statuses', {'UserId': this.props.customState.currentUserId, 'CultureId': this.props.customState.currentCultureId}, true);\r\n } else {\r\n status = false;\r\n }\r\n if ( !this.state.api.types ) {\r\n this.API('types', {'UserId': this.props.customState.currentUserId, 'CultureId': this.props.customState.currentCultureId}, true);\r\n } else {\r\n status = false;\r\n }\r\n if ( !this.state.api.users ) {\r\n this.API('users', {'UserId': this.props.customState.currentUserId, 'CultureId': this.props.customState.currentCultureId}, true);\r\n } else {\r\n status = false;\r\n }\r\n if ( !this.state.api.groups ) {\r\n this.API('groups', {'UserId': this.props.customState.currentUserId, 'CultureId': this.props.customState.currentCultureId}, true);\r\n } else {\r\n status = false;\r\n }\r\n if ( !this.state.api.products ) { \r\n this.API('products', {'UserId': this.props.customState.currentUserId, 'CultureId': this.props.customState.currentCultureId}, true);\r\n } else {\r\n status = false;\r\n }\r\n if ( !this.state.api.productProperties ) {\r\n this.API('GetProductProperties', {'UserId': this.props.customState.currentUserId, 'CultureId': this.props.customState.currentCultureId}, true);\r\n } else {\r\n status = false;\r\n }\r\n\r\n } else {\r\n status = false;\r\n }\r\n return status;\r\n }\r\n\r\n initial = () => {\r\n if(!this.inInitial()) {\r\n //const timer = \r\n setTimeout(() => this.initial(), 500);\r\n }\r\n }\r\n\r\n componentDidMount () {\r\n this.initial();\r\n }\r\n\r\n componentDidUpdate () {\r\n \r\n }\r\n\r\n focusAndSelect = () => {\r\n const input = this.orderIdInput.current;\r\n input.focus();\r\n input.select();\r\n };\r\n\r\n focusAndSelectSearch = () => {\r\n const input = this.searchValueInput.current;\r\n input.focus();\r\n input.select();\r\n };\r\n\r\n handleSearchValueChange = (e) => {\r\n //this.setState({ searchValue: e.target.value });\r\n const fields = this.state.fields;\r\n fields[e.target.name] = e.target.value;\r\n\r\n this.setState({\r\n fields\r\n })\r\n }\r\n\r\n handleSearchModeChange = (e) => {\r\n console.log('Radio button changed to:', e.target.value); \r\n const fields = { ...this.state.fields };\r\n fields.searchProductPropertyMode = e.target.value;\r\n this.setState({ fields });\r\n }; \r\n \r\n \r\n addProductPropertyFilter = () => {\r\n const { productProperty, searchValue } = this.state.fields;\r\n //console.log('productProperty:', productProperty); \r\n //console.log('productProperty.option:', productProperty); \r\n if (productProperty && productProperty.val && searchValue) {\r\n const newFilter = {\r\n DialId: productProperty.option,\r\n Name: productProperty.val,\r\n SearchValue: searchValue\r\n };\r\n this.setState(prevState => {\r\n \r\n const updatedFields = {\r\n ...prevState.fields,\r\n productProperty: {\r\n ...prevState.fields.productProperty,\r\n val: '' \r\n },\r\n searchValue: '' \r\n };\r\n \r\n return {\r\n productPropertyFilters: [...(prevState.productPropertyFilters || []), newFilter],\r\n fields: updatedFields \r\n };\r\n });\r\n }\r\n };\r\n \r\n \r\n\r\n removeProductPropertyFilter = (index) => {\r\n this.setState(prevState => {\r\n const productPropertyFilters = [...prevState.productPropertyFilters];\r\n productPropertyFilters.splice(index, 1);\r\n return { productPropertyFilters };\r\n });\r\n }\r\n \r\n \r\n\r\n render () {\r\n //console.log(this.state);\r\n \r\n const searchResult = [];\r\n\r\n const statusesImages = [\r\n false,\r\n require(`$assets/images/Orders_in_progress.png`),\r\n require(`$assets/images/order_shipped.png`),\r\n require(`$assets/images/Orders_Cancel.png`),\r\n require(`$assets/images/Orders_Pending.png`),\r\n ];\r\n\r\n this.state.searchData.forEach((item) => {\r\n if ( item ) {\r\n item.forEach((inItem) => {\r\n searchResult.push(inItem);\r\n });\r\n }\r\n });\r\n\r\n const details = [];\r\n\r\n this.state.detailsData.forEach((item) => {\r\n if ( item ) {\r\n item.forEach((inItem) => {\r\n details.push(inItem);\r\n });\r\n }\r\n });\r\n\r\n return (\r\n <Layout {...this.props}>\r\n <div className='advanced-order-wrap'>\r\n <div className=\"advanced-order-report\">\r\n <div className=\"title\">{t('xmpieAdvancedOrderReport.order_history')}</div>\r\n <div className=\"form-search\">\r\n <div className=\"displayed-fields fields-search-wrap\">\r\n <div className=\"field-search\">\r\n <input type=\"text\" placeholder={t('xmpieAdvancedOrderReport.order_id')} onChange={this.fieldHandlerInt} onKeyPress={this.handleKeyPress} name='orderid' ref={this.orderIdInput}/>\r\n <div className=\"search-icon si-form\" >\r\n <Icon name=\"edit_aoh.svg\" width=\"22px\" height=\"22px\" onClick={this.focusAndSelect}/>\r\n </div>\r\n </div>\r\n <div className=\"field-search\">\r\n <div className=\"inner-fs-rel\">\r\n <input type=\"text\" \r\n placeholder={t('xmpieAdvancedOrderReport.product')} data-field=\"product\" \r\n value={this.state.fields.product.val} \r\n onChange={this.fieldFilteredChange} \r\n onClick={() => this.fieldMore('product', true)}/>\r\n <div \r\n className={`search-icon si-form si-mini-but ${!this.state.fields.product.more ? '' : 'rotate'}`}\r\n onClick={() => this.fieldMore('product')}>\r\n <Icon name=\"more_in.svg\" width=\"22px\" height=\"22px\"/>\r\n </div>\r\n { !this.state.fields.product.more ? <></> :\r\n <div className=\"list-more-search\">\r\n {\r\n this.state.api.products && this.state.api.products.map((item, i) => {\r\n const name = item.Name ? item.Name : '';\r\n if( name.toLowerCase().indexOf(this.state.fields.product.val.toLowerCase()) !== -1 || \r\n this.state.fields.product.val.length === 0 || !this.state.fields.product.filter) {\r\n return (\r\n <div key={i} \r\n className=\"lms-item\" \r\n onClick={() => this.setField('product', name, item.Id)}>\r\n {name}\r\n </div>\r\n )\r\n }\r\n return null;\r\n }\r\n )\r\n }\r\n <div className=\"hidder-field\" onClick={() => this.fieldMore('product')}></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div className=\"field-search\">\r\n <div className=\"inner-fs-rel\">\r\n <input readOnly type=\"text\" \r\n placeholder={t('xmpieAdvancedOrderReport.status')} data-field=\"status\" \r\n value={this.state.fields.status.val} \r\n onChange={this.fieldChange} \r\n onClick={() => this.fieldMore('status')}/>\r\n <div \r\n className={`search-icon si-form si-mini-but ${!this.state.fields.status.more ? '' : 'rotate'}`}\r\n onClick={() => this.fieldMore('status')}>\r\n <Icon name=\"more_in.svg\" width=\"22px\" height=\"22px\"/>\r\n </div>\r\n { !this.state.fields.status.more ? <></> :\r\n <div className=\"list-more-search\">\r\n {\r\n this.state.api.statuses && this.state.api.statuses.map((item, i) => {\r\n const name = item.Name ? item.Name : '';\r\n return (\r\n <div key={i} className=\"lms-item\" onClick={() => this.setField('status', name, item.Id)}>{name}</div>\r\n )\r\n })\r\n }\r\n <div className=\"hidder-field\" onClick={() => this.fieldMore('status')}></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div className=\"field-search search-button-wrap\">\r\n <button className=\"search-button\" onClick={() => this.searchBut()}>{t('xmpieAdvancedOrderReport.search')}</button>\r\n </div>\r\n </div>\r\n <div className={this.state.hiddenFields ? \"hidden-anim\" : \"show-anim\"}>\r\n <div className=\"fields-search-wrap\">\r\n <div className=\"field-search inner-fs-wrap\">\r\n <div>\r\n <div className=\"inner-field-search\">\r\n <input readOnly type=\"text\" placeholder={t('xmpieAdvancedOrderReport.from')} value={this.state.fields.datepicker.from}\r\n onClick={() => { this.setState({ showDPFrom: !this.state.showDPFrom }) }}\r\n />\r\n <div className=\"search-icon si-form\">\r\n { !this.state.fields.datepicker.from ?\r\n <Icon name=\"calendar_aoh.svg\" width=\"22px\" height=\"22px\"\r\n onClick={() => { this.setState({ showDPFrom: !this.state.showDPFrom }) }}\r\n /> : \r\n <Icon name=\"cancel.svg\" width=\"22px\" height=\"22px\" className=\"search-icon cancel-button\" \r\n onClick={() => this.clearDate('from') }\r\n />\r\n }\r\n </div>\r\n <DatePicker change={this.DatePickerChanger} name=\"from\" show={this.state.showDPFrom}/>\r\n </div>\r\n </div>\r\n <div>\r\n <div className=\"inner-field-search\">\r\n <input readOnly type=\"text\" placeholder={t('xmpieAdvancedOrderReport.till')} value={this.state.fields.datepicker.till}\r\n onClick={() => { this.setState({ showDPTill: !this.state.showDPTill }) }}\r\n />\r\n <div className=\"search-icon si-form\">\r\n { !this.state.fields.datepicker.till ?\r\n <Icon name=\"calendar_aoh.svg\" width=\"22px\" height=\"22px\"\r\n onClick={() => { this.setState({ showDPTill: !this.state.showDPTill }) }}\r\n /> : \r\n <Icon name=\"cancel.svg\" width=\"22px\" height=\"22px\" className=\"search-icon cancel-button\" \r\n onClick={() => this.clearDate('till') }\r\n />\r\n }\r\n </div>\r\n <DatePicker change={this.DatePickerChanger} name=\"till\" show={this.state.showDPTill}/>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"field-search inner-fs-wrap\">\r\n <div>\r\n <div className=\"inner-field-search\">\r\n <input readOnly type=\"text\" \r\n placeholder={t('xmpieAdvancedOrderReport.type')} data-field=\"type\" \r\n value={this.state.fields.type.val} \r\n onChange={this.fieldChange} \r\n onClick={() => this.fieldMore('type')}/>\r\n <div \r\n className={`search-icon si-form si-mini-but ${!this.state.fields.type.more ? '' : 'rotate'}`}\r\n onClick={() => this.fieldMore('type')}>\r\n <Icon name=\"more_in.svg\" width=\"22px\" height=\"22px\"/>\r\n </div>\r\n { !this.state.fields.type.more ? <></> :\r\n <div className=\"list-more-search\">\r\n {\r\n this.state.api.types && this.state.api.types.map((item, i) => {\r\n const name = item.Name ? item.Name : '';\r\n return (\r\n <div key={i} className=\"lms-item\" onClick={() => this.setField('type', name, item.Id)}>{name}</div>\r\n )\r\n })\r\n }\r\n <div className=\"hidder-field\" onClick={() => this.fieldMore('type')}></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div>\r\n <div className=\"inner-field-search\">\r\n <input type=\"text\" placeholder={t('xmpieAdvancedOrderReport.price')}\r\n value={(this.state.fields.price.from ? this.state.fields.price.from : '') + ( this.state.fields.price.to ? ' - ' + this.state.fields.price.to : '' )} \r\n readOnly \r\n onClick={ () => this.fieldMore('price') }\r\n />\r\n <div \r\n className={`search-icon si-form si-mini-but ${!this.state.fields.price.more ? '' : 'rotate'}`}\r\n onClick={ () => this.fieldMore('price') }>\r\n <Icon name=\"more_in.svg\" width=\"22px\" height=\"22px\"/>\r\n </div>\r\n {\r\n this.state.fields.price.more ?\r\n <div className='inp-for-price'>\r\n <div className='ifp-col'>\r\n <input type=\"text\" placeholder={t('xmpieAdvancedOrderReport.from')}\r\n data-field=\"from\"\r\n onChange={this.fieldChangePrice} \r\n value={this.state.fields.price.from}\r\n />\r\n </div>\r\n <div className='ifp-col'>\r\n <input type=\"text\" placeholder={t('xmpieAdvancedOrderReport.to')}\r\n data-field=\"to\"\r\n onChange={this.fieldChangePrice} \r\n value={this.state.fields.price.to}\r\n />\r\n <div className=\"hidder-field\" onClick={ () => this.fieldMore('price') }></div>\r\n </div>\r\n </div> :\r\n <></>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"field-search\">\r\n <div className=\"inner-fs-rel\">\r\n <input readOnly type=\"text\" \r\n placeholder={t('xmpieAdvancedOrderReport.user')} data-field=\"user\" \r\n value={this.state.fields.user.val} \r\n onChange={this.fieldChange} \r\n onClick={() => this.fieldMore('user')}/>\r\n <div \r\n className={`search-icon si-form si-mini-but ${!this.state.fields.user.more ? '' : 'rotate'}`}\r\n onClick={() => this.fieldMore('user')}>\r\n <Icon name=\"more_in.svg\" width=\"22px\" height=\"22px\"/>\r\n </div>\r\n { !this.state.fields.user.more ? <></> :\r\n <div className=\"list-more-search\">\r\n <div className=\"lms-item\" onClick={() => this.setField('user', t('xmpieAdvancedOrderReport.AllUsers'), false)}>{t('xmpieAdvancedOrderReport.AllUsers')}</div>\r\n {\r\n this.state.api.users && this.state.api.users.map((item, i) => {\r\n let name = item.FirstName ? item.FirstName : '';\r\n name = item.LastName ? name + ' ' + item.LastName : name;\r\n\r\n return (\r\n <div key={i} className=\"lms-item\" onClick={() => this.setField('user', name, item.Id)}>{name}</div>\r\n )\r\n })\r\n }\r\n <div className=\"hidder-field\" onClick={() => this.fieldMore('user')}></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div className=\"field-search\">\r\n <div className=\"inner-fs-rel\">\r\n <input readOnly type=\"text\" \r\n placeholder={t('xmpieAdvancedOrderReport.group')} data-field=\"group\" \r\n value={this.state.fields.group.val} \r\n onChange={this.fieldChange} \r\n onClick={() => this.fieldMore('group')}/>\r\n <div \r\n className={`search-icon si-form si-mini-but ${!this.state.fields.group.more ? '' : 'rotate'}`}\r\n onClick={() => this.fieldMore('group')}>\r\n <Icon name=\"more_in.svg\" width=\"22px\" height=\"22px\"/>\r\n </div>\r\n { !this.state.fields.group.more ? <></> :\r\n <div className=\"list-more-search\">\r\n {\r\n this.state.api.groups && this.state.api.groups.map((item, i) => {\r\n const name = item.Name ? item.Name : '';\r\n return (\r\n <div key={i} className=\"lms-item\" onClick={() => this.setField('group', name, item.Id)}>{name}</div>\r\n )\r\n })\r\n }\r\n <div className=\"hidder-field\" onClick={() => this.fieldMore('group')}></div>\r\n </div>\r\n }\r\n </div>\r\n </div> \r\n\r\n\r\n \r\n \r\n </div>\r\n\r\n <div className=\"fields-search-wrap\">\r\n <div className=\"field-search\">\r\n <div className=\"inner-fs-rel\">\r\n <input type=\"text\" \r\n placeholder={t('xmpieAdvancedOrderReport.product_property')} data-field=\"productProperty\" \r\n value={this.state.fields.productProperty?.val || ''} \r\n onChange={this.fieldFilteredChange} \r\n onClick={() => this.fieldMore('productProperty', true)}/>\r\n <div \r\n className={`search-icon si-form si-mini-but ${!this.state.fields.productProperty?.more ? '' : 'rotate'}`}\r\n onClick={() => this.fieldMore('productProperty')}>\r\n <Icon name=\"more_in.svg\" width=\"22px\" height=\"22px\"/>\r\n </div>\r\n { !this.state.fields.productProperty?.more ? <></> :\r\n <div className=\"list-more-search\">\r\n {\r\n this.state.api.productProperties && this.state.api.productProperties.map((item, i) => {\r\n const name = item.Name ? item.Name : '';\r\n if( name.toLowerCase().indexOf(this.state.fields.productProperty?.val?.toLowerCase() || '') !== -1 || \r\n this.state.fields.productProperty?.val?.length === 0 || !this.state.fields.productProperty?.filter) {\r\n return (\r\n <div key={i} \r\n className=\"lms-item\" \r\n onClick={() => this.setField('productProperty', name, item.Id)}>\r\n {name}\r\n </div>\r\n )\r\n }\r\n return null;\r\n })\r\n }\r\n <div className=\"hidder-field\" onClick={() => this.fieldMore('productProperty')}></div>\r\n </div>\r\n }\r\n </div>\r\n </div> \r\n <div className=\"field-search\">\r\n <input type=\"text\" placeholder={t('xmpieAdvancedOrderReport.search_value')} onChange={this.handleSearchValueChange} value={this.state.fields.searchValue || ''} name='searchValue' ref={this.searchValueInput}/>\r\n <div className=\"search-icon si-form\" >\r\n <Icon name=\"edit_aoh.svg\" width=\"22px\" height=\"22px\" onClick={this.focusAndSelectSearch}/>\r\n </div>\r\n </div>\r\n <div className=\"field-search inner-fs-wrap radio-buttons\">\r\n\r\n <label className=\"radio-button-label\">\r\n <input\r\n type=\"radio\"\r\n name=\"searchProductPropertyMode\"\r\n value=\"OR\"\r\n checked={this.state.fields.searchProductPropertyMode === 'OR'}\r\n onChange={this.handleSearchModeChange}\r\n />\r\n <span className=\"custom-radio\"></span> {t('xmpieAdvancedOrderReport.or')}\r\n </label>\r\n <label className=\"radio-button-label\">\r\n <input\r\n type=\"radio\"\r\n name=\"searchProductPropertyMode\"\r\n value=\"AND\"\r\n checked={this.state.fields.searchProductPropertyMode === 'AND'}\r\n onChange={this.handleSearchModeChange}\r\n />\r\n <span className=\"custom-radio\"></span> {t('xmpieAdvancedOrderReport.and')}\r\n </label> \r\n\r\n <div className=\"radio-button-label\">\r\n <button className=\"add-button\" onClick={this.addProductPropertyFilter}>{t('xmpieAdvancedOrderReport.add')}</button>\r\n </div> \r\n </div>\r\n\r\n <div className=\"field-search\"> \r\n </div>\r\n \r\n \r\n </div>\r\n\r\n \r\n <div className=\"filter-values\">\r\n {this.state.productPropertyFilters && this.state.productPropertyFilters.map((filter, index) => (\r\n <div key={index} className=\"added-filter-item\">\r\n <span>{filter.Name}: {filter.SearchValue}</span>\r\n <button className=\"delete-button\" onClick={() => this.removeProductPropertyFilter(index)}>X</button>\r\n </div>\r\n ))}\r\n </div>\r\n \r\n\r\n\r\n </div>\r\n {/*</div> */}\r\n <div className=\"show-button\">\r\n <span onClick={() => this.hiddenFieldsChange()}>{this.state.hiddenFields ? t('xmpieAdvancedOrderReport.advanced_search') : t('xmpieAdvancedOrderReport.simple_search')}</span>\r\n <Icon onClick={() => this.hiddenFieldsChange()} name=\"more.svg\" width=\"22px\" height=\"22px\" className={this.state.hiddenFields ? \"search-icon search-icon-active\" : \"search-icon\"}/>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div className=\"search-results\">\r\n <div className=\"result-title\">\r\n <div className=\"title\">{t('xmpieAdvancedOrderReport.search_results')}</div>\r\n <Icon name=\"cancel.svg\" width=\"22px\" height=\"22px\" className=\"search-icon cancel-button\" onClick={() => this.cancelBut()} />\r\n </div>\r\n <div className=\"result-table\">\r\n <div className=\"rt-head\">\r\n <div>\r\n <span>{t('xmpieAdvancedOrderReport.order')}</span>\r\n </div>\r\n <div \r\n className={`rt-sort ${this.state.sort === 'username' ? 'active' : ''} ${this.state.sortType === 'D' ? 'active-sortType' : ''}`}\r\n onClick={() => this.sort('username')}>\r\n <span>{t('xmpieAdvancedOrderReport.user')}</span>\r\n <Icon name=\"sort.svg\" width=\"22px\" height=\"22px\" className=\"search-icon\"/>\r\n </div>\r\n <div>\r\n <span>{t('xmpieAdvancedOrderReport.group')}</span>\r\n </div>\r\n <div \r\n className={`rt-sort ${this.state.sort === 'store' ? 'active' : ''} ${this.state.sortType === 'D' ? 'active-sortType' : ''}`}\r\n onClick={() => this.sort('store')}>\r\n <span>{t('xmpieAdvancedOrderReport.store')}</span>\r\n <Icon name=\"sort.svg\" width=\"22px\" height=\"22px\" className=\"search-icon\"/>\r\n </div>\r\n <div \r\n className={`rt-sort ${this.state.sort === 'amount' ? 'active' : ''} ${this.state.sortType === 'D' ? 'active-sortType' : ''}`}\r\n onClick={() => this.sort('amount')}>\r\n <span>{t('xmpieAdvancedOrderReport.amount')}</span>\r\n <Icon name=\"sort.svg\" width=\"22px\" height=\"22px\" className=\"search-icon\"/>\r\n </div>\r\n <div \r\n className={`rt-sort ${this.state.sort === 'date' ? 'active' : ''} ${this.state.sortType === 'D' ? 'active-sortType' : ''}`}\r\n onClick={() => this.sort('date')}>\r\n <span>{t('xmpieAdvancedOrderReport.date')}</span>\r\n <Icon name=\"sort.svg\" width=\"22px\" height=\"22px\" className=\"search-icon\"/>\r\n </div>\r\n <div \r\n className={`rt-sort ${this.state.sort === 'status' ? 'active' : ''} ${this.state.sortType === 'D' ? 'active-sortType' : ''}`}\r\n onClick={() => this.sort('status')}>\r\n <span>{t('xmpieAdvancedOrderReport.status')}</span>\r\n <Icon name=\"sort.svg\" width=\"22px\" height=\"22px\" className=\"search-icon\"/>\r\n </div>\r\n <div className='rt-line-last'>\r\n <span>{t('xmpieAdvancedOrderReport.action')}</span>\r\n </div>\r\n </div>\r\n <div className=\"rt-body\">\r\n { searchResult && searchResult.length > 0 ?\r\n searchResult.map((item, i) => {\r\n const re = /\\s*T\\s*/,\r\n strDate = item.Date.split(re);\r\n \r\n return(\r\n <div key={i}>\r\n <div className=\"rt-line\" onClick={() => this.getProducts( item.OrderId , true)}>\r\n <div title={item.OrderId}>{item.OrderId}</div>\r\n <div title={item.UserName}>{item.UserName}</div>\r\n <div title={item.Group}>{item.Group}</div>\r\n <div title={item.Store}>{item.Store}</div>\r\n <div title={item.CurrencyCode + ' ' + item.Symbol + item.Amount}>{item.CurrencyCode} {item.Symbol}{item.Amount}</div>\r\n <div>{strDate[0]}</div>\r\n <div>\r\n <span className=\"status-image\">{ \r\n statusesImages[item.Status.Id] ? \r\n <ImageLoader className=\"image\" src={statusesImages[item.Status.Id]} />\r\n : <></>\r\n }</span>\r\n \r\n {item.Status.Name}\r\n </div>\r\n <div>\r\n <div title={t('xmpieAdvancedOrderReport.Show_receipt')} >\r\n <Icon onClick={(event) => { event.stopPropagation(); this.goLink(item.OrderPrintUrl); }} name=\"receipt.svg\" width=\"22px\" height=\"22px\" className=\"search-icon\"/> \r\n\t\t\t </div> \r\n\t\t\t <div title={t('xmpieAdvancedOrderReport.Reorder')} className=\"advanced-order-reoorder-field\"> \r\n {item.MaybeReorder && (\r\n <Icon onClick={(event) => { event.stopPropagation(); this.StartReorder(item.OrderId, item.Store) }} name=\"reorder.svg\" width=\"22px\" height=\"22px\" className=\"search-icon\" />\r\n )} \r\n </div>\r\n </div>\r\n \r\n </div>\r\n { this.state.productsList[item.OrderId] && this.state.api.details ?\r\n <div className=\"rt-sub\">\r\n <div className=\"rt-head\">\r\n <div>\r\n <span>{t('xmpieAdvancedOrderReport.id')}</span>\r\n </div>\r\n <div>{t('xmpieAdvancedOrderReport.photo')}</div>\r\n <div>{t('xmpieAdvancedOrderReport.units')}</div>\r\n <div>{t('xmpieAdvancedOrderReport.product')}</div>\r\n <div>{t('xmpieAdvancedOrderReport.price')}</div>\r\n <div>{t('xmpieAdvancedOrderReport.type')}</div>\r\n <div>{t('xmpieAdvancedOrderReport.status')}</div>\r\n <div></div>\r\n </div>\r\n <div className=\"rt-body\">\r\n {\r\n details.map((item, i) => {\r\n const kit = item.KitOrderProducts,\r\n productName = item.ProductName.replace(/<\\/?[^>]+(>|$)/g, \"\");\r\n \r\n return (\r\n <div key={i}>\r\n <div className=\"rt-line\">\r\n <div title={item.OrderProductId}>\r\n {item.OrderProductId}\r\n { kit.length <= 0 ? <></> :\r\n <div \r\n className={`rt-kit-icon si-form ${this.state.kitShow === item.OrderProductId ? 'rk-rotate' : ''}`}\r\n onClick={ () => this.setState({kitShow: ( this.state.kitShow === item.OrderProductId ? '' : item.OrderProductId ) }) }>\r\n <Icon name=\"more_in.svg\" width=\"22px\" height=\"22px\"/>\r\n </div>\r\n }\r\n </div>\r\n <div className=\"image-zoomer\">{ \r\n item.ImageUrl ? \r\n <ImageLoader className=\"multi-carousel-image\" src={this.props.customState.API_URL + item.ImageUrl} />\r\n : <></>\r\n }</div>\r\n <div title={item.Units}>{item.Units}</div>\r\n <div title={productName}>{productName}</div>\r\n <div title={item.CurrencyCode + ' ' + item.Symbol + item.Price}>{item.CurrencyCode} {item.Symbol}{item.Price}</div>\r\n <div title={item.Type}>{item.Type}</div>\r\n <div title={item.Status && item.Status.Name ? item.Status.Name : ''}>{item.Status && item.Status.Name ? item.Status.Name : ''}</div>\r\n <div></div>\r\n </div>\r\n { kit.length > 0 && this.state.kitShow === item.OrderProductId ?\r\n <div className=\"rt-kit\">\r\n {\r\n kit.map((item, i) => {\r\n const productName = item.ProductName.replace(/<\\/?[^>]+(>|$)/g, \"\");\r\n \r\n return (\r\n <div key={i}>\r\n <div className=\"rt-line\">\r\n <div title={item.OrderProductId}>{item.OrderProductId}</div>\r\n <div className=\"image-zoomer\">{ \r\n item.ImageUrl ? \r\n <ImageLoader className=\"image\" src={this.props.customState.API_URL + item.ImageUrl} />\r\n : <></>\r\n }</div>\r\n <div title={item.Units}>{item.Units}</div>\r\n <div title={productName}>{productName}</div>\r\n <div title={item.CurrencyCode + ' ' + item.Symbol + item.Price}>{item.CurrencyCode} {item.Symbol}{item.Price}</div>\r\n <div title={item.Type}>{item.Type}</div>\r\n <div title={item.Status && item.Status.Name ? item.Status.Name : ''}>{item.Status && item.Status.Name ? item.Status.Name : ''}</div>\r\n <div></div>\r\n </div>\r\n </div>\r\n )\r\n })\r\n }\r\n </div>\r\n : <></>\r\n }\r\n </div>\r\n )\r\n })\r\n }\r\n {\r\n this.state.detailsPage && \r\n this.state.api.details && \r\n this.state.api.details.Page &&\r\n this.state.api.details.Page.TotalPages &&\r\n this.state.detailsPage < this.state.api.details.Page.TotalPages &&\r\n this.state.load.length === 0 ?\r\n <button className=\"aor-button-mini\" onClick={() => this.moreProducts(item.OrderId)}>{t('xmpieAdvancedOrderReport.more_products')}</button>\r\n : <></>\r\n }\r\n </div>\r\n </div>\r\n : <></>\r\n }\r\n </div>\r\n )\r\n })\r\n : this.state.load.length !== 0 ? \r\n <span className=\"message-nf\">{t('xmpieAdvancedOrderReport.loading')}...</span> : \r\n <span className=\"message-nf\">{t('xmpieAdvancedOrderReport.nothing_found')}</span>\r\n }\r\n </div>\r\n <br/>\r\n {\r\n \t\t this.state.searchPage && \r\n this.state.api.search &&\r\n\t\t this.state.searchPage < this.state.api.search.Page.TotalPages ?\r\n\t\t (\r\n\t\t this.state.load.length === 0 ?\r\n\t\t <button className=\"aor-button-mini\" onClick={() => this.moreOrders()}>\r\n\t\t {t('xmpieAdvancedOrderReport.more_orders')}\r\n\t\t </button>\r\n\t\t :\r\n (\r\n this.state.searchPage !== 1 ?\r\n <span className=\"message-nf\">{t('xmpieAdvancedOrderReport.loading')}...</span>\r\n : \r\n <></> \r\n )\r\n\t\t )\r\n\t : <></>\r\n\t\t }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </Layout>\r\n )\r\n }\r\n}\r\n\r\nAdvancedOrderReport.getInitialProps = async (ctx) => {\r\n //const API_URL = await 'https://dotnet.kharkiv.p-product.com/';\r\n const API_URL = await UStoreProvider.contextService.context['apiUrl'].replace('/uStoreRestAPI','') + '/';\r\n const currentUserId = await UStoreProvider.state.get().currentUser?.FriendlyID;\r\n const currentCultureId = await UStoreProvider.state.get().currentCulture?.FriendlyID;\r\n\r\n return {\r\n API_URL,\r\n currentUserId,\r\n currentCultureId\r\n }\r\n\r\n}\r\n\r\nexport default AdvancedOrderReport\r\n","var _defs, _g, _g2;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgXmpieLogo = (_ref, ref) => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"a\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 896.82 792.26\",\n ref: ref,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"style\", null, \".b{fill:#0070ae;}.c{fill:#fff;}.d{fill:#9acc65;}\"))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"rect\", {\n className: \"c\",\n x: 241.68,\n y: 125.94,\n width: 406.76,\n height: 404.46\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"d\",\n d: \"M656.8,116.43H235.61v421.2h421.19V116.43Zm-16.71,404.48H252.32V133.13h387.77v387.78Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"b\",\n d: \"M525.47,306.24h-23.29l-29.07-85.17v68.2h12.14v16.96h-41.25v-16.96h10.15v-82.51h-12.14v-16.97h42.75l31.73,93.15,28.84-93.15h42.25v16.97h-12.14v82.51h11.65v16.96h-44.74v-16.96h9.81v-67.04l-26.68,84Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"b\",\n d: \"M339.49,396.22v-37.71h12.85c11.68,0,18.86,6.51,18.86,18.52s-6.34,19.19-18.52,19.19h-13.18Zm-24.36,45.05h-11.52v17.02h47.39v-17.02h-11.51v-28.03h16.36c23.19,0,38.71-15.35,38.71-37.21s-14.52-34.54-42.72-34.54h-48.23v17.02h11.52v82.76Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"b\",\n d: \"M430.67,358.51h-10.52v-17.02h45.39v17.02h-10.51v82.76h10.51v17.02h-45.39v-17.02h10.52v-82.76Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"b\",\n d: \"M587.08,458.29h-84.26v-17.02h10.51v-82.76h-12.51v-17.02h86.27v34.38h-20.02v-17.35h-29.37v30.7h29.37v18.02h-29.37v34.04h29.37v-19.69h20.02v36.71Z\"\n }), /*#__PURE__*/React.createElement(\"polygon\", {\n className: \"b\",\n points: \"418.42 289.29 379.17 244.9 415.41 206.81 423.9 206.81 423.9 189.82 383.65 189.82 383.65 206.81 394.5 206.81 368.75 233.14 345.35 206.81 356.21 206.81 356.21 189.82 307.62 189.82 307.62 206.81 316.1 206.81 352.7 249.43 313.26 289.29 303.62 289.29 303.62 306.24 346.87 306.24 346.87 289.29 336.55 289.29 363.16 261.64 386.8 289.29 376.48 289.29 376.48 306.24 428.06 306.24 428.06 289.29 418.42 289.29\"\n }), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"b\",\n d: \"M610.3,186.72c7.12,0,12.73,5.58,12.73,12.67s-5.62,12.67-12.79,12.67-12.79-5.58-12.79-12.67,5.62-12.67,12.79-12.67h.05Zm-.11,2.15c-5.8,0-10.37,4.63-10.37,10.52s4.57,10.52,10.43,10.52,10.42-4.63,10.42-10.52-4.57-10.52-10.42-10.52h-.06Zm-5.12,3.02h4.57c2.71,0,4.09,.39,5.11,1.1,1,.68,1.63,1.76,1.63,3.19,0,2.33-1.75,3.49-3.31,4.03l4.07,6.48h-3.37l-3.72-6.11h-1.86v6.11h-3.12v-14.8Zm3.12,6.74h2.03c1.79,0,2.9-.91,2.9-2.37,0-1.91-1.66-2.26-3.52-2.26h-1.41v4.63Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"b\",\n d: \"M610.3,186.72c7.12,0,12.73,5.58,12.73,12.67s-5.62,12.67-12.79,12.67-12.79-5.58-12.79-12.67,5.62-12.67,12.79-12.67h.05Zm-.11,2.15c-5.8,0-10.37,4.63-10.37,10.52s4.57,10.52,10.43,10.52,10.42-4.63,10.42-10.52-4.57-10.52-10.42-10.52h-.06Zm-5.12,3.02h4.57c2.71,0,4.09,.39,5.11,1.1,1,.68,1.63,1.76,1.63,3.19,0,2.33-1.75,3.49-3.31,4.03l4.07,6.48h-3.37l-3.72-6.11h-1.86v6.11h-3.12v-14.8Zm3.12,6.74h2.03c1.79,0,2.9-.91,2.9-2.37,0-1.91-1.66-2.26-3.52-2.26h-1.41v4.63Z\"\n })))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M165.79,662.49h-5.79c-.67,0-1.21-.17-1.62-.51s-.72-.76-.93-1.28l-5.17-13.46h-24.81l-5.17,13.46c-.18,.47-.49,.88-.93,1.24-.44,.37-.98,.55-1.62,.55h-5.79l22.11-55.74h7.6l22.11,55.74Zm-36.22-20.69h20.64l-8.68-22.68c-.57-1.4-1.12-3.15-1.66-5.25-.28,1.06-.56,2.04-.83,2.94-.27,.89-.53,1.68-.79,2.35l-8.68,22.64Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M226.63,650.97c.41,0,.78,.17,1.12,.51l2.94,3.23c-2.26,2.64-5.01,4.71-8.24,6.18-3.23,1.48-7.12,2.22-11.67,2.22-3.99,0-7.6-.69-10.84-2.08-3.24-1.39-6.01-3.33-8.29-5.84-2.29-2.5-4.07-5.5-5.32-9-1.26-3.5-1.89-7.35-1.89-11.55s.67-8.05,2.02-11.56c1.35-3.5,3.25-6.51,5.69-9.02,2.44-2.51,5.37-4.47,8.78-5.85,3.41-1.39,7.17-2.08,11.28-2.08s7.57,.64,10.51,1.91,5.56,3,7.85,5.17l-2.43,3.46c-.18,.26-.39,.47-.62,.64-.23,.17-.57,.25-1,.25-.33,0-.69-.12-1.06-.37-.37-.25-.82-.55-1.33-.91-.52-.37-1.12-.75-1.82-1.17-.69-.42-1.52-.8-2.47-1.16-.95-.37-2.06-.67-3.32-.92-1.26-.25-2.72-.37-4.36-.37-2.96,0-5.67,.51-8.12,1.53-2.45,1.03-4.57,2.49-6.34,4.38-1.78,1.89-3.16,4.2-4.15,6.92-.99,2.72-1.49,5.77-1.49,9.14s.5,6.57,1.49,9.29c.99,2.72,2.34,5.03,4.05,6.91,1.71,1.88,3.74,3.31,6.07,4.3s4.86,1.48,7.56,1.48c1.64,0,3.12-.09,4.43-.29s2.53-.5,3.65-.92c1.12-.41,2.16-.94,3.13-1.57,.97-.64,1.93-1.4,2.91-2.28,.44-.39,.86-.59,1.27-.59Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M268.14,662.49h-3.05c-.67,0-1.21-.1-1.62-.31-.41-.21-.68-.65-.81-1.32l-.77-3.65c-1.03,.93-2.03,1.77-3.01,2.51-.98,.74-2.01,1.36-3.09,1.87-1.08,.51-2.23,.89-3.45,1.15-1.22,.26-2.58,.39-4.07,.39s-2.94-.21-4.26-.64c-1.32-.43-2.48-1.07-3.45-1.93-.98-.86-1.75-1.95-2.34-3.26-.58-1.31-.87-2.87-.87-4.66,0-1.56,.43-3.06,1.27-4.51,.85-1.44,2.22-2.73,4.11-3.85,1.89-1.12,4.37-2.04,7.43-2.75,3.06-.71,6.8-1.07,11.23-1.07v-3.09c0-3.08-.65-5.41-1.95-6.99-1.3-1.58-3.22-2.37-5.77-2.37-1.68,0-3.08,.21-4.23,.64-1.14,.43-2.13,.91-2.97,1.44s-1.55,1.01-2.16,1.44c-.6,.43-1.2,.64-1.79,.64-.46,0-.87-.12-1.21-.37-.35-.25-.62-.55-.83-.91l-1.23-2.22c2.16-2.1,4.49-3.67,6.98-4.71,2.5-1.04,5.26-1.56,8.3-1.56,2.19,0,4.13,.36,5.83,1.09,1.7,.73,3.13,1.74,4.28,3.03,1.16,1.3,2.03,2.87,2.62,4.71,.59,1.84,.89,3.87,.89,6.07v25.21Zm-17.83-4.24c1.21,0,2.31-.12,3.32-.37,1-.25,1.95-.6,2.83-1.05,.89-.46,1.74-1.01,2.55-1.65,.81-.65,1.6-1.39,2.37-2.22v-8.13c-3.16,0-5.85,.2-8.06,.6-2.21,.41-4.01,.93-5.4,1.58-1.39,.65-2.4,1.42-3.03,2.31-.63,.89-.94,1.88-.94,2.97s.17,1.94,.5,2.7c.33,.76,.78,1.38,1.35,1.86,.57,.48,1.23,.84,2.01,1.06s1.61,.33,2.51,.33Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M278.55,662.49v-39.41h3.93c.75,0,1.26,.14,1.54,.43,.28,.29,.48,.78,.58,1.48l.46,6.15c1.33-2.75,2.99-4.89,4.96-6.44,1.97-1.54,4.28-2.31,6.92-2.31,1.08,0,2.06,.12,2.93,.37,.88,.25,1.69,.59,2.43,1.03l-.89,5.17c-.18,.65-.58,.97-1.19,.97-.36,0-.91-.12-1.66-.37-.75-.25-1.79-.37-3.13-.37-2.39,0-4.39,.7-6,2.1s-2.95,3.44-4.03,6.11v25.09h-6.86Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M325.11,622.46c2.34,0,4.5,.4,6.48,1.19,1.98,.79,3.69,1.93,5.13,3.42,1.44,1.49,2.57,3.33,3.38,5.52,.81,2.19,1.22,4.69,1.22,7.49,0,1.09-.11,1.82-.35,2.18-.23,.36-.67,.54-1.31,.54h-26c.05,2.49,.38,4.66,1,6.5s1.47,3.38,2.55,4.61c1.08,1.23,2.36,2.15,3.86,2.76,1.49,.61,3.16,.91,5.02,.91,1.72,0,3.21-.2,4.46-.6,1.25-.4,2.32-.84,3.22-1.31,.9-.47,1.65-.9,2.26-1.3,.6-.4,1.12-.6,1.56-.6,.57,0,1,.22,1.31,.66l1.93,2.53c-.85,1.04-1.87,1.94-3.05,2.7-1.18,.77-2.45,1.4-3.8,1.89-1.35,.49-2.75,.86-4.19,1.11s-2.87,.37-4.28,.37c-2.7,0-5.19-.46-7.47-1.38-2.27-.92-4.24-2.27-5.9-4.04-1.66-1.78-2.95-3.98-3.88-6.6-.93-2.62-1.39-5.63-1.39-9.02,0-2.75,.42-5.32,1.26-7.7,.84-2.39,2.04-4.45,3.61-6.2,1.57-1.75,3.48-3.13,5.75-4.12,2.26-1,4.81-1.5,7.64-1.5Zm.15,5.1c-3.32,0-5.93,.97-7.83,2.9-1.9,1.93-3.09,4.61-3.55,8.03h21.26c0-1.61-.22-3.08-.66-4.41s-1.08-2.49-1.93-3.46c-.85-.97-1.88-1.73-3.1-2.26-1.22-.53-2.62-.8-4.19-.8Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M396.64,662.49h-5.79c-.67,0-1.21-.17-1.62-.51-.41-.34-.72-.76-.93-1.28l-5.17-13.46h-24.81l-5.17,13.46c-.18,.47-.49,.88-.93,1.24-.44,.37-.98,.55-1.62,.55h-5.79l22.11-55.74h7.6l22.11,55.74Zm-36.22-20.69h20.64l-8.68-22.68c-.57-1.4-1.12-3.15-1.66-5.25-.28,1.06-.56,2.04-.83,2.94-.27,.89-.53,1.68-.79,2.35l-8.68,22.64Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M411.84,639.23v23.26h-7.45v-55.74h15.63c3.49,0,6.52,.36,9.06,1.07,2.55,.71,4.65,1.74,6.31,3.09,1.66,1.35,2.89,2.97,3.68,4.88s1.19,4.04,1.19,6.4c0,1.97-.31,3.81-.93,5.52s-1.51,3.25-2.68,4.61-2.6,2.52-4.28,3.48c-1.69,.96-3.6,1.69-5.73,2.18,.93,.55,1.75,1.34,2.47,2.37l16.13,22.13h-6.64c-1.36,0-2.36-.53-3.01-1.6l-14.35-19.92c-.44-.62-.91-1.07-1.43-1.34-.52-.27-1.29-.41-2.31-.41h-5.67Zm0-5.48h7.83c2.19,0,4.11-.26,5.77-.8,1.66-.53,3.05-1.28,4.17-2.26,1.12-.97,1.96-2.13,2.53-3.48,.56-1.35,.85-2.84,.85-4.48,0-3.32-1.09-5.82-3.26-7.51-2.17-1.69-5.41-2.53-9.7-2.53h-8.18v21.04Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M507.16,650.97c.41,0,.78,.17,1.12,.51l2.93,3.23c-2.26,2.64-5.01,4.71-8.23,6.18-3.23,1.48-7.12,2.22-11.68,2.22-3.98,0-7.6-.69-10.84-2.08-3.24-1.39-6.01-3.33-8.3-5.84-2.29-2.5-4.06-5.5-5.32-9s-1.89-7.35-1.89-11.55,.68-8.05,2.03-11.56c1.35-3.5,3.24-6.51,5.69-9.02,2.44-2.51,5.37-4.47,8.78-5.85,3.41-1.39,7.17-2.08,11.28-2.08s7.57,.64,10.51,1.91c2.95,1.27,5.56,3,7.85,5.17l-2.43,3.46c-.19,.26-.39,.47-.62,.64-.24,.17-.57,.25-1,.25-.34,0-.69-.12-1.06-.37-.37-.25-.82-.55-1.33-.91-.51-.37-1.11-.75-1.81-1.17s-1.52-.8-2.47-1.16c-.95-.37-2.06-.67-3.32-.92-1.26-.25-2.71-.37-4.36-.37-2.96,0-5.66,.51-8.12,1.53-2.45,1.03-4.57,2.49-6.34,4.38s-3.16,4.2-4.15,6.92c-.99,2.72-1.49,5.77-1.49,9.14s.5,6.57,1.49,9.29c.99,2.72,2.34,5.03,4.05,6.91,1.72,1.88,3.74,3.31,6.08,4.3s4.87,1.48,7.56,1.48c1.64,0,3.12-.09,4.43-.29s2.53-.5,3.65-.92c1.12-.41,2.16-.94,3.13-1.57,.96-.64,1.93-1.4,2.91-2.28,.43-.39,.86-.59,1.27-.59Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M535.79,622.46c2.86,0,5.43,.48,7.74,1.44,2.3,.96,4.26,2.32,5.86,4.08,1.61,1.77,2.84,3.9,3.7,6.4,.86,2.5,1.3,5.3,1.3,8.38s-.43,5.91-1.3,8.4c-.86,2.49-2.1,4.62-3.7,6.38-1.61,1.77-3.56,3.12-5.86,4.07-2.3,.95-4.88,1.42-7.74,1.42s-5.43-.47-7.74-1.42c-2.3-.94-4.26-2.3-5.88-4.07-1.62-1.76-2.87-3.89-3.74-6.38-.88-2.49-1.31-5.29-1.31-8.4s.44-5.88,1.31-8.38c.87-2.5,2.12-4.63,3.74-6.4,1.62-1.76,3.58-3.13,5.88-4.08,2.3-.96,4.88-1.44,7.74-1.44Zm0,35.17c3.86,0,6.74-1.3,8.64-3.91,1.9-2.6,2.85-6.24,2.85-10.91s-.95-8.35-2.85-10.97c-1.91-2.62-4.79-3.93-8.64-3.93-1.96,0-3.65,.34-5.09,1.01-1.44,.68-2.64,1.65-3.61,2.92-.97,1.27-1.69,2.84-2.16,4.69-.47,1.86-.71,3.95-.71,6.28s.24,4.42,.71,6.27c.48,1.84,1.2,3.39,2.16,4.65,.96,1.26,2.16,2.22,3.61,2.9,1.44,.68,3.14,1.01,5.09,1.01Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M562.87,662.49v-39.41h4.09c.98,0,1.59,.48,1.85,1.44l.5,4.04c1.44-1.79,3.05-3.25,4.84-4.4,1.79-1.14,3.86-1.71,6.23-1.71,2.65,0,4.79,.74,6.42,2.22,1.64,1.48,2.81,3.48,3.53,5.99,.54-1.43,1.26-2.66,2.14-3.7,.89-1.03,1.88-1.89,2.99-2.57,1.11-.68,2.28-1.17,3.53-1.48s2.52-.47,3.8-.47c2.06,0,3.89,.33,5.5,.99,1.61,.66,2.97,1.63,4.09,2.9,1.12,1.27,1.97,2.84,2.57,4.69,.59,1.86,.89,3.98,.89,6.36v25.09h-6.87v-25.09c0-3.09-.67-5.43-2.01-7.02-1.33-1.6-3.28-2.39-5.82-2.39-1.13,0-2.21,.2-3.22,.6s-1.91,.99-2.68,1.77-1.38,1.76-1.83,2.94-.67,2.55-.67,4.1v25.09h-6.87v-25.09c0-3.16-.63-5.52-1.89-7.08s-3.1-2.33-5.51-2.33c-1.7,0-3.28,.46-4.73,1.38-1.45,.92-2.78,2.17-3.99,3.75v29.37h-6.87Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M626.22,675.83v-52.75h4.09c.98,0,1.59,.48,1.85,1.44l.58,4.67c1.67-2.05,3.58-3.69,5.73-4.94,2.15-1.24,4.62-1.87,7.42-1.87,2.24,0,4.27,.43,6.1,1.3s3.38,2.15,4.67,3.85c1.28,1.7,2.27,3.81,2.97,6.32,.7,2.51,1.04,5.41,1.04,8.67,0,2.91-.38,5.61-1.16,8.11-.77,2.5-1.88,4.67-3.32,6.5-1.44,1.83-3.21,3.27-5.3,4.32-2.1,1.05-4.46,1.58-7.08,1.58-2.42,0-4.48-.41-6.19-1.21-1.71-.8-3.22-1.94-4.53-3.42v17.43h-6.87Zm17.4-47.85c-2.24,0-4.2,.52-5.88,1.56-1.68,1.04-3.23,2.5-4.65,4.4v19.06c1.26,1.71,2.64,2.92,4.14,3.61,1.51,.7,3.19,1.05,5.04,1.05,3.62,0,6.42-1.31,8.37-3.93,1.95-2.62,2.93-6.35,2.93-11.2,0-2.57-.23-4.77-.67-6.61-.45-1.84-1.1-3.35-1.95-4.53-.85-1.18-1.89-2.04-3.13-2.59-1.23-.55-2.64-.82-4.21-.82Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M697.51,662.49h-3.05c-.67,0-1.21-.1-1.62-.31-.41-.21-.68-.65-.81-1.32l-.77-3.65c-1.03,.93-2.03,1.77-3.01,2.51-.98,.74-2.01,1.36-3.09,1.87-1.08,.51-2.23,.89-3.46,1.15-1.22,.26-2.58,.39-4.07,.39s-2.94-.21-4.26-.64c-1.32-.43-2.48-1.07-3.45-1.93-.98-.86-1.76-1.95-2.34-3.26-.58-1.31-.87-2.87-.87-4.66,0-1.56,.42-3.06,1.27-4.51,.85-1.44,2.22-2.73,4.11-3.85,1.89-1.12,4.37-2.04,7.43-2.75,3.06-.71,6.8-1.07,11.23-1.07v-3.09c0-3.08-.65-5.41-1.95-6.99-1.3-1.58-3.22-2.37-5.77-2.37-1.67,0-3.08,.21-4.22,.64-1.14,.43-2.13,.91-2.97,1.44s-1.56,1.01-2.16,1.44c-.61,.43-1.2,.64-1.79,.64-.46,0-.87-.12-1.22-.37-.35-.25-.62-.55-.83-.91l-1.23-2.22c2.16-2.1,4.49-3.67,6.98-4.71,2.49-1.04,5.26-1.56,8.3-1.56,2.19,0,4.13,.36,5.82,1.09,1.7,.73,3.13,1.74,4.28,3.03,1.16,1.3,2.03,2.87,2.62,4.71,.59,1.84,.89,3.87,.89,6.07v25.21Zm-17.82-4.24c1.21,0,2.31-.12,3.32-.37,1-.25,1.95-.6,2.83-1.05,.89-.46,1.74-1.01,2.54-1.65,.81-.65,1.6-1.39,2.38-2.22v-8.13c-3.16,0-5.85,.2-8.06,.6-2.21,.41-4.01,.93-5.4,1.58s-2.4,1.42-3.03,2.31c-.63,.89-.94,1.88-.94,2.97s.17,1.94,.5,2.7c.33,.76,.78,1.38,1.35,1.86,.56,.48,1.23,.84,2.01,1.06s1.61,.33,2.51,.33Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M707.92,662.49v-39.41h4.09c.98,0,1.59,.48,1.85,1.44l.54,4.28c1.7-1.89,3.6-3.42,5.69-4.59,2.1-1.17,4.52-1.75,7.27-1.75,2.13,0,4.02,.36,5.65,1.07s3,1.73,4.09,3.04c1.09,1.31,1.92,2.88,2.49,4.72s.85,3.88,.85,6.11v25.09h-6.87v-25.09c0-2.98-.67-5.3-2.03-6.94-1.35-1.65-3.41-2.47-6.19-2.47-2.03,0-3.93,.49-5.69,1.48-1.76,.98-3.39,2.32-4.88,4v29.02h-6.87Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M761.04,674.12c-.23,.52-.52,.93-.87,1.24s-.88,.47-1.6,.47h-5.09l7.14-15.64-16.12-37.11h5.94c.59,0,1.05,.15,1.39,.45s.58,.63,.74,.99l10.45,24.82c.23,.57,.43,1.14,.6,1.71s.32,1.15,.44,1.75c.18-.6,.36-1.18,.54-1.75s.39-1.15,.62-1.75l10.15-24.78c.15-.42,.42-.76,.79-1.03,.37-.27,.78-.41,1.21-.41h5.48l-21.8,51.04Z\"\n }))));\n};\nconst ForwardRef = /*#__PURE__*/forwardRef(SvgXmpieLogo);\nexport { ForwardRef as ReactComponent };\nexport default __webpack_public_path__ + \"static/media/xmpieLogo.fcafdaf26b9875e82c2eb836f4a7b4e4.svg\";","import Home from './Home'\nimport Category from './Category'\nimport Product from './Product'\nimport Products from './Products'\nimport OrderFinalStep from './OrderFinalStep'\nimport Addresses from './Addresses'\nimport Cart from './Cart'\nimport CheckoutComplete from './CheckoutComplete'\nimport CheckoutFinal from './CheckoutFinal'\nimport FileSubmission from './FileSubmission'\nimport CheckoutPaymentSubmission from './CheckoutPaymentSubmission'\nimport MyRecipientLists from './MyRecipientLists'\nimport OrderHistory from './OrderHistory'\nimport PersonalInformation from './PersonalInformation'\nimport Customization from './Customization'\nimport UeditCustomization from './uEditCustomization'\nimport SplitShippingAddresses from './SplitShippingAddresses'\nimport OrderDetails from './OrderDetails'\nimport SplitShippingItems from './SplitShippingItems'\nimport Recipient from './Recipient'\nimport ProductUnavailable from './ProductUnavailable'\nimport Drafts from './Drafts'\nimport EmptyPage from './EmptyPage'\nimport ErrorPage from './ErrorPage'\nimport Search from './Search'\nimport OrderApprovalList from './OrderApprovalList'\nimport CustomMain from './CustomMain'\nimport ClearingUnknownOrder from './ClearingUnknownOrder'\nimport ProductDetails from './ProductDetails'\nimport AdvancedOrderReport from './AdvancedOrderReport' \nimport ConnectLoggedOut from './ConnectLoggedOut'\n\nconst routes = {\n Home,\n Category,\n Product,\n Products,\n OrderFinalStep,\n Addresses,\n Cart,\n CheckoutComplete,\n CheckoutFinal,\n FileSubmission,\n CheckoutPaymentSubmission,\n MyRecipientLists,\n OrderHistory,\n PersonalInformation,\n Customization,\n UeditCustomization,\n SplitShippingAddresses,\n OrderDetails,\n SplitShippingItems,\n Recipient,\n ProductUnavailable,\n Drafts,\n EmptyPage,\n ErrorPage,\n Search,\n OrderApprovalList,\n CustomMain,\n ClearingUnknownOrder,\n ProductDetails,\n AdvancedOrderReport,\n ConnectLoggedOut\n}\n\nexport default routes\n","import React from 'react'\nimport { useSearchParams } from 'react-router-dom'\nimport xmpieLogo from '$assets/images/xmpieLogo.svg'\n\nconst ConnectLoggedOut = () => {\n const [params] = useSearchParams()\n const containerStyle = {\n width: '100vw',\n height: '100vh',\n display: 'flex',\n justifyContent: 'flex-start',\n alignItems: 'center',\n flexDirection: 'column',\n fontSize: 'var(--text-size-h4)'\n }\n const imageStyle = {\n marginTop: '100px',\n }\n\n return <div style={containerStyle}>\n\n <img style={imageStyle} src={xmpieLogo} width=\"200px\" height=\"200px\" alt=\"logout\"/>\n <div>{params.get('message')}</div>\n </div>\n}\n\nexport default ConnectLoggedOut\n","import React, { useEffect, useReducer, useRef, useState } from 'react'\nimport { UStoreProvider } from '@ustore/core'\nimport pages from '$themepages/index'\nimport { camelToPascal, dashToCamel } from '$ustoreinternal/services/utils'\nimport { initialLoad } from '$ustoreinternal/services/initialLoad'\nimport themeContext from '$ustoreinternal/services/themeContext'\nimport { CookiesManager, storefrontCookies } from '$ustoreinternal/services/cookies'\nimport { useLocation, useNavigate, useParams, useSearchParams } from 'react-router-dom'\nimport legacyIframeHandler from '$ustoreinternal/services/legacyIframeHandler'\nimport { getVariableValue } from '$ustoreinternal/services/cssVariables'\nimport '$styles/index.scss'\nimport urlGenerator from '$ustoreinternal/services/urlGenerator'\n\nconst renewTokenIntervalSec = 60 * 20\n\nexport const Generic = () => {\n const [initialProps, setInitialProps] = useState({})\n const doRenewToken = useRef(null)\n // eslint-disable-next-line\n const [ignored, forceUpdate] = useReducer(x => x + 1, 0)\n\n const location = useLocation()\n const query = useSearchParams()\n const params = useParams()\n const navigate = useNavigate()\n\n params.page = params.page || 'Home'\n\n const apiUrl = UStoreProvider.contextService.getValue('apiUrl')\n\n useEffect(() => {\n themeContext.updateRouteParams(params)\n themeContext.init(params)\n /* eslint-disable react-hooks/exhaustive-deps */\n },[location])\n\n useEffect(() => {\n const run = async () => {\n await initialLoad(params)\n // In a B2C store when user is anonymous - do renew token every 20 minuts to keep the session alive\n const { currentStore, currentUser } = UStoreProvider.state.get()\n if (currentStore && currentStore.StoreType === 2 && currentUser.IsAnonymous && !doRenewToken.current) {\n doRenewToken.current = setInterval(async () => {\n // getting new token\n const newToken = await UStoreProvider.api.store.renewToken()\n // updating new token\n UStoreProvider.contextService.setValue('securityToken', newToken.Token)\n CookiesManager.setCookie({key: storefrontCookies.token, value: newToken.Token})\n themeContext.set('securityToken', newToken.Token)\n }, 1000 * renewTokenIntervalSec)\n }\n\n // If current url contains http and store is ssl, redirect to https\n const sslOption = currentStore && currentStore.Attributes.find((attribute) => attribute.Name === 'SslOption')\n if (window.location.href.indexOf('http://') === 0\n && sslOption && sslOption.Value === 'SecureAll'\n && window.location.href.indexOf('localhost') === -1) {\n console.log('redirecting to https')\n window.location.href = window.location.href.replace('http://', 'https://')\n }\n }\n\n const unsubscribe = UStoreProvider.state.subscribe(() => {\n // This prevents the storeFriendlyID from being null on reload in legacy page.\n if (UStoreProvider.state.get().currentStore) {\n themeContext.set('storeFriendlyID', UStoreProvider.state.get().currentStore.FriendlyID)\n }\n\n forceUpdate()\n })\n\n run()\n\n return () => {\n unsubscribe()\n legacyIframeHandler.unmount()\n if (doRenewToken.current) { clearInterval(doRenewToken.current) }\n }\n }, [])\n\n useEffect(() => {\n const favIcon = document.getElementById('favicon')\n if (favIcon) {\n favIcon.href = getVariableValue('--favicon-url', '', true)\n }\n\n const asPath = window.location.href\n\n // remove params added by legacy login page.\n // in order not to interfere with query params used by legacy pages like customization and finalize,\n // we dont remove all params, just the one being passed to us from login page.\n if (asPath.includes('?')) {\n let href = asPath\n\n href = href.replace(/(ShowRibbon|CurrencyID|SecurityToken|StoreGuid)=[a-zA-Z0-9-]*&?/ig, '')\n\n href = href.replace(/[&?]$/, '')\n\n if (asPath !== href) {\n let currentState = window.history.state\n // in Safari, history.state is NULL, so we need to replace it with an object.\n if (currentState === null || currentState === undefined) {\n currentState = { url: '', as: '', options: {} }\n }\n currentState.url = href\n currentState.as = href\n\n window.history.replaceState(currentState, '', href)\n }\n }\n })\n\n useEffect(() => {\n const run = async () => {\n if (params) {\n const pageComponentName = camelToPascal(dashToCamel(params.page))\n const pageComponent = pages[pageComponentName]\n if (pageComponent && pageComponent.getInitialProps) {\n const initialProps = await pageComponent.getInitialProps({ query: params })\n setInitialProps(initialProps || {})\n }\n }\n }\n\n if (UStoreProvider.contextService.getValue('apiUrl')) {\n run()\n }\n }, [params, apiUrl])\n\n useEffect(() => legacyIframeHandler.handleRoute(`${location.pathname}/${location.search}`), [location])\n\n const getPageComponentName = (page) => {\n return camelToPascal(dashToCamel(page))\n }\n\n // in client only will redirect when the url is missing the page name\n if ((location.pathname.match(/\\//g) || []).length < 2) {\n if (location.pathname === '/') {\n navigate(urlGenerator.get({page:'home'}))\n } else {\n window.location.href = window.location.href + '/' + window.location.search\n }\n }\n\n\n // in client if security token is missing get it from the theme context\n if (!query.SecurityToken) {\n query.SecurityToken = themeContext.get('securityToken')\n }\n\n if (!params || !params.page) {\n return null\n }\n\n const pageComponentName = getPageComponentName(params.page)\n\n // modify state that is sent to the page with out modifying the state in the uStoreProvider\n const state = UStoreProvider ? UStoreProvider.state.get() : {}\n\n // create all properties needed from the page component\n const newProps = { state, customState: { ...initialProps, ...state.customState } }\n\n if (pageComponentName === 'ConnectLoggedOut') {\n return React.createElement(pages[pageComponentName], {})\n }\n\n if (state.initState) return null\n\n return React.createElement(pages[pageComponentName], newProps)\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport { BrowserRouter as Router, Route, Routes } from 'react-router-dom'\nimport reportWebVitals from './reportWebVitals'\nimport { Generic } from './generic'\nimport routes from './routeList'\nimport './index.css'\n\nconst AppendTrailingSlash = (props) => {\n if (!window.location.pathname.endsWith('/')) {\n window.history.replaceState(window.history.state,document.title, window.location.pathname + '/' + window.location.search)\n }\n return <Generic {...props}/>\n}\n\n\nReactDOM.render(\n // <React.StrictMode>\n <Router>\n <Routes>\n { routes.map((route, i) => <Route key={i} path={route} element={<AppendTrailingSlash/>} trailing/> )}\n </Routes>\n </Router>,\n // </React.StrictMode>,\n document.getElementById('root')\n)\n\nif (module.hot) {\n module.hot.accept()\n}\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"names":["_desc","_g","_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","SvgDarkLeftArrow","_ref","ref","title","titleId","props","width","height","viewBox","xmlns","xmlnsXlink","id","stroke","strokeWidth","fill","fillRule","d","transform","ForwardRef","forwardRef","SvgDarkRightArrow","_style","_path","SvgError","x","y","style","enableBackground","xmlSpace","type","className","SvgLeftArrow","opacity","fillOpacity","SvgPencilSection","undefined","SvgProof","strokeLinecap","cx","cy","r","SvgRightArrow","SvgTick","e","t","module","exports","self","__webpack_modules__","globalThis","window","g","Promise","n","Symbol","o","Map","a","Set","s","WeakMap","WeakSet","u","DataView","c","iterator","l","toStringTag","p","entries","getPrototypeOf","f","Array","w","b","String","_","isArray","location","document","navigator","mimeTypes","plugins","HTMLElement","tagName","RegExp","Date","toString","slice","Buffer","from","isBuffer","get","has","set","add","Function","m","Boolean","valueOf","buffer","getTime","Number","flags","h","v","S","keys","push","getOwnPropertySymbols","customizer","defineProperty","enumerable","value","__esModule","create","default","prefixColors","_setPrefixRegExps","localStorage","getItem","_prefixRegExps","split","forEach","trim","substr","_prepareRegExpForPrefixSearch","regExp","_getNextPrefixColor","_getDecoratedPrefix","opts","prefix","prefixColor","_prepareOutput","markdown","parse","text","concat","styles","_isPrefixAlreadyInUse","_getInstanceByPrefix","_normalizeOpts","state","_getInitialState","_decorateLoggerMethods","_instances","transports","replace","some","filter","TypeError","logger","console","plaintext","isEnabled","_getEnableState","test","join","instance","level","args","msg","renderer","match","tag","pop","indexOf","documentElement","userAgent","global","getGlobal","ob","pb","qb","eval","AssetsTypes","CategoriesTypes","OrdersTypes","ProductTypes","StoreTypes","__webpack_module_cache__","__webpack_require__","__webpack_exports__","UStoreProvider","ut","http","constructor","context","getValue","setValue","clear","_logger","log","warn","info","error","static","Accept","auth","Authorization","reduce","async","json","download","headers","method","body","JSON","stringify","fetch","blob","ok","TypeName","status","toPrimitive","getOwnPropertyDescriptor","configurable","writable","getOwnPropertyDescriptors","defineProperties","observable","Math","random","substring","INIT","REPLACE","PROBE_UNKNOWN_ACTION","Error","splice","dispatch","subscribe","getState","replaceReducer","next","unsubscribe","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","__REDUX_DEVTOOLS_EXTENSION__","withExtraArgument","currentStore","currentUser","initState","customState","cultures","currentCulture","currencies","currentCurrency","assets","O","C","E","$","T","U","I","j","A","P","V","M","D","R","L","k","N","map","encodeURIComponent","q","B","data","Preferences","userOrdersSummary","categories","Category","categoriesTree","subCategories","cartItemsCount","LanguageCode","ID","PrimaryCurrencyID","currentCategory","products","name","selectedAsset","AssetID","F","store","setInitState","setCustomState","setBulkCustomState","deleteCustomState","mergeCustomState","W","config","configInit","isInit","G","webComponents","componentId","setTimeout","values","setAttribute","register","ustoreBindingId","addEventListener","_ref2","unregister","z","Headers","FormData","append","redirect","then","catch","all","GUID","H","CartModel","X","CartListModel","J","CartItemModel","K","OrderItemModel","Y","CartPriceModel","Q","CartItemUpdateModel","Z","OrderItemPriceModel","ee","CartListDetailsModel","te","UserOrdersSummaryModel","re","CartItemValidationModel","ne","WishListItemUpdateModel","oe","CartListCreateResponseModel","ae","ActivityCreateResponseModel","se","OrderItemFileAttachmentPropertyModel","ie","ue","ce","CategoryModel","le","CategoryTreeModel","pe","CategoryListModel","de","CategoryExtendedModel","ge","fe","pageNumber","pageSize","ye","we","be","_e","ProductListModel","me","ProductModel","he","ThumbnailsModel","ve","CreatePreviewRequestModel","Se","PreviewResponseModel","Oe","ProofResponseModel","Ce","ProofStatusModel","Ee","StoreModel","$e","UserModel","Te","CurrencyModel","Ue","CartIndicatorModel","Ie","SecurityTokenModel","xe","CultureModel","je","Ae","Pe","Ve","Me","De","AssetListItemResponseModel","Re","AssetResponseModel","Le","ke","Ne","qe","Be","delete","Fe","We","activities","getActivities","getTopCategories","getSubCategories","getCategoryIDByFriendlyID","getCategory","getCategoryTree","orders","getUserOrdersSummary","addOrderItem","post","getOrderItem","updateOrderItem","put","getPriceOrderItem","reorder","getLastOrder","addToCart","saveForLater","getDeliveryServices","getProperties","updateProperties","updatePropertiesState","getRepositoryDetails","uploadFile","deleteFiles","getCartInfo","getWishListInfo","deleteCartItem","clearCart","OrderItemIDs","ListID","clearWishlist","validateCart","validateWishList","getCartPricingInfo","getWishListPricingInfo","updateCartItem","updateWishListItem","updateCart","createCartList","Name","ExternalID","ExternalUrl","getListId","getListInfo","getLists","deleteList","exportList","revertModifications","renameList","duplicateItem","duplicateList","getProductIDByFriendlyID","getProducts","getProductByID","productType","Undefined","Dynamic","Static","Email","Uploaded","Composite","DynamicWithPurl","EmailWithPurl","CircleProject","PrintTouchPoint","EmailTouchPoint","WebTouchPoint","PdfOnDemandTouchPoint","TriggeredEmailTouchPoint","Kit","getProductsByIDs","getProductThumbnails","search","createProofPreview","properties","downloadProofPreview","getProofPreview","createProof","downloadProof","checkProofStatus","getCurrentStore","getCurrentUser","getCultures","getCurrencies","renewToken","getCartItemsCount","loginBySSOToken","Token","getAssets","getAsset","deleteAsset","uploadAsset","Ge","loadUserOrdersSummary","RequireOrderApproval","loadCartItemsCount","ze","He","Xe","Je","Ke","loadCurrentStore","loadCurrentUser","loadStoreCultures","loadStoreCurrencies","updateUserPreferences","_ref3","StorePreferences","Ye","setCurrentCurrency","setCurrentCultureByLanguage","getConvertedPrices","price","Price","ConversionRate","tax","Tax","priceIncludingTax","Qe","loadInitialState","Attributes","find","Value","FriendlyID","parseInt","Ze","et","tt","rt","loadCategoriesTree","Categories","loadSubCategories","loadCurrentCategory","nt","ot","at","st","it","culture","setBulk","merge","stateService","binding","initialState","configService","contextService","init","api","IS_UNITLESS","animationIterationCount","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridColumn","fontWeight","lineClamp","lineHeight","order","orphans","tabSize","widows","zIndex","zoom","stopOpacity","strokeDashoffset","strokeOpacity","core_1","require","draft7_1","discriminator_1","draft7MetaSchema","META_SUPPORT_DATA","META_SCHEMA_ID","Ajv","_addVocabularies","super","addVocabulary","discriminator","addKeyword","_addDefaultMetaSchema","meta","metaSchema","$data","$dataMetaSchema","addMetaSchema","refs","defaultMeta","getSchema","validate_1","KeywordCxt","codegen_1","str","nil","CodeGen","validation_error_1","ref_error_1","_CodeOrName","IDENTIFIER","emptyStr","names","_Code","code","_items","item","_a","_str","_names","strs","_len","_key","addCodeArg","plus","expr","safeStringify","_len2","_key2","res","mergeExprItems","optimize","arg","c1","c2","rx","code_1","scope_1","code_2","strConcat","getProperty","regexpCode","scope_2","Scope","ValueScope","ValueScopeName","varKinds","GT","GTE","LT","LTE","EQ","NEQ","NOT","OR","AND","ADD","Node","optimizeNodes","optimizeNames","_constants","Def","varKind","rhs","render","es5","_n","var","constants","optimizeExpr","Assign","lhs","sideEffects","addExprNames","AssignOp","op","Label","label","_ref4","Break","_ref5","Throw","_ref6","AnyCode","_ref7","ParentNode","nodes","subtractNames","addNames","BlockNode","Root","Else","kind","If","condition","else","cond","ns","not","For","ForLoop","iteration","ForRange","to","ForIter","loop","iterable","Func","Return","Try","finally","_b","Catch","Finally","replaceName","items","par","extScope","_values","_blockStarts","lines","_extScope","_scope","parent","_nodes","_root","scopeName","scopeValue","prefixOrName","getScopeValue","keyOrRef","scopeRefs","scopeCode","_def","nameOrPrefix","constant","toName","_leafNode","const","_constant","let","operators","object","keyValues","if","thenBody","elseBody","_blockNode","endIf","elseIf","_elseNode","_endBlockNode","_for","node","forBody","endFor","for","forRange","forOf","arr","forIn","obj","ownProperties","break","return","try","tryBody","catchCode","finallyCode","_currNode","throw","block","nodeCount","endBlock","len","toClose","func","funcBody","endFunc","N1","N2","andCode","mappend","orCode","_len3","_key3","ValueError","UsedValueState","prefixes","_prefixes","_parent","_newName","_nameGroup","index","nameStr","property","itemIndex","scopePath","line","scope","valueKey","vs","_name","_reduceValues","usedValues","getCode","valueCode","nameSet","Started","def","Completed","util_1","names_1","addError","gen","errObj","err","vErrors","errors","returnErrors","errs","validateName","schemaEnv","$async","ValidationError","message","keyword","schemaType","cxt","keywordError","errorPaths","overrideAllErrors","compositeRule","allErrors","errorObjectCode","errsCount","schemaValue","instancePath","errorPath","errSchemaPath","verbose","schemaPath","params","propertyName","schema","parentSchema","createErrors","errorInstancePath","errorSchemaPath","_ref8","topSchemaRef","messages","extraErrorProps","errorObject","instPath","getErrorPath","Type","Str","schPath","resolve_1","SchemaEnv","env","dynamicAnchors","schemaId","root","baseId","normalizeId","localRefs","compileSchema","sch","_sch","getCompilingSchema","rootId","getFullPath","uriResolver","_ValidationError","schemaCxt","parentData","parentDataProperty","dataNames","dataPathArr","dataLevel","dataTypes","definedProperties","jtd","sourceCode","_compilations","validateFunctionCode","validateCode","process","validate","makeValidate","scopeValues","unevaluated","evaluated","dynamicProps","dynamicItems","inlineOrCompile","inlineRef","inlineRefs","schEnv","s2","s1","resolve","schemas","resolveSchema","refPath","_getFullPath","getJsonPointer","schOrRef","schId","resolveUrl","schOrFunc","PREVENT_SCOPE_CHANGE","parsedRef","fragment","part","partSchema","unescapeFragment","$ref","schemaHasRulesButRef","RULES","valCxt","rootData","jsonPos","jsonLen","jsonPart","MissingRefError","resolver","missingRef","missingSchema","equal","traverse","SIMPLE_INLINED","limit","hasRef","countKeys","REF_KEYWORDS","count","Infinity","eachItem","serialize","TRAILING_SLASH_HASH","ANCHOR","baseIds","pathPrefix","schemaRefs","allKeys","jsonPtr","parentJsonPtr","fullPath","addRef","_resolve","ambiguos","checkAmbiguosRef","addAnchor","anchor","$anchor","$dynamicAnchor","sch1","sch2","jsonTypes","groups","number","rules","string","array","types","integer","boolean","null","keywords","checkUnknownRules","strictSchema","checkStrictMode","schemaHasRules","escapeJsonPointer","unescapeJsonPointer","makeMergeEvaluated","mergeNames","mergeToName","mergeValues","resultToName","evaluatedPropsToName","ps","setEvaluated","hash","decodeURIComponent","xs","max","snippets","mode","dataProp","dataPropType","jsPropertySyntax","isNumber","Num","shouldUseGroup","group","rule","shouldUseRule","definition","implements","kwd","errors_1","boolError","falseSchemaError","schemaCode","reportError","valid","rules_1","applicability_1","DataType","getJSONTypes","ts","every","isJSONType","includes","nullable","coerceTo","coerceTypes","COERCIBLE","coerceToTypes","checkTypes","schemaHasRulesForType","wrongType","checkDataTypes","strictNumbers","Wrong","dataType","coerced","coerceSpecificType","reportTypeError","assignParentData","coerceData","checkDataType","strictNums","correct","Correct","numCond","_cond","and","toHash","notObj","typeError","schemaRefOrVal","getTypeErrorContext","assignDefault","prop","defaultValue","childData","useDefaults","ty","boolSchema_1","dataType_1","dataType_2","defaults_1","keyword_1","subschema_1","validateFunction","funcSourceUrl","dynamicRef","destructureValCxtES5","destructureValCxt","subschemaCode","isSchemaObj","checkKeywords","schemaCxtHasRules","$comment","commentKeyword","updateContext","checkAsyncSchema","typeAndKeywords","subSchemaObjCode","boolOrEmptySchema","ignoreKeywordsWithRef","checkRefsAndKeywords","schemaKeywords","getSchemaTypes","coerceAndCheckDataType","rootName","typeErrors","groupKeywords","iterateKeywords","strictTypes","includesType","strictTypesError","withTypes","narrowSchemaTypes","checkContextTypes","allowUnionTypes","checkMultipleTypes","hasApplicableType","checkKeywordTypes","checkStrictTypes","keywordCode","assignDefaults","schTs","kwdT","checkNoDefault","resetEvaluated","assignEvaluated","returnResults","topSchemaObjCode","topBoolOrEmptySchema","validateKeywordUsage","getData","validSchemaType","allowUndefined","trackErrors","result","successAction","failAction","failResult","pass","fail","fail$data","or","invalid$data","errorParams","setParams","_error","reportExtraError","$dataError","keyword$DataError","reset","resetErrorsCount","block$data","codeBlock","$dataValid","check$data","validateSchema","wrong$DataType","validateSchemaRef","invalid$DataSchema","subschema","appl","getSubschema","extendSubschemaData","extendSubschemaMode","nextContext","mergeEvaluated","mergeValidEvaluated","ruleType","funcKeywordCode","macroKeywordCode","compile","JSON_POINTER","RELATIVE_JSON_POINTER","jsonPointer","matches","exec","up","errorMsg","segments","segment","pointerType","modifyData","useKeyword","macroSchema","macro","schemaRef","checkAsyncKeyword","validateRef","assignValid","_await","passCxt","passContext","passSchema","callValidateCode","modifying","reportErrs","ruleErrs","validateAsync","validateErrs","validateSync","extendErrors","addErrs","deps","dependencies","errorsText","schemaProp","escapeFragment","dpType","dataContextProps","_nextData","jtdDiscriminator","jtdMetadata","compile_1","codegen_2","$dataRefSchema","uri_1","defaultRegExp","META_IGNORE_OPTIONS","EXT_SCOPE_NAMES","removedOptions","errorDataPath","format","jsonPointers","extendRefs","missingRefs","processCode","strictDefaults","strictKeywords","uniqueItems","unknownFormats","cache","ajvErrors","deprecatedOptions","unicode","requiredOptions","strict","_optz","_c","_d","_f","_h","_k","_j","strictTuples","_m","_l","strictRequired","_p","_o","loopRequired","_q","loopEnum","_r","_s","_t","_u","_v","addUsedSchema","_w","_x","validateFormats","_y","unicodeRegExp","_z","int32range","_0","formats","_loading","_cache","noLogs","getLogger","formatOpt","getRules","checkOptions","_metaOpts","getMetaSchemaOptions","addInitialFormats","addInitialKeywords","addInitialSchemas","_dataRefSchema","$id","schemaKeyRef","_meta","_addSchema","_compileSchemaEnv","compileAsync","loadSchema","runCompileAsync","_schema","loadMetaSchema","$schema","_compileAsync","checkLoaded","loadMissingSchema","_loadSchema","addSchema","_validateSchema","_checkUnique","throwOrLogError","keyRef","getSchEnv","removeSchema","_removeAllSchemas","cacheKey","definitions","kwdOrDef","checkKeyword","addRule","keywordMetaschema","getKeyword","removeKeyword","findIndex","addFormat","separator","dataVar","keywordsJsonPointers","seg","schemaOrData","regex","getSchemaRefs","startsWith","_compileMetaSchema","currentOpts","checkOpts","options","opt","optsSchemas","defs","metaOpts","KEYWORD_NAME","ruleGroup","before","addBeforeRule","_rule","$dataRef","anyOf","ucs2length","pos","charCodeAt","uri","ajv","validation","validateAdditionalItems","alwaysValidSchema","validateItems","additionalProperty","removeAdditional","allSchemaProperties","patProps","patternProperties","deleteAdditional","additionalPropertyCode","applyAdditionalSchema","definedProp","propsSchema","isOwnProperty","usePattern","isAdditional","schCxt","validateUnion","min","minContains","maxContains","validateItemsWithCount","schValid","checkLimits","_valid","depsCount","property_ies","missingProperty","propDeps","schDeps","propertyDeps","schemaDeps","splitDependencies","validatePropertyDeps","validateSchemaDeps","missing","hasProperty","propertyInData","depProp","checkReportMissingProp","checkMissingProp","reportMissingProp","ifClause","hasThen","hasSchema","hasElse","validateIf","validateClause","additionalItems_1","prefixItems_1","items_1","items2020_1","contains_1","dependencies_1","propertyNames_1","additionalProperties_1","properties_1","patternProperties_1","not_1","anyOf_1","oneOf_1","allOf_1","if_1","thenElse_1","draft2020","applicator","validateTuple","validateArray","extraItems","schArr","fullTuple","minItems","maxItems","checkStrictTuple","prefixItems","passing","util_2","patterns","alwaysValidPatterns","checkProperties","allowMatchingProperties","checkMatchingProperties","pat","validateProperties","alwaysValid","validatePatternProperties","additionalProperties","allProps","hasDefault","applyPropertySchema","hasPropFunc","noPropertyInData","schemaMap","dataAndSchema","newRegExp","pattern","useFunc","validArr","notValid","id_1","ref_1","core","callRef","callRootRef","schOrEnv","resolveRef","getValidate","callValidate","schName","inlineRefSchema","addErrorsFrom","addEvaluatedFrom","schEvaluated","callAsyncRef","types_1","discrError","DiscrError","Tag","oneOf","mapping","applyTagSchema","oneOfMapping","topRequired","hasRequired","tagRequired","propSch","addMappings","required","addMapping","enum","tagValue","getMapping","Mapping","validateMapping","validation_1","applicator_1","format_1","metadata_1","draft7Vocabularies","metadataVocabulary","contentVocabulary","fmts","fDef","fType","callFormat","validData","invalidFmt","validate$DataFormat","formatDef","unknownMsg","unknownFormat","fmtType","fmtRef","fmtDef","fmt","getFormat","validCondition","validateFormat","equal_1","useLoop","eql","getEql","vSchema","equalCode","limitNumber_1","multipleOf_1","limitLength_1","pattern_1","limitProperties_1","required_1","limitItems_1","uniqueItems_1","const_1","enum_1","comp","ucs2length_1","ops","KWDs","maximum","okStr","minimum","exclusiveMaximum","exclusiveMinimum","prec","multipleOfPrecision","invalid","loopAllRequired","allErrorsMode","loopUntilMissing","exitOnErrorMode","requiredKey","itemTypes","loopN","indices","loopN2","outer","hasOwn","classNames","classes","argType","inner","factory","commonjsGlobal","promiseExists","globalObject","symbolExists","mapExists","setExists","weakMapExists","weakSetExists","dataViewExists","symbolIteratorExists","symbolToStringTagExists","setEntriesExists","mapEntriesExists","setIteratorPrototype","mapIteratorPrototype","arrayIteratorExists","arrayIteratorPrototype","stringIteratorExists","stringIteratorPrototype","toStringLeftSliceLength","toStringRightSliceLength","typeDetect","typeofObj","stringTag","objPrototype","isBufferExists","isBufferFromExists","copy","detectType","collectionTypeSet","collection","isCollection","freeGlobalThis","freeGlobal","freeSelf","copyArrayBuffer","copyBoolean","copyDataView","copyBuffer","copyDate","copyNumber","copyRegExp","copyString","copyTypedArray","shallowCopy","getEmptyArray","getEmptyMap","getEmptyObject","getEmptySet","copyMap","noop","copy$1","valueType","copyFunction","deepcopy","recursiveCopy","copiedValue","clone","references","visited","collectionKey","collectionValue","collectionValueType","copiedCollectionValue","isMergeableObject","isNonNullObject","stringValue","$$typeof","REACT_ELEMENT_TYPE","isReactElement","isSpecial","cloneUnlessOtherwiseSpecified","deepmerge","val","defaultArrayMerge","element","getKeys","symbol","propertyIsEnumerable","getEnumerableOwnPropertySymbols","propertyIsOnObject","mergeObject","destination","propertyIsUnsafe","customMerge","getMergeFunction","arrayMerge","sourceIsArray","prev","deepmerge_1","toCamelCase","addPxToStyle","camel","cssProp","detect","cssText","each","ElementType","Doctype","CDATA","Style","Script","Comment","Directive","Text","isTag","elem","decode_data_html_js_1","__importDefault","decode_data_xml_js_1","decode_codepoint_js_1","__importStar","CharCodes","decode_codepoint_js_2","replaceCodePoint","fromCodePoint","BinTrieFlags","EntityDecoderState","DecodingMode","ZERO","NINE","isEntityInAttributeInvalidEnd","EQUALS","UPPER_A","UPPER_Z","LOWER_A","LOWER_Z","isAsciiAlphaNumeric","EntityDecoder","decodeTree","emitCodePoint","EntityStart","consumed","treeIndex","excess","decodeMode","Strict","startEntity","write","offset","NUM","NumericStart","stateNumericStart","NamedEntity","stateNamedEntity","NumericDecimal","stateNumericDecimal","NumericHex","stateNumericHex","LOWER_X","addToNumericResult","start","end","base","digitCount","pow","startIdx","char","UPPER_F","LOWER_F","emitNumericEntity","lastCp","expectedLength","absenceOfDigitsInNumericCharacterReference","SEMI","missingSemicolonAfterCharacterReference","validateNumericCharacterReference","current","valueLength","VALUE_LENGTH","determineBranch","Attribute","emitNotTerminatedNamedEntity","emitNamedEntityData","getDecoder","ret","decoder","lastIndex","nodeIdx","branchCount","BRANCH_LENGTH","jumpOffset","JUMP_TABLE","lo","hi","mid","midVal","htmlDecoder","xmlDecoder","Legacy","decodeMap","codePoint","output","fromCharCode","encode_html_js_1","escape_js_1","htmlReplacer","encodeHTMLTrieRe","lastIdx","nextChar","cp","getCodePoint","xmlReplacer","xmlCodeMap","encodeXML","getEscaper","codePointAt","Uint16Array","restoreDiff","EntityLevel","EncodingMode","decode_js_1","encode_js_1","decode","XML","HTML","decodeHTML","decodeXML","UTF8","escapeUTF8","escapeAttribute","escapeText","ASCII","encodeNonAsciiHTML","encodeHTML","escape_js_2","escape","encode_js_2","decode_js_2","decodeHTMLStrict","decodeHTMLAttribute","isObject","isPlainObject","ctor","prot","cb","_traverse","pre","rootSchema","parentKeyword","keyIndex","arrayKeywords","propsKeywords","skipKeywords","additionalItems","contains","propertyNames","allOf","$defs","multipleOf","maxLength","minLength","maxProperties","minProperties","FUNC_ERROR_TEXT","HASH_UNDEFINED","PLACEHOLDER","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","INFINITY","MAX_SAFE_INTEGER","NAN","MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboRange","rsComboMarksRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","parseFloat","freeParseInt","freeExports","nodeType","freeModule","moduleExports","freeProcess","nodeUtil","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","thisArg","arrayAggregator","setter","iteratee","accumulator","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseTrim","trimmedEndIndex","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","size","overArg","replaceHolders","placeholder","setToArray","setToPairs","stringSize","unicodeSize","stringToArray","unicodeToArray","asciiToArray","charAt","unescapeHtmlChar","runInContext","defaults","pick","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","uid","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Uint8Array","allocUnsafe","getPrototype","objectCreate","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","getNative","ctxClearTimeout","clearTimeout","ctxNow","now","ctxSetTimeout","nativeCeil","ceil","nativeFloor","floor","nativeGetSymbols","nativeIsBuffer","nativeIsFinite","isFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","reverse","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","entry","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","skip","lower","upper","baseClone","bitmask","stack","isDeep","isFlat","isFull","input","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","Ctor","cloneArrayBuffer","dataView","byteOffset","byteLength","cloneDataView","cloneTypedArray","regexp","cloneRegExp","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","isCommon","valuesLength","computed","valuesIndex","templateSettings","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","isFunction","baseGet","path","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","seen","baseInvoke","last","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","othProps","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","getIteratee","criteria","comparer","sort","baseSortBy","objCriteria","othCriteria","ordersLength","compareAscending","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","createCaseFirst","methodName","trailing","createCompounder","callback","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","funcName","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","countHolders","newHolders","createRecurry","fn","arrLength","oldArray","createInverter","toIteratee","baseInverter","createMathOperation","operator","createOver","arrayFunc","createPadding","chars","charsLength","createRange","step","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","toInteger","pair","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrStacked","arrValue","flatten","otherFunc","isKeyable","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","ctorString","isMaskable","stubFalse","otherArgs","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","remaining","rand","memoize","memoizeCapped","quote","subString","difference","differenceBy","differenceWith","findLastIndex","head","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","bindKey","WRAP_BIND_FLAG","debounce","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","time","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","cancel","flush","defer","delay","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isError","isInteger","isString","lt","lte","toArray","done","iteratorToArray","remainder","toLength","isBinary","assignIn","assignInWith","assignWith","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","invoke","omit","CLONE_DEEP_FLAG","basePick","pickBy","toPairs","toPairsIn","camelCase","word","toLowerCase","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","toUpperCase","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","round","subtract","minuend","subtrahend","after","castArray","chunk","compact","conforms","baseConforms","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matchesProperty","nthArg","omitBy","once","orderBy","propertyOf","pullAllBy","pullAllWith","reject","remove","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","update","updateWith","valuesIn","wrap","zipObject","zipObjectDeep","entriesIn","extend","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","position","escapeRegExp","findKey","findLastKey","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNaN","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","lastIndexOf","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","padEnd","padStart","radix","floating","temp","reduceRight","repeat","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sum","sumBy","template","settings","isEscaping","isEvaluating","imports","importsKeys","importsValues","interpolate","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","times","toLower","toSafeInteger","toUpper","trimEnd","trimStart","truncate","omission","newEnd","unescape","uniqueId","eachRight","first","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","dir","isRight","view","getView","iterLength","takeCount","iterIndex","commit","wrapped","toJSON","define","hookCallback","hooks","setHookCallback","hasOwnProp","isObjectEmpty","getOwnPropertyNames","arrLen","createUTC","locale","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","isValid","_isValid","parsedParts","isNowValid","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","momentProperties","updateInProgress","copyConfig","momentPropertiesLen","_isAMomentObject","_i","_tzm","_isUTC","_offset","_locale","Moment","updateOffset","isMoment","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","argLen","deprecations","deprecateSimple","_config","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","mom","_calendar","zeroFill","targetLength","forceSign","absNumber","abs","zerosToFill","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","localeData","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","longDateFormat","defaultLongDateFormat","LTS","LL","LLL","LLLL","_longDateFormat","formatUpper","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","future","past","ss","mm","hh","dd","ww","MM","yy","relativeTime","withoutSuffix","isFuture","_relativeTime","pastFuture","diff","aliases","addUnitAlias","unit","shorthand","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","getPrioritizedUnits","unitsObj","isLeapYear","year","absFloor","toInt","argumentForCoercion","coercedNumber","makeGetSet","keepTime","set$1","month","date","daysInMonth","stringGet","stringSet","prioritized","prioritizedLen","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","addRegexToken","strictRegex","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","tokens","addParseToken","tokenLen","addWeekParseToken","addTimeToArrayFromToken","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","mod","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","parseTwoDigitYear","getSetYear","getIsLeapYear","createDate","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","ws","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","day","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","hours","kFormat","lowercase","minutes","matchMeridiem","_meridiemParse","localeIsPM","seconds","kInput","_isPm","isPM","_meridiem","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","dayOfMonthOrdinalParse","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","loadLocale","isLocaleNameSane","oldLocale","_abbr","aliasedRequire","getSetGlobalLocale","getLocale","defineLocale","abbr","parentLocale","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","setUTCMinutes","getUTCMinutes","configFromString","createFromInputFallback","currentDateArray","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","weekdayOverflow","curWeek","GG","createLocal","gg","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","hour","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","minute","second","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","prototypeMin","prototypeMax","moments","ordering","isDurationValid","unitHasDecimal","orderLen","isValid$1","createInvalid$1","createDuration","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","cloneWithOffset","model","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","isAfter","isBefore","createAdder","direction","period","tmp","isAdding","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","propertyLen","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","toISOString","keepOffset","toDate","inspect","datetime","suffix","zone","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","localStartOfDate","utcStartOfDate","startOfDate","isoWeekday","unix","toObject","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","localeErasParse","eraName","narrow","localeErasConvertYear","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","parseZone","preParsePostFormat","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","get$1","field","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","argWithSuffix","argThresholds","withSuffix","th","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","toIsoString","version","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","isSpace","collectCharacters","regEx","url","descriptors","currentDescriptor","inputLength","regexLeadingSpaces","regexLeadingCommasOrSpaces","regexLeadingNotSpaces","regexTrailingCommas","regexNonNegativeInteger","regexFloatingPoint","candidates","parseDescriptors","tokenize","desc","lastChar","intVal","floatVal","pError","candidate","getNanoSeconds","hrtime","loadTime","moduleLoadTime","nodeLoadTime","upTime","performance","hr","uptime","isColorSupported","bold","dim","italic","underline","inverse","hidden","strikethrough","black","red","green","yellow","blue","magenta","cyan","white","gray","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","createColors","Container","AtRule","proxyOf","prepend","registerAtRule","Rule","isClean","my","Declaration","cleanSource","markDirtyUp","children","child","normalize","markDirty","cleanRaws","keepBetween","getIterator","lastEach","getProxyProcessor","toProxy","insertAfter","exist","existIndex","insertBefore","removeChild","selector","rebuild","raws","_len4","_key4","unshift","removeAll","replaceValues","walkDecls","decl","fast","walk","addToError","walkAtRules","walkComments","walkRules","registerParse","dependant","registerRule","registerRoot","setPrototypeOf","pico","terminalHighlight","CssSyntaxError","column","file","plugin","reason","endLine","endColumn","setMessage","captureStackTrace","showSourceCode","color","css","mark","aside","maxWidth","gutter","spacing","LazyResult","Processor","Document","toResult","registerLazyResult","registerProcessor","PreviousMap","Input","fromJSON","inputs","ownInputs","inputHydrated","__proto__","inputId","SourceMapConsumer","SourceMapGenerator","fileURLToPath","pathToFileURL","isAbsolute","nanoid","fromOffsetCache","sourceMapAvailable","pathAvailable","hasBOM","consumer","mapResolve","fromOffset","col","origin","lastLine","lineToIndex","prevIndex","sourceRoot","fromUrl","originalPositionFor","URL","mapFile","protocol","sourceContentFor","consumerCache","registerInput","MapGenerator","Result","TYPE_TO_CLASS_NAME","atrule","comment","PLUGIN_PROPS","AtRuleExit","CommentExit","DeclarationExit","DocumentExit","Once","OnceExit","postcssPlugin","prepare","RootExit","RuleExit","NOT_VISITORS","CHILDREN","isPromise","getEvents","toStack","events","eventIndex","visitorIndex","visitors","cleanMarks","postcss","processor","stringified","processed","inline","parser","syntax","helpers","processing","runAsync","onRejected","onFinally","getAsyncError","handleError","lastPlugin","postcssVersion","prepareVisitors","listeners","event","hasListener","promise","runOnRoot","visitTick","visitor","roots","subRoot","sync","stringifier","generate","walkSync","visitSync","onFulfilled","visit","warnings","content","registerPostcss","list","comma","space","separators","inQuote","prevQuote","letter","dirname","relative","sep","cssString","mapOpts","usesFileUrls","absolute","memoizedFileURLs","memoizedPaths","memoizedURLs","addAnnotation","isInline","toBase64","annotation","outputFile","eol","applyPrevMaps","toUrl","sourcesContent","applySourceMap","clearAnnotation","generateMap","generateString","fromSourceMap","generated","original","isSourcesContent","setSourcesContent","isAnnotation","noSource","sourcePath","semicolon","withContent","cached","previousMaps","already","toFileUrl","setSourceContent","btoa","fileURL","encodeURI","NoWorkResult","_processor","_css","_opts","_map","generatedCSS","generatedMap","Stringifier","cloneNode","cloned","postcssNode","overrides","between","cloneAfter","cloneBefore","rangeBy","positionBy","stringRepresentation","positionInside","endIndex","raw","defaultType","replaceWith","bookmark","foundSelf","fixed","emitInputs","inputsNextIndex","proxyCache","Proxy","Parser","tokenizer","SAFE_COMMENT_NEIGHBOR","spaces","customProperty","createTokenizer","unnamedAtrule","open","brackets","endOfFile","nextToken","getPosition","spacesAndCommentsFromEnd","afterName","spacesAndCommentsFromStart","checkMissedSemicolon","colon","founded","doubleColon","left","right","findLastWithPosition","unknownWord","firstSpaces","precheckMissedSemicolon","important","stringFrom","spacesFromEnd","emptyRule","unexpectedClose","endFile","unclosedBlock","freeSemicolon","ownSemicolon","bracket","back","unclosedBracket","clean","lastTokenType","Warning","warningPrinted","creator","LANG","transformer","processOpts","pluginOpts","atRule","existsSync","readFileSync","loadAnnotation","startWith","loadMap","decodeInline","lastMatch","atob","encoding","getAnnotationURL","sourceMapString","mappings","_mappings","sections","comments","loadFile","prevPath","normalized","use","warning","ignore","selectors","DEFAULT_RAW","beforeClose","beforeComment","beforeDecl","beforeOpen","beforeRule","commentLeft","commentRight","emptyBody","indent","builder","rawValue","beforeAfter","buf","own","rawCache","rawBeforeClose","rawBeforeComment","rawBeforeDecl","rawBeforeOpen","rawBeforeRule","rawColon","rawEmptyBody","rawIndent","rawSemicolon","SINGLE_QUOTE","DOUBLE_QUOTE","BACKSLASH","SLASH","NEWLINE","SPACE","FEED","TAB","CR","OPEN_SQUARE","CLOSE_SQUARE","OPEN_PARENTHESES","CLOSE_PARENTHESES","OPEN_CURLY","CLOSE_CURLY","SEMICOLON","ASTERISK","COLON","AT","RE_AT_END","RE_WORD_END","RE_BAD_BRACKET","RE_HEX_ESCAPE","escaped","escapePos","currentToken","ignoreErrors","returned","unclosed","what","ignoreUnclosed","controlChar","printed","div","createElement","titleCase","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","propFullName","secret","getShim","isRequired","ReactPropTypes","bigint","bool","any","arrayOf","elementType","instanceOf","objectOf","oneOfType","shape","exact","checkPropTypes","PropTypes","vendors","raf","caf","queue","_now","cancelled","handle","polyfill","requestAnimationFrame","cancelAnimationFrame","renderViewDefault","_react2","renderTrackHorizontalDefault","_objectWithoutProperties","finalStyle","bottom","borderRadius","renderTrackVerticalDefault","top","renderThumbHorizontalDefault","cursor","backgroundColor","renderThumbVerticalDefault","_react","_createClass","descriptor","Constructor","protoProps","staticProps","_raf2","_raf3","_interopRequireDefault","_domCss2","_propTypes2","_isString2","_getScrollbarWidth2","_returnFalse2","_getInnerWidth2","_getInnerHeight2","_styles","_defaultRenderElements","Scrollbars","_Component","_classCallCheck","_this","ReferenceError","_possibleConstructorReturn","getScrollLeft","getScrollTop","getScrollWidth","getScrollHeight","getClientWidth","getClientHeight","getValues","getThumbHorizontalWidth","getThumbVerticalHeight","getScrollLeftForOffset","getScrollTopForOffset","scrollLeft","scrollTop","scrollToLeft","scrollToTop","scrollToRight","scrollToBottom","handleTrackMouseEnter","handleTrackMouseLeave","handleHorizontalTrackMouseDown","handleVerticalTrackMouseDown","handleHorizontalThumbMouseDown","handleVerticalThumbMouseDown","handleWindowResize","handleScroll","handleDrag","handleDragEnd","didMountUniversal","subClass","superClass","_inherits","addListeners","componentDidMountUniversal","universal","setState","removeListeners","requestFrame","hideTracksTimeout","clearInterval","detectScrollingInterval","scrollWidth","scrollHeight","clientWidth","clientHeight","_ref2$scrollLeft","_ref2$scrollTop","_ref2$scrollWidth","_ref2$scrollHeight","_ref2$clientWidth","_ref2$clientHeight","_props","thumbSize","thumbMinSize","_view","trackWidth","trackHorizontal","_props2","_view2","trackHeight","trackVertical","_view3","_view4","thumbHorizontal","thumbVertical","removeEventListener","teardownDragging","_this2","_props3","onScroll","onScrollFrame","viewScrollLeft","viewScrollTop","detectScrolling","onScrollStart","handleScrollStartAutoHide","autoHide","showTracks","onScrollStop","handleScrollStopAutoHide","hideTracks","forceUpdate","preventDefault","clientX","targetLeft","getBoundingClientRect","thumbWidth","clientY","targetTop","thumbHeight","handleDragStart","offsetWidth","prevPageX","offsetHeight","prevPageY","disableSelectStyle","onselectstart","disableSelectStyleReset","dragging","stopImmediatePropagation","setupDragging","handleDragEndAutoHide","trackMouseOver","handleTrackMouseEnterAutoHide","handleTrackMouseLeaveAutoHide","_this3","scrolling","autoHideTimeout","_this4","handleScrollStart","setInterval","lastViewScrollLeft","lastViewScrollTop","handleScrollStop","_this5","_this6","_update","_props4","onUpdate","hideTracksWhenNotNeeded","trackHorizontalWidth","thumbHorizontalWidth","thumbHorizontalStyle","trackVerticalHeight","thumbVerticalHeight","thumbVerticalStyle","trackHorizontalStyle","visibility","trackVerticalStyle","_this7","scrollbarWidth","_props5","renderView","renderTrackHorizontal","renderTrackVertical","renderThumbHorizontal","renderThumbVertical","autoHideDuration","autoHeight","autoHeightMin","autoHeightMax","containerStyle","containerStyleDefault","containerStyleAutoHeight","minHeight","maxHeight","viewStyle","viewStyleDefault","marginRight","marginBottom","viewStyleAutoHeight","viewStyleUniversalInitial","trackAutoHeightStyle","transition","trackHorizontalStyleDefault","display","trackVerticalStyleDefault","container","cloneElement","thumbHorizontalStyleDefault","thumbVerticalStyleDefault","Component","propTypes","defaultProps","WebkitOverflowScrolling","userSelect","_Scrollbars","_Scrollbars2","el","_getComputedStyle","getComputedStyle","paddingTop","paddingBottom","paddingLeft","paddingRight","MsOverflowStyle","appendChild","_domCss","maybe","_reactSwipe","_reactSwipe2","_propTypes","setHasSupportToCaptureOption","supportsCaptureOption","hasSupport","getSafeEventHandlerOpts","capture","_event$touches$","touches","pageX","pageY","screenX","screenY","ReactSwipe","_handleSwipeStart","_handleSwipeMove","_handleSwipeEnd","_onMouseDown","_onMouseMove","_onMouseUp","_setSwiperRef","swiper","passive","allowMouseEvents","mouseDown","_getPosition","moveStart","onSwipeStart","_getPosition2","deltaX","deltaY","moving","onSwipeMove","cancelable","movePosition","onSwipeEnd","tolerance","onSwipeLeft","onSwipeRight","onSwipeUp","onSwipeDown","innerRef","onMouseDown","onTouchStart","onTouchEnd","displayName","hasElementType","Element","hasMap","hasSet","hasArrayBuffer","isView","InfiniteScroll","scrollListener","eventListenerOptions","mousewheelListener","pageLoaded","pageStart","attachScrollListener","isReverse","loadMore","parentElement","getParentElement","scrollComponent","beforeScrollHeight","beforeScrollTop","detachScrollListener","detachMousewheelListener","testOptions","useCapture","isPassiveSupported","loader","defaultLoader","scrollEl","useWindow","parentNode","scrollParent","getScrollParent","hasMore","initialLoad","doc","pageYOffset","offsetParent","calculateTopPosition","innerHeight","offsetTop","renderProps","filterProps","childrenArray","_interopDefaultLegacy","React__default","_setPrototypeOf","canvasStyle","border","mirrorProps","_excluded","hookNode","basedOn","TEXT_NODE","frag","createDocumentFragment","textContent","span","dummySpan","replaceChild","ELEMENT_NODE","childNodes","unwrapTextNode","createTextNode","removeFollowingElementLeaves","nextElementSibling","findBlockAncestor","ndAncestor","affectLayout","ndUnit","component","unsafeHTML","maxLine","ellipsis","ellipsisHTML","onReflow","winWidth","usedProps","HTMLEllipsis","_React$Component","html","clamped","canvas","nlUnits","_proto","componentDidMount","initCanvas","reflow","componentDidUpdate","prevProps","copyStyleToCanvas","componentWillUnmount","targetStyle","innerHTML","newState","putEllipsis","calcIndexes","querySelectorAll","nd1stLayoutUnit","ndPrevUnit","ndEllipsis","makeEllipsisSpan","_this$props","isClamped","_this$state","_this$props2","excluded","sourceKeys","_objectWithoutPropertiesLoose","omittedKeys","dangerouslySetInnerHTML","__html","metric","axis","positionPercent","fadeAnimationHandler","slideStopSwipingHandler","slideSwipeAnimationHandler","slideAnimationHandler","_CSSTranslate","_utils","ownKeys","enumerableOnly","symbols","sym","_objectSpread","_defineProperty","returnStyles","selectedItem","previousItem","lastPosition","Children","infiniteLoop","centerMode","centerSlidePercentage","itemListStyle","setPosition","currentPosition","transformProp","transitionTime","WebkitTransform","msTransform","OTransform","swiping","WebkitTransitionDuration","MozTransitionDuration","OTransitionDuration","transitionDuration","msTransitionDuration","delta","isHorizontal","childrenLength","finalBoundry","axisDelta","handledDelta","itemSize","hasMoved","swipeScrollTolerance","preventMovementUntilSwipeScrollTolerance","swipeMovementStarted","cancelClick","transitionTimingFunction","slideStyle","msTransitionTimingFunction","MozTransitionTimingFunction","WebkitTransitionTimingFunction","OTransitionTimingFunction","selectedStyle","prevStyle","_typeof","_getRequireWildcardCache","newObj","hasPropertyDescriptor","_interopRequireWildcard","_reactEasySwipe","_cssClasses","_Thumbs","_document","_window","_animations","_defineProperties","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","_assertThisInitialized","Carousel","_super","thumbsRef","carouselWrapperRef","listRef","itemsRef","clearAutoPlay","autoPlay","timer","increment","interval","isMouseEntered","activeElement","isFocusWithinTheCarousel","prevKey","keyCode","decrement","initialized","firstItem","updateSizes","hasMount","onClickItem","onChange","onClickThumb","moveTo","animationHandlerResponse","swipeAnimationHandler","positions","selectItem","resetAutoPlay","emulateTouch","newIndex","isKeyboardEvent","animationHandler","handleOnChange","getElementsByTagName","slideImages","image","complete","onImageLoad","setupCarousel","prevState","autoFocus","forceFocus","stopSwipingHandler","setupAutoPlay","destroyAutoPlay","destroyCarousel","bindEvents","initialImage","getInitialImage","setMountState","unbindEvents","carouselWrapper","stopOnHover","startOnLeave","useKeyboardArrows","navigateWithKeyboard","_this$carouselWrapper","focus","isClone","isSelected","isPrevious","minWidth","pointerEvents","slideProps","setItemsRef","ITEM","onClick","handleClickItem","renderItem","showIndicators","labels","renderIndicator","changeItem","showStatus","statusFormatter","showThumbs","setThumbsRef","onSelectItem","handleClickThumb","renderThumbs","isSwipeable","swipeable","canShowArrows","showArrows","hasPrev","hasNext","itemsClone","renderItems","firstClone","lastClone","swiperProps","SLIDER","containerStyles","onSwipeForward","onSwipeBackwards","dynamicHeight","itemHeight","getVariableItemHeight","verticalSwipe","ariaLabel","ROOT","setCarouselWrapperRef","tabIndex","CAROUSEL","renderControls","renderArrowPrev","onClickPrev","leftArrow","WRAPPER","setListRef","renderArrowNext","onClickNext","rightArrow","renderStatus","onClickHandler","ARROW_PREV","ARROW_NEXT","DOT","onKeyDown","role","images","img","defaultStatusFormatter","_dimensions","Thumbs","itemsWrapperRef","itemsListRef","wrapperSize","outerWidth","visibleItems","_state","getFirstItem","handler","setupThumbs","destroyThumbs","itemClass","thumbProps","itemListStyles","MozTransform","MsTransform","MsTransitionDuration","setItemsWrapperRef","slideRight","slideLeft","setItemsListRef","_classnames","_default","customClassName","isSlider","carousel","isSwiping","thumbs","slider","animated","selected","thumb","slide","disabled","dot","marginLeft","_Carousel","_types","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","__self","__source","_owner","Fragment","jsx","jsxs","i18n","Translator","translator","translate","contexts","globalContext","defaultNumOrFormatting","numOrFormattingOrContext","formattingOrContext","defaultText","formatting","num","translateHash","translateText","_ref1","_results","setContext","ext","extension","clearContext","resetData","resetContext","contextData","useOriginalText","getContextData","findTranslation","triple","applyNumbers","applyFormatting","ind","trans","htmlparser","escapeStringRegexp","parseSrcset","postcssParse","mediaTags","vulnerableTags","sanitizeHtml","VALID_HTML_ATTRIBUTE_NAME","_recursing","tempResult","Frame","attribs","tagPosition","mediaChildren","updateParentNodeText","updateParentNodeMediaChildren","htmlParserDefaults","tagAllowed","allowedTags","allowVulnerableTags","nonTextTagsArray","nonTextTags","allowedAttributesMap","allowedAttributesGlobMap","allowedAttributes","attributes","globRegex","allowedClassesMap","allowedClassesGlobMap","allowedClassesRegexMap","allowedClasses","transformTagsMap","transformTagsAll","skipMap","transformMap","skipText","skipTextDepth","transformTags","transFun","simpleTransform","addedText","initializeState","onopentag","enforceHtmlBoundary","frame","hasText","transformedTag","innerText","disallowedTagsMode","isEmptyObject","nestingLimit","allowedScriptHostnames","allowedScriptDomains","allowedEmptyAttributes","nonBooleanAttributes","passedAllowedAttributesMapCheck","multiple","splitStrArray","allowedSchemesAppliedToAttributes","naughtyHref","allowed","parsed","parseUrl","allowedHostname","hostname","allowedDomain","domain","isRelativeUrl","allowIframeRelativeUrls","allowedIframeHostnames","allowedIframeDomains","evil","allowedSpecificClasses","allowedWildcardClasses","allowedSpecificClassesGlob","allowedSpecificClassesRegex","allowedClassesGlobs","filterClasses","parseStyleAttributes","filteredAST","abstractSyntaxTree","allowedStyles","astRules","selectedRule","allowedDeclarationsList","attributeObject","regularExpression","filterDeclarations","filterCss","extractedAttributes","attrObject","stringifyStyleAttributes","escapeHtml","selfClosing","textFilter","ontext","lastFrame","onclosetag","isImplied","exclusiveFilter","decodeEntities","href","firstIndex","allowProtocolRelative","scheme","allowedSchemesByTag","allowedSchemes","allowedGlobs","clss","glob","newTagName","newAttribs","attrib","attributeNames","elementNames","__assign","__createBinding","k2","__setModuleDefault","entities_1","foreignNames_js_1","unencodedElements","replaceQuotes","singleTag","renderNode","renderComment","renderCdata","xmlMode","foreignModeIntegrationPoints","foreignElements","encode","encodeEntities","emptyAttrs","formatAttributes","selfClosingTags","renderTag","renderText","__exportStar","DomHandler","domelementtype_1","node_js_1","defaultOpts","withStartIndices","withEndIndices","elementCB","dom","tagStack","lastNode","onparserinit","onreset","onend","handleCallback","onerror","addNode","oncomment","oncommentend","oncdatastart","oncdataend","onprocessinginstruction","ProcessingInstruction","previousSibling","startIndex","__extends","extendStatics","__","hasChildren","isDocument","isDirective","isComment","isText","isCDATA","NodeWithChildren","DataNode","recursive","namespace","cloneChildren","clone_1","clone_2","clone_3","instruction","sourceCodeLocation","childs","stringify_js_1","legacy_js_1","feedRoot","getOneElement","isValidFeed","feed","media","getMediaElements","addConditionally","link","description","pubDate","updated","getAtomFeed","getRssFeed","MEDIA_KEYS_STRING","MEDIA_KEYS_INT","where","medium","isDefault","MEDIA_KEYS_STRING_1","MEDIA_KEYS_INT_1","expression","recurse","DocumentPosition","domhandler_1","compareDocumentPosition","nodeA","nodeB","aParents","bParents","maxIdx","idx","DISCONNECTED","sharedParent","siblings","aSibling","bSibling","FOLLOWING","CONTAINED_BY","PRECEDING","CONTAINS","ancestor","querying_js_1","Checks","tag_name","tag_type","tag_contains","getAttribCheck","combineFuncs","compileTest","findOne","removeElement","childsIndex","replacement","sibling","currNext","nodeStack","indexStack","existsOne","checked","dom_serializer_1","getOuterHTML","getText","getChildren","getParent","Tokenizer_js_1","formTags","pTag","tableSectionTags","ddtTags","rtpTags","openImpliesClose","voidElements","foreignContextElements","htmlIntegrationElements","reNameEnd","cbs","openTagStart","tagname","attribname","attribvalue","foreignContext","buffers","bufferOffset","writeIndex","ended","lowerCaseTagNames","lowerCaseTags","lowerCaseAttributeNames","Tokenizer","getSlice","ontextentity","getSectionStart","isVoidElement","onopentagname","emitOpenTag","impliesClose","endOpenTag","onopentagend","closeCurrentTag","onselfclosingtag","recognizeSelfClosing","isOpenImplied","onattribname","onattribdata","onattribentity","onattribend","onattribute","QuoteType","Double","Single","NoValue","getInstructionName","ondeclaration","oncdata","recognizeCDATA","parseComplete","shiftBuffer","running","pause","resume","parseChunk","State","isWhitespace","Space","NewLine","Tab","FormFeed","CarriageReturn","isEndOfTagSection","Slash","Gt","Zero","Nine","Sequences","Cdata","CdataEnd","CommentEnd","ScriptEnd","StyleEnd","TitleEnd","sectionStart","baseState","currentSequence","sequenceIndex","trieIndex","trieCurrent","entityResult","entityExcess","entityTrie","xmlDecodeTree","htmlDecodeTree","finish","getIndex","stateText","Lt","fastForwardTo","BeforeTagName","Amp","BeforeEntity","stateSpecialStartSequence","isEnd","InTagName","stateInTagName","stateInSpecialTag","endOfText","actualIndex","stateInClosingTagName","stateCDATASequence","InCommentLike","InDeclaration","stateInDeclaration","stateInCommentLike","isTagStartChar","LowerA","LowerZ","UpperA","UpperZ","isASCIIAlpha","startSpecial","sequence","SpecialStartSequence","stateBeforeTagName","ExclamationMark","BeforeDeclaration","Questionmark","InProcessingInstruction","BeforeSpecialS","BeforeClosingTagName","BeforeAttributeName","stateBeforeAttributeName","stateBeforeClosingTagName","InClosingTagName","InSpecialComment","AfterClosingTagName","stateAfterClosingTagName","InSpecialTag","InSelfClosingTag","InAttributeName","stateInSelfClosingTag","stateInAttributeName","Eq","AfterAttributeName","stateAfterAttributeName","BeforeAttributeValue","stateBeforeAttributeValue","DoubleQuote","InAttributeValueDq","SingleQuote","InAttributeValueSq","InAttributeValueNq","stateInAttributeValueNoQuotes","handleInAttributeValue","stateInAttributeValueDoubleQuotes","stateInAttributeValueSingleQuotes","Unquoted","stateBeforeDeclaration","OpeningSquareBracket","CDATASequence","Dash","BeforeComment","stateInProcessingInstruction","stateBeforeComment","stateInSpecialComment","stateBeforeSpecialS","stateBeforeEntity","BeforeNumericEntity","InNamedEntity","stateInNamedEntity","emitNamedEntity","masked","allowLegacyEntity","Semi","entityStart","emitPartial","stateBeforeNumericEntity","LowerX","InHexEntity","InNumericEntity","stateInNumericEntity","stateInHexEntity","UpperF","LowerF","isHexDigit","cleanup","shouldContinue","handleTrailingData","Parser_js_1","Parser_js_2","domhandler_2","parseDocument","parseDOM","elementCallback","domutils_1","domutils_2","getFeed","parseFeedDefaultOptions","hasSpace","hasSeparator","separatorSplitter","unseparate","hasCamel","camelSplitter","uppers","uncamelize","sets","xl","subexp","typeOf","buildExps","isIRI","ALPHA$$","DIGIT$$","HEXDIG$$","PCT_ENCODED$","SUB_DELIMS$$","RESERVED$$","SCHEME$","USERINFO$","UNRESERVED$$","DEC_OCTET_RELAXED$","H16$","LS32$","IPV4ADDRESS$","IPV6ADDRESS1$","IPV6ADDRESS2$","IPV6ADDRESS3$","IPV6ADDRESS4$","IPV6ADDRESS5$","IPV6ADDRESS6$","IPV6ADDRESS7$","IPV6ADDRESS8$","IPV6ADDRESS9$","ZONEID$","IPV6ADDRESS$","IP_LITERAL$","IPV6ADDRZ_RELAXED$","IPVFUTURE$","HOST$","REG_NAME$","PORT$","AUTHORITY$","PCHAR$","SEGMENT$","SEGMENT_NZ$","SEGMENT_NZ_NC$","PATH_ABEMPTY$","PATH_ABSOLUTE$","QUERY$","PATH_NOSCHEME$","PATH_ROOTLESS$","PATH_EMPTY$","IPRIVATE$$","FRAGMENT$","HIER_PART$","URI$","RELATIVE_PART$","RELATIVE$","URI_PROTOCOL","IRI_PROTOCOL","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","baseMinusTMin","stringFromCharCode","error$1","RangeError","mapDomain","ucs2decode","counter","extra","basicToDigit","digitToBasic","digit","flag","adapt","numPoints","bias","basic","oldi","baseMinusT","_step","_iteratorNormalCompletion","_iterator","_currentValue2","basicLength","handledCPCount","_step2","_iteratorNormalCompletion2","_iterator2","currentValue","handledCPCountPlusOne","_step3","_iteratorNormalCompletion3","_iterator3","_currentValue","qMinusT","toUnicode","toASCII","punycode","toConsumableArray","SCHEMES","pctEncChar","pctDecChars","newStr","il","c3","_normalizeComponentEncoding","components","decodeUnreserved","decStr","UNRESERVED","PCT_ENCODED","NOT_SCHEME","userinfo","NOT_USERINFO","host","NOT_HOST","NOT_PATH","NOT_PATH_NOSCHEME","query","NOT_QUERY","NOT_FRAGMENT","_stripLeadingZeros","_normalizeIPv4","IPV4ADDRESS","address","_normalizeIPv6","IPV6ADDRESS","_matches2","_address$toLowerCase$2","firstFields","lastFields","isLastFieldIPv4Address","fieldCount","lastFieldsStart","fields","longestZeroFields","acc","lastLongest","newHost","newFirst","newLast","URI_PARSE","NO_MATCH_IS_UNDEFINED","uriString","iri","port","schemeHandler","unicodeSupport","domainHost","_recomposeAuthority","uriTokens","$1","$2","RDS1","RDS2","RDS3","RDS5","removeDotSegments","im","authority","absolutePath","resolveComponents","tolerant","baseURI","relativeURI","schemelessOptions","uriA","uriB","escapeComponent","ESCAPE","unescapeComponent","secure","handler$1","isSecure","wsComponents","handler$2","resourceName","_wsComponents$resourc2","handler$3","ATEXT$$","VCHAR$$","SOME_DELIMS$$","NOT_LOCAL_PART","NOT_HFNAME","NOT_HFVALUE","handler$4","mailtoComponents","unknownHeaders","hfields","hfield","toAddrs","_xl","subject","_x2","_xl2","addr","toAddr","atIdx","localPart","URN_PARSE","handler$5","urnComponents","nid","nss","urnScheme","uriComponents","UUID","handler$6","uuidComponents","uuid","is","useState","useEffect","useLayoutEffect","useDebugValue","getSnapshot","inst","useSyncExternalStore","webpackAsyncContext","req","ids","React","moduleId","cachedModule","loaded","leafPrototypes","getProto","chunkId","promises","miniCssF","inProgress","dataWebpackPrefix","script","needAttach","scripts","getAttribute","charset","timeout","nc","src","onScriptComplete","onload","doneFns","nmd","installedChunks","installedChunkData","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","ReactDOM","Action","PopStateEventType","invariant","getHistoryState","usr","createLocation","pathname","parsePath","createPath","parsedPath","hashIndex","searchIndex","getUrlBasedHistory","getLocation","createHref","validateLocation","defaultView","v5Compat","globalHistory","history","Pop","listener","handlePop","nextIndex","createURL","replaceState","listen","encodeLocation","Push","historyState","pushState","DOMException","Replace","go","ResultType","matchRoutes","routes","locationArg","basename","stripBasename","branches","flattenRoutes","compareIndexes","routesMeta","childrenIndex","rankRouteBranches","matchRouteBranch","safelyDecodeURI","parentsMeta","parentPath","flattenRoute","route","relativePath","caseSensitive","joinPaths","computeScore","_route$path","exploded","explodeOptionalSegments","isOptional","restExploded","subpath","paramRe","dynamicSegmentValue","indexRouteValue","emptySegmentValue","staticSegmentValue","splatPenalty","isSplat","initialScore","branch","matchedParams","matchedPathname","remainingPathname","matchPath","pathnameBase","normalizePathname","compiledParams","regexpSource","paramName","compilePath","captureGroups","memo","splatValue","safelyDecodeURIComponent","decodeURI","getInvalidPathError","dest","getPathContributingMatches","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","isEmptyPath","toPathname","fromSegments","toSegments","routePathnameIndex","fromPathname","resolvePathname","normalizeSearch","normalizeHash","resolvePath","hasExplicitTrailingSlash","hasCurrentTrailingSlash","isRouteErrorResponse","statusText","internal","validMutationMethodsArr","validRequestMethodsArr","DataRouterContext","DataRouterStateContext","NavigationContext","LocationContext","RouteContext","outlet","isDataRoute","RouteErrorContext","useInRouterContext","useLocation","UNSAFE_invariant","useIsomorphicLayoutEffect","useNavigate","router","useDataRouterContext","DataRouterHook","UseNavigateStable","useCurrentRouteId","DataRouterStateHook","activeRef","navigate","fromRouteId","useNavigateStable","dataRouterContext","routePathnamesJson","UNSAFE_getPathContributingMatches","useNavigateUnstable","useParams","routeMatch","useResolvedPath","_temp2","useRoutesImpl","dataRouterState","parentMatches","parentParams","parentPathnameBase","locationFromContext","_parsedLocationArg$pa","parsedLocationArg","renderedMatches","_renderMatches","Provider","navigationType","DefaultErrorComponent","_state$errors","useDataRouterState","UseRouteError","routeId","useRouteError","lightgrey","preStyles","padding","fontStyle","defaultErrorElement","RenderErrorBoundary","revalidation","getDerivedStateFromError","getDerivedStateFromProps","componentDidCatch","errorInfo","routeContext","RenderedRoute","staticContext","errorElement","ErrorBoundary","_deepestRenderedBoundaryId","_dataRouterState2","_dataRouterState","errorIndex","hookName","ctx","useRouteContext","thisRoute","Route","Router","basenameProp","locationProp","staticProp","navigationContext","locationContext","trailingPathname","Routes","useRoutes","createRoutesFromChildren","treePath","hasErrorBoundary","shouldRevalidate","lazy","createSearchParams","URLSearchParams","ViewTransitionContext","isTransitioning","startTransitionImpl","BrowserRouter","historyRef","setStateImpl","v7_startTransition","isBrowser","ABSOLUTE_URL_REGEX","Link","absoluteHref","reloadDocument","preventScrollReset","unstable_viewTransition","UNSAFE_NavigationContext","isExternal","currentUrl","targetUrl","_temp","joinedPathname","useHref","internalOnClick","replaceProp","button","metaKey","altKey","ctrlKey","shiftKey","isModifiedEvent","shouldProcessLinkClick","useLinkClickHandler","defaultPrevented","NavLink","ariaCurrentProp","classNameProp","styleProp","_excluded2","routerState","UNSAFE_DataRouterStateContext","vtContext","useViewTransitionState","currentPath","currentLocation","nextPath","nextLocation","nextLocationPathname","navigation","endSlashPosition","isActive","isPending","ariaCurrent","UNSAFE_DataRouterContext","useSearchParams","defaultInit","defaultSearchParamsRef","hasSetSearchParamsRef","searchParams","locationSearch","defaultSearchParams","getAll","getSearchParamsForLocation","setSearchParams","nextInit","navigateOptions","newSearchParams","onPerfEntry","getCLS","getFID","getFCP","getLCP","getTTFB","timeoutID","_ref$noTrailing","noTrailing","_ref$noLeading","noLeading","_ref$debounceMode","debounceMode","lastExec","clearExistingTimeout","arguments_","elapsed","_ref2$upcomingOnly","upcomingOnly","_ref$atBegin","atBegin","USTORE_THEME_PREFIX","assetPrefix","_exec$","_exec","_exec$2","_exec2","_exec$3","_exec4","_exec3","lexer","defaultPattern","escapeString","tryConsume","mustConsume","nextType","consumeText","modifier","name_1","sensitive","stringToRegexp","endsWithRe","delimiterRe","tokens_1","endToken","isEndDelimited","tokensToRegexp","pathToRegexp","groupsRegex","execResult","regexpToRegexp","arrayToRegexp","dashToCamel","camelToPascal","decodeStringForURL","queryOrCookieStrToObj","splitter","splitBy","extractPathParams","routesArray","asPath","pathParams","formatNumByLocale","amount","Intl","NumberFormat","formatDateByLocale","utcDate","DateTimeFormat","getNextConfig","publicRuntimeConfig","apiUrl","classicUrl","themeCustomizationUrl","serverDomain","baseUrl","getBaseUrlComponents","storeBaseURL","assetsPrefix","cultureCode","storefrontCookies","storeID","userID","cartUrl","logoutUrl","language","currencyID","currencyGUID","cookieRibbonNotShownYet","showThemeAsDraft","CookiesManager","_class","_cookieType","StrictlyNecessary","_cookiePermission","_strictlyNecessaryStorefrontCookies","_preferencesStorefrontCookies","isCookieAllowed","isStrictlyNecessary","isPreferences","_setCookie","sessionStorage","setItem","expires","toUTCString","sameSite","cookie","setCookie","cookieData","getCookie","deleteCookie","removeItem","cookieName","reactCookiesForRibbon","expiration","legacyCookiesForRibbon","getCookiesForRibbon","cookiesData","additional","redirectToGenericErrorPage","redirectToLegacy","legacyURL","themeContext","redirectToFullURL","newURL","loginByUrl","storeBaseFromURL","shouldCookieRibbonBeShown","loginResponse","deleteKey","FullURL","UserID","loginByUrlCall","StoreID","saveInfoFromApi","setCookies","USER_ID_EXPIRATION_DAYS","returnURL","returnToUrl","reload","initAndLogin","securityTokenFromUrl","cultureCodeFromURL","storedCultureCode","replaceCultureCodeInURL","newCultureCode","newSecurityToken","storeBaseFromMem","searchStr","SecurityToken","ShowRibbon","shouldCallLoginByUrl","onAccessDenied","securityToken","storeFriendlyID","languageCode","storeType","StoreType","redirectToLogout","onStoreNotAvailable","onGeneralError","firstLevelCategories","requireOrderApproval","initiateThemeState","ctxParam","createContext","updateRouteParams","fullUrl","page","initialPropsFunctionName","userInitialProps","routedPage","pages","getInitialProps","Home","getUserInitialProps","userCustomState","CultureCode","StoreGuid","currencyFriendlyID","CurrencyID","SsoToken","ssoToken","fixTranslation","fixTranslationValues","localizations","NO_LOCALIZATION","globalLocalization","uStoreLocalization","globalTranslation","bundledTranslation","mt","_jsxs","_jsx","isLoading","LoadingDots","ClickOutside","wrapperRef","createRef","handleClickOutside","trigger","globalCssModule","setScrollbarWidth","conditionallyUpdateScrollbar","scrollDiv","getScrollbarWidth","fixedContent","bodyPadding","innerWidth","mapToCssModules","cssModule","omitKeys","warned","warnOnce","DOMElement","targetPropType","tagPropType","TransitionTimeouts","TransitionPropTypeKeys","TransitionStatuses","keyCodes","esc","enter","tab","down","home","canUseDOM","findDOMElements","isReactRefObj","selection","isArrayOrNodeList","els","getTarget","allElements","focusableElements","sourceSymbolKeys","bsSize","addon","getRef","_this$props$type","checkInput","selectInput","rangeInput","formControlClass","ManagerReferenceNodeContext","ManagerReferenceNodeSetterContext","Manager","_React$useState","referenceNode","setReferenceNode","hasUnmounted","handleSetReferenceNode","DropdownContext","InputGroupContext","a11y","isOpen","nav","active","toggle","dropup","inNavbar","setActiveFromChild","menuRole","preventDefaultKeys","Dropdown","addEvents","handleDocumentClick","handleKeyDown","removeEvents","handleMenuRef","handleToggleRef","containerRef","menuRef","toggleRef","handleProps","which","getContainer","menu","getMenu","targetIsToggle","getToggle","clickIsInMenu","clickIsInInput","classList","isTargetMenuItem","isTargetMenuCtrl","getMenuCtrl","isTab","_this2$getMenuItems$","getMenuItems","_this$getMenuItems$","click","$menuitems","_$menuitems","_$menuitems3","charPressed","onMenuRef","onToggleRef","_$menuCtrl","menuContainer","getItemType","_classNames","_omit","attrs","subItemIsActive","dropdownItem","insideInputGroup","getContextValue","contextType","unwrapArray","safeInvoke","setRef","fromEntries","Reference","refHandler","variant","CloseButton","close","outline","Button","useCallback","_props$color","_props$tag","btnOutlineColor","caret","DropdownToggle","getRole","tagRef","getWindow","ownerDocument","isHTMLElement","isShadowRoot","ShadowRoot","getUAString","uaData","userAgentData","brands","brand","isLayoutViewport","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","visualViewport","addVisualOffsets","offsetLeft","getWindowScroll","win","pageXOffset","getNodeName","nodeName","getDocumentElement","getWindowScrollBarX","isScrollParent","overflowX","overflowY","getCompositeRect","elementOrVirtualElement","isFixed","isOffsetParentAnElement","offsetParentIsScaled","rect","isElementScaled","scroll","offsets","getNodeScroll","clientLeft","clientTop","getLayoutRect","getParentNode","assignedSlot","listScrollParents","_element$ownerDocumen","isBody","updatedList","isTableElement","getTrueOffsetParent","getOffsetParent","isFirefox","currentNode","perspective","contain","willChange","getContainingBlock","auto","basePlacements","clippingParents","viewport","popper","variationPlacements","placement","placements","modifierPhases","modifiers","requires","requiresIfExists","dep","depModifier","pending","DEFAULT_OPTIONS","strategy","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","orderedModifiers","modifiersData","elements","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","contextElement","phase","orderModifiers","merged","existing","mergeByName","enabled","_ref$options","effect","cleanupFn","noopFn","_state$elements","rects","_state$orderedModifie","_state$orderedModifie2","_options","destroy","onFirstUpdate","getBasePlacement","getVariation","getMainAxisFromPlacement","computeOffsets","basePlacement","variation","commonX","commonY","mainAxis","unsetSides","mapToStyles","_Object$assign2","popperRect","gpuAcceleration","adaptive","roundOffsets","_offsets$x","_offsets$y","hasX","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","dpr","devicePixelRatio","roundOffsetsByDPR","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","popperOffsets","getOppositePlacement","getOppositeVariationPlacement","rootNode","getRootNode","isSameNode","rectToClientRect","getClientRectFromMixedType","clippingParent","layoutViewport","getViewportRect","getInnerBoundingClientRect","winScroll","getDocumentRect","getClippingRect","boundary","rootBoundary","mainClippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","mergePaddingObject","paddingObject","expandToHashMap","hashMap","detectOverflow","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","within","mathMax","mathMin","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","referenceRect","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowElement","arrow","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","withinMaxClamp","_state$modifiersData$","toPaddingObject","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","center","axisProp","centerOffset","_options$element","querySelector","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","createPopper","_options$scroll","_options$resize","resize","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","removeAttribute","initialStyles","margin","attribute","_skip","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","_options$allowedAutoP","allPlacements","allowedPlacements","overflows","computeAutoPlacement","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","check","_loop","fittingPlacement","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","EMPTY_MODIFIERS","NOOP","NOOP_PROMISE","Popper","_ref$placement","_ref$strategy","_ref$modifiers","referenceElement","popperElement","setPopperElement","_React$useState2","setArrowElement","_usePopper","prevOptions","optionsWithDefaults","updateStateModifier","popperOptions","newOptions","popperInstanceRef","popperInstance","defaultCreatePopper","usePopper","childrenProps","hide","arrowProps","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","iter","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","propType","explanation","dark","persist","updateOnSelect","directionPositionMap","DropdownMenu","_this$props$tag","_this$props$flip","_this$props$modifiers","show","position1","position2","poperPlacement","poperModifiers","persistStyles","combinedStyle","divider","header","DropdownItem","getTabIndex","_this$props$toggle","_omit$tag","SearchMenuItem","searchValue","setSearchValue","onChangeHandler","Icon","wrapperClassName","onClearSearchHandler","selectedValue","searchable","dropDownToggle","searchPlaceholder","dropdownOpen","setDropdownOpen","filteredItems","Item","_item$width","_item$height","icon","importedIcon","setImportedIcon","ReactComponent","importIcon","svg","zoomAllowed","setShowLoading","onMouseLeave","onDoubleClick","onMouseEnter","onMouseMove","useRef","isLoaded","setIsLoaded","imageOnLoad","isKitItemList","closest","isMultiThumbs","borderWidth","adjustedContainerWidth","adjustedContainerHeight","isMobileProofPreview","paddingCorrection","naturalWidth","naturalHeight","alt","onError","imageOnError","imageElem","onLoad","onImageZoomed","isStretched","zoomed","setZoomed","backgroundPosition","setBackgroundPosition","backgroundSize","setBackgroundSize","setZoomAllowed","checkIfZoomAllowed","imgWidth","imgHeight","mouseMoveHandler","currentTarget","offsetX","offsetY","nativeEvent","canBeZoomed","onMouseOver","triggerZoomed","ImageLoader","backgroundImage","backgroundRepeat","groupName","ScrollableGallery","hasMoreItems","Slider","currentPage","displayedItems","lastClonedItemRight","lastClonedItemLeft","lastItemWidth","arrowsActive","onResize","multi","addPosition","setButtons","sliderClientWidth","leftBtn","rightBtn","itemsInRow","getItemsInRow","clonedNodes","justifyContent","createInitRightSection","createInitLeftSection","setSliderPosition","setDotsPosition","initDots","clonedNodesToAppend","itemsTofill","clonedNodesToPrepend","firstChild","reorderItems","isForward","lastClonedItem","isTransition","sliderWidth","isReorder","setActiveDot","dots","getCssContent","getPropertyValue","onSwiped","Swipeable","trackMouse","preventDefaultTouchmoveEvent","onSwipedLeft","onSwipedRight","Tooltip","elementRef","titleRef","isTargetElement","LEFT","RIGHT","UP","DOWN","preventScrollOnSwipe","rotationAngle","trackTouch","swipeDuration","touchEventOptions","xy","mouseMove","mouseUp","touchEnd","touchMove","touchStart","rotateXYByAngle","angle","angleInRadians","PI","cos","sin","getHandlers","handlerProps","onStart","isTouch","onMove","onUp","onTouchStartOrOnMouseDown","timeStamp","absX","absY","velocity","sqrt","vxvy","getDirection","eventData","onSwiping","cancelablePageSwipe","onEnd","onSwipedDir","onTap","onTouchEndOrOnMouseUp","attachTouch","baseOptions","tls","addState","cleanUpTouch","useSwipeable","transientState","transientProps","previousProps","defaultKey","handlers","stateSetter","updateTransientState","$e038a7e7a6d81989$exports","$0ec14741b0133644$exports","$642f7badf2405784$exports","$30cee8d2535734ec$exports","$c302d0504fca332a$exports","$0d0703f2bd7e421c$exports","$cafa55beb2fc5ef3$exports","$18ac2ceede598103$exports","$718705a15b8a633a$exports","$bf36dae9ecc81ce0$exports","$0b4828edb010b855$exports","$0030f210b040e540$exports","$1f0ebacf5a0c0fa1$exports","$3a706ba61f3d6bba$exports","$0d17809e74607796$exports","$65a71f9a56f1398f$exports","$e5efad074a74abef$exports","$d70c2a849e55c607$exports","$009bbbb440d0e907$exports","$9366fe642464ee83$exports","$62f9bc1f98ea21de$exports","$4ec2e5b6623b1b76$exports","$e25098e26647cc04$exports","$dd39c57d242c8156$exports","$3b4c1ba5afd57b35$exports","$a455b2cda79eb746$exports","$b983ca1383d5b960$exports","$32a515ef673b0655$exports","$89434176ab35446b$exports","$727da781aca847f9$exports","$fcd2d84b9a2d489c$exports","$2422ac328687ee23$exports","$c9a532d1c973af61$exports","$34de119f14549a4b$exports","$b5e257d569688ac6$var$defaultContext","$b5e257d569688ac6$var$SSRContext","$73SJx$react","$b5e257d569688ac6$var$IsSSRContext","$b5e257d569688ac6$var$canUseDOM","$b5e257d569688ac6$var$componentIds","$b5e257d569688ac6$var$useCounter","isDisabled","$73SJx$useContext","$73SJx$useRef","_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner","_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","currentOwner","prevComponentValue","memoizedState","$b5e257d569688ac6$export$619500959fc48b26","defaultId","useId","didSSR","$73SJx$useState","$b5e257d569688ac6$export$535bd6ca7f90a273","$b5e257d569688ac6$var$getSnapshot","$b5e257d569688ac6$var$getServerSnapshot","$b5e257d569688ac6$var$subscribe","onStoreChange","$f0a04ccd8dbdd83b$export$e5c5a5f917a5871c","$12uGp$react","$8ae05eaa5c114e9c$export$7f54fc3180508a52","$12uGp$useRef","$12uGp$useCallback","$1dbecbe27a04f9af$export$14d238f342723f25","$12uGp$useState","nextRef","$bdb11010cef70236$var$canUseDOM","$bdb11010cef70236$var$idsUpdaterMap","$bdb11010cef70236$export$f680877a34711e37","nextId","$12uGp$useSSRSafeId","updateValue","$12uGp$useEffect","newId","$bdb11010cef70236$export$cd8c9cb68f842629","idA","idB","setIdA","setIdB","$bdb11010cef70236$export$b4cc09c592e8fdb8","depArray","resolvedId","setResolvedId","updateId","getElementById","$ff5963eb1fccf552$export$e08e3b67e392101e","callbacks","$431fbd86ca7dc216$export$b204af158042fbac","_el_ownerDocument","$431fbd86ca7dc216$export$f21a1ffae260145a","$3ef42575df84b30b$export$9d1611c77c2fe928","$12uGp$clsx","$5dc95899b306f630$export$c9058316764c140e","$65484d02dcb7eb3e$var$DOMPropNames","$65484d02dcb7eb3e$var$labelablePropNames","$65484d02dcb7eb3e$var$linkPropNames","$65484d02dcb7eb3e$var$propRe","$65484d02dcb7eb3e$export$457c3d6518dd4c6f","labelable","isLink","propNames","filteredProps","$7215afc6de606d6b$export$de79e2c695e052f3","$7215afc6de606d6b$var$supportsPreventScrollCached","preventScroll","$7215afc6de606d6b$var$supportsPreventScroll","scrollableElements","rootScrollingElement","scrollingElement","$7215afc6de606d6b$var$getScrollableElements","$7215afc6de606d6b$var$restoreScrollPosition","$c87311424ea30a05$var$testUserAgent","_window_navigator_userAgentData","$c87311424ea30a05$var$testPlatform","platform","$c87311424ea30a05$export$9ac100e40613ea10","$c87311424ea30a05$export$7bef049ce92e4224","maxTouchPoints","$c87311424ea30a05$export$fedb369cb70207f1","$c87311424ea30a05$export$78551043582a6a98","$c87311424ea30a05$export$a11b0059900ceec8","$ea8dcbcb9ea1b556$var$RouterContext","$12uGp$createContext","$ea8dcbcb9ea1b556$var$getSyntheticLink","$ea8dcbcb9ea1b556$export$95185d699e05d4d7","$ea8dcbcb9ea1b556$export$9a302a45f65d0572","$12uGp$useContext","$ea8dcbcb9ea1b556$export$efa8c9099e530235","hasAttribute","setOpening","_window_event_type","_window_event","KeyboardEvent","keyIdentifier","MouseEvent","bubbles","isOpening","dispatchEvent","HTMLAnchorElement","rel","ping","referrerPolicy","$bbed8b41f857bcc0$var$transitionsByElement","$bbed8b41f857bcc0$var$transitionCallbacks","$bbed8b41f857bcc0$var$setupGlobalEvents","isTransitionEvent","onTransitionEnd","transitions","$bbed8b41f857bcc0$export$24490316f764c430","readyState","$03deb23ff14920c4$export$4eaf04e54aa8eed6","globalListeners","addGlobalListener","eventTarget","removeGlobalListener","_globalListeners_current_get","removeAllGlobalListeners","$313b98861ee5dd6c$export$d6875122194c7b44","defaultLabel","labelledBy","$df56164dff5785e2$export$4338b53315abf666","forwardedRef","objRef","$12uGp$useMemo","$9daab02d461809db$export$683480f191c0e3ea","ResizeObserver","resizeObserverInstance","observe","unobserve","$e7801be82b4b2a53$export$4debdb1a3f0fa79e","$62d8ded9296f3872$export$cfa2225e87938781","checkForOverflow","scrollableNode","$62d8ded9296f3872$export$2bb74740c4e19def","isScrollable","$ef06256079686ba0$var$descriptionId","$ef06256079686ba0$var$descriptionNodes","$ef06256079686ba0$export$f8aeda7b10753fa1","setId","refCount","$e9faafb641e167db$export$90fc3a17d93f704c","handleEvent","$2f04cbc44ee30ce0$export$53a0910f038337bd","scrollView","$2f04cbc44ee30ce0$var$relativeOffset","borderTopWidth","borderLeftWidth","borderAdjustedX","borderAdjustedY","maxX","maxY","$2f04cbc44ee30ce0$export$c826860796309d1b","targetElement","_targetElement_scrollIntoView","originalLeft","originalTop","scrollIntoView","newLeft","newTop","_opts_containingElement_scrollIntoView","_opts_containingElement","_targetElement_scrollIntoView1","containingElement","$6a7db85432448f7f$export$60278871457622de","mozInputSource","isTrusted","buttons","detail","$99facab73266f662$export$5add1d006293d136","initialValue","onReset","resetValue","handleReset","_ref_current","form","_class_extract_field_descriptor","receiver","privateMap","_class_private_field_init","privateCollection","_check_private_redeclaration","_class_private_field_set","_class_apply_descriptor_set","$14c0b72509d70225$var$state","$14c0b72509d70225$var$savedUserSelect","$14c0b72509d70225$var$modifiedElementMap","$14c0b72509d70225$export$16a4697467175487","$bx7SL$isIOS","documentObject","$bx7SL$getOwnerDocument","webkitUserSelect","SVGElement","$14c0b72509d70225$export$b0d6fa1ab32e3295","$bx7SL$runAfterTransition","targetOldUserSelect","$ae1eeba8b9eafd08$export$5165eccb35aaadb5","$bx7SL$react","$f6c31cce2adf654f$var$_shouldStopPropagation","$f6c31cce2adf654f$var$PressEvent","continuePropagation","shouldStopPropagation","_class_apply_descriptor_get","originalEvent","$bx7SL$_1","$f6c31cce2adf654f$var$LINK_CLICKED","$f6c31cce2adf654f$export$45712eceda6fad21","onPress","onPressChange","onPressStart","onPressEnd","onPressUp","isPressed","isPressedProp","preventFocusOnPress","shouldCancelOnPointerExit","allowTextSelectionOnPress","domProps","$bx7SL$useContext","$bx7SL$mergeProps","$bx7SL$useSyncRef","$f6c31cce2adf654f$var$usePressResponderContext","setPressed","$bx7SL$useState","$bx7SL$useRef","ignoreEmulatedMouseEvents","ignoreClickAfterPress","didFirePressStart","isTriggeringEvent","activePointerId","isOverTarget","$bx7SL$useGlobalListeners","triggerPressStart","$bx7SL$useEffectEvent","triggerPressEnd","wasPressed","triggerPressUp","$f6c31cce2adf654f$var$createEvent","cancelOnPointerExit","pressProps","$bx7SL$useMemo","$f6c31cce2adf654f$var$isValidKeyboardEvent","_state_metaKeyEvents","$f6c31cce2adf654f$var$shouldPreventDefaultKeyboard","originalTarget","pressUp","$bx7SL$chain","onKeyUp","stopPropagation","$bx7SL$isMac","metaKeyEvents","$bx7SL$openLink","$bx7SL$isVirtualClick","$bx7SL$focusWithoutScrolling","stopPressStart","stopPressUp","stopPressEnd","_state_metaKeyEvents1","$f6c31cce2adf654f$var$isHTMLAnchorLink","_state_target","PointerEvent","onPointerDown","pressure","$f6c31cce2adf654f$var$shouldPreventDefault","pointerId","onPointerMove","onPointerUp","onPointerCancel","$f6c31cce2adf654f$var$isOverTarget","onDragStart","onMouseUp","touch","targetTouches","$f6c31cce2adf654f$var$getTouchFromEvent","identifier","$bx7SL$getOwnerWindow","onTouchMove","$f6c31cce2adf654f$var$getTouchById","onTouchCancel","$bx7SL$useEffect","_ref_current_target","HTMLInputElement","$f6c31cce2adf654f$var$isValidInputKey","HTMLTextAreaElement","isContentEditable","changedTouches","point","pointRect","radiusX","radiusY","$f6c31cce2adf654f$var$getPointClientRect","HTMLButtonElement","$f6c31cce2adf654f$var$nonTextInputTypes","$f1ab8c75478c6f73$export$3351871ee4b288b8","isRegistered","prevContext","$bx7SL$useObjectRef","$f1ab8c75478c6f73$export$cf75428e0b9ed1ea","$8a9cb279dc87e130$export$905e7fc544a71f36","isDefaultPrevented","isPropagationStopped","relatedTarget","eventPhase","$8a9cb279dc87e130$export$715c682d09d639cc","onBlur","stateRef","isFocused","observer","$bx7SL$useLayoutEffect","disconnect","dispatchBlur","$bx7SL$useCallback","HTMLSelectElement","onBlurHandler","MutationObserver","_stateRef_current_observer","relatedTargetEl","FocusEvent","attributeFilter","$a1ea59d68270f0dd$export$f8168d8dd8fd66e6","onFocus","onFocusProp","onBlurProp","onFocusChange","onSyntheticFocus","focusProps","$507fabe10e71c6fb$var$currentModality","$507fabe10e71c6fb$var$changeHandlers","$507fabe10e71c6fb$export$d90243b58daecda7","$507fabe10e71c6fb$var$hasEventBeforeFocus","$507fabe10e71c6fb$var$hasBlurredWindowRecently","$507fabe10e71c6fb$var$FOCUS_VISIBLE_INPUT_KEYS","Escape","$507fabe10e71c6fb$var$triggerChangeHandlers","modality","$507fabe10e71c6fb$var$handleKeyboardEvent","$507fabe10e71c6fb$var$isValidKey","$507fabe10e71c6fb$var$handlePointerEvent","$507fabe10e71c6fb$var$handleClickEvent","$507fabe10e71c6fb$var$handleFocusEvent","$507fabe10e71c6fb$var$handleWindowBlur","$507fabe10e71c6fb$var$setupGlobalFocusEvents","windowObject","$507fabe10e71c6fb$var$tearDownWindowFocusTracking","loadListener","$507fabe10e71c6fb$export$b9b3dfddab17db27","$507fabe10e71c6fb$export$630ff653c5ada6a9","$507fabe10e71c6fb$export$8397ddfc504fdb9a","$507fabe10e71c6fb$export$98e20ec92f614cfe","setModality","$bx7SL$useIsSSR","$507fabe10e71c6fb$export$2f1888112f558a7d","$507fabe10e71c6fb$var$nonTextInputTypes","$507fabe10e71c6fb$export$ec71b4b83ac08ec3","isTextInput","_e_target","IHTMLInputElement","IHTMLTextAreaElement","IHTMLElement","IKeyboardEvent","$507fabe10e71c6fb$var$isKeyboardFocusEvent","$9ab94262bd0047c7$export$420e68273165f4ec","onBlurWithin","onFocusWithin","onFocusWithinChange","isFocusWithin","focusWithinProps","$6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents","$6179b936705e76d3$var$hoverCount","$6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents","$6179b936705e76d3$var$handleGlobalPointerEvent","$6179b936705e76d3$var$setupGlobalTouchEvents","$6179b936705e76d3$export$ae780daf29e6d456","onHoverStart","onHoverChange","onHoverEnd","isHovered","setHovered","hoverProps","triggerHoverEnd","triggerHoverStart","onPointerEnter","onPointerLeave","$e0b6e0b68ec7f50f$export$872b660ac5a1ff98","onInteractOutside","onInteractOutsideStart","isPointerDown","$e0b6e0b68ec7f50f$var$isValidEvent","triggerInteractOutside","$93925083ecbb358c$export$48d1ea6320830260","$46d819fcbaf35654$export$8f71654801c2f7cd","keyboardProps","$8a26561d2877236e$var$DEFAULT_THRESHOLD","$8a26561d2877236e$export$c24ed0104d07eab9","onLongPressStart","onLongPressEnd","onLongPress","accessibilityDescription","timeRef","onContextMenu","longPressProps","$bx7SL$useDescription","$6a99195332edec8b$export$80f3e147d781571c","$6nfFC$getOwnerDocument","$6nfFC$getInteractionModality","lastFocusedElement","$6nfFC$runAfterTransition","isConnected","$6nfFC$focusWithoutScrolling","$645f2e67b85a24c9$export$e989c0fffaa6b27a","childElement","$6nfFC$getOwnerWindow","isVisible","computedDisplay","computedVisibility","$645f2e67b85a24c9$var$isStyleVisible","$645f2e67b85a24c9$var$isAttributeVisible","$9bf71ea28793e738$var$FocusContext","$6nfFC$react","$9bf71ea28793e738$var$activeScope","$9bf71ea28793e738$export$20e40289641fbbb6","restoreFocus","startRef","$6nfFC$useRef","endRef","scopeRef","$6nfFC$useContext","$6nfFC$useMemo","$9bf71ea28793e738$var$TreeNode","$6nfFC$useLayoutEffect","$9bf71ea28793e738$export$d06fae2ee68b101e","getTreeNode","$9bf71ea28793e738$var$isAncestorScope","activeNode","addChild","_startRef_current","nextSibling","restore","$9bf71ea28793e738$var$isElementInScope","$9bf71ea28793e738$var$isElementInAnyScope","$9bf71ea28793e738$var$useActiveScopeTracker","focusedNode","$9bf71ea28793e738$var$shouldContainFocus","focusedElement","walker","$9bf71ea28793e738$export$2d6ec8fc375ceafa","$9bf71ea28793e738$var$getScopeRoot","tabbable","nextElement","previousNode","nextNode","previousElementSibling","$9bf71ea28793e738$var$focusElement","$9bf71ea28793e738$var$isElementInChildScope","$9bf71ea28793e738$var$focusFirstInScope","_focusedNode_current","$9bf71ea28793e738$var$useFocusContainment","nodeToRestoreRef","treeNode","nodeToRestore","blur","_nodeToRestoreRef_current","$9bf71ea28793e738$var$shouldRestoreFocus","clonedTree","$9bf71ea28793e738$var$useRestoreFocus","autoFocusRef","$6nfFC$useEffect","$9bf71ea28793e738$var$useAutoFocus","_focusScopeTree_getTreeNode_parent","_focusScopeTree_getTreeNode","_focusScopeTree_getTreeNode_parent_scopeRef","parentScope","removeTreeNode","focusManager","focusNext","accept","sentinel","focusPrevious","focusFirst","focusLast","$9bf71ea28793e738$var$createFocusManagerForScope","$9bf71ea28793e738$var$focusableElements","$9bf71ea28793e738$var$FOCUSABLE_ELEMENT_SELECTOR","$9bf71ea28793e738$var$TABBABLE_ELEMENT_SELECTOR","scopeRoot","createTreeWalker","NodeFilter","SHOW_ELEMENT","acceptNode","_opts_from","FILTER_REJECT","FILTER_SKIP","FILTER_ACCEPT","$9bf71ea28793e738$var$Tree","fastMap","addTreeNode","_node_parent","newTree","_node_parent_scopeRef","$f7dceffc5ad7768b$export$4e328f61c538687f","isFocusVisible","$6nfFC$isFocusVisible","setFocused","$6nfFC$useState","isFocusVisibleState","setFocusVisible","updateState","$6nfFC$useCallback","$6nfFC$useFocusVisibleListener","$6nfFC$useFocus","$6nfFC$useFocusWithin","$e6afbd83fe6ebbd2$var$FocusableContext","$e6afbd83fe6ebbd2$export$4c014de7c8940b4c","domRef","$6nfFC$useKeyboard","interactions","$6nfFC$mergeProps","$6nfFC$useSyncRef","otherProps","$e6afbd83fe6ebbd2$var$useFocusableContext","interactionProps","focusableProps","excludeFromTabOrder","$298d61e98472621b$export$dcf14c9974fe2767","deprecatedOnClick","linkProps","$kKV4x$useFocusable","$kKV4x$usePress","$kKV4x$filterDOMProps","interactionHandlers","$kKV4x$mergeProps","$kKV4x$useRouter","_pressProps_onClick","$kKV4x$shouldClientNavigate","$701a24aa0da5b062$export$ea18c227d4417cc3","additionalProps","allowFocusWhenDisabled","$cE0pI$usePress","$cE0pI$useFocusable","buttonProps","$cE0pI$mergeProps","$cE0pI$filterDOMProps","$f4b273590fab9f93$export$52210f68a14655d0","ariaOrientation","$hvHz9$filterDOMProps","orientation","separatorProps","$5b160d28a433310d$var$localeSymbol","$5b160d28a433310d$var$stringsSymbol","$5b160d28a433310d$var$cachedGlobalStrings","$5b160d28a433310d$export$c17fa47878dc55b6","getStringForLocale","getStringsForLocale","strings","defaultLocale","$5b160d28a433310d$var$getLanguage","$5b160d28a433310d$var$getStringsForLocale","getGlobalDictionaryForPackage","packageName","globalStrings","pkg","dictionary","$6db58dc88e78b024$var$pluralRulesCache","$6db58dc88e78b024$var$numberFormatCache","$6db58dc88e78b024$export$2f817fcdc4b89ae0","variables","plural","pluralRules","PluralRules","select","numberFormat","$148a7a147e38ea7f$var$RTL_SCRIPTS","$148a7a147e38ea7f$var$RTL_LANGS","$148a7a147e38ea7f$export$702d680b21cbd764","localeString","maximize","textInfo","getTextInfo","$1e5a04cdaf7d1af8$var$localeSymbol","$1e5a04cdaf7d1af8$export$f09106e7c6677ec5","userLanguage","supportedLocalesOf","_err","$1e5a04cdaf7d1af8$var$currentLocale","$1e5a04cdaf7d1af8$var$listeners","$1e5a04cdaf7d1af8$var$updateLocale","$1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a","isSSR","$iFADg$useIsSSR","setDefaultLocale","$iFADg$useState","$iFADg$useEffect","$18f2051aff69b9bf$var$I18nContext","$iFADg$react","$18f2051aff69b9bf$export$43bb16f9c6d9e3f7","$iFADg$useContext","$fca6afa0e843324b$var$cache","$fca6afa0e843324b$export$87b761675e8eaa10","$iFADg$LocalizedStringDictionary","$fca6afa0e843324b$var$getCachedDictionary","$fca6afa0e843324b$export$f12b703ca79dfbb1","$iFADg$useMemo","$iFADg$LocalizedStringFormatter","$325a3faab7a68acd$var$cache","$325a3faab7a68acd$export$a16aca283550c30d","formatter","Collator","$feb5ffebff200149$export$d3e3bd3e26688c04","$feb5ffebff200149$export$16792effe837dba3","$eCAIO$isMac","$fb3050f43d946246$var$TYPEAHEAD_DEBOUNCE_WAIT_MS","$fb3050f43d946246$export$e32c88dfddc6e1d8","keyboardDelegate","selectionManager","onTypeSelect","$eCAIO$useRef","typeSelectProps","onKeyDownCapture","getKeyForSearch","character","$fb3050f43d946246$var$getStringForKey","focusedKey","setFocusedKey","$ae20dd8cbca75726$export$d6daf82dcd84e87c","manager","delegate","shouldFocusWrap","disallowEmptySelection","disallowSelectAll","selectOnFocus","selectionBehavior","disallowTypeAhead","shouldUseVirtualFocus","allowsTabNavigation","isVirtualized","scrollRef","linkBehavior","$eCAIO$useLocale","$eCAIO$useRouter","scrollPos","$eCAIO$useEvent","$eCAIO$useEffect","getFirstKey","getLastKey","selectedKeys","canSelectItem","$eCAIO$focusSafely","lastFocusedKey","$eCAIO$getInteractionModality","CSS","$eCAIO$scrollIntoView","$eCAIO$scrollIntoViewport","navigateToKey","childFocus","$eCAIO$flushSync","selectionMode","extendSelection","replaceSelection","getKeyBelow","_delegate_getFirstKey","_delegate_getFirstKey1","nextKey","getKeyAbove","_delegate_getLastKey","_delegate_getLastKey1","getKeyLeftOf","_delegate_getFirstKey2","_delegate_getLastKey2","getKeyRightOf","_delegate_getLastKey3","_delegate_getFirstKey3","firstKey","lastKey","getKeyPageBelow","getKeyPageAbove","selectAll","clearSelection","$eCAIO$getFocusableTreeWalker","lastChild","$eCAIO$focusWithoutScrolling","navigateToFirstKey","_manager_lastSelectedKey","_manager_firstSelectedKey","DOCUMENT_POSITION_FOLLOWING","lastSelectedKey","firstSelectedKey","$eCAIO$mergeProps","collectionProps","$880e95eb8b93ba9a$export$ecf600387e221c37","shouldSelectOnPressUp","onAction","allowsDifferentPressOrigin","onSelect","toggleSelection","setSelectedKeys","childFocusStrategy","itemProps","isLinkOverride","hasLinkAction","allowsSelection","allowsActions","hasPrimaryAction","hasSecondaryAction","hasAction","longPressEnabled","longPressEnabledOnPressStart","hadPrimaryActionOnPressStart","performAction","itemPressProps","$880e95eb8b93ba9a$var$isSelectionKey","$880e95eb8b93ba9a$var$isActionKey","$eCAIO$usePress","$eCAIO$useLongPress","setSelectionBehavior","$eCAIO$openLink","$2a25aae57d74318e$export$a05409b8bb224a5a","getNextKey","getKeyAfter","disabledKeys","getPreviousKey","getKeyBefore","shouldSkip","prevRect","isSameRow","itemRect","isSameColumn","layout","getNextColumn","$eCAIO$isScrollable","containerRect","containerX","containerY","fromKey","collator","textValue","compare","$982254629710d113$export$b95089534ab7c1fd","$eCAIO$useCollator","usage","sensitivity","disabledBehavior","$eCAIO$useMemo","listProps","$d191a55c9702f145$export$8467354a121f1b9f","ariaLabelledby","labelElementType","$iD7q0$useId","labelId","labelProps","htmlFor","$iD7q0$useLabels","$2baaea4c71418dea$export$294aa081a6c6f55d","errorMessage","isInvalid","validationState","fieldProps","descriptionId","$iD7q0$useSlotId","errorMessageId","$iD7q0$mergeProps","descriptionProps","errorMessageProps","$c1d7fb2ec91bae71$var$Item","$c1d7fb2ec91bae71$var$hasChildItems","hasChildItems","childItems","$tyW6A$react","getCollectionNode","rendered","suppressTextValueWarning","hasChildNodes","$9fc4852771d079eb$var$Section","$eb2240fc39a57fa5$export$bf788dd355e3a401","build","$eb2240fc39a57fa5$var$iterable","iterateCollection","getFullNode","getKey","partialNode","parentKey","_v_key","getChildState","shouldInvalidate","isValidElement","childNode","nodeKey","$eb2240fc39a57fa5$var$compose","$eb2240fc39a57fa5$var$capitalize","$7613b1592d41b092$export$6cd28814d92fa9c9","$tyW6A$useMemo","$c5a24bc478652b5f$export$1005530eda016c13","$c5a24bc478652b5f$export$fbdeaa6a76694f71","$c5a24bc478652b5f$export$5f3398f8733f90e2","$c5a24bc478652b5f$export$8c434b3a7a4dad6","aAncestors","$c5a24bc478652b5f$var$getAncestors","bAncestors","firstNonMatchingAncestor","parents","$453cc9f0df89c0a5$var$cache","$453cc9f0df89c0a5$export$77d5aafae4e095b2","countItems","$b1f0cad8af73213b$export$3585ede4d035bf14","$b1f0cad8af73213b$export$9145995848b05025","itemKey","$c132121280ec012d$export$50eacbbf140a3141","$frWMC$filterDOMProps","$frWMC$useSelectableList","$frWMC$useFocusWithin","$frWMC$useId","shouldFocusOnHover","$frWMC$useLabel","listBoxProps","$frWMC$mergeProps","$293f70390ea03370$export$497855f14858aa34","_item_props","_props_isDisabled","_props_isSelected","_props_shouldSelectOnPressUp","_props_shouldFocusOnHover","_props_shouldUseVirtualFocus","_props_isVirtualized","$frWMC$useSlotId","optionProps","$frWMC$isMac","$frWMC$isWebKit","$frWMC$getItemCount","$frWMC$useSelectableItem","_data_onAction","$frWMC$useHover","$frWMC$isFocusVisible","$af383d3bef1cfdc9$export$c3f9f39876e4bc7","heading","headingId","headingProps","groupProps","$773d5888b972f1cf$exports","$d11f19852b941573$exports","$b983974c2ee1efb3$exports","$5809cc9d4e92de73$exports","$c68c2e4fc74398d1$exports","$0898b4c153db2b77$exports","$6d74810286a15183$exports","$309d73dc65f78055$exports","$44ad94f7205cf593$exports","$7c28f5687f0779a9$exports","$e6d75df4b68bd73a$exports","$87505c9dab186d0f$exports","$553439c3ffb3e492$exports","$74cf411061b983a2$exports","$e933f298574dc435$exports","$ac91fc9fe02f71f6$exports","$52b96f86422025af$exports","$c0d724c3e51dafa6$exports","$c92899672a3fe72e$exports","$9f576b39d8e7a9d6$exports","$9d025808aeec81a7$exports","$fce709921e2c0fa6$exports","$2599cf0c4ab37f59$exports","$3c220ae7ef8a35fd$exports","$93562b5094072f54$exports","$cd9e2abd0d06c7b4$exports","$45375701f409adf1$exports","$27fab53a576de9dd$exports","$4438748d9952e7c7$exports","$0936d7347ef4da4c$exports","$29700c92185d38f8$exports","$662ccaf2be4c25b3$exports","$d80a27deda7cdb3c$exports","$458b0a5536c1a7cf$export$40bfa8c7b0832715","stateValue","setStateValue","$6imuh$useState","isControlledRef","$6imuh$useRef","isControlled","$6imuh$useEffect","wasControlled","$6imuh$useCallback","onChangeCaller","onChangeArgs","updateFunction","oldValue","functionArgs","interceptedValue","$9446cca9a3875146$export$7d15b64cf5a3a4c4","$2b2734393847c884$exports","$5c3e21d68f1c4674$var$styles","clip","clipPath","whiteSpace","$5c3e21d68f1c4674$export$a966af930f325cab","isFocusable","$9BxnE$useState","$9BxnE$useFocusWithin","visuallyHiddenProps","$9BxnE$useMemo","$5c3e21d68f1c4674$export$439d29a4e110a164","$9BxnE$react","$9BxnE$mergeProps","$edcf132a9284368a$var$AXIS","$edcf132a9284368a$var$FLIPPED_DIRECTION","$edcf132a9284368a$var$CROSS_AXIS","$edcf132a9284368a$var$AXIS_SIZE","$edcf132a9284368a$var$TOTAL_SIZE","$edcf132a9284368a$var$PARSED_PLACEMENT_CACHE","$edcf132a9284368a$var$visualViewport","$edcf132a9284368a$var$getContainerDimensions","containerNode","totalWidth","totalHeight","isPinchZoomedIn","scale","_visualViewport_width","_visualViewport_height","$edcf132a9284368a$var$getOffset","$k7QOs$isWebKit","pageTop","pageLeft","$edcf132a9284368a$var$getDelta","boundaryDimensions","containerDimensions","containerOffsetWithBoundary","containerScroll","boundarySize","boundaryStartEdge","boundaryEndEdge","startEdgeOffset","endEdgeOffset","$edcf132a9284368a$var$parsePlacement","crossPlacement","crossAxis","crossSize","$edcf132a9284368a$var$computePosition","childOffset","overlaySize","placementInfo","crossOffset","isContainerPositioned","arrowSize","arrowBoundaryOffset","minPosition","maxPosition","$k7QOs$clamp","containerHeight","$edcf132a9284368a$var$getAvailableSpace","margins","$edcf132a9284368a$export$6839422d1f33cee9","placementInput","scrollSize","userSetMaxHeight","normalizedOffset","flippedPlacementInfo","flippedPosition","heightGrowthDirection","overlayHeight","overlayTop","$edcf132a9284368a$var$getMaxHeight","arrowPosition","preferredArrowPosition","arrowMinPosition","arrowMaxPosition","arrowPositionOverlappingChild","arrowOffsetLeft","arrowOffsetTop","$edcf132a9284368a$export$b3ceb0cbf1056d98","targetNode","overlayNode","scrollNode","shouldFlip","boundaryElement","$edcf132a9284368a$var$isContainingBlock","$edcf132a9284368a$var$getContainingBlock","isViewportContainer","containerPositionStyle","$edcf132a9284368a$var$getPosition","marginTop","$edcf132a9284368a$var$getMargins","parentOffset","parentStyle","backdropFilter","WebkitBackdropFilter","$dd149f63282afbbf$export$f6211563215e3b37","$dd149f63282afbbf$export$18fc8428861184da","triggerRef","onClose","$k7QOs$useEffect","onCloseHandler","$2a41e45df1593e64$var$visualViewport","$2a41e45df1593e64$export$d39e1813b3bdd0e1","$k7QOs$useLocale","targetRef","overlayRef","containerPadding","shouldUpdatePosition","$k7QOs$useState","lastScale","$k7QOs$useRef","updatePosition","$k7QOs$useCallback","$2a41e45df1593e64$var$translateRTL","$k7QOs$useLayoutEffect","$k7QOs$useResizeObserver","isResizing","overlayProps","$a11501f3d1d39e6c$var$visibleOverlays","$a11501f3d1d39e6c$export$ea8f71083e90600f","shouldCloseOnBlur","isDismissable","isKeyboardDismissDisabled","shouldCloseOnInteractOutside","onHide","$k7QOs$useInteractOutside","$k7QOs$useFocusWithin","underlayProps","$628037886ba31236$export$f9d5c8beee7d008d","ariaHasPopup","overlayId","$k7QOs$useId","triggerProps","$49c51c25361d4cd2$var$visualViewport","$49c51c25361d4cd2$var$nonTextInputTypes","$49c51c25361d4cd2$var$restore","$49c51c25361d4cd2$var$preventScrollCount","$49c51c25361d4cd2$export$ee0f7cc6afcd1c18","$k7QOs$isIOS","scrollable","restoreScrollableStyles","$49c51c25361d4cd2$var$willOpenKeyboard","setupStyles","$49c51c25361d4cd2$var$scrollIntoView","restoreStyles","onWindowScroll","scrollTo","scrollX","scrollY","$k7QOs$chain","$49c51c25361d4cd2$var$addEvent","$49c51c25361d4cd2$var$setStyle","$k7QOs$getScrollParent","overscrollBehavior","$49c51c25361d4cd2$var$preventScrollMobileSafari","cur","scrollableTop","$86ea4cb521eb2e37$export$2317d149ed6f78c4","onDismiss","$k7QOs$useLabels","$k7QOs$useLocalizedStringFormatter","$parcel$interopDefault","$a2f21f5f14f60553$exports","$k7QOs$react","$k7QOs$VisuallyHidden","$5e3802645cc19319$var$refCountMap","$5e3802645cc19319$var$observerStack","$5e3802645cc19319$export$1c3ebcada18427bf","targets","visibleNodes","hiddenNodes","acceptRoot","_refCountMap_get","changes","change","addedNodes","removedNodes","dataset","liveAnnouncer","reactAriaTopLayer","childList","subtree","observerWrapper","$f2f8a6077418541e$export$542a6fd13ac93354","popoverRef","isNonModal","positionProps","popoverProps","$k7QOs$mergeProps","$337b884510726a0d$export$a2200b96afd16271","$337b884510726a0d$export$c6fdb837b070b4ff","$k7QOs$useIsSSR","portalContainer","isExiting","setContain","contextValue","$k7QOs$useMemo","contents","disableFocusManagement","$k7QOs$FocusScope","$k7QOs$ClearPressResponder","$k7QOs$reactdom","createPortal","$168583247155ddda$export$dc9c12ed27dd1b49","menuTriggerId","$1Hnir$useId","$1Hnir$useOverlayTrigger","stringFormatter","$1Hnir$useLocalizedStringFormatter","$2cbb7ca666678a14$exports","$1Hnir$useLongPress","menuTriggerProps","menuProps","focusStrategy","$e93e671b31057976$export$b8473d3665f3a75a","validationBehavior","$2tWuM$useLayoutEffect","realtimeValidation","validationErrors","setCustomValidity","updateValidation","validity","validationDetails","$e93e671b31057976$var$getValidity","validationMessage","$2tWuM$useEffectEvent","resetValidation","onInvalid","displayValidation","commitValidation","_ref_current1","$e93e671b31057976$var$getFirstInvalidInput","$2tWuM$setInteractionModality","$2tWuM$useEffect","badInput","customError","patternMismatch","rangeOverflow","rangeUnderflow","stepMismatch","tooLong","tooShort","typeMismatch","valueMissing","$58aed456727eb0f3$export$703601b7e90536f8","$58aed456727eb0f3$export$e64b2f635402ca43","$thkiX$useCollator","$thkiX$useMemo","$thkiX$ListKeyboardDelegate","$thkiX$useMenuTrigger","$thkiX$useTypeSelect","setSelectedKey","$thkiX$useField","$thkiX$filterDOMProps","$thkiX$mergeProps","valueId","$thkiX$useId","$thkiX$setInteractionModality","$thkiX$chain","selectedKey","valueProps","$bdd25dc72710631f$export$f809e80f58e251d1","autoComplete","$thkiX$useInteractionModality","$thkiX$useVisuallyHidden","_state_selectedKey","$thkiX$useFormReset","selectRef","$thkiX$useFormValidation","containerProps","inputProps","fontSize","selectProps","$bdd25dc72710631f$export$cbd84cdb2e668835","$thkiX$useRef","$thkiX$react","$e40ea825a81a3709$export$52baac22726c72bf","anchorKey","currentKey","$7af3f5b51489e0b5$export$253fe78d46329472","allowDuplicateSelectionEvents","selectionBehaviorProp","isFocusedRef","$Qsto2$useRef","$Qsto2$useState","focusedKeyRef","childFocusStrategyRef","selectedKeysProp","$Qsto2$useMemo","$7af3f5b51489e0b5$var$convertSelection","defaultSelectedKeys","$Qsto2$useControlledState","onSelectionChange","disabledKeysProp","lastSelectionBehavior","$Qsto2$useEffect","setA","setB","$7af3f5b51489e0b5$var$equalSets","$d496c0a20b6e58ec$export$6c8a5aaad13c9852","getSelectAllKeys","rawSelection","isSelectAll","_isSelectAll","$Qsto2$compareNodeOrder","getKeyRange","fromItem","toItem","getKeyRangeInternal","allowsCellSelection","addKeys","$Qsto2$getFirstItem","$Qsto2$getChildNodes","toggleSelectAll","isSelectionEqual","_this_collection_getItem_props","_this_collection_getItem","_options_allowsCellSelection","$a02d57049d202695$export$d085fb9e920b5ca7","keyMap","$e72dd72e1c76a225$export$2f645645f7bca764","selectionState","$58Phs$useMultipleSelectionState","$58Phs$useMemo","$58Phs$useCallback","$58Phs$useCollection","$58Phs$SelectionManager","cachedCollection","$58Phs$useRef","$58Phs$useEffect","startItem","cachedItemNodes","itemNode","itemNodes","newNode","$a0d645289fe9b86b$export$e7f05e985daf4b5f","_props_defaultSelectedKey","$58Phs$useControlledState","defaultSelectedKey","_keys_values_next_value","$fc909762b330b746$export$61c6a8c84e605fb6","setOpen","$4oA3P$useControlledState","defaultOpen","onOpenChange","$4oA3P$useCallback","$a28c903ee9ad8dc5$export$79fefeb1c2091ac3","overlayTriggerState","$9Xvoh$useOverlayTriggerState","setFocusStrategy","$9Xvoh$useState","expandedKeysStack","setExpandedKeysStack","UNSTABLE_expandedKeysStack","UNSTABLE_openSubmenu","openSubmenu","triggerKey","oldStack","UNSTABLE_closeSubmenu","closeSubmenu","$e5be200c675c3b3a$export$aca958c65c314e6c","$e5be200c675c3b3a$var$CUSTOM_VALIDITY_STATE","$e5be200c675c3b3a$export$dad6ae84456c676a","$e5be200c675c3b3a$export$571b5131b7e65c11","$jcIOw$createContext","$e5be200c675c3b3a$export$a763b9476acd3eb","$e5be200c675c3b3a$export$fc1a364ae1f3ff10","builtinValidation","controlledError","clientError","$jcIOw$useMemo","$e5be200c675c3b3a$var$getValidationResult","$e5be200c675c3b3a$var$asArray","$e5be200c675c3b3a$var$runValidate","serverErrors","$jcIOw$useContext","serverErrorMessages","lastServerErrors","setLastServerErrors","$jcIOw$useState","isServerErrorCleared","setServerErrorCleared","serverError","nextValidation","$jcIOw$useRef","currentValidity","setCurrentValidity","lastError","commitQueued","setCommitQueued","$e5be200c675c3b3a$var$isEqualValidation","$jcIOw$useEffect","$e5be200c675c3b3a$var$useFormValidationStateImpl","$2bc3a590c5373a4e$export$5159ec8b34d4ec12","triggerState","$e17gp$useOverlayTriggerState","$e17gp$useState","listState","$e17gp$useSingleSelectListState","$e17gp$useFormValidationState","$16805b1b18093c5f$export$de3fdf6493c353d","rows","_rows_","prevNode","visitNode","childKeys","rowNode","$788781baa30117fa$var$ROW_HEADER_COLUMN_KEY","$788781baa30117fa$var$ROW_HEADER_COLUMN_KEY_DRAG","$312ae3b56a94a86e$var$TableHeader","columns","$1BfjW$react","$4ae5314bf50db1a3$var$TableBody","$1cd244557c2f97d5$var$Column","childColumns","fullNodes","newContext","$70d70eb16ea48428$var$Row","UNSTABLE_childItems","showDragButtons","isDragButtonCell","showSelectionCheckboxes","isSelectionCell","cells","childRows","$941d1d9a6a28982a$var$Cell","$7135fc7d473fd974$export$f5d856d854e74713","firstChildKey","lastChildKey","$7135fc7d473fd974$var$BaseNode","_firstChild","_lastChild","_previousSibling","_nextSibling","_parentNode","_this_parentNode","startTransaction","hasSetProps","endTransaction","queueUpdate","removeNode","$7135fc7d473fd974$export$dc064fe9e59310fd","_index","updateNode","_this_previousSibling","_this_nextSibling","_this_firstChild","_this_lastChild","getMutableNode","_this_previousSibling_node_key","_this_nextSibling_node_key","_this_firstChild_node_key","_this_lastChild_node_key","setProps","setAttributeNS","nodeId","$7135fc7d473fd974$export$408d25a4e12db025","_node_key","_this_keyMap_get","frozen","$7135fc7d473fd974$export$b34a105447964f9f","mutatedNodes","getMutableCollection","collectionMutated","dirtyNodes","transactionCount","getCollection","updateCollection","subscriptions","resetAfterSSR","nodesByProps","$7135fc7d473fd974$export$727c8fc270210f13","idScope","addIdAndValue","$dGqE5$useMemo","_rendered_props_id","$dGqE5$cloneElement","$7135fc7d473fd974$export$901dbff4e54a6dd0","$7135fc7d473fd974$var$ShallowRenderContext","$dGqE5$createContext","$7135fc7d473fd974$export$6cd28814d92fa9c9","initialCollection","$7135fc7d473fd974$export$7cd71aa5ddd6dc4e","$7135fc7d473fd974$export$ad42d5efb4461b31","$7135fc7d473fd974$var$useSyncExternalStore","$dGqE5$react","getServerSnapshot","$dGqE5$useIsSSR","isSSRRef","$dGqE5$useRef","getSnapshotWrapper","$dGqE5$useCallback","$dGqE5$useSyncExternalStore","$7135fc7d473fd974$var$SSRContext","$7135fc7d473fd974$export$8c25dea96356a8b6","$dGqE5$useContext","wrappedChildren","$dGqE5$createPortal","$7135fc7d473fd974$export$813b5978dd974d8","$7135fc7d473fd974$export$aeba0b1fb3dcd8b8","_useSSRCollectionNode","$7135fc7d473fd974$export$e7c29ae2353b16ea","itemRef","$7135fc7d473fd974$export$636783d3732b5559","$64fa3d84918910a7$export$91172ebb93c441a2","$64fa3d84918910a7$export$8e0ef2c5844bfb6b","$64fa3d84918910a7$export$2881499e37b75b9a","Context","$64fa3d84918910a7$export$4d86445c2cf5e3","defaultClassName","defaultChildren","computedClassName","computedStyle","computedChildren","$64fa3d84918910a7$export$fabf2dc03a41866e","slot","slots","availableSlots","ListFormat","slotKey","$64fa3d84918910a7$export$29f1550f4b0d4415","contextRef","mergedRef","$dGqE5$useObjectRef","$dGqE5$mergeRefs","mergedProps","$dGqE5$mergeProps1","$dGqE5$useEffect","$64fa3d84918910a7$export$9d4c57ee4c6ffdd8","hasSlot","setHasSlot","$dGqE5$useState","hasRun","$dGqE5$useLayoutEffect","$64fa3d84918910a7$export$6d3443f2c48bfc20","isReady","isEntering","setEntering","$64fa3d84918910a7$var$useAnimation","$64fa3d84918910a7$export$45fda7c47f93fd48","setExiting","exitState","setExitState","prevAnimation","animation","animationName","onAnimationEnd","$dGqE5$reactdom","flushSync","HTMLTemplateElement","getFirstChild","reactAriaHidden","$64fa3d84918910a7$export$94b6d0abf7d33e8c","$64fa3d84918910a7$var$hiddenFragment","DocumentFragment","$64fa3d84918910a7$export$8dc98ba7eadeaa56","isHidden","$64fa3d84918910a7$export$86427a43e3e48ebb","Wrapper","$64fa3d84918910a7$export$ef03459518577ad4","$4f118338184dc1d9$export$e2509388b49734e7","$4f118338184dc1d9$var$Link","$dGqE5$useLink","$dGqE5$useHover","$dGqE5$useFocusRing","isCurrent","$dGqE5$mergeProps","$4f118338184dc1d9$export$a6c7ac8248d6e38a","$dGqE5$forwardRef","$d2b4bc8c273e7be6$var$additionalButtonHTMLAttributes","$d2b4bc8c273e7be6$export$24d547caef80ccd1","$d2b4bc8c273e7be6$var$Button","$dGqE5$useButton","$dGqE5$filterDOMProps","$d2b4bc8c273e7be6$export$353f5b6fc5456de1","$514c0188e459b4c0$export$9afb8bc826b033ea","$ee014567cb39d3f0$export$ff05c3ac10437e03","$01b77f81d0f07f68$export$75b6ee27786ba447","$01b77f81d0f07f68$var$Label","$01b77f81d0f07f68$export$b04be29aa201d4f5","$3985021b0ad6602f$export$37fb8590cf2c088c","$3985021b0ad6602f$var$filterHoverProps","$3985021b0ad6602f$var$Input","$3985021b0ad6602f$export$f5b8910cec6cf069","$d8f176866e6dc039$export$f55761759794cf55","$d8f176866e6dc039$var$DropIndicator","$d8f176866e6dc039$export$62ed72bc21f6b8a6","$d8f176866e6dc039$export$d188a835a7bc5783","$72a5793c14baf454$export$e0e4026c12a8bdbb","$72a5793c14baf454$var$Header","originalProps","originalRef","shallow","$72a5793c14baf454$export$8b251419efc915eb","$431f98aba6844401$export$6615d83f6de245ce","$431f98aba6844401$var$Separator","$dGqE5$useSeparator","$431f98aba6844401$export$1ff3c3f08ae963c0","$eed445e0843c11d0$export$7ff8f37d2d81a48d","$eed445e0843c11d0$export$7c5906fe4f1f2af2","$eed445e0843c11d0$var$ListBox","$eed445e0843c11d0$var$ListBoxInner","listBoxRef","$eed445e0843c11d0$var$StandaloneListBox","portal","$dGqE5$useListState","$eed445e0843c11d0$export$41f133550aa26f48","dragState","dropState","droppableCollection","dragAndDropHooks","isListDraggable","useDraggableCollectionState","isListDroppable","useDroppableCollectionState","$67da31f5140672c4$re_export$useLocale","$dGqE5$useCollator","$dGqE5$ListKeyboardDelegate","$dGqE5$useListBox","$eed445e0843c11d0$var$ListBoxSection","section","$eed445e0843c11d0$var$Option","dragHooksProvided","dropHooksProvided","isRootDropTarget","dragPreview","preview","renderDragPreview","useDraggableCollection","DragPreview","dropTargetDelegate","ListDropTargetDelegate","useDroppableCollection","isDropTarget","renderValues","emptyState","renderEmptyState","$dGqE5$FocusScope","$eed445e0843c11d0$var$ListBoxDropIndicatorWrapper","_section_props","_section_props1","headingRef","_section_props_arialabel","$dGqE5$useListBoxSection","$eed445e0843c11d0$var$SectionHeader","_ref9","$eed445e0843c11d0$var$ListBoxItem","$eed445e0843c11d0$export$a11e76429ed99b4","_ref10","states","$dGqE5$useOption","draggableItem","useDraggableItem","droppableItem","useDroppableItem","dropPosition","isDragging","allowsDragging","renderDropIndicator","useDropIndicator","dragProps","dropProps","dropIndicatorProps","$eed445e0843c11d0$var$ListBoxtDropIndicatorForwardRef","$eed445e0843c11d0$var$ListBoxtDropIndicator","$44f671af83e7d9e0$export$2de4954e8ae13b9f","$07b14b47974efb58$export$9b9a0cd73afb7ca4","$07b14b47974efb58$var$Popover","contextState","$de32f1b87079253c$export$d2f961adcb0afbe","localState","$dGqE5$useOverlayTriggerState","$07b14b47974efb58$var$PopoverInner","$07b14b47974efb58$export$5b6b19405a83ff9d","_ref11","UNSTABLE_portalContainer","_props_offset","$dGqE5$usePopover","$dGqE5$Overlay","inset","$dGqE5$DismissButton","$df39c1238ae2b5f3$exports","$3674c52c6b3c5bce$export$c7e742effb1c51e2","$3674c52c6b3c5bce$export$795aec4671cbae19","$3674c52c6b3c5bce$export$27d2ad3c5815583e","$dGqE5$useMenuTriggerState","$dGqE5$useMenuTrigger","buttonWidth","setButtonWidth","$dGqE5$useResizeObserver","$dGqE5$PressResponder","$82d7e5349645de74$export$7540cee5be7dc19b","$82d7e5349645de74$export$ef445b55be0601bd","$82d7e5349645de74$var$Select","_props_validationBehavior","$dGqE5$useSelectState","buttonRef","labelRef","_props_validationBehavior1","$dGqE5$useSelect","renderPropsState","DOMProps","$82d7e5349645de74$export$f8f745c04421623f","$dGqE5$HiddenSelect","$82d7e5349645de74$export$ef9b1a59e592288f","$82d7e5349645de74$var$SelectValue","_state_selectedItem","_state_selectedItem1","$dGqE5$useLocalizedStringFormatter","_state_selectedItem_value","_state_selectedItem_textValue","selectedText","isPlaceholder","$82d7e5349645de74$export$e288731fd71264f0","useOutsideClick","onSelected","renderSelection","setIsOpen","useClickOutside","Select","queueMicrotask","SelectValue","Popover","ListBox","ListBoxItem","roundNumber","decimal","animations","easeOut","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","handleCancelAnimationFrame","handleCancelAnimation","contextInstance","mounted","animate","handleSetupAnimation","animationTime","startTime","frameTime","animationProgress","animationType","targetState","positionX","positionY","isValidTargetState","setTransformState","transformState","scaleDiff","positionXDiff","positionYDiff","calculateBounds","newScale","wrapperComponent","contentComponent","centerZoomedOut","setup","wrapperWidth","wrapperHeight","newContentWidth","newContentHeight","newDiffWidth","newDiffHeight","getComponentsSizes","bounds","diffWidth","diffHeight","scaleWidthFactor","scaleHeightFactor","minPositionX","maxPositionX","minPositionY","maxPositionY","getBounds","boundLimiter","minBound","maxBound","handleCalculateBounds","getMouseBoundedPosition","limitToBounds","paddingValueX","paddingValueY","paddingX","paddingY","handleCalculateZoomPositions","mouseX","mouseY","scaleDifference","checkZoomBounds","minScale","maxScale","zoomPadding","enablePadding","minScaleWithPadding","isPanningStartAllowed","panning","isInitialized","isWrapperChild","composedPath","isExcludedNode","isPanningAllowed","isPanning","handleNewPosition","newPositionX","newPositionY","getPaddingValue","disablePadding","isVelocityCalculationAllowed","velocityAnimation","isVelocityAllowed","getVelocityPosition","newPosition","startPosition","isLocked","minTarget","maxTarget","calculatedPosition","handleCalculateVelocity","lastMousePosition","velocityTime","equalToMove","sizeMultiplier","getSizeMultiplier","distanceX","distanceY","velocityX","velocityY","speed","handlePanningStart","TouchEvent","startCoords","handleTouchPanningSetup","handlePanningSetup","handleAlignToBounds","alignmentAnimation","sizeX","sizeY","xChanged","yChanged","handlePanToBounds","handlePanning","lockAxisX","lockAxisY","getPanningClientPosition","handlePanningEnd","velocityDisabled","wrapperRect","contentRect","contentWidth","contentHeight","isZoomed","zoomAnimation","alignAnimationTime","velocityAlignmentTime","moveAnimationTime","getVelocityMoveTime","finalAnimationTime","maxTargetX","minTargetX","maxTargetY","minTargetY","startState","alignStep","alignAnimation","customStep","currentPositionX","currentPositionY","handleVelocityPanning","handleZoomToPoint","handleAlignToScaleBounds","mousePositionX","mousePositionY","__spreadArray","pack","ar","initialSetup","centerOnInit","smooth","wheel","smoothStep","wheelDisabled","touchPadDisabled","activationKeys","allowLeftClickPan","allowMiddleClickPan","allowRightClickPan","wheelPanning","pinch","doubleClick","createState","previousScale","initialScale","initialPositionX","initialPositionY","createSetup","newSetup","validValue","handleCalculateButtonZoom","targetScale","exp","handleZoomToViewCenter","resetTransformations","onResetTransformation","initialTransformation","newBounds","boundedPositions","zoomIn","zoomOut","setTransform","resetTransform","centerView","getCenterPosition","zoomToElement","customZoom","nodeRect","nodeOffset","wrapperOffset","contentOffset","xOff","yOff","getOffset","nodeLeft","nodeTop","nodeWidth","nodeHeight","calculateZoomToNode","getControls","getContext","makePassiveEventOption","exclude","cancelTimeout","getMousePosition","getTouchDistance","handleWheelZoom","onWheel","onZoom","customDelta","getDeltaY","getDelta","disable","paddingEnabled","handleCalculateWheelZoom","mousePosition","isLimitedToBounds","previousWheelEvent","handleWheelStop","onWheelStop","onZoomStop","wheelAnimationTimer","hasStoppedZooming","handleWheelZoomStop","wheelStopEventTimer","handlePinchZoom","pinchStartDistance","midPoint","firstPointX","firstPointY","calculateTouchMidPoint","currentDistance","pinchStartScale","calculatePinchZoom","pinchMidpoint","lastDistance","handleDoubleClickStop","doubleClickStopEventTimer","handleDoubleClick","onZoomStart","handleDoubleClickResetMode","getDoubleClickScale","ZoomPanPinch","onChangeCallbacks","onInitCallbacks","isWheelPanning","lastTouch","maxBounds","pressedKeys","mount","initializeWindowEvents","unmount","cleanupWindowEvents","newProps","currentDocument","currentWindow","onWheelPanning","onPanningStart","onPanning","onPanningStop","clearPanning","setKeyUnPressed","setKeyPressed","handleInitializeWrapperEvents","onWheelZoom","onTouchPanningStart","onTouchPanning","onTouchPanningStop","handleInitialize","applyTransformation","setCenter","isAllowed","isWheelAllowed","isPressingKeys","onWheelStart","handleWheelStart","onPinchStart","onPinchingStart","isPinchStartAllowed","handlePinchStart","onPinch","onPinching","isPinchAllowed","onPinchStop","onPinchingStop","handlePinchStop","isPanningAction","isPinchAction","isDoubleClickAllowed","onTransformed","ctx_1","handleTransformStyles","customTransform","getTransformStyles","onInit","TransformWrapper","useImperativeHandle","localRef","useContext","insertAt","styleSheet","TransformComponent","wrapperClass","contentClass","wrapperStyle","contentStyle","wrapperProps","contentProps","contentRef","useTransformContext","libraryContext","useTransformEffect","unmountCallback","activeImage","setIsImageZoomed","setScale","setIsPanning","transformCoordinates","allowPanning","setAllowPanning","useControls","currentCoordinates","newCoordinateX","newCoordinateY","isImageZoomed","showLoading","Zoom","urlGenerator","encodedValue","Slot","xmpie_uStore_widgets","instances","widget","_window$widget$name","place","WidgetComponent","widgetConfig","uStoreWidgetsConfiguration","uStoreProvider","getSEO","Title","Description","concatenate","pageTitle","storeTitle","storeDescription","SeoConfiguration","titleAdditionFormat","titleAdditionText","TitleTagType","TitleTag","currentProduct","metaTag","getVariableValue","varName","isImageURL","isURL","varValue","qs","paramsObj","setVarValue","ngToLegacyConversions","reg","generateURL","legacyToNGConversions","legacyIframeHandler","handleRoute","_currentStore$Attribu","iframeElm","postMessage","iframeURLWithMobileBreak","getLegacyUrl","isCartPage","newCartPage","attr","hideIframe","isIframeVisible","setIframeSrc","handleClickingIframe","iframeContainer","handleResize","iframeSrc","getIframeSrc","urlWithMobileBreak","appendMessagingParams","adaptIframeToContainer","viewMobileState","_iframeElm","iframeID","clearContentSrc","buildType","setNavigate","navigateFn","contentWindow","removeRandParamFromUrl","randIndex","ampersandIndex","mobileViewChanged","uStoreConfig","uStoreRemoteServerUrl","pathnameAfterCategoryFix","ngurl","convertUrlLegacyToNG","desktopBreakpoint","lg","viewMobileVal","addViewMobile","legacyUrl","convertUrlNGToLegacy","queryString","createCleanQueryString","isDraft","ngUrl","queryParamsJson","adaptContainerToIframe","onRedirectRequested","previousPath","onScrollParentRequested","onscroll","onRequestScrollPosition","response","changeRouteOrDimensions","changeRouteResult","isRoutingFromLegacy","messageHandled","nextUrl","handleScrolling","switchCurrency","selectedCurrency","switchCulture","selectedCulture","getMobileMenuItems","convertCategories","category","hasProducts","HasProducts","SubCategories","menuTree","Code","CountryCode","CultureSwitcher","setIsVisible","cultureSwitcher","culturesViewModel","Switcher","_Fragment","Flag","CurrencySwitcher","currencySwitcher","currenciesViewModel","ActivityStatus","Progress","Success","Failed","PartiallyFailed","ActivityType","OrderItemDuplication","KitOrderItemDuplication","CartListDuplication","OrderItemReordering","KitOrderItemReordering","OrderReordering","_activities","_subsdcribers","setModel","_model","subscriber","checkActivities","activityIds","activityId","activity","Status","activitiesStatus","ActivityID","setActivities","_activity$activity","addActivity","entityId","addActivityList","clearActivities","timeoutCall","ready","proof","breakCurrentLoop","onProof","PreviewID","_e$Message","Message","PROOF_STATUS","cartModel","_item$proof","orderItemId","run","stop","statuses","_this$cartModel","_this$cartModel$items","OrderItemID","setProofStatus","nextOrderIds","productTypes","getIsNGProduct","product","NGCompatible","CART_MODE","Aspx","WishList","Lists","SingleList","getCartMode","NGCart","CartMode","convertProductPropertiesFormIntoArray","currentProductProperties","excelPricingEnabled","formData","JSONSchema","UISchema","propertyDefinition","toAPIValue","uStoreDucs","duc","custom","preparingFormDataToSendToServer","propertiesSchema","updatedProperties","isJsonString","showTitle","signInRef","_signInRef$current","goToUrl","showRibbon","userIDfromStore","tempUserId","pageURL","_UStoreProvider$state","connectEnterpriseLogoutURL","FirstName","deleteCookies","cn","sLogoutUrl","onLogoutClicked","ProfileSwitcher","pendingApprovalOrderCount","PendingApprovalOrderCount","isSingleList","rejectedOrderCount","RejectedOrderCount","loginPage","isUStoreConnectEnterprise","baseItem","IsAnonymous","pageName","Roles","Shopper","Approver","getItemList","createLink","_e$target$parentNode$","SignIn","SignOut","anonymous","loginURL","MobileMenuSwitcher","onTopLevelSelected","currentItems","setCurrentItems","setSelected","isListChanged","setIsListChanged","selectorListRef","_document$querySelect","onBack","currentSelected","_current$parent","_current$parent$value","_current$parent2","featuredProducts","BackButton","CategoryItem","CurrencyItem","CultureItem","useButton","connectCartUrl","storeItemsCount","ItemsCount","setCartItemsCount","isCartLists","_UStoreProvider$state2","UNMOUNTED","EXITED","ENTERING","ENTERED","EXITING","Transition","initialStatus","appear","isMounting","appearStatus","in","unmountOnExit","mountOnEnter","nextCallback","updateStatus","nextStatus","cancelNextCallback","getTimeouts","exit","mounting","nodeRef","forceReflow","performEnter","performExit","appearing","maybeNode","maybeAppearing","timeouts","enterTimeout","safeSetState","onEntered","onEnter","onEntering","onExit","onExiting","onExited","nextState","setNextCallback","doesNotHaveTimeoutOrListener","addEndListener","maybeNextCallback","childProps","TransitionGroupContext","only","baseClass","baseClassActive","Fade","_props$baseClass","_props$baseClassActiv","_props$innerRef","transitionProps","pickKeys","popperClassName","placementPrefix","arrowClassName","hideArrow","boundariesElement","onClosed","fade","PopperContent","setTargetNode","getTargetNode","_element","_arrowClassName","_popperClassName","modifierNames","baseModifiers","extendedModifiers","popperTransition","ReactPopper","popperPlacement","renderChildren","getContainerNode","innerClassName","autohide","DEFAULT_DELAYS","isInDOMSubtree","subtreeRoot","isInDOMSubtrees","subtreeRoots","subTreeRoot","TooltipPopoverWrapper","_targets","currentTargetElement","addTargetEvents","removeTargetEvents","showWithDelay","hideWithDelay","onMouseOverTooltipContent","onMouseLeaveTooltipContent","onEscKeyDown","_isMounted","updateTarget","clearShowTimeout","clearHideTimeout","triggers","_hideTimeout","_popover","_showTimeout","getDelay","getCurrentTarget","isBubble","addEventOnTargets","removeEventOnTargets","newTarget","popperClasses","arrowClasses","PopoverBody","NavigationMenu","selectedCategory","getSubCategoriesMapped","categoryTreeNode","countInColumn","subCategoriesMapped","HasSubCategories","countAll","categoryTreeNodeL2","categoryL2","subCategoriesL2","groupSize","countBlankSpaces","indexInColumn","showFeaturedProducts","categoryL3Node","snapshot","viewShowAll","viewShowOnlyAllPanel","subCategoriesTreeNode","DIV_VIEW_COLUMNS_HEIGHT","categoryL3","ImageUrl","hoveredItem","setHoveredItem","setSelectedCategory","MobileMenu","drawerRef","slideOut","setSlideOut","menuItems","setMenuItems","closeDrawer","isIntersecting","IntersectionObserver","MenuTrigger","useUStoreState","ga","_containerRef$current","onSearchClicked","getCartUrl","mobileSearchVisible","setMobileSearchVisible","setConnectCartUrl","searchButtonRef","variableForLogoImg","matchMedia","theme","currentLogo","CategoriesNavbar","Search","_searchButtonRef$curr","Cart","Footer","onCookiesPolicyClicked","onCloseCookiesConsentClicked","localizeCookiesConsent","stringArray","CrossCloseButton","onCloseCookiesPolicyClicked","showCookiesPolicy","setShowCookiesPolicy","CookiesPolicy","closeCookiesPolicy","CookiesConsent","closeCookiesRibbon","openCookiesPolicy","MapShim","class_1","__entries__","global$1","requestAnimationFrame$1","transitionKeys","mutationObserverSupported","ResizeObserverController","connected_","mutationEventsAdded_","mutationsObserver_","observers_","onTransitionEnd_","refresh","leadingCall","trailingCall","resolvePending","proxy","timeoutCallback","addObserver","connect_","removeObserver","observers","disconnect_","updateObservers_","activeObservers","gatherActive","hasActive","broadcastActive","characterData","getInstance","instance_","defineConfigurable","getWindowOf","emptyRect","createRectInit","toFloat","getBordersSize","getHTMLElementContentRect","paddings","positions_1","getPaddings","horizPad","vertPad","boxSizing","isDocumentElement","vertScrollbar","horizScrollbar","isSVGGraphicsElement","SVGGraphicsElement","getBBox","getContentRect","bbox","getSVGContentRect","ResizeObservation","broadcastWidth","broadcastHeight","contentRect_","broadcastRect","ResizeObserverEntry","rectInit","Constr","DOMRectReadOnly","createReadOnlyRect","ResizeObserverSPI","controller","callbackCtx","activeObservations_","observations_","callback_","controller_","callbackCtx_","observations","clearActive","observation","OPERATOR","NONE","DESCENDANT","CHILD","CSS_SELECTOR_TYPE","class","nthchild","nthoftype","libraryName","showWarning","includeTag","whitelist","blacklist","combineWithinSelector","combineBetweenSelectors","maxCombinations","POSITIVE_INFINITY","maxCandidates","sanitizeSelectorTypes","isEnumValue","haystack","needle","isCssSelectorMatch","sanitizeCssSelectorMatchList","isParentNode","validParentNodeTypes","DOCUMENT_NODE","DOCUMENT_FRAGMENT_NODE","isNode","sanitizeRoot","composed","sanitizeMaxNumber","getIntersection","otherItems","flattenArray","createPatternMatcher","matchFunctions","matchFunction","testSelector","getElementParents","getParents","SELECTOR_SEPARATOR","INVALID_ID_RE","INVALID_CLASS_RE","SELECTOR_PATTERN","attributeBlacklistMatch","attributeNodeToSimplifiedSelector","attributeNodeToSelector","sanitizeAttributeData","nodeValue","sanitizeSelectorItem","getElementAttributeSelectors","validAttributes","attributeNode","isValidAttributeNode","getElementClassSelectors","getElementIdSelectors","getElementNthChildSelector","elementIndex","getElementTagSelectors","getTagSelector","getElementNthOfTypeSelector","getPowerSet","maxResults","resultCounter","generateOffsets","bumpOffsets","powerSetGenerator","maxValue","ESCAPED_COLON","SPECIAL_CHARACTERS_RE","legacySanitizeSelectorItem","SELECTOR_TYPE_GETTERS","ELEMENT_SELECTOR_TYPE_GETTERS","getAllSelectors","selectors_list","matchBlacklist","matchWhitelist","reducer","selector_type","selectors_by_type","getSelectorsByType","filtered_selectors","filterSelectors","found_selectors","a_is_whitelisted","b_is_whitelisted","orderSelectors","selectors_to_get","getSelectorsToGet","getSelectorsList","type_combinations","combinations","addTagTypeIfNeeded","combineSelectorTypes","selector_types","selector_variants","getCartesianProduct","constructSelector","constructSelectors","getTypeCombinations","all_selectors","selectorData","constructSelectorType","selectors_data","generateCandidates","rootSelector","generateCandidateCombinations","getSelectorWithinRoot","selectorCandidates","candidateSelector","createElementSelectorData","include","createElementData","selectorTypes","selectorType","getElementSelectorsByType","constructElementSelector","getElementFallbackSelector","elementData","getCssSelector","custom_options","NodeList","HTMLCollection","sanitizeSelectorNeedle","sanitizeOptions","partialSelector","currentRoot","updateIdentifiableParent","candidatesList","currentElements","foundElements","getClosestIdentifiableParent","closestIdentifiableParent","getFallbackSelector","lastSelectedNode","Layout","_debounce","isConnectStore","resizeObserver","resizeElement","currentHeight","isPreviewMode","showHeaderFooter","HeadSEO","Header","CookiesRibbon","showCookieRibbon","RouteChangeListener","imageUrl","HTMLLinesEllipsis","isOutOfStock","quantity","minQuantity","AllowOutOfStockPurchase","hideInStock","pluralName","singleName","Quantity","formatForCurrencyAndCulture","formatParams","currencyFormat","decimalPlaces","decimalSeparator","intAmount","WrappedComponent","ConnectedComponent","preRender","preRenderedState","isMinimumPrice","showCurrency","overridePriceFormat","taxFormat","TaxFormat","CurrencyFormat","DecimalSeparator","DecimalPlaces","priceDisplayString","isPriceValid","MAX_VALUE","BaseQuantity","getValueFromRange","onValueChange","updatedQuantity","onClickPlusMinus","reduceOrAdd","quantityConfig","additionalClassName","showMinimalDisplay","selectedDropDownItem","Options","Changeable","pricePerItem","PackType","ItemType","ItemQuantity","MinimumQuantity","ItemTypePluralName","PluralName","PackTypePluralName","PackTypeName","currentOrderItem","setCurrentOrderItem","isPriceCalculating","setIsPriceCalculating","calculatedPriceModel","setCalculatedPriceModel","addToCartShowSuccess","setAddToCartShowSuccess","setQuantity","isQuantityValid","setIsQuantityValid","addToCartShowSuccessTimer","setAddToCartShowSuccessTimer","descriptionLines","productNameLines","detailed","productNameAndCatalog","CatalogNumber","showQuickAddToCart","Configuration","AllowQuickAddToCart","priceModelToDisplay","MinimumPrice","Inventory","ShortDescription","HasPricing","UnitsOfMeasure","Unit","subTitle","buttonText","promotionItem","setButtonSize","md","goTo","isMobile","setIsMobile","promotionItemButtonUrl","setPromotionItemButtonUrl","homeFeaturedProducts","setHomeFeaturedProducts","homeFeaturedCategory","setHomeFeaturedCategory","promotionItemImageUrl","promotionItemTitle","promotionItemSubtitle","promotionItemButtonText","Count","lastPageCategories","Products","defaultURL","PromotionItem","clearCustomState","categoryFriendlyID","categoryID","setCategoryID","setCurrentCategory","setSubCategories","categoryFeaturedProducts","setCategoryFeaturedProducts","categoryProductsCount","setCategoryProductsCount","showSubCategories","setShowSubCategories","_await$UStoreProvider","newCategoryID","loadProducts","nextPage","joinedProducts","galleryTitle","ProductItem","_window$uStoreConfig","_window$uStoreConfig$","handleFrameMessage","_msg$data","pendingApprovalCount","changeRouteOrDimensionsHandled","_props$customState","productID","KitQuantity","getValidationErrorMessage","productModel","orderModel","Minimum","Maximum","MaximumQuantity","onQuantityChange","KitItemQuantity","kitQuantity","itemUnitName","inventory","UnitPluralName","TotalQuantity","InventoryQuantity","CarouselContext","CarouselItem","startAnimation","isAppearing","CustomEvent","isIn","_this$props$slide","directionClassName","orderClassName","itemClasses","activeIndex","keyboard","ride","mouseEnter","mouseLeave","enableTouch","propsToOmit","handleKeyPress","hoverStart","hoverEnd","handleTouchStart","handleTouchEnd","touchStartX","touchStartY","indicatorClicked","evt","currentX","currentY","diffX","_setInterval","cycleInterval","_clearInterval","carouselItems","_this$props3","outerClasses","innerClasses","_carouselItems","_controlLeft","_controlRight","indicators","wrappedIndicators","controlLeft","controlRight","nextProps","REGULAR","SMALLEST","onDotClick","currentDotsSet","setCurrentDotsSet","setStartPosition","activePositionInSet","moveBack","moveForward","updateCurrentDotsSet","setEndPosition","renderDots","hideDisabledArrows","itemWidth","marginBetween","responsive","onItemHovered","onItemClicked","carouselWidth","setCarouselWidth","setActiveIndex","setChildren","leftPos","setLeftPos","carouselInnerWrapperRef","calculateLeftPos","itemsPerSlide","getItemsPerSlide","rightArrowDisabled","leftArrowDisabled","getHideArrows","_carouselWrapperRef$c","calculateLeftPosCallbackRef","getHideArrowsCallbackRef","calculateCarouselWidth","_carouselWrapperRef$c2","itemsLeft","calculateSlideTo","LeftArrow","RightArrow","moveOnHover","nextActive","setActiveImage","showLoaderDots","animating","setAnimating","activeHoveredImage","setActiveHoveredImage","setShowArrows","slides","imageZoomed","ImageZoom","Url","getThumbnailTitleWrapper","_images$activeImage","_images$activeImage2","_images$activeImage2$","getTitle","DisplayName","MultiItemsCarousel","DotCarousel","withRouter","Portal","defaultNode","FadePropTypes","backdrop","backdropClassName","backdropTransition","centered","contentClassName","external","fullscreen","modalClassName","modalTransition","onOpened","returnFocusAfterClose","trapFocus","unmountOnClose","wrapClassName","Modal","_originalBodyPadding","getFocusableChildren","handleBackdropClick","handleBackdropMouseDown","handleEscape","handleStaticBackdropAnimation","handleTab","manageFocusAfterClose","clearBackdropAnimationTimeout","showStaticBackdropAnimation","setFocus","_mouseDownElement","_dialog","modalIndex","openCount","focusableChildren","totalFocusable","currentFocus","getFocusedChild","focusedIndex","_backdropAnimationTimeout","ev","_triggeringElement","_mountContainer","getOriginalBodyPadding","originalBodyOverflow","modalOpenClassName","modalOpenClassNameRegex","dialogBaseClass","isModalHidden","modalAttributes","hasTransition","Backdrop","renderModalDialog","closeAriaLabel","wrapTag","ModalHeader","closeButton","_props$wrapTag","WrapTag","_props$closeAriaLabel","ModalBody","ModalFooter","kitChangeType","KitItem","onMessageRecieved","kitItemOrderItemModel","orderItemID","onValidateIframeReturn","kitItemViewModel","iframeLoading","setKitViewModel","iframeLoaded","isPropsModalLoading","shouldValidateModal","externalValidation","iframeElementModal","modalBody","scrollableContainer","scrollbars","iframeElement","togglePreviewModal","onClickCancel","onClickSave","onClickEditOptions","onRemove","onAdd","onModalCarouselChange","onResizeHandler","isPropertiesOpen","isPreviewOpen","activeModalImage","isMediumBreak","getElementsByClassName","kitItemProductModel","IsIncluded","isPropertiesValid","hasProperties","Properties","doValidate","kitViewModel","modalIsOpen","currentModalIsOpen","propsWasOpened","renderEditLink","renderInventoryLabel","propertiesModalOnOpened","kitItemPriceModel","doLoadIframe","Thumbnails","kitItemClasses","showPropsNotOpenedWarning","OutOfStock","itemName","priceNotZero","IsMinimumPrice","frameBorder","ImageCarousel","activeSlide","KitItemsList","doLoadIframes","onItemChange","changeType","kitProduct","kitOrderItem","kitOrderItemPriceModel","lastChangedOrderItemID","Items","productItems","orderItems","orderItem","productItem","kitProductItem","Product","ProductID","orderItemPriceModel","isPriceCalculatingForItem","poofPreviewError","ErrorBalloon","onToggle","hideLink","hasThumbnails","fileUrl","Proof","isDownloadProof","MimeType","handleModalToggle","ProofIcon","showRefreshPreview","onProofPreviewClick","setIsDisabled","productThumbnails","setProofModalOpen","proofModalOpen","disabledRefreshPreviewButton","isKitProduct","changeStickyThumbnail","productApprovalThumbnails","setSwipeScrollTolerance","isMultiThumbnails","_productThumbnails$Th","changeActiveImage","arrowStyles","onFastSwipeLeft","onFastSwipeRight","PreviewErrorBalloon","ImageView","RefreshPreviewButton","KitProduct","currentOrderItemId","orderProduct","lastOrder","activeCarouselSlide","isKitQuantityValid","showLoadingOnContinue","isLoadingReorder","showWarningPopover","showErrorPopover","initialDataLoaded","firstPriceCalculated","ContinueErrorProperties","ContinueErrorQuantity","quantityChangeTriggered","showItemsErrorOnKit","onClickContinue","onClickContinueAnyway","onCarouselImageChange","onCalculatePrice","toggleWarningPopover","toggleErrorPopover","routeToCustomization","onReorder","itemsWithNoProperties","includedItemsWithIframe","includedItems","allIncludedIframesAreLoaded","allItemsValidationReturned","setAllKitViewModel","nonValidItems","footer","stickyPanel","kitViewModelToMerge","currentState","isvalid","updatedKitOrderItem","requestID","locked","lastChangeRequestID","kitOrderItemForPrice","priceModel","notEdited","newOrder","currentOrderItemPriceModel","showReorderLink","quantityError","catalogNumber","hasIncluded","showQuantity","Preview","OrderSubmittedDate","SubmittedDate","Total","popperPositions","refElementSelector","tipPosition","rotation","isInViewport","setPopperPosition","popperData","popperWrapper","stickPriceRef","topPriceRef","bottomPriceRef","forceAddToCartButton","refElement","setProperty","locationPoint","errorCode","resetError","popperAffectedSections","setPopperData","setPositionCallbackRef","newPopperData","ErrorIcon","Section","sectionRef","setOpenSection","isLastSection","onNext","changed","sectionToScrollTo","sectionErrors","sectionDescription","sectionContentRef","hasBeenOpened","setHasBeenOpened","hasChanged","setHasChanged","contentObserver","onHeaderClick","hasErrors","sanitizedDescription","sanitizeHTML","TickIcon","PencilIcon","transitionEnd","isIntegerNumber","isPositiveAndFinite","alphabetChars","saltChars","transformed","fromAlphabet","inputChars","carry","BigInt","throwIfBigIntNotAvailable","safeToParseNumberRegExp","makeAnyOfCharsRegExp","Hashids","salt","alphabet","seps","sepsChars","uniqueAlphabet","charsToExclude","filteredSeps","onlyChars","keepChars","sepsLength","guardCount","guards","guardsRegExp","sepsRegExp","allowedCharsRegExp","makeAtLeastSomeCharRegExp","inputNumbers","numbers","int10","safeParseInt10","_encode","_decode","encodeHex","inputHex","hex","splitAtIntervalAndMap","decodeHex","isValidId","numbersIdInt","lottery","toAlphabet","alphabetLength","charCode","extraNumber","prefixGuardIndex","suffixGuardIndex","halfLength","halfOfExcess","idGuardsArray","idBreakdown","lotteryChar","idArray","lastAlphabet","subId","nextAlphabet","withCustomProps","onDucChange","skipValidation","newDucValue","schemaErrors","uiSchema","errSchema","__errors","hashedID","readonly","widgets","isSectionHidden","visible","checkIfPropertyDependersHaveDefaultValueSelected","depended","Property","handlePropertyChange","internalFormData","features","formContext","errorsFromProperty","propertySchema","sectionToOpen","sectionsDescription","setInternalFormData","openSection","setSections","changedSections","setChangedSections","sectionsRef","sectionSplitter","nameOfSectionToKeepOpen","lastSectionName","firstSectionWithErrors","getFirstSectionWithErrors","sectionWithErrors","scrollToElement","sectionIndex","updatedErrors","propertyId","onNextSection","sectionProps","sectionChanges","changedPropList","currentErrors","nextSectionIndex","_sectionsDescription$","sectionId","getSectionErrors","sectionNumber","headerHeight","targetPosition","currentTime","timeElapsed","ease","smoothScroll","reorderModel","langCode","ProductDeliveryMethod","deliveryOptions","onDeliveryChanged","onDeliveryChange","selectedDelivery","isMailing","currentDeliveryServiceID","currentDeliveryMethod","deliveryServices","Delivery","Shipping","Enabled","MailingServices","service","Mailing","enabledOptions","RadioGroup","currency","deliveryMethod","taxFormatType","ProductPrice","MailingFee","addToCartBtnText","longPrice","isPriceLoading","showMinimumPrice","onImageClick","lastViewImageId","ProofErrorBalloon","isModalOpen","onCloseModal","onImageChange","dynamic","PriceDisplay","convertPropertiesFromApiToPropertiesObject","propertiesFromApi","dependenciesObject","sortedPropertiesObject","displayOrder","createNestedDependencyTree","dependees","propertiesObject","getDependenciesObject","excelPricing","dependenciesObjectWithValues","dependentPropertyId","dependantValue","ProductQuantity","supportsInventory","initialChange","packDesc","isProofPdf","thumbnails","proofError","setImages","DesktopProofPreview","_proof$Items","Format","DynamicImageViewer","MobileProofPreview","isPDF","onDownloadPDFClick","onAddToCartClick","checkboxText","errorText","proofType","setProof","approved","setApproved","showError","setShowError","setShowLoaderDots","setProofError","addToCartRef","currentPullTimeout","_addToCartRef$current","currentProof","pullProof","pullingProof","fileNames","hasError","fileBlob","createObjectURL","fileName","behavior","_addToCartRef$current2","onCloseModalClick","itemToDownload","downloadLink","onAddClicked","isimage","_product$Proof","modalOpen","continueButtonText","DynamicProductApproval","ProofApprovalText","ProofApprovalValidationMessage","ProductApproval","initialPropertiesSchema","setErrors","errorsExist","setErrorsExist","visibleErrorsExist","setVisibleErrorsExist","initialSchemaLoaded","setInitialSchemaLoaded","excelPricingError","setExcelPricingError","checkIfThereArePropertyErrors","checkIfThereAreVisiblePropertyErrors","getAjvErrors","schemaWithDeps","getDependentSchema","depTree","depProps","propSchema","flat","propsMap","combineAjvErrorsWithUiSchema","isPropertyForError","ajvError","errorObj","combineApiErrorsWithFormErrors","formErrors","apiErrors","getErrorsObject","newErrors","combineOnFormChangeErrorsWithFormErrors","propertyErrors","processErrorsOnApiResponse","propertiesToShowErrors","excelError","affectPrice","updatedFormErrors","processErrorsOnFormChange","changedPropertyId","changedPropertyValue","errorsObject","processErrorsOnAddToCart","showErrors","errorsToUse","showAll","hideErrors","propertiesToHideErrors","showAllErrors","checkIsPriceAffectedWithErrors","useUpdateProperties","setPromises","loading","setLoading","lastPromise","lastCallback","promiseToResolve","resolvePromises","addPromise","useSticky","topMarkerRef","bottomMarkerRef","showStickyPrice","setShowStickyPrice","topIntersecting","setTopIntersecting","bottomIntersecting","setBottomIntersecting","topObserver","bottomObserver","observeCallback","stickyConnect","rootMargin","stickyDisconnect","TaxFormatType","pageState","setPageState","setOrderItem","setProduct","setProductThumbnails","setPrice","setProperties","setPropertiesObject","setExcelPricingEnabled","productDeliveries","setProductDeliveries","currentDeliveryServices","setDeliveryMethod","deliveryService","setDeliveryService","priceError","setPriceError","setQuantityError","proofUrl","setProofUrl","approvalModalOpen","setApprovalModalOpen","thumbnailModalOpen","setThumbnailModalOpen","setPopperAffectedSections","popperError","setPopperError","postLoadingProcedures","setPostLoadingProcedures","forceAddToCartButtonPopper","setForceAddToCartButtonPopper","htmlDataUpdateTimeout","setHtmlDataUpdateTimeout","setDisabledRefreshPreviewButton","setLastViewImageId","setSectionToOpen","setPoofPreviewError","useErrors","setShowRefreshPreview","stickyPriceRef","productErrors","propertiesToUse","checkIfThereAreSectionErrors","calculateProperties","usedQuantity","updatedOrderItem","updatedPrice","setPricingError","ErrorCode","keepError","_updatedProperties$JS","changedProperties","recalculatePrice","formDataForApi","dataToPush","pushPropertiesState","updatedPropertiesFromApi","updatedPropertiesObject","updatedErrorsFromApi","_response$JSONSchema$","createPreview","propsFromApiToPropsObject","propsForProof","fastProofService","proofedDownloaded","hadError","firstProof","handleFormChange","_updatedFormData$JSON3","_updatedFormData$JSON4","_propertyErrors$prope","propertyValue","formChanges","resetPopperError","updatedPropertiesSchema","updatedFormData","propAffectProof","_updatedFormData$JSON","_updatedFormData$JSON2","affectProof","loadProductData","_productFromApi$Confi","_productFromApi$Confi2","productFromApi","fastPreviewEnabled","FastPreviewEnabled","productThumbnailsFromApi","orderItemFromApi","DeliveryMethod","DeliveryServiceID","lastOrderFromApi","loadProductDeliveries","loadProductProofUrl","loadProductProperties","currentProductThumbnails","onFormChange","loadProductDataCallbackRef","cleanCustomState","demiState","triggerFormPropertyChange","formValues","newHtmlUpdateTimeout","deliveriesFromApi","initialQuantity","addToCartOrSave","skipPropertiesPush","productStockQuantity","allowOutOfStockPurchase","orderId","pushSavedForLater","pushProperties","pushOrderItem","pushCart","reRouteToCart","decoded","handleAddToCartButtonClick","distinctSections","sectionsAffectedByErrorsWithIndexes","RequireProofApproval","getContinueButtonText","proofModal","ProductLayout","ProductDetails","minimumQuantity","lastOrderId","getReorder","reRouteToNewOrder","newOrderId","OrderItemId","showInStock","newQuantity","propertiesCanAffectPrice","DynamicForm","newDeliveryMethod","newDeliveryServiceId","ProductOrderSummary","ProductProof","ProductApprovalModal","ProductThumbnailsPreview","ProductStickyPrice","renderLoader","productFriendlyID","StaticProduct","die","mockGlobal","getDescriptor","objectPrototype","EMPTY_ARRAY","freeze","EMPTY_OBJECT","hasProxy","plainObjectString","assertProxies","invoked","isStringish","protoConstructor","isGenerator","addHiddenProp","addHiddenFinalProp","createInstanceofPredicate","theClass","isES6Map","thing","isES6Set","hasGetOwnPropertySymbols","hasProp","storedAnnotationsSymbol","createDecoratorAnnotation","is20223Decorator","decorate_20223_","storeAnnotation","annotationType_","OVERRIDE","isOverride","$mobx","Atom","name_","isPendingUnobservation_","isBeingObserved_","diffValue_","lastAccessedBy_","lowestObserverState_","IDerivationState_","NOT_TRACKING_","onBOL","onBUOL","onBO","onBUO","reportObserved","reportChanged","startBatch","propagateChanged","endBatch","isAtom","createAtom","onBecomeObservedHandler","onBecomeUnobservedHandler","arg3","atom","interceptHook","ON_BECOME_OBSERVED","onBecomeUnobserved","structural","deepEqual","deepEnhancer","isObservable","isAction","isFlow","autoAction","referenceEnhancer","createActionAnnotation","options_","make_","make_$1","extend_","extend_$1","decorate_20223_$1","adm","_this$options_","bound","target_","actionDescriptor","createActionDescriptor","proxyTrap","defineProperty_","mthd","addInitializer","ann","_this$options_2","_ann$options_$name","_ann$options_","_ann$options_$autoAct","_ann$options_2","createAction","_createAction","isMobxAction","safeDescriptors","globalState","_adm$proxy_","_annotation$options_","proxy_","_annotation$options_$","_annotation$options_2","_annotation$options_$2","_annotation$options_3","_annotation$options_4","_adm$proxy_2","isPlainObject_","createFlowAnnotation","make_$2","extend_$2","decorate_20223_$2","flowDescriptor","createFlowDescriptor","_this$options_3","isMobXFlow","createComputedAnnotation","make_$3","extend_$3","decorate_20223_$3","assertComputedDescriptor","defineComputedProperty_","asObservableObject","values_","ComputedValue","getObservablePropValue_","createObservableAnnotation","make_$4","extend_$4","decorate_20223_$4","assertObservableDescriptor","defineObservableProperty_","_this$options_$enhanc","enhancer","initializedObjects","initializeObservable","ObservableValue","_ann$options_$enhance","setObservablePropValue_","AUTO","autoAnnotation","createAutoAnnotation","make_$5","extend_$5","decorate_20223_$5","autoBind","observableAnnotation","deep","_this$options_4","_this$options_5","_this$options_6","defaultCreateObservableOptions","defaultDecorator","asCreateObservableOptions","observableRefAnnotation","observableShallowAnnotation","isObservableObject","isObservableArray","isObservableMap","isObservableSet","observableStructAnnotation","observableDecoratorAnnotation","getEnhancerFromOptions","getEnhancerFromAnnotation","createObservable","arg2","box","equals","initialValues","useProxies","createLegacyArray","createObservableArray","ObservableMap","ObservableSet","decorators","initObservable","extendObservable","_target$$mobx$proxy_","_target$$mobx","objectProxyTraps","asDynamicObservableObject","struct","COMPUTED","computedAnnotation","computedStructAnnotation","arg1","currentActionId","nextActionId","isFunctionNameConfigurable","_getDescriptor$config","_getDescriptor","tmpNameDescriptor","actionName","executeAction","canRunAsDerivation","runInfo","notifySpy_","startTime_","prevDerivation_","trackingDerivation","runAsAction","prevAllowStateChanges_","allowStateChanges","untrackedStart","allowStateChangesStart","prevAllowStateReads_","allowStateReadsStart","runAsAction_","actionId_","parentActionId_","_startAction","error_","suppressReactionErrors","allowStateChangesEnd","allowStateReadsEnd","untrackedEnd","_endAction","_Symbol$toPrimitive","_Atom","notifySpy","hasUnreportedChange_","interceptors_","changeListeners_","value_","dehancer","_inheritsLoose","dehanceValue","prepareNewValue_","UNCHANGED","setNewValue_","checkIfStateModificationsAreAllowed","hasInterceptors","interceptChange","UPDATE","hasListeners","notifyListeners","intercept_","registerInterceptor","observe_","fireImmediately","observableKind","debugObjectName","registerListener","_Symbol$toPrimitive$1","TraceMode","dependenciesState_","observing_","newObserving_","runId_","UP_TO_DATE_","unboundDepsCount_","CaughtException","triggeredBy_","isComputing_","isRunningSetter_","derivation","setter_","isTracing_","scope_","equals_","requiresReaction_","keepAlive_","compareStructural","requiresReaction","keepAlive","onBecomeStale_","POSSIBLY_STALE_","propagateMaybeChanged","inBatch","shouldCompute","prevTrackingContext","trackingContext","trackAndCompute","STALE_","propagateChangeConfirmed","warnAboutUntrackedRead_","computeValue_","isCaughtException","cause","wasSuspended","track","trackDerivedFunction","disableErrorBoundaries","suspend_","clearObserving","prevValue","autorun","prevU","isComputedValue","prevAllowStateReads","prevUntracked","obs","changeDependenciesStateTo0","runId","prevTracking","prevObserving","observing","lowestNewObservingDerivationState","i0","_dep","_dep2","bindDependencies","untracked","allowStateReads","MobXGlobals","mobxGuid","pendingUnobservations","pendingReactions","isRunningReactions","enforceActions","spyListeners","globalReactionErrorHandlers","computedRequiresReaction","reactionRequiresObservable","observableRequiresReaction","verifyProxies","canMergeGlobalState","isolateCalled","__mobxInstanceCount","__mobxGlobals","queueForUnobservation","runReactions","Reaction","onInvalidate_","errorHandler_","requiresObservable_","isDisposed_","isScheduled_","isTrackPending_","isRunning_","schedule_","isScheduled","runReaction_","reportExceptionInDerivation_","prevReaction","dispose","getDisposer_","abortSignal","trace","enterBreakPoint","MAX_REACTION_ITERATIONS","reactionScheduler","runReactionsHelper","allReactions","iterations","remainingReactions","isReaction","ACTION","AUTOACTION","DEFAULT_ACTION_NAME","actionAnnotation","actionBoundAnnotation","autoActionAnnotation","autoActionBoundAnnotation","createActionFactory","reaction","_opts$name","scheduler","reactionRunner","requiresObservable","createSchedulerFromOptions","_opts2","_opts2$signal","signal","aborted","_opts3","ON_BECOME_UNOBSERVED","hook","getAtom","listenersKey","hookListeners","NEVER","ALWAYS","OBSERVED","configure","isolateGlobalState","ea","baseScheduler","setReactionScheduler","annotations","getDependencyTree","nodeToDependencyTree","generatorId","FlowCancellationError","flowAnnotation","flowBoundAnnotation","generator","rejector","pendingPromise","stepId","cancelPromise","_res","yieldedPromise","_isObservable","transaction","getAdm","has_","get_","_getAdm$set_","set_","deleteProperty","_getAdm$delete_","delete_","_getAdm$definePropert","ownKeys_","preventExtensions","interceptable","interceptors","listenable","makeObservable","collectStoredAnnotations","SPLICE","arrayTraps","getArrayLength_","arrayExtensions","setArrayLength_","ObservableArrayAdministration","owned_","legacyMode_","atom_","enhancer_","lastKnownLength_","newV","oldV","dehanceValue_","dehanceValues_","added","addedCount","removed","removedCount","newLength","currentLength","newItems","spliceWithArray_","updateArrayLength_","oldLength","reserveArrayBuffer","deleteCount","lengthDelta","spliceItemsIntoValues_","notifyArraySplice_","_this$values_","oldItems","notifyArrayChildUpdate_","notify","owned","spliceWithArray","addArrayExtension","funcFactory","simpleFunc","dehancedValues","mapLikeFunc","reduceLikeFunc","isObservableArrayAdministration","ObservableMapMarker","DELETE","_Symbol$iterator","_Symbol$toStringTag","initialData","data_","hasMap_","keysAtom_","newEntry","hasKey","updateValue_","addValue_","_change","_this3$hasMap_$get","_this4$hasMap_$get","makeIterable","_keys$next","_keys$next2","_createForOfIteratorHelperLoose","_step$value","getPlainObjectKeys","replacementMap","dataStructure","convertToMap","orderedData","keysReportChangedCalled","_step4","_iterator4","_step4$value","_value","keyExisted","_value2","iter1","iter2","next1","next2","ObservableSetMarker","_Symbol$iterator$1","_Symbol$toStringTag$1","callbackFn","_change2","observableValues","descriptorCache","REMOVE","ObservableObjectAdministration","defaultAnnotation_","appliedAnnotations_","pendingKeys_","assertAnnotable","_this$target_$storedA","outcome","recordAnnotationApplied","deleteOutcome","notifyPropertyAddition_","cachedDescriptor","getCachedObservablePropDescriptor","_this$pendingKeys_","_this$pendingKeys_$ge","_this$pendingKeys_2","_this$pendingKeys_2$g","keys_","_options$name","_options$defaultDecor","getAnnotationFromOptions","isObservableObjectAdministration","_adm$target_$storedAn","ENTRY_0","createArrayEntryDescriptor","safariPrototypeSetterInheritanceBug","OBSERVABLE_ARRAY_BUFFER_SIZE","StubArray","LegacyObservableArray","_StubArray","createArrayBufferItem","getDebugName","_observable","getAdministration","named","aStack","bStack","unwrap","areArrays","aCtor","bCtor","getSelf","__MOBX_DEVTOOLS_GLOBAL_HOOK__","injectMobx","spy","extras","emptyAllText","affectPricing","originalOrderFriendlyId","originalReorderOrderFriendlyId","itemsCount","exportedList","skipLoading","orderApproval","sortingDate","modificationDate","_cartModel","_itemsCount","exportSuccess","justLoaded","exportError","exportSuccessMessage","isModified","noPricing","isUnassigned","isWishList","isModifiedAfterExport","isExported","isOrderEdit","isOrderApproval","hasItemsOffline","hasUSAData","isCOD","itemsCountEligibleForDuplicate","emptyList","reAssign","reAssignToNew","updateListFromApi","export","clearExportError","clearExportSuccessMessage","touchSortingDate","touchItemsCount","rename","duplicate","listId","subtotal","hasPricing","_this$_cartModel$open","openedList","listOpening","CART_LIST_TYPES","DEFAULT","UNASSIGNED","WISH_LIST","ORDER_EDIT","ORDER_APPROVAL","ExportDate","moment","isOffline","_item$errors","_item$errors$","subItems","notAvailableCount","updateListItemsFromApi","eligibleItems","_item$errors2","_item$errors2$","_item$errors3","_item$errors3$","_cartActionsModel","toggleSelectList","orderItemIds","affectPricingLists","removeItems","checkedOnly","reAssignList","lists","updateListId","targetList","touchModificationDate","openList","addList","newList","touchLists","RedirectUrl","totalItemsCount","selectedItemsCount","totalWishListItemsCount","showTax","hasWarnings","presentablePrices","_this$_cartModel$item","affectsPricing","_this$_cartModel$open2","_this$_cartModel$open5","_this$_cartModel$item3","_this$_cartModel$open3","_this$_cartModel$open4","_this$_cartModel$Cart","_this$_cartModel$item2","isListsMode","openedListItems","isSingleListMode","_this$_cartModel$Cart2","_this$_cartModel$Cart3","_this$_cartModel$Cart4","WISHLIST","_list$items","_list$items$every","_this$_cartModel$open6","_this$_cartModel$open7","_this$_cartModel$open8","_this$_cartModel$open9","_this$_cartModel$open10","_this$_cartModel$item4","_this$_cartModel$open11","_this$_cartModel$open12","_this$_cartModel$open13","_this$_cartModel$open14","_this$_cartModel$open15","_this$_cartModel$item5","_this$_cartModel$open16","_this$_cartModel$open17","_this$_cartModel$open18","_this$_cartModel$open19","_this$subtotal","_this$tax","_this$total","CartErrorModel","errorLevel","CART_ERROR_LEVELS","WARNING","ERROR","CART_ERROR_TYPES","InventoryExceeded","InventoryOutOfStock","InventoryDelayed","ProductNotAvailable","ProductComponentNotAvailable","MaxUnitsExceeded","MinUnitsNotReached","ProductUnitChanged","MaxUnitsExceededForOrder","RecipientListModelInvalid","DeliveryMethodInvalid","GdprFilesDeleted","ProductOptionsChanged","ProductPriceChanged","CartItemPriceModel","itemModel","isChanged","_itemModel","updateFromApi","setIsChangedWarning","priceItem","_priceItem$IsChanged","_priceItem$IsValid","_priceItem$Price","_priceItem$Tax","IsChanged","IsValid","listModel","thumbnailUrl","editUrl","nickname","quantityPerRecipient","numRecipients","defaultQuantity","_listModel","addValidation","toggleSelect","moveItemToWishlist","moveItemToCart","updateNickname","updateValidations","proofStatus","ThumbnailUrl","Level","updateItem","deleteItem","moveItemToWishList","listIdOrNull","reAssignItemToList","reAssignItemToNewList","edit","_storeData","validations","_this$proof","_validation$Error$Dat","Data","NotAvailableCount","priceChangedWarning","newValidations","storeApiUrl","_this$errors","_this$errors$","productId","singular","packSingular","packPlural","intervalId","apiCallEmitted","startTimer","emitApiCall","endApiCall","stopTimer","summaryLoader","summary","_uStoreProvider","IsChecked","Nickname","updateCartListOnSelectionChange","isWishListMode","itemsIds","cartValidation","updateCartValidation","recheckUnselected","cartPricing","checkedCartValidation","uncheckedCartValidation","updateCartPricing","selectedOnly","cartItemsFromApi","wishlistItemsFromApi","updateCartItems","wishlistPricing","pricingItems","cartPricingUnchecked","wishlistPricingUnchecked","wishlistValidation","validationItems","cartValidationUnchecked","wishlistValidationUnchecked","oldListId","targetListId","_this$_cartModel$list","_this$_cartModel$list2","_this$_cartModel$list3","updateLists","currentList","activityMonitor","CartOrderApprovalModel","originalOrderId","setRevertModifications","formatDate","dateStr","getLocaleTimeString","_CartListModel$CART_L","_CartListModel$CART_L2","_CartListModel$CART_L3","_this$_uStoreProvider","_this$_uStoreProvider2","_this$_uStoreProvider3","cartMode","storeBaseUrl","storeLanguageCode","CartActionsModel","_cartMode","_openedListId","_lists","shoppingCartText","checkoutUrl","CartSummaryModel","initiated","sorting","cartSorting","CART_SORT_BY","_cartDialogs","CartDialogsModel","initialLoadItemsFromApi","loadListsItemsFromApi","loadSingleListItemsFromApi","loadCartItemsFromApi","loadPricingFromApi","loadWishListItemsFromApi","createList","addCartError","setSorting","hasEditOrApproval","hasReorder","affectPricingItems","listsItemsCount","initialLoadCartModeWishList","cartPricingFromApiChecked","cartPricingFromApiUnchecked","cartValidationFromApiChecked","loadValidationFromApi","cartValidationFromApiUnchecked","initialLoadCartModeLists","initialLoadCartModeSingleList","initialLoadWishlist","proofThumbnailUpdater","wishListValidationFromApi","wishListPricingFromApi","OriginalOrderFriendlyID","SortingDate","ModificationDate","openListId","Activities","singleList","convertItemsToCartItemsObject","CheckoutUrl","OrderApproval","OriginalOrderID","editSections","listIds","cartList","selectedListItems","itemsNotInList","defaultList","notDefaultList","checkedPricingInfo","uncheckedPricingInfo","pricingInfo","validationInfo","orderNumber","cartItem","validationItem","convertItemToCartItemObject","_item$ListID","_item$Thumbnail","_item$Product$Unit$Pa","_item$Product$Unit$Pa2","Checked","Thumbnail","EditUrl","QuantityPerRecipient","NumRecipients","ProofStatus","CartProductModel","CartProductUnitModel","ConvertToClientTimeZone","SubItems","listById","listByOriginalOrderFriendlyId","listByOriginalReorderOrderFriendlyId","convertItemsToWishlistItemsObject","wishList","wishListItems","_this$openedList","itemsFromApi","itemFromApi","priceItems","itemValidations","unassignedListIndex","originalList","NAME_ASC","localeCompare","NAME_DESC","_this$_lists$find","_this$_lists$find2","_this$_lists$find3","_this$_lists$find4","checkout","reloadAfterDuplicate","duplicatedItem","CART_ACTIONS","TOGGLE_SELECT_ALL","TOGGLE_SELECT_ITEM","EMPTY_LIST","MOVE_ITEM_TO_WISH_LIST","MOVE_ITEM_TO_CART","DELETE_ITEM_FROM_CART","EDIT_CART_ITEM","CHANGE_NICKNAME","CART_MODELS","CART","CART_VALIDATION","WISH_LIST_VALIDATION","PRICING","PRICING_NO_API","defaultNoopBatch","printDebugValue","globalIsUsingStaticRendering","isUsingStaticRendering","TimerBasedFinalizationRegistry","finalize","maxAge","sweepTimeout","registrations","registration","registeredAt","scheduleSweep","sweep","observerFinalizationRegistry","FinalizationRegistry","createReaction","stateVersion","useObserver","baseComponentName","admRef","adm_1","renderResult","exception","hasSymbol","ReactForwardRefSymbol","ReactMemoSymbol","baseComponent","useForwardRef","observerComponent","contextTypes","hoistBlackList","observerBatching","batch","currencyState","showCurrencyCode","currencyCode","SummaryTitle","getSummaryTitle","_model$openedList","_model$openedList2","_model$summary4","_model$summary4$prese","_model$summary5","_model$summary5$prese","_model$summary6","_model$summary7","_model$summary8","_model$openedList3","_model$openedList4","_model$summary$showTa","_model$summary9","_model$summary10","_model$openedList5","_model$openedList6","currencySymbol","convertedPrice","CartSummaryPriceBlock","_model$summary","_model$summary2","_model$summary3","onOk","onCancel","isListModel","_model$openedList7","_model$summary17","setShowAssignToListModal","isWarningShown","setIsWarningShown","isErrorShown","setIsErrorShown","disabledStatus","getCheckoutButtonText","_model$openedList8","_model$openedList9","_model$summary11","_model$summary12","_model$summary13","_model$summary14","_model$summary15","CartSummaryTooltip","_model$openedList10","_model$summary16","CartSummaryError","exportDate","modifiedDate","ASSIGN_LIST_TYPE","onSave","selectedListType","setSelectedListType","setNewValue","selectedList","setSelectedList","newListInputRef","firstValue","noCustomLists","moreThan100Error","sameNameError","assignToButtonDisabled","onTypeChange","listType","withSticky","summaryRef","footerObserver","showAssignToListModal","footerElement","_footerObserver$curre","_footerObserver$curre2","isExportErrorClass","CartSummaryContent","CartSummaryButton","CartSummaryExportSuccess","CartSummaryExportError","isSecondaryCurrency","primaryCurrencyName","AssignToListModal","assignToItemCount","setShowAll","toggleArrow","_model$summary$presen","showSticky","setShowSticky","refContainer","CartSummary","CartSummaryStickyBlock","hashFragment","asyncTimerId","scrollFunction","isInteractiveElement","getElAndScroll","originalTabIndex","genericHashLink","As","linkHash","passDownProps","isExact","__rest","elementId","NavHashLink","hasDuplicateName","setHasDuplicateName","disabledSave","setDisabledSave","inputRef","confirmationText","confirmButtonText","rejectButtonText","onReject","onConfirm","itemThumbnail","save","setSave","entity","onDuplicate","duplicateButtonText","setDuplicateButtonText","duplicationMessage","messageKey","getDuplicationMessage","onClickOutside","desktopDuplicateButtonRef","isList","tooltipRef","DuplicateButton","showLargeIcon","duplicateTooltipMessage","setDuplicateTooltipMessage","duplicateDialogMessage","setDuplicateDialogMessage","showDuplicateListModal","setShowDuplicateListModal","ItemDuplicateTooltip","DuplicateItemsDialogError","ConfirmDuplicationModal","showDeleteAction","showAssignTo","showRename","showDuplicate","MobileCustomListActions","showItemsCount","hasExportedItems","allItemsOffline","_list$exportSuccess","DesktopCustomListActions","onAssignToList","onDelete","DuplicateAction","CustomListTitle","listTitle","onEdit","CustomListActions","setShowDeleteAllConfirmation","setDeleteConfirmationText","onDeleteWithNoConfirmation","onTitleEdit","onDuplicateList","onViewExported","_list$originalOrderFr","_list$originalOrderFr2","_list$selected","_list$items2","onTitleClick","showDeleteAllConfirmation","showListNameEdit","setShowListNameEdit","deleteConfirmationText","handleDeleteAllDialogConfirm","getContainerClassList","CartCheckbox","ConfirmationDialog","EditListNameModal","newName","isHighlighted","customPriceFormat","itemPrice","editDisabled","setAlertMessage","showConfirmationDialog","setShowConfirmationDialog","isDuplicateAllowed","assignSingleItem","PromptDialog","setNickname","onEditStart","onEditEnd","nicknameInput","setNicknameInput","isEditing","setIsEditing","isDialogOpen","setIsDialogOpen","handleEditNickname","newNickname","showTooltip","setShowTooltip","isTooltipOpen","setIsTooltipOpen","isEditingNickname","setIsEditingNickname","rootRef","originalOverflow","originalTextOverflow","textOverflow","originalWhiteSpace","originalWidth","isOverflowing","ExpandableList","toggleList","onContentVisible","elementObserver","getEventNode","lazyLoadHandler","shouldComponentUpdate","SkeletonThemeContext","defaultEnableAnimation","styleOptionsToCssProperties","baseColor","highlightColor","circle","enableAnimation","Skeleton","containerClassName","containerTestId","originalPropsStyleOptions","contextStyleOptions","propsStyleOptions","styleOptions","countCeil","thisStyle","fractionalPart","fractionalWidth","skeletonSpan","onThumbnailClick","proofInProgress","proofWarning","proofFailedMessage","thumbnailLoading","setThumbnailLoading","thumbnailRef","isImageVertical","setIsImageVertical","LazyLoad","defineImageOrientation","_thumbnailRef$current","_thumbnailRef$current2","_thumbnailRef$current3","_thumbnailRef$current4","parentRect","_messages$map","totalQuantity","includedProducts","isDetailseOpened","setIsDetailseOpened","getProductQuantity","productQuantity","DisplayPrice","_warnings$find","showSelection","alertMessage","itemInListMode","CartItemAlert","ProductName","CartItemThumbnail","IncludedProductsDetails","ProductProperties","CartItemActions","InfoMessage","isEmptyListClass","getListTitle","loadedItems","setLoadedItems","listOpen","setListOpen","listContentRef","showSummary","isEmptyList","itemsToProofCheck","setMaxHeight","setMaxHeightDebounced","getListClasses","ListBar","getListContentClasses","CartItem","InListsCartSummary","sortDropDownItems","navHashLinkRef","headerHeightDesktop","selectedSort","setSelectedSort","themeVariables","scrollWidthOffset","newSorting","List","sectionTitle","CartItemSkeleton","closeDialog","showDuplicateDialog","hasFailed","hasPartialFailed","hasSuccess","selectedActivity","_selectedActivity","_selectedActivity2","_selectedActivity3","_selectedActivity4","_selectedActivity5","_selectedActivity6","typeToMessage","HourGlass","_selectedActivity$Out","Output","CompletedCount","_model$loading","LoadingDialog","DuplicateProgressDialog","RevertModificationDialog","ListContainerSkeleton","CartList","CartSummaryContainer","CartDialogs","buttonUrl","EmptyPage","ListContainer","_props$state$cartItem2","_cartModel$current","_props$state$cartItem3","_props$state$cartItem4","setCurrencyState","ShowCurrencyCode","loadData","_props$state$cartItem","CartNG","searchResults","setSearchResults","searchResultsCount","setSearchResultsCount","page2SearchResults","_props$customState$se","DatePicker","changeDate","currentYear","cm","currentMonth","newCy","newCm","setDate","dispMonth","AdvancedOrderReport","API","load","API_URL","ErrorMessage","Page","searchData","Orders","detailsData","reorderDetailsData","createReorderData","productProperties","hiddenFieldsChange","hiddenFields","fieldChange","more","fieldFilteredChange","fieldChangePrice","fieldHandlerInt","fieldMore","setField","option","clearSearch","searchPage","param","sortType","goLink","StartReorder","storeName","currentUserId","currentCultureId","ErrorText","alert","formattedMessage","confirm","IsCurrentStore","moreOrders","TotalPages","moreProducts","orderid","detailsPage","searchBut","cancelBut","users","Id","searchProductPropertyMode","user","datepicker","till","productPropertyFilters","DialName","SearchValue","productsList","detailsOrderId","DatePickerChanger","showDPFrom","showDPTill","nNum","dp","clearDate","inInitial","focusAndSelect","orderIdInput","focusAndSelectSearch","searchValueInput","handleSearchValueChange","handleSearchModeChange","addProductPropertyFilter","productProperty","newFilter","DialId","updatedFields","removeProductPropertyFilter","reorderDetails","createReorder","kitShow","_this$state$fields$pr","_this$state$fields$pr2","_this$state$fields$pr3","searchResult","statusesImages","inItem","onKeyPress","readOnly","LastName","_this$state$fields$pr4","_this$state$fields$pr5","_this$state$fields$pr6","_this$state$fields$pr7","_this$state$fields$pr8","strDate","OrderId","UserName","Group","Store","CurrencyCode","Amount","OrderPrintUrl","MaybeReorder","kit","KitOrderProducts","productName","OrderProductId","Units","OrderFinalStep","Addresses","CheckoutComplete","CheckoutFinal","FileSubmission","CheckoutPaymentSubmission","MyRecipientLists","OrderHistory","PersonalInformation","Customization","UeditCustomization","SplitShippingAddresses","OrderDetails","SplitShippingItems","Recipient","ProductUnavailable","Drafts","ErrorPage","OrderApprovalList","CustomMain","ClearingUnknownOrder","ConnectLoggedOut","alignItems","flexDirection","xmpieLogo","Generic","initialProps","setInitialProps","doRenewToken","ignored","useReducer","newToken","sslOption","favIcon","pageComponentName","pageComponent","AppendTrailingSlash","reportWebVitals"],"sourceRoot":""}